From fb4b36ce7cdd46e0730940cf4b41e0cc3cfdf879 Mon Sep 17 00:00:00 2001 From: leebeomjun Date: Mon, 18 Dec 2023 17:46:23 +0900 Subject: [PATCH] =?UTF-8?q?js=ED=8C=8C=EC=9D=BC=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/WEB-INF/jsp/include/tail.jsp | 5 - .../3rd-party/sneat/js/dropdown-hover.js | 44 - .../resources/3rd-party/sneat/js/helpers.js | 1126 +++++++++++++++-- .../3rd-party/sneat/js/mega-dropdown.js | 78 -- .../resources/3rd-party/sneat/js/menu.js | 1064 ++++++++++++++-- .../3rd-party/sneat/js/template-customizer.js | 274 ---- 6 files changed, 2034 insertions(+), 557 deletions(-) delete mode 100644 src/main/webapp/resources/3rd-party/sneat/js/dropdown-hover.js delete mode 100644 src/main/webapp/resources/3rd-party/sneat/js/mega-dropdown.js delete mode 100644 src/main/webapp/resources/3rd-party/sneat/js/template-customizer.js diff --git a/src/main/webapp/WEB-INF/jsp/include/tail.jsp b/src/main/webapp/WEB-INF/jsp/include/tail.jsp index 0774c68d..337d07db 100644 --- a/src/main/webapp/WEB-INF/jsp/include/tail.jsp +++ b/src/main/webapp/WEB-INF/jsp/include/tail.jsp @@ -6,11 +6,6 @@ - - -<%-- --%> -<%--? Config: Mandatory theme config file contain global vars & default theme options, Set your preferred theme option in this file. --> - diff --git a/src/main/webapp/resources/3rd-party/sneat/js/dropdown-hover.js b/src/main/webapp/resources/3rd-party/sneat/js/dropdown-hover.js deleted file mode 100644 index 2a7435cc..00000000 --- a/src/main/webapp/resources/3rd-party/sneat/js/dropdown-hover.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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/). - */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else { - var a = factory(); - for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; - } -})(self, function() { -return /******/ (function() { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./js/dropdown-hover.js": -/*!******************************!*\ - !*** ./js/dropdown-hover.js ***! - \******************************/ -/***/ (function() { - -eval("// Add onHover event for dropdowns\n\n;\n(function ($) {\n if (!$ || !$.fn) return;\n var SELECTOR = '[data-bs-toggle=dropdown][data-trigger=hover]';\n var TIMEOUT = 150;\n function openDropdown($i) {\n var t = $i.data('dd-timeout');\n if (t) {\n clearTimeout(t);\n t = null;\n $i.data('dd-timeout', t);\n }\n if ($i.attr('aria-expanded') !== 'true') $i.dropdown('toggle');\n }\n function closeDropdown($i) {\n var t = $i.data('dd-timeout');\n if (t) clearTimeout(t);\n t = setTimeout(function () {\n var t2 = $i.data('dd-timeout');\n if (t2) {\n clearTimeout(t2);\n t2 = null;\n $i.data('dd-timeout', t2);\n }\n if ($i.attr('aria-expanded') === 'true') $i.dropdown('toggle');\n }, TIMEOUT);\n $i.data('dd-timeout', t);\n }\n $(function () {\n $('body').on('mouseenter', \"\".concat(SELECTOR, \", \").concat(SELECTOR, \" ~ .dropdown-menu\"), function () {\n var $toggle = $(this).hasClass('dropdown-toggle') ? $(this) : $(this).prev('.dropdown-toggle');\n var $dropdown = $(this).hasClass('dropdown-menu') ? $(this) : $(this).next('.dropdown-menu');\n if (window.getComputedStyle($dropdown[0], null).getPropertyValue('position') === 'static') return;\n\n // Set hovered flag\n if ($(this).is(SELECTOR)) {\n $(this).data('hovered', true);\n }\n openDropdown($(this).hasClass('dropdown-toggle') ? $(this) : $(this).prev('.dropdown-toggle'));\n }).on('mouseleave', \"\".concat(SELECTOR, \", \").concat(SELECTOR, \" ~ .dropdown-menu\"), function () {\n var $toggle = $(this).hasClass('dropdown-toggle') ? $(this) : $(this).prev('.dropdown-toggle');\n var $dropdown = $(this).hasClass('dropdown-menu') ? $(this) : $(this).next('.dropdown-menu');\n if (window.getComputedStyle($dropdown[0], null).getPropertyValue('position') === 'static') return;\n\n // Remove hovered flag\n if ($(this).is(SELECTOR)) {\n $(this).data('hovered', false);\n }\n closeDropdown($(this).hasClass('dropdown-toggle') ? $(this) : $(this).prev('.dropdown-toggle'));\n }).on('hide.bs.dropdown', function (e) {\n if ($(this).find(SELECTOR).data('hovered')) e.preventDefault();\n });\n });\n})(window.jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9qcy9kcm9wZG93bi1ob3Zlci5qcy5qcyIsIm5hbWVzIjpbIiQiLCJmbiIsIlNFTEVDVE9SIiwiVElNRU9VVCIsIm9wZW5Ecm9wZG93biIsIiRpIiwidCIsImRhdGEiLCJjbGVhclRpbWVvdXQiLCJhdHRyIiwiZHJvcGRvd24iLCJjbG9zZURyb3Bkb3duIiwic2V0VGltZW91dCIsInQyIiwib24iLCIkdG9nZ2xlIiwiaGFzQ2xhc3MiLCJwcmV2IiwiJGRyb3Bkb3duIiwibmV4dCIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiaXMiLCJlIiwiZmluZCIsInByZXZlbnREZWZhdWx0IiwialF1ZXJ5Il0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TbmVhdC8uL2pzL2Ryb3Bkb3duLWhvdmVyLmpzPzA2NDciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQWRkIG9uSG92ZXIgZXZlbnQgZm9yIGRyb3Bkb3duc1xyXG5cclxuOyhmdW5jdGlvbiAoJCkge1xyXG4gIGlmICghJCB8fCAhJC5mbikgcmV0dXJuXHJcblxyXG4gIGNvbnN0IFNFTEVDVE9SID0gJ1tkYXRhLWJzLXRvZ2dsZT1kcm9wZG93bl1bZGF0YS10cmlnZ2VyPWhvdmVyXSdcclxuICBjb25zdCBUSU1FT1VUID0gMTUwXHJcblxyXG4gIGZ1bmN0aW9uIG9wZW5Ecm9wZG93bigkaSkge1xyXG4gICAgbGV0IHQgPSAkaS5kYXRhKCdkZC10aW1lb3V0JylcclxuXHJcbiAgICBpZiAodCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodClcclxuICAgICAgdCA9IG51bGxcclxuICAgICAgJGkuZGF0YSgnZGQtdGltZW91dCcsIHQpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCRpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnKSAhPT0gJ3RydWUnKSAkaS5kcm9wZG93bigndG9nZ2xlJylcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNsb3NlRHJvcGRvd24oJGkpIHtcclxuICAgIGxldCB0ID0gJGkuZGF0YSgnZGQtdGltZW91dCcpXHJcblxyXG4gICAgaWYgKHQpIGNsZWFyVGltZW91dCh0KVxyXG5cclxuICAgIHQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IHQyID0gJGkuZGF0YSgnZGQtdGltZW91dCcpXHJcblxyXG4gICAgICBpZiAodDIpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodDIpXHJcbiAgICAgICAgdDIgPSBudWxsXHJcbiAgICAgICAgJGkuZGF0YSgnZGQtdGltZW91dCcsIHQyKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoJGkuYXR0cignYXJpYS1leHBhbmRlZCcpID09PSAndHJ1ZScpICRpLmRyb3Bkb3duKCd0b2dnbGUnKVxyXG4gICAgfSwgVElNRU9VVClcclxuXHJcbiAgICAkaS5kYXRhKCdkZC10aW1lb3V0JywgdClcclxuICB9XHJcblxyXG4gICQoZnVuY3Rpb24gKCkge1xyXG4gICAgJCgnYm9keScpXHJcbiAgICAgIC5vbignbW91c2VlbnRlcicsIGAke1NFTEVDVE9SfSwgJHtTRUxFQ1RPUn0gfiAuZHJvcGRvd24tbWVudWAsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCAkdG9nZ2xlID0gJCh0aGlzKS5oYXNDbGFzcygnZHJvcGRvd24tdG9nZ2xlJykgPyAkKHRoaXMpIDogJCh0aGlzKS5wcmV2KCcuZHJvcGRvd24tdG9nZ2xlJylcclxuICAgICAgICBjb25zdCAkZHJvcGRvd24gPSAkKHRoaXMpLmhhc0NsYXNzKCdkcm9wZG93bi1tZW51JykgPyAkKHRoaXMpIDogJCh0aGlzKS5uZXh0KCcuZHJvcGRvd24tbWVudScpXHJcblxyXG4gICAgICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSgkZHJvcGRvd25bMF0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSByZXR1cm5cclxuXHJcbiAgICAgICAgLy8gU2V0IGhvdmVyZWQgZmxhZ1xyXG4gICAgICAgIGlmICgkKHRoaXMpLmlzKFNFTEVDVE9SKSkge1xyXG4gICAgICAgICAgJCh0aGlzKS5kYXRhKCdob3ZlcmVkJywgdHJ1ZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG9wZW5Ecm9wZG93bigkKHRoaXMpLmhhc0NsYXNzKCdkcm9wZG93bi10b2dnbGUnKSA/ICQodGhpcykgOiAkKHRoaXMpLnByZXYoJy5kcm9wZG93bi10b2dnbGUnKSlcclxuICAgICAgfSlcclxuICAgICAgLm9uKCdtb3VzZWxlYXZlJywgYCR7U0VMRUNUT1J9LCAke1NFTEVDVE9SfSB+IC5kcm9wZG93bi1tZW51YCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0ICR0b2dnbGUgPSAkKHRoaXMpLmhhc0NsYXNzKCdkcm9wZG93bi10b2dnbGUnKSA/ICQodGhpcykgOiAkKHRoaXMpLnByZXYoJy5kcm9wZG93bi10b2dnbGUnKVxyXG4gICAgICAgIGNvbnN0ICRkcm9wZG93biA9ICQodGhpcykuaGFzQ2xhc3MoJ2Ryb3Bkb3duLW1lbnUnKSA/ICQodGhpcykgOiAkKHRoaXMpLm5leHQoJy5kcm9wZG93bi1tZW51JylcclxuXHJcbiAgICAgICAgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCRkcm9wZG93blswXSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgncG9zaXRpb24nKSA9PT0gJ3N0YXRpYycpIHJldHVyblxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgaG92ZXJlZCBmbGFnXHJcbiAgICAgICAgaWYgKCQodGhpcykuaXMoU0VMRUNUT1IpKSB7XHJcbiAgICAgICAgICAkKHRoaXMpLmRhdGEoJ2hvdmVyZWQnLCBmYWxzZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsb3NlRHJvcGRvd24oJCh0aGlzKS5oYXNDbGFzcygnZHJvcGRvd24tdG9nZ2xlJykgPyAkKHRoaXMpIDogJCh0aGlzKS5wcmV2KCcuZHJvcGRvd24tdG9nZ2xlJykpXHJcbiAgICAgIH0pXHJcbiAgICAgIC5vbignaGlkZS5icy5kcm9wZG93bicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKCQodGhpcykuZmluZChTRUxFQ1RPUikuZGF0YSgnaG92ZXJlZCcpKSBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgfSlcclxuICB9KVxyXG59KSh3aW5kb3cualF1ZXJ5KVxyXG4iXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQUMsQ0FBQyxVQUFVQSxDQUFDLEVBQUU7RUFDYixJQUFJLENBQUNBLENBQUMsSUFBSSxDQUFDQSxDQUFDLENBQUNDLEVBQUUsRUFBRTtFQUVqQixJQUFNQyxRQUFRLEdBQUcsK0NBQStDO0VBQ2hFLElBQU1DLE9BQU8sR0FBRyxHQUFHO0VBRW5CLFNBQVNDLFlBQVksQ0FBQ0MsRUFBRSxFQUFFO0lBQ3hCLElBQUlDLENBQUMsR0FBR0QsRUFBRSxDQUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDO0lBRTdCLElBQUlELENBQUMsRUFBRTtNQUNMRSxZQUFZLENBQUNGLENBQUMsQ0FBQztNQUNmQSxDQUFDLEdBQUcsSUFBSTtNQUNSRCxFQUFFLENBQUNFLElBQUksQ0FBQyxZQUFZLEVBQUVELENBQUMsQ0FBQztJQUMxQjtJQUVBLElBQUlELEVBQUUsQ0FBQ0ksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLE1BQU0sRUFBRUosRUFBRSxDQUFDSyxRQUFRLENBQUMsUUFBUSxDQUFDO0VBQ2hFO0VBRUEsU0FBU0MsYUFBYSxDQUFDTixFQUFFLEVBQUU7SUFDekIsSUFBSUMsQ0FBQyxHQUFHRCxFQUFFLENBQUNFLElBQUksQ0FBQyxZQUFZLENBQUM7SUFFN0IsSUFBSUQsQ0FBQyxFQUFFRSxZQUFZLENBQUNGLENBQUMsQ0FBQztJQUV0QkEsQ0FBQyxHQUFHTSxVQUFVLENBQUMsWUFBTTtNQUNuQixJQUFJQyxFQUFFLEdBQUdSLEVBQUUsQ0FBQ0UsSUFBSSxDQUFDLFlBQVksQ0FBQztNQUU5QixJQUFJTSxFQUFFLEVBQUU7UUFDTkwsWUFBWSxDQUFDSyxFQUFFLENBQUM7UUFDaEJBLEVBQUUsR0FB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\n//# sourceURL=webpack-internal:///./js/dropdown-hover.js\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__["./js/dropdown-hover.js"](); -/******/ -/******/ return __webpack_exports__; -/******/ })() -; -}); \ No newline at end of file diff --git a/src/main/webapp/resources/3rd-party/sneat/js/helpers.js b/src/main/webapp/resources/3rd-party/sneat/js/helpers.js index 61c45be4..a5a38878 100644 --- a/src/main/webapp/resources/3rd-party/sneat/js/helpers.js +++ b/src/main/webapp/resources/3rd-party/sneat/js/helpers.js @@ -1,78 +1,1048 @@ -/* - * 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/). - */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else { - var a = factory(); - for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; - } -})(self, function() { -return /******/ (function() { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./js/helpers.js": -/*!***********************!*\ - !*** ./js/helpers.js ***! - \***********************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Helpers\": function() { return /* binding */ Helpers; }\n/* harmony export */ });\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n// Constants\nvar TRANS_EVENTS = ['transitionend', 'webkitTransitionEnd', 'oTransitionEnd'];\nvar TRANS_PROPERTIES = ['transition', 'MozTransition', 'webkitTransition', 'WebkitTransition', 'OTransition'];\nvar INLINE_STYLES = \"\\n.layout-menu-fixed .layout-navbar-full .layout-menu,\\n.layout-menu-fixed-offcanvas .layout-navbar-full .layout-menu {\\n top: {navbarHeight}px !important;\\n}\\n.layout-page {\\n padding-top: {navbarHeight}px !important;\\n}\\n.content-wrapper {\\n padding-bottom: {footerHeight}px !important;\\n}\";\n\n// Guard\nfunction requiredParam(name) {\n throw new Error(\"Parameter required\".concat(name ? \": `\".concat(name, \"`\") : ''));\n}\nvar Helpers = {\n // Root Element\n ROOT_EL: typeof window !== 'undefined' ? document.documentElement : null,\n // Large screens breakpoint\n LAYOUT_BREAKPOINT: 1200,\n // Resize delay in milliseconds\n RESIZE_DELAY: 200,\n menuPsScroll: null,\n mainMenu: null,\n // Internal variables\n _curStyle: null,\n _styleEl: null,\n _resizeTimeout: null,\n _resizeCallback: null,\n _transitionCallback: null,\n _transitionCallbackTimeout: null,\n _listeners: [],\n _initialized: false,\n _autoUpdate: false,\n _lastWindowHeight: 0,\n // *******************************************************************************\n // * Utilities\n // ---\n // Scroll To Active Menu Item\n _scrollToActive: function _scrollToActive() {\n var animate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n var layoutMenu = this.getLayoutMenu();\n if (!layoutMenu) return;\n var activeEl = layoutMenu.querySelector('li.menu-item.active:not(.open)');\n if (activeEl) {\n // t = current time\n // b = start value\n // c = change in value\n // d = duration\n var easeInOutQuad = function easeInOutQuad(t, b, c, d) {\n t /= d / 2;\n if (t < 1) return c / 2 * t * t + b;\n t -= 1;\n return -c / 2 * (t * (t - 2) - 1) + b;\n };\n var element = this.getLayoutMenu().querySelector('.menu-inner');\n if (typeof activeEl === 'string') {\n activeEl = document.querySelector(activeEl);\n }\n if (typeof activeEl !== 'number') {\n activeEl = activeEl.getBoundingClientRect().top + element.scrollTop;\n }\n\n // If active element's top position is less than 2/3 (66%) of menu height than do not scroll\n if (activeEl < parseInt(element.clientHeight * 2 / 3, 10)) return;\n var start = element.scrollTop;\n var change = activeEl - start - parseInt(element.clientHeight / 2, 10);\n var startDate = +new Date();\n if (animate === true) {\n var animateScroll = function animateScroll() {\n var currentDate = +new Date();\n var currentTime = currentDate - startDate;\n var val = easeInOutQuad(currentTime, start, change, duration);\n element.scrollTop = val;\n if (currentTime < duration) {\n requestAnimationFrame(animateScroll);\n } else {\n element.scrollTop = change;\n }\n };\n animateScroll();\n } else {\n element.scrollTop = change;\n }\n }\n },\n // ---\n // Swipe In Gesture\n _swipeIn: function _swipeIn(targetEl, callback) {\n var _window = window,\n Hammer = _window.Hammer;\n if (typeof Hammer !== 'undefined' && typeof targetEl === 'string') {\n // Swipe menu gesture\n var swipeInElement = document.querySelector(targetEl);\n if (swipeInElement) {\n var hammerInstance = new Hammer(swipeInElement);\n hammerInstance.on('panright', callback);\n }\n }\n },\n // ---\n // Swipe Out Gesture\n _swipeOut: function _swipeOut(targetEl, callback) {\n var _window2 = window,\n Hammer = _window2.Hammer;\n if (typeof Hammer !== 'undefined' && typeof targetEl === 'string') {\n setTimeout(function () {\n // Swipe menu gesture\n var swipeOutElement = document.querySelector(targetEl);\n if (swipeOutElement) {\n var hammerInstance = new Hammer(swipeOutElement);\n hammerInstance.get('pan').set({\n direction: Hammer.DIRECTION_ALL,\n threshold: 250\n });\n hammerInstance.on('panleft', callback);\n }\n }, 500);\n }\n },\n // ---\n // Swipe Out On Overlay Tap\n _overlayTap: function _overlayTap(targetEl, callback) {\n var _window3 = window,\n Hammer = _window3.Hammer;\n if (typeof Hammer !== 'undefined' && typeof targetEl === 'string') {\n // Swipe out overlay element\n var swipeOutOverlayElement = document.querySelector(targetEl);\n if (swipeOutOverlayElement) {\n var hammerInstance = new Hammer(swipeOutOverlayElement);\n hammerInstance.on('tap', callback);\n }\n }\n },\n // ---\n // Add classes\n _addClass: function _addClass(cls) {\n var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ROOT_EL;\n if (el.length !== undefined) {\n // Add classes to multiple elements\n el.forEach(function (e) {\n cls.split(' ').forEach(function (c) {\n return e.classList.add(c);\n });\n });\n } else {\n // Add classes to single element\n cls.split(' ').forEach(function (c) {\n return el.classList.add(c);\n });\n }\n },\n // ---\n // Remove classes\n _removeClass: function _removeClass(cls) {\n var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ROOT_EL;\n if (el.length !== undefined) {\n // Remove classes to multiple elements\n el.forEach(function (e) {\n cls.split(' ').forEach(function (c) {\n return e.classList.remove(c);\n });\n });\n } else {\n // Remove classes to single element\n cls.split(' ').forEach(function (c) {\n return el.classList.remove(c);\n });\n }\n },\n // Toggle classes\n _toggleClass: function _toggleClass() {\n var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.ROOT_EL;\n var cls1 = arguments.length > 1 ? arguments[1] : undefined;\n var cls2 = arguments.length > 2 ? arguments[2] : undefined;\n if (el.classList.contains(cls1)) {\n el.classList.replace(cls1, cls2);\n } else {\n el.classList.replace(cls2, cls1);\n }\n },\n // ---\n // Has class\n _hasClass: function _hasClass(cls) {\n var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ROOT_EL;\n var result = false;\n cls.split(' ').forEach(function (c) {\n if (el.classList.contains(c)) result = true;\n });\n return result;\n },\n _findParent: function _findParent(el, cls) {\n if (el && el.tagName.toUpperCase() === 'BODY' || el.tagName.toUpperCase() === 'HTML') return null;\n el = el.parentNode;\n while (el && el.tagName.toUpperCase() !== 'BODY' && !el.classList.contains(cls)) {\n el = el.parentNode;\n }\n el = el && el.tagName.toUpperCase() !== 'BODY' ? el : null;\n return el;\n },\n // ---\n // Trigger window event\n _triggerWindowEvent: function _triggerWindowEvent(name) {\n if (typeof window === 'undefined') return;\n if (document.createEvent) {\n var event;\n if (typeof Event === 'function') {\n event = new Event(name);\n } else {\n event = document.createEvent('Event');\n event.initEvent(name, false, true);\n }\n window.dispatchEvent(event);\n } else {\n window.fireEvent(\"on\".concat(name), document.createEventObject());\n }\n },\n // ---\n // Trigger event\n _triggerEvent: function _triggerEvent(name) {\n this._triggerWindowEvent(\"layout\".concat(name));\n this._listeners.filter(function (listener) {\n return listener.event === name;\n }).forEach(function (listener) {\n return listener.callback.call(null);\n });\n },\n // ---\n // Update style\n _updateInlineStyle: function _updateInlineStyle() {\n var navbarHeight = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var footerHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (!this._styleEl) {\n this._styleEl = document.createElement('style');\n this._styleEl.type = 'text/css';\n document.head.appendChild(this._styleEl);\n }\n var newStyle = INLINE_STYLES.replace(/\\{navbarHeight\\}/gi, navbarHeight).replace(/\\{footerHeight\\}/gi, footerHeight);\n if (this._curStyle !== newStyle) {\n this._curStyle = newStyle;\n this._styleEl.textContent = newStyle;\n }\n },\n // ---\n // Remove style\n _removeInlineStyle: function _removeInlineStyle() {\n if (this._styleEl) document.head.removeChild(this._styleEl);\n this._styleEl = null;\n this._curStyle = null;\n },\n // ---\n // Redraw layout menu (Safari bugfix)\n _redrawLayoutMenu: function _redrawLayoutMenu() {\n var layoutMenu = this.getLayoutMenu();\n if (layoutMenu && layoutMenu.querySelector('.menu')) {\n var inner = layoutMenu.querySelector('.menu-inner');\n var scrollTop = inner.scrollTop;\n var pageScrollTop = document.documentElement.scrollTop;\n layoutMenu.style.display = 'none';\n // layoutMenu.offsetHeight\n layoutMenu.style.display = '';\n inner.scrollTop = scrollTop;\n document.documentElement.scrollTop = pageScrollTop;\n return true;\n }\n return false;\n },\n // ---\n // Check for transition support\n _supportsTransitionEnd: function _supportsTransitionEnd() {\n if (window.QUnit) return false;\n var el = document.body || document.documentElement;\n if (!el) return false;\n var result = false;\n TRANS_PROPERTIES.forEach(function (evnt) {\n if (typeof el.style[evnt] !== 'undefined') result = true;\n });\n return result;\n },\n // ---\n // Calculate current navbar height\n _getNavbarHeight: function _getNavbarHeight() {\n var _this2 = this;\n var layoutNavbar = this.getLayoutNavbar();\n if (!layoutNavbar) return 0;\n if (!this.isSmallScreen()) return layoutNavbar.getBoundingClientRect().height;\n\n // Needs some logic to get navbar height on small screens\n\n var clonedEl = layoutNavbar.cloneNode(true);\n clonedEl.id = null;\n clonedEl.style.visibility = 'hidden';\n clonedEl.style.position = 'absolute';\n Array.prototype.slice.call(clonedEl.querySelectorAll('.collapse.show')).forEach(function (el) {\n return _this2._removeClass('show', el);\n });\n layoutNavbar.parentNode.insertBefore(clonedEl, layoutNavbar);\n var navbarHeight = clonedEl.getBoundingClientRect().height;\n clonedEl.parentNode.removeChild(clonedEl);\n return navbarHeight;\n },\n // ---\n // Get current footer height\n _getFooterHeight: function _getFooterHeight() {\n var layoutFooter = this.getLayoutFooter();\n if (!layoutFooter) return 0;\n return layoutFooter.getBoundingClientRect().height;\n },\n // ---\n // Get animation duration of element\n _getAnimationDuration: function _getAnimationDuration(el) {\n var duration = window.getComputedStyle(el).transitionDuration;\n return parseFloat(duration) * (duration.indexOf('ms') !== -1 ? 1 : 1000);\n },\n // ---\n // Set menu hover state\n _setMenuHoverState: function _setMenuHoverState(hovered) {\n this[hovered ? '_addClass' : '_removeClass']('layout-menu-hover');\n },\n // ---\n // Toggle collapsed\n _setCollapsed: function _setCollapsed(collapsed) {\n var _this3 = this;\n if (this.isSmallScreen()) {\n if (collapsed) {\n this._removeClass('layout-menu-expanded');\n } else {\n setTimeout(function () {\n _this3._addClass('layout-menu-expanded');\n }, this._redrawLayoutMenu() ? 5 : 0);\n }\n } else {\n this[collapsed ? '_addClass' : '_removeClass']('layout-menu-collapsed');\n }\n },\n // ---\n // Add layout sivenav toggle animationEnd event\n _bindLayoutAnimationEndEvent: function _bindLayoutAnimationEndEvent(modifier, cb) {\n var _this4 = this;\n var menu = this.getMenu();\n var duration = menu ? this._getAnimationDuration(menu) + 50 : 0;\n if (!duration) {\n modifier.call(this);\n cb.call(this);\n return;\n }\n this._transitionCallback = function (e) {\n if (e.target !== menu) return;\n _this4._unbindLayoutAnimationEndEvent();\n cb.call(_this4);\n };\n TRANS_EVENTS.forEach(function (e) {\n menu.addEventListener(e, _this4._transitionCallback, false);\n });\n modifier.call(this);\n this._transitionCallbackTimeout = setTimeout(function () {\n _this4._transitionCallback.call(_this4, {\n target: menu\n });\n }, duration);\n },\n // ---\n // Remove layout sivenav toggle animationEnd event\n _unbindLayoutAnimationEndEvent: function _unbindLayoutAnimationEndEvent() {\n var _this5 = this;\n var menu = this.getMenu();\n if (this._transitionCallbackTimeout) {\n clearTimeout(this._transitionCallbackTimeout);\n this._transitionCallbackTimeout = null;\n }\n if (menu && this._transitionCallback) {\n TRANS_EVENTS.forEach(function (e) {\n menu.removeEventListener(e, _this5._transitionCallback, false);\n });\n }\n if (this._transitionCallback) {\n this._transitionCallback = null;\n }\n },\n // ---\n // Bind delayed window resize event\n _bindWindowResizeEvent: function _bindWindowResizeEvent() {\n var _this6 = this;\n this._unbindWindowResizeEvent();\n var cb = function cb() {\n if (_this6._resizeTimeout) {\n clearTimeout(_this6._resizeTimeout);\n _this6._resizeTimeout = null;\n }\n _this6._triggerEvent('resize');\n };\n this._resizeCallback = function () {\n if (_this6._resizeTimeout) clearTimeout(_this6._resizeTimeout);\n _this6._resizeTimeout = setTimeout(cb, _this6.RESIZE_DELAY);\n };\n window.addEventListener('resize', this._resizeCallback, false);\n },\n // ---\n // Unbind delayed window resize event\n _unbindWindowResizeEvent: function _unbindWindowResizeEvent() {\n if (this._resizeTimeout) {\n clearTimeout(this._resizeTimeout);\n this._resizeTimeout = null;\n }\n if (this._resizeCallback) {\n window.removeEventListener('resize', this._resizeCallback, false);\n this._resizeCallback = null;\n }\n },\n _bindMenuMouseEvents: function _bindMenuMouseEvents() {\n var _this7 = this;\n if (this._menuMouseEnter && this._menuMouseLeave && this._windowTouchStart) return;\n var layoutMenu = this.getLayoutMenu();\n if (!layoutMenu) return this._unbindMenuMouseEvents();\n if (!this._menuMouseEnter) {\n this._menuMouseEnter = function () {\n if (_this7.isSmallScreen() || !_this7._hasClass('layout-menu-collapsed') || _this7.isOffcanvas() || _this7._hasClass('layout-transitioning')) {\n return _this7._setMenuHoverState(false);\n }\n return _this7._setMenuHoverState(true);\n };\n layoutMenu.addEventListener('mouseenter', this._menuMouseEnter, false);\n layoutMenu.addEventListener('touchstart', this._menuMouseEnter, false);\n }\n if (!this._menuMouseLeave) {\n this._menuMouseLeave = function () {\n _this7._setMenuHoverState(false);\n };\n layoutMenu.addEventListener('mouseleave', this._menuMouseLeave, false);\n }\n if (!this._windowTouchStart) {\n this._windowTouchStart = function (e) {\n if (!e || !e.target || !_this7._findParent(e.target, '.layout-menu')) {\n _this7._setMenuHoverState(false);\n }\n };\n window.addEventListener('touchstart', this._windowTouchStart, true);\n }\n },\n _unbindMenuMouseEvents: function _unbindMenuMouseEvents() {\n if (!this._menuMouseEnter && !this._menuMouseLeave && !this._windowTouchStart) return;\n var layoutMenu = this.getLayoutMenu();\n if (this._menuMouseEnter) {\n if (layoutMenu) {\n layoutMenu.removeEventListener('mouseenter', this._menuMouseEnter, false);\n layoutMenu.removeEventListener('touchstart', this._menuMouseEnter, false);\n }\n this._menuMouseEnter = null;\n }\n if (this._menuMouseLeave) {\n if (layoutMenu) {\n layoutMenu.removeEventListener('mouseleave', this._menuMouseLeave, false);\n }\n this._menuMouseLeave = null;\n }\n if (this._windowTouchStart) {\n if (layoutMenu) {\n window.addEventListener('touchstart', this._windowTouchStart, true);\n }\n this._windowTouchStart = null;\n }\n this._setMenuHoverState(false);\n },\n // *******************************************************************************\n // * Methods\n scrollToActive: function scrollToActive() {\n var animate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n this._scrollToActive(animate);\n },\n swipeIn: function swipeIn(el, callback) {\n this._swipeIn(el, callback);\n },\n swipeOut: function swipeOut(el, callback) {\n this._swipeOut(el, callback);\n },\n overlayTap: function overlayTap(el, callback) {\n this._overlayTap(el, callback);\n },\n scrollPageTo: function scrollPageTo(to) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n // t = current time\n // b = start value\n // c = change in value\n // d = duration\n var easeInOutQuad = function easeInOutQuad(t, b, c, d) {\n t /= d / 2;\n if (t < 1) return c / 2 * t * t + b;\n t -= 1;\n return -c / 2 * (t * (t - 2) - 1) + b;\n };\n var element = document.scrollingElement;\n if (typeof to === 'string') {\n to = document.querySelector(to);\n }\n if (typeof to !== 'number') {\n to = to.getBoundingClientRect().top + element.scrollTop;\n }\n var start = element.scrollTop;\n var change = to - start;\n var startDate = +new Date();\n // const increment = 20\n\n var animateScroll = function animateScroll() {\n var currentDate = +new Date();\n var currentTime = currentDate - startDate;\n var val = easeInOutQuad(currentTime, start, change, duration);\n element.scrollTop = val;\n if (currentTime < duration) {\n requestAnimationFrame(animateScroll);\n } else {\n element.scrollTop = to;\n }\n };\n animateScroll();\n },\n // ---\n // Collapse / expand layout\n setCollapsed: function setCollapsed() {\n var _this8 = this;\n var collapsed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('collapsed');\n var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var layoutMenu = this.getLayoutMenu();\n if (!layoutMenu) return;\n this._unbindLayoutAnimationEndEvent();\n if (animate && this._supportsTransitionEnd()) {\n this._addClass('layout-transitioning');\n if (collapsed) this._setMenuHoverState(false);\n this._bindLayoutAnimationEndEvent(function () {\n // Collapse / Expand\n _this8._setCollapsed(collapsed);\n }, function () {\n _this8._removeClass('layout-transitioning');\n _this8._triggerWindowEvent('resize');\n _this8._triggerEvent('toggle');\n _this8._setMenuHoverState(false);\n });\n } else {\n this._addClass('layout-no-transition');\n if (collapsed) this._setMenuHoverState(false);\n\n // Collapse / Expand\n this._setCollapsed(collapsed);\n setTimeout(function () {\n _this8._removeClass('layout-no-transition');\n _this8._triggerWindowEvent('resize');\n _this8._triggerEvent('toggle');\n _this8._setMenuHoverState(false);\n }, 1);\n }\n },\n // ---\n // Toggle layout\n toggleCollapsed: function toggleCollapsed() {\n var animate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this.setCollapsed(!this.isCollapsed(), animate);\n },\n // ---\n // Set layout positioning\n setPosition: function setPosition() {\n var fixed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('fixed');\n var offcanvas = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : requiredParam('offcanvas');\n this._removeClass('layout-menu-offcanvas layout-menu-fixed layout-menu-fixed-offcanvas');\n if (!fixed && offcanvas) {\n this._addClass('layout-menu-offcanvas');\n } else if (fixed && !offcanvas) {\n this._addClass('layout-menu-fixed');\n this._redrawLayoutMenu();\n } else if (fixed && offcanvas) {\n this._addClass('layout-menu-fixed-offcanvas');\n this._redrawLayoutMenu();\n }\n this.update();\n },\n // *******************************************************************************\n // * Getters\n getLayoutMenu: function getLayoutMenu() {\n return document.querySelector('.layout-menu');\n },\n getMenu: function getMenu() {\n var layoutMenu = this.getLayoutMenu();\n if (!layoutMenu) return null;\n return !this._hasClass('menu', layoutMenu) ? layoutMenu.querySelector('.menu') : layoutMenu;\n },\n getLayoutNavbar: function getLayoutNavbar() {\n return document.querySelector('.layout-navbar');\n },\n getLayoutFooter: function getLayoutFooter() {\n return document.querySelector('.content-footer');\n },\n getLayoutContainer: function getLayoutContainer() {\n return document.querySelector('.layout-page');\n },\n // *******************************************************************************\n // * Setters\n setNavbarFixed: function setNavbarFixed() {\n var fixed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('fixed');\n this[fixed ? '_addClass' : '_removeClass']('layout-navbar-fixed');\n this.update();\n },\n setFooterFixed: function setFooterFixed() {\n var fixed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('fixed');\n this[fixed ? '_addClass' : '_removeClass']('layout-footer-fixed');\n this.update();\n },\n setFlipped: function setFlipped() {\n var reversed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('reversed');\n this[reversed ? '_addClass' : '_removeClass']('layout-menu-flipped');\n },\n // *******************************************************************************\n // * Update\n update: function update() {\n if (this.getLayoutNavbar() && (!this.isSmallScreen() && this.isLayoutNavbarFull() && this.isFixed() || this.isNavbarFixed()) || this.getLayoutFooter() && this.isFooterFixed()) {\n this._updateInlineStyle(this._getNavbarHeight(), this._getFooterHeight());\n }\n this._bindMenuMouseEvents();\n },\n setAutoUpdate: function setAutoUpdate() {\n var _this9 = this;\n var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('enable');\n if (enable && !this._autoUpdate) {\n this.on('resize.Helpers:autoUpdate', function () {\n return _this9.update();\n });\n this._autoUpdate = true;\n } else if (!enable && this._autoUpdate) {\n this.off('resize.Helpers:autoUpdate');\n this._autoUpdate = false;\n }\n },\n // Update custom option based on element\n updateCustomOptionCheck: function updateCustomOptionCheck(el) {\n if (el.checked) {\n // If custom option element is radio, remove checked from the siblings (closest `.row`)\n if (el.type === 'radio') {\n var customRadioOptionList = [].slice.call(el.closest('.row').querySelectorAll('.custom-option'));\n customRadioOptionList.map(function (customRadioOptionEL) {\n customRadioOptionEL.closest('.custom-option').classList.remove('checked');\n });\n }\n el.closest('.custom-option').classList.add('checked');\n } else {\n el.closest('.custom-option').classList.remove('checked');\n }\n },\n // *******************************************************************************\n // * Tests\n isRtl: function isRtl() {\n return document.querySelector('body').getAttribute('dir') === 'rtl' || document.querySelector('html').getAttribute('dir') === 'rtl';\n },\n isMobileDevice: function isMobileDevice() {\n return typeof window.orientation !== 'undefined' || navigator.userAgent.indexOf('IEMobile') !== -1;\n },\n isSmallScreen: function isSmallScreen() {\n return (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) < this.LAYOUT_BREAKPOINT;\n },\n isLayoutNavbarFull: function isLayoutNavbarFull() {\n return !!document.querySelector('.layout-wrapper.layout-navbar-full');\n },\n isCollapsed: function isCollapsed() {\n if (this.isSmallScreen()) {\n return !this._hasClass('layout-menu-expanded');\n }\n return this._hasClass('layout-menu-collapsed');\n },\n isFixed: function isFixed() {\n return this._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas');\n },\n isOffcanvas: function isOffcanvas() {\n return this._hasClass('layout-menu-offcanvas layout-menu-fixed-offcanvas');\n },\n isNavbarFixed: function isNavbarFixed() {\n return this._hasClass('layout-navbar-fixed') || !this.isSmallScreen() && this.isFixed() && this.isLayoutNavbarFull();\n },\n isFooterFixed: function isFooterFixed() {\n return this._hasClass('layout-footer-fixed');\n },\n isFlipped: function isFlipped() {\n return this._hasClass('layout-menu-flipped');\n },\n isLightStyle: function isLightStyle() {\n return document.documentElement.classList.contains('light-style');\n },\n isDarkStyle: function isDarkStyle() {\n return document.documentElement.classList.contains('dark-style');\n },\n // *******************************************************************************\n // * Events\n on: function on() {\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('event');\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : requiredParam('callback');\n var _event$split = event.split('.'),\n _event$split2 = _slicedToArray(_event$split, 1),\n _event = _event$split2[0];\n var _event$split3 = event.split('.'),\n _event$split4 = _toArray(_event$split3),\n namespace = _event$split4.slice(1);\n // let [_event, ...namespace] = event.split('.')\n namespace = namespace.join('.') || null;\n this._listeners.push({\n event: _event,\n namespace: namespace,\n callback: callback\n });\n },\n off: function off() {\n var _this10 = this;\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('event');\n var _event$split5 = event.split('.'),\n _event$split6 = _slicedToArray(_event$split5, 1),\n _event = _event$split6[0];\n var _event$split7 = event.split('.'),\n _event$split8 = _toArray(_event$split7),\n namespace = _event$split8.slice(1);\n namespace = namespace.join('.') || null;\n this._listeners.filter(function (listener) {\n return listener.event === _event && listener.namespace === namespace;\n }).forEach(function (listener) {\n return _this10._listeners.splice(_this10._listeners.indexOf(listener), 1);\n });\n },\n // *******************************************************************************\n // * Life cycle\n init: function init() {\n var _this11 = this;\n if (this._initialized) return;\n this._initialized = true;\n\n // Initialize `style` element\n this._updateInlineStyle(0);\n\n // Bind window resize event\n this._bindWindowResizeEvent();\n\n // Bind init event\n this.off('init._Helpers');\n this.on('init._Helpers', function () {\n _this11.off('resize._Helpers:redrawMenu');\n _this11.on('resize._Helpers:redrawMenu', function () {\n // eslint-disable-next-line no-unused-expressions\n _this11.isSmallScreen() && !_this11.isCollapsed() && _this11._redrawLayoutMenu();\n });\n\n // Force repaint in IE 10\n if (typeof document.documentMode === 'number' && document.documentMode < 11) {\n _this11.off('resize._Helpers:ie10RepaintBody');\n _this11.on('resize._Helpers:ie10RepaintBody', function () {\n if (_this11.isFixed()) return;\n var scrollTop = document.documentElement.scrollTop;\n document.body.style.display = 'none';\n // document.body.offsetHeight\n document.body.style.display = 'block';\n document.documentElement.scrollTop = scrollTop;\n });\n }\n });\n this._triggerEvent('init');\n },\n destroy: function destroy() {\n var _this12 = this;\n if (!this._initialized) return;\n this._initialized = false;\n this._removeClass('layout-transitioning');\n this._removeInlineStyle();\n this._unbindLayoutAnimationEndEvent();\n this._unbindWindowResizeEvent();\n this._unbindMenuMouseEvents();\n this.setAutoUpdate(false);\n this.off('init._Helpers');\n\n // Remove all listeners except `init`\n this._listeners.filter(function (listener) {\n return listener.event !== 'init';\n }).forEach(function (listener) {\n return _this12._listeners.splice(_this12._listeners.indexOf(listener), 1);\n });\n },\n // ---\n // Init Password Toggle\n initPasswordToggle: function initPasswordToggle() {\n var toggler = document.querySelectorAll('.form-password-toggle i');\n if (typeof toggler !== 'undefined' && toggler !== null) {\n toggler.forEach(function (el) {\n el.addEventListener('click', function (e) {\n e.preventDefault();\n var formPasswordToggle = el.closest('.form-password-toggle');\n var formPasswordToggleIcon = formPasswordToggle.querySelector('i');\n var formPasswordToggleInput = formPasswordToggle.querySelector('input');\n if (formPasswordToggleInput.getAttribute('type') === 'text') {\n formPasswordToggleInput.setAttribute('type', 'password');\n formPasswordToggleIcon.classList.replace('bx-show', 'bx-hide');\n } else if (formPasswordToggleInput.getAttribute('type') === 'password') {\n formPasswordToggleInput.setAttribute('type', 'text');\n formPasswordToggleIcon.classList.replace('bx-hide', 'bx-show');\n }\n });\n });\n }\n },\n //--\n // Init custom option check\n initCustomOptionCheck: function initCustomOptionCheck() {\n var _this = this;\n var custopOptionList = [].slice.call(document.querySelectorAll('.custom-option .form-check-input'));\n custopOptionList.map(function (customOptionEL) {\n // Update custom options check on page load\n _this.updateCustomOptionCheck(customOptionEL);\n\n // Update custom options check on click\n customOptionEL.addEventListener('click', function (e) {\n _this.updateCustomOptionCheck(customOptionEL);\n });\n });\n },\n // ---\n // Init Speech To Text\n initSpeechToText: function initSpeechToText() {\n var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\n var speechToText = document.querySelectorAll('.speech-to-text');\n if (SpeechRecognition !== undefined && SpeechRecognition !== null) {\n if (typeof speechToText !== 'undefined' && speechToText !== null) {\n var recognition = new SpeechRecognition();\n var toggler = document.querySelectorAll('.speech-to-text i');\n toggler.forEach(function (el) {\n var listening = false;\n el.addEventListener('click', function () {\n el.closest('.input-group').querySelector('.form-control').focus();\n recognition.onspeechstart = function () {\n listening = true;\n };\n if (listening === false) {\n recognition.start();\n }\n recognition.onerror = function () {\n listening = false;\n };\n recognition.onresult = function (event) {\n el.closest('.input-group').querySelector('.form-control').value = event.results[0][0].transcript;\n };\n recognition.onspeechend = function () {\n listening = false;\n recognition.stop();\n };\n });\n });\n }\n }\n },\n // ---\n // Init Navbar Dropdown (i.e notification) PerfectScrollbar\n initNavbarDropdownScrollbar: function initNavbarDropdownScrollbar() {\n var scrollbarContainer = document.querySelectorAll('.navbar-dropdown .scrollable-container');\n var _window4 = window,\n PerfectScrollbar = _window4.PerfectScrollbar;\n if (PerfectScrollbar !== undefined) {\n if (typeof scrollbarContainer !== 'undefined' && scrollbarContainer !== null) {\n scrollbarContainer.forEach(function (el) {\n // eslint-disable-next-line no-new\n new PerfectScrollbar(el, {\n wheelPropagation: false,\n suppressScrollX: true\n });\n });\n }\n }\n },\n // Ajax Call Promise\n ajaxCall: function ajaxCall(url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.open('GET', url);\n req.onload = function () {\n return req.status === 200 ? resolve(req.response) : reject(Error(req.statusText));\n };\n req.onerror = function (e) {\n return reject(Error(\"Network Error: \".concat(e)));\n };\n req.send();\n });\n },\n // ---\n // SidebarToggle (Used in Apps)\n initSidebarToggle: function initSidebarToggle() {\n var sidebarToggler = document.querySelectorAll('[data-bs-toggle=\"sidebar\"]');\n sidebarToggler.forEach(function (el) {\n el.addEventListener('click', function () {\n var target = el.getAttribute('data-target');\n var overlay = el.getAttribute('data-overlay');\n var appOverlay = document.querySelectorAll('.app-overlay');\n var targetEl = document.querySelectorAll(target);\n targetEl.forEach(function (tel) {\n tel.classList.toggle('show');\n if (typeof overlay !== 'undefined' && overlay !== null && overlay !== false && typeof appOverlay !== 'undefined') {\n if (tel.classList.contains('show')) {\n appOverlay[0].classList.add('show');\n } else {\n appOverlay[0].classList.remove('show');\n }\n appOverlay[0].addEventListener('click', function (e) {\n e.currentTarget.classList.remove('show');\n tel.classList.remove('show');\n });\n }\n });\n });\n });\n }\n};\n\n// *******************************************************************************\n// * Initialization\n\nif (typeof window !== 'undefined') {\n Helpers.init();\n if (Helpers.isMobileDevice() && window.chrome) {\n document.documentElement.classList.add('layout-menu-100vh');\n }\n\n // Update layout after page load\n if (document.readyState === 'complete') Helpers.update();else document.addEventListener('DOMContentLoaded', function onContentLoaded() {\n Helpers.update();\n document.removeEventListener('DOMContentLoaded', onContentLoaded);\n });\n}\n\n// ---\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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T0FBT3hFLE1BQU0sS0FBSyxXQUFXLEVBQUU7RUFDakNGLE9BQU8sQ0FBQ21OLElBQUksRUFBRTtFQUVkLElBQUluTixPQUFPLENBQUNxTSxjQUFjLEVBQUUsSUFBSW5NLE1BQU0sQ0FBQ3VRLE1BQU0sRUFBRTtJQUM3Q3RRLFFBQVEsQ0FBQ0MsZUFBZSxDQUFDbUUsU0FBUyxDQUFDQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7RUFDN0Q7O0VBRUE7RUFDQSxJQUFJckUsUUFBUSxDQUFDdVEsVUFBVSxLQUFLLFVBQVUsRUFBRTFRLE9BQU8sQ0FBQ2dMLE1BQU0sRUFBRSxNQUV0RDdLLFFBQVEsQ0FBQ3FKLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLFNBQVNtSCxlQUFlLEdBQUc7SUFDdkUzUSxPQUFPLENBQUNnTCxNQUFNLEVBQUU7SUFDaEI3SyxRQUFRLENBQUN1SixtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRWlILGVBQWUsQ0FBQztFQUNuRSxDQUFDLENBQUM7QUFDTjs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL1NuZWF0Ly4vanMvaGVscGVycy5qcz8wYjIxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvbnN0YW50c1xyXG5jb25zdCBUUkFOU19FVkVOVFMgPSBbJ3RyYW5zaXRpb25lbmQnLCAnd2Via2l0VHJhbnNpdGlvbkVuZCcsICdvVHJhbnNpdGlvbkVuZCddXHJcbmNvbnN0IFRSQU5TX1BST1BFUlRJRVMgPSBbJ3RyYW5zaXRpb24nLCAnTW96VHJhbnNpdGlvbicsICd3ZWJraXRUcmFuc2l0aW9uJywgJ1dlYmtpdFRyYW5zaXRpb24nLCAnT1RyYW5zaXRpb24nXVxyXG5jb25zdCBJTkxJTkVfU1RZTEVTID0gYFxyXG4ubGF5b3V0LW1lbnUtZml4ZWQgLmxheW91dC1uYXZiYXItZnVsbCAubGF5b3V0LW1lbnUsXHJcbi5sYXlvdXQtbWVudS1maXhlZC1vZmZjYW52YXMgLmxheW91dC1uYXZiYXItZnVsbCAubGF5b3V0LW1lbnUge1xyXG4gIHRvcDoge25hdmJhckhlaWdodH1weCAhaW1wb3J0YW50O1xyXG59XHJcbi5sYXlvdXQtcGFnZSB7XHJcbiAgcGFkZGluZy10b3A6IHtuYXZiYXJIZWlnaHR9cHggIWltcG9ydGFudDtcclxufVxyXG4uY29udGVudC13cmFwcGVyIHtcclxuICBwYWRkaW5nLWJvdHRvbToge2Zvb3RlckhlaWdodH1weCAhaW1wb3J0YW50O1xyXG59YFxyXG5cclxuLy8gR3VhcmRcclxuZnVuY3Rpb24gcmVxdWlyZWRQYXJhbShuYW1lKSB7XHJcbiAgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgcmVxdWlyZWQke25hbWUgPyBgOiBcXGAke25hbWV9XFxgYCA6ICcnfWApXHJcbn1cclxuXHJcbmNvbnN0IEhlbHBlcnMgPSB7XHJcbiAgLy8gUm9vdCBFbGVtZW50XHJcbiAgUk9PVF9FTDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBudWxsLFxyXG5cclxuICAvLyBMYXJnZSBzY3JlZW5zIGJyZWFrcG9pbnRcclxuICBMQVlPVVRfQlJFQUtQT0lOVDogMTIwMCxcclxuXHJcbiAgLy8gUmVzaXplIGRlbGF5IGluIG1pbGxpc2Vjb25kc1xyXG4gIFJFU0laRV9ERUxBWTogMjAwLFxyXG5cclxuICBtZW51UHNTY3JvbGw6IG51bGwsXHJcblxyXG4gIG1haW5NZW51OiBudWxsLFxyXG5cclxuICAvLyBJbnRlcm5hbCB2YXJpYWJsZXNcclxuICBfY3VyU3R5bGU6IG51bGwsXHJcbiAgX3N0eWxlRWw6IG51bGwsXHJcbiAgX3Jlc2l6ZVRpbWVvdXQ6IG51bGwsXHJcbiAgX3Jlc2l6ZUNhbGxiYWNrOiBudWxsLFxyXG4gIF90cmFuc2l0aW9uQ2FsbGJhY2s6IG51bGwsXHJcbiAgX3RyYW5zaXRpb25DYWxsYmFja1RpbWVvdXQ6IG51bGwsXHJcbiAgX2xpc3RlbmVyczogW10sXHJcbiAgX2luaXRpYWxpemVkOiBmYWxzZSxcclxuICBfYXV0b1VwZGF0ZTogZmFsc2UsXHJcbiAgX2xhc3RXaW5kb3dIZWlnaHQ6IDAsXHJcblxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLyAqIFV0aWxpdGllc1xyXG5cclxuICAvLyAtLS1cclxuICAvLyBTY3JvbGwgVG8gQWN0aXZlIE1lbnUgSXRlbVxyXG4gIF9zY3JvbGxUb0FjdGl2ZShhbmltYXRlID0gZmFsc2UsIGR1cmF0aW9uID0gNTAwKSB7XHJcbiAgICBjb25zdCBsYXlvdXRNZW51ID0gdGhpcy5nZXRMYXlvdXRNZW51KClcclxuXHJcbiAgICBpZiAoIWxheW91dE1lbnUpIHJldHVyblxyXG5cclxuICAgIGxldCBhY3RpdmVFbCA9IGxheW91dE1lbnUucXVlcnlTZWxlY3RvcignbGkubWVudS1pdGVtLmFjdGl2ZTpub3QoLm9wZW4pJylcclxuXHJcbiAgICBpZiAoYWN0aXZlRWwpIHtcclxuICAgICAgLy8gdCA9IGN1cnJlbnQgdGltZVxyXG4gICAgICAvLyBiID0gc3RhcnQgdmFsdWVcclxuICAgICAgLy8gYyA9IGNoYW5nZSBpbiB2YWx1ZVxyXG4gICAgICAvLyBkID0gZHVyYXRpb25cclxuICAgICAgY29uc3QgZWFzZUluT3V0UXVhZCA9ICh0LCBiLCBjLCBkKSA9PiB7XHJcbiAgICAgICAgdCAvPSBkIC8gMlxyXG4gICAgICAgIGlmICh0IDwgMSkgcmV0dXJuIChjIC8gMikgKiB0ICogdCArIGJcclxuICAgICAgICB0IC09IDFcclxuICAgICAgICByZXR1cm4gKC1jIC8gMikgKiAodCAqICh0IC0gMikgLSAxKSArIGJcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0TGF5b3V0TWVudSgpLnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWlubmVyJylcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgYWN0aXZlRWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgYWN0aXZlRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGFjdGl2ZUVsKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgYWN0aXZlRWwgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgYWN0aXZlRWwgPSBhY3RpdmVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBlbGVtZW50LnNjcm9sbFRvcFxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiBhY3RpdmUgZWxlbWVudCdzIHRvcCBwb3NpdGlvbiBpcyBsZXNzIHRoYW4gMi8zICg2NiUpIG9mIG1lbnUgaGVpZ2h0IHRoYW4gZG8gbm90IHNjcm9sbFxyXG4gICAgICBpZiAoYWN0aXZlRWwgPCBwYXJzZUludCgoZWxlbWVudC5jbGllbnRIZWlnaHQgKiAyKSAvIDMsIDEwKSkgcmV0dXJuXHJcblxyXG4gICAgICBjb25zdCBzdGFydCA9IGVsZW1lbnQuc2Nyb2xsVG9wXHJcbiAgICAgIGNvbnN0IGNoYW5nZSA9IGFjdGl2ZUVsIC0gc3RhcnQgLSBwYXJzZUludChlbGVtZW50LmNsaWVudEhlaWdodCAvIDIsIDEwKVxyXG4gICAgICBjb25zdCBzdGFydERhdGUgPSArbmV3IERhdGUoKVxyXG5cclxuICAgICAgaWYgKGFuaW1hdGUgPT09IHRydWUpIHtcclxuICAgICAgICBjb25zdCBhbmltYXRlU2Nyb2xsID0gKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSArbmV3IERhdGUoKVxyXG4gICAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBjdXJyZW50RGF0ZSAtIHN0YXJ0RGF0ZVxyXG4gICAgICAgICAgY29uc3QgdmFsID0gZWFzZUluT3V0UXVhZChjdXJyZW50VGltZSwgc3RhcnQsIGNoYW5nZSwgZHVyYXRpb24pXHJcbiAgICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHZhbFxyXG4gICAgICAgICAgaWYgKGN1cnJlbnRUaW1lIDwgZHVyYXRpb24pIHtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGVTY3JvbGwpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGNoYW5nZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhbmltYXRlU2Nyb2xsKClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGNoYW5nZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tXHJcbiAgLy8gU3dpcGUgSW4gR2VzdHVyZVxyXG4gIF9zd2lwZUluKHRhcmdldEVsLCBjYWxsYmFjaykge1xyXG4gICAgY29uc3QgeyBIYW1tZXIgfSA9IHdpbmRvd1xyXG4gICAgaWYgKHR5cGVvZiBIYW1tZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB0YXJnZXRFbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgLy8gU3dpcGUgbWVudSBnZXN0dXJlXHJcbiAgICAgIGNvbnN0IHN3aXBlSW5FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXRFbClcclxuXHJcbiAgICAgIGlmIChzd2lwZUluRWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGhhbW1lckluc3RhbmNlID0gbmV3IEhhbW1lcihzd2lwZUluRWxlbWVudClcclxuXHJcbiAgICAgICAgaGFtbWVySW5zdGFuY2Uub24oJ3BhbnJpZ2h0JywgY2FsbGJhY2spXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS1cclxuICAvLyBTd2lwZSBPdXQgR2VzdHVyZVxyXG4gIF9zd2lwZU91dCh0YXJnZXRFbCwgY2FsbGJhY2spIHtcclxuICAgIGNvbnN0IHsgSGFtbWVyIH0gPSB3aW5kb3dcclxuICAgIGlmICh0eXBlb2YgSGFtbWVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdGFyZ2V0RWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIFN3aXBlIG1lbnUgZ2VzdHVyZVxyXG4gICAgICAgIGNvbnN0IHN3aXBlT3V0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0RWwpXHJcblxyXG4gICAgICAgIGlmIChzd2lwZU91dEVsZW1lbnQpIHtcclxuICAgICAgICAgIGNvbnN0IGhhbW1lckluc3RhbmNlID0gbmV3IEhhbW1lcihzd2lwZU91dEVsZW1lbnQpXHJcblxyXG4gICAgICAgICAgaGFtbWVySW5zdGFuY2UuZ2V0KCdwYW4nKS5zZXQoeyBkaXJlY3Rpb246IEhhbW1lci5ESVJFQ1RJT05fQUxMLCB0aHJlc2hvbGQ6IDI1MCB9KVxyXG4gICAgICAgICAgaGFtbWVySW5zdGFuY2Uub24oJ3BhbmxlZnQnLCBjYWxsYmFjaylcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDUwMClcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS1cclxuICAvLyBTd2lwZSBPdXQgT24gT3ZlcmxheSBUYXBcclxuICBfb3ZlcmxheVRhcCh0YXJnZXRFbCwgY2FsbGJhY2spIHtcclxuICAgIGNvbnN0IHsgSGFtbWVyIH0gPSB3aW5kb3dcclxuXHJcbiAgICBpZiAodHlwZW9mIEhhbW1lciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRhcmdldEVsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAvLyBTd2lwZSBvdXQgb3ZlcmxheSBlbGVtZW50XHJcbiAgICAgIGNvbnN0IHN3aXBlT3V0T3ZlcmxheUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldEVsKVxyXG5cclxuICAgICAgaWYgKHN3aXBlT3V0T3ZlcmxheUVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBoYW1tZXJJbnN0YW5jZSA9IG5ldyBIYW1tZXIoc3dpcGVPdXRPdmVybGF5RWxlbWVudClcclxuXHJcbiAgICAgICAgaGFtbWVySW5zdGFuY2Uub24oJ3RhcCcsIGNhbGxiYWNrKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tXHJcbiAgLy8gQWRkIGNsYXNzZXNcclxuICBfYWRkQ2xhc3MoY2xzLCBlbCA9IHRoaXMuUk9PVF9FTCkge1xyXG4gICAgaWYgKGVsLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIEFkZCBjbGFzc2VzIHRvIG11bHRpcGxlIGVsZW1lbnRzXHJcbiAgICAgIGVsLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgY2xzLnNwbGl0KCcgJykuZm9yRWFjaChjID0+IGUuY2xhc3NMaXN0LmFkZChjKSlcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEFkZCBjbGFzc2VzIHRvIHNpbmdsZSBlbGVtZW50XHJcbiAgICAgIGNscy5zcGxpdCgnICcpLmZvckVhY2goYyA9PiBlbC5jbGFzc0xpc3QuYWRkKGMpKVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLVxyXG4gIC8vIFJlbW92ZSBjbGFzc2VzXHJcbiAgX3JlbW92ZUNsYXNzKGNscywgZWwgPSB0aGlzLlJPT1RfRUwpIHtcclxuICAgIGlmIChlbC5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyBSZW1vdmUgY2xhc3NlcyB0byBtdWx0aXBsZSBlbGVtZW50c1xyXG4gICAgICBlbC5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgIGNscy5zcGxpdCgnICcpLmZvckVhY2goYyA9PiBlLmNsYXNzTGlzdC5yZW1vdmUoYykpXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZW1vdmUgY2xhc3NlcyB0byBzaW5nbGUgZWxlbWVudFxyXG4gICAgICBjbHMuc3BsaXQoJyAnKS5mb3JFYWNoKGMgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZShjKSlcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyBUb2dnbGUgY2xhc3Nlc1xyXG4gIF90b2dnbGVDbGFzcyhlbCA9IHRoaXMuUk9PVF9FTCwgY2xzMSwgY2xzMikge1xyXG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhjbHMxKSkge1xyXG4gICAgICBlbC5jbGFzc0xpc3QucmVwbGFjZShjbHMxLCBjbHMyKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWwuY2xhc3NMaXN0LnJlcGxhY2UoY2xzMiwgY2xzMSlcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS1cclxuICAvLyBIYXMgY2xhc3NcclxuICBfaGFzQ2xhc3MoY2xzLCBlbCA9IHRoaXMuUk9PVF9FTCkge1xyXG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlXHJcblxyXG4gICAgY2xzLnNwbGl0KCcgJykuZm9yRWFjaChjID0+IHtcclxuICAgICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhjKSkgcmVzdWx0ID0gdHJ1ZVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbiAgfSxcclxuXHJcbiAgX2ZpbmRQYXJlbnQoZWwsIGNscykge1xyXG4gICAgaWYgKChlbCAmJiBlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdCT0RZJykgfHwgZWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnSFRNTCcpIHJldHVybiBudWxsXHJcbiAgICBlbCA9IGVsLnBhcmVudE5vZGVcclxuICAgIHdoaWxlIChlbCAmJiBlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCT0RZJyAmJiAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNscykpIHtcclxuICAgICAgZWwgPSBlbC5wYXJlbnROb2RlXHJcbiAgICB9XHJcbiAgICBlbCA9IGVsICYmIGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSAhPT0gJ0JPRFknID8gZWwgOiBudWxsXHJcbiAgICByZXR1cm4gZWxcclxuICB9LFxyXG5cclxuICAvLyAtLS1cclxuICAvLyBUcmlnZ2VyIHdpbmRvdyBldmVudFxyXG4gIF90cmlnZ2VyV2luZG93RXZlbnQobmFtZSkge1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm5cclxuXHJcbiAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcclxuICAgICAgbGV0IGV2ZW50XHJcblxyXG4gICAgICBpZiAodHlwZW9mIEV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgZXZlbnQgPSBuZXcgRXZlbnQobmFtZSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpXHJcbiAgICAgICAgZXZlbnQuaW5pdEV2ZW50KG5hbWUsIGZhbHNlLCB0cnVlKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdpbmRvdy5maXJlRXZlbnQoYG9uJHtuYW1lfWAsIGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCkpXHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tXHJcbiAgLy8gVHJpZ2dlciBldmVudFxyXG4gIF90cmlnZ2VyRXZlbnQobmFtZSkge1xyXG4gICAgdGhpcy5fdHJpZ2dlcldpbmRvd0V2ZW50KGBsYXlvdXQke25hbWV9YClcclxuXHJcbiAgICB0aGlzLl9saXN0ZW5lcnMuZmlsdGVyKGxpc3RlbmVyID0+IGxpc3RlbmVyLmV2ZW50ID09PSBuYW1lKS5mb3JFYWNoKGxpc3RlbmVyID0+IGxpc3RlbmVyLmNhbGxiYWNrLmNhbGwobnVsbCkpXHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tXHJcbiAgLy8gVXBkYXRlIHN0eWxlXHJcbiAgX3VwZGF0ZUlubGluZVN0eWxlKG5hdmJhckhlaWdodCA9IDAsIGZvb3RlckhlaWdodCA9IDApIHtcclxuICAgIGlmICghdGhpcy5fc3R5bGVFbCkge1xyXG4gICAgICB0aGlzLl9zdHlsZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKVxyXG4gICAgICB0aGlzLl9zdHlsZUVsLnR5cGUgPSAndGV4dC9jc3MnXHJcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGhpcy5fc3R5bGVFbClcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdTdHlsZSA9IElOTElORV9TVFlMRVMucmVwbGFjZSgvXFx7bmF2YmFySGVpZ2h0XFx9L2dpLCBuYXZiYXJIZWlnaHQpLnJlcGxhY2UoXHJcbiAgICAgIC9cXHtmb290ZXJIZWlnaHRcXH0vZ2ksXHJcbiAgICAgIGZvb3RlckhlaWdodFxyXG4gICAgKVxyXG5cclxuICAgIGlmICh0aGlzLl9jdXJTdHlsZSAhPT0gbmV3U3R5bGUpIHtcclxuICAgICAgdGhpcy5fY3VyU3R5bGUgPSBuZXdTdHlsZVxyXG4gICAgICB0aGlzLl9zdHlsZUVsLnRleHRDb250ZW50ID0gbmV3U3R5bGVcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS1cclxuICAvLyBSZW1vdmUgc3R5bGVcclxuICBfcmVtb3ZlSW5saW5lU3R5bGUoKSB7XHJcbiAgICBpZiAodGhpcy5fc3R5bGVFbCkgZG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZCh0aGlzLl9zdHlsZUVsKVxyXG4gICAgdGhpcy5fc3R5bGVFbCA9IG51bGxcclxuICAgIHRoaXMuX2N1clN0eWxlID0gbnVsbFxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLVxyXG4gIC8vIFJlZHJhdyBsYXlvdXQgbWVudSAoU2FmYXJpIGJ1Z2ZpeClcclxuICBfcmVkcmF3TGF5b3V0TWVudSgpIHtcclxuICAgIGNvbnN0IGxheW91dE1lbnUgPSB0aGlzLmdldExheW91dE1lbnUoKVxyXG5cclxuICAgIGlmIChsYXlvdXRNZW51ICYmIGxheW91dE1lbnUucXVlcnlTZWxlY3RvcignLm1lbnUnKSkge1xyXG4gICAgICBjb25zdCBpbm5lciA9IGxheW91dE1lbnUucXVlcnlTZWxlY3RvcignLm1lbnUtaW5uZXInKVxyXG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCB9ID0gaW5uZXJcclxuICAgICAgY29uc3QgcGFnZVNjcm9sbFRvcCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcclxuXHJcbiAgICAgIGxheW91dE1lbnUuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgICAvLyBsYXlvdXRNZW51Lm9mZnNldEhlaWdodFxyXG4gICAgICBsYXlvdXRNZW51LnN0eWxlLmRpc3BsYXkgPSAnJ1xyXG4gICAgICBpbm5lci5zY3JvbGxUb3AgPSBzY3JvbGxUb3BcclxuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IHBhZ2VTY3JvbGxUb3BcclxuXHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tXHJcbiAgLy8gQ2hlY2sgZm9yIHRyYW5zaXRpb24gc3VwcG9ydFxyXG4gIF9zdXBwb3J0c1RyYW5zaXRpb25FbmQoKSB7XHJcbiAgICBpZiAod2luZG93LlFVbml0KSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XHJcblxyXG4gICAgaWYgKCFlbCkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlXHJcbiAgICBUUkFOU19QUk9QRVJUSUVTLmZvckVhY2goZXZudCA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgZWwuc3R5bGVbZXZudF0gIT09ICd1bmRlZmluZWQnKSByZXN1bHQgPSB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIHJldHVybiByZXN1bHRcclxuICB9LFxyXG5cclxuICAvLyAtLS1cclxuICAvLyBDYWxjdWxhdGUgY3VycmVudCBuYXZiYXIgaGVpZ2h0XHJcbiAgX2dldE5hdmJhckhlaWdodCgpIHtcclxuICAgIGNvbnN0IGxheW91dE5hdmJhciA9IHRoaXMuZ2V0TGF5b3V0TmF2YmFyKClcclxuXHJcbiAgICBpZiAoIWxheW91dE5hdmJhcikgcmV0dXJuIDBcclxuICAgIGlmICghdGhpcy5pc1NtYWxsU2NyZWVuKCkpIHJldHVybiBsYXlvdXROYXZiYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0XHJcblxyXG4gICAgLy8gTmVlZHMgc29tZSBsb2dpYyB0byBnZXQgbmF2YmFyIGhlaWdodCBvbiBzbWFsbCBzY3JlZW5zXHJcblxyXG4gICAgY29uc3QgY2xvbmVkRWwgPSBsYXlvdXROYXZiYXIuY2xvbmVOb2RlKHRydWUpXHJcbiAgICBjbG9uZWRFbC5pZCA9IG51bGxcclxuICAgIGNsb25lZEVsLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJ1xyXG4gICAgY2xvbmVkRWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXHJcblxyXG4gICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoY2xvbmVkRWwucXVlcnlTZWxlY3RvckFsbCgnLmNvbGxhcHNlLnNob3cnKSkuZm9yRWFjaChlbCA9PiB0aGlzLl9yZW1vdmVDbGFzcygnc2hvdycsIGVsKSlcclxuXHJcbiAgICBsYXlvdXROYXZiYXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2xvbmVkRWwsIGxheW91dE5hdmJhcilcclxuXHJcbiAgICBjb25zdCBuYXZiYXJIZWlnaHQgPSBjbG9uZWRFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcclxuXHJcbiAgICBjbG9uZWRFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsb25lZEVsKVxyXG5cclxuICAgIHJldHVybiBuYXZiYXJIZWlnaHRcclxuICB9LFxyXG5cclxuICAvLyAtLS1cclxuICAvLyBHZXQgY3VycmVudCBmb290ZXIgaGVpZ2h0XHJcbiAgX2dldEZvb3RlckhlaWdodCgpIHtcclxuICAgIGNvbnN0IGxheW91dEZvb3RlciA9IHRoaXMuZ2V0TGF5b3V0Rm9vdGVyKClcclxuXHJcbiAgICBpZiAoIWxheW91dEZvb3RlcikgcmV0dXJuIDBcclxuXHJcbiAgICByZXR1cm4gbGF5b3V0Rm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodFxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLVxyXG4gIC8vIEdldCBhbmltYXRpb24gZHVyYXRpb24gb2YgZWxlbWVudFxyXG4gIF9nZXRBbmltYXRpb25EdXJhdGlvbihlbCkge1xyXG4gICAgY29uc3QgZHVyYXRpb24gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkudHJhbnNpdGlvbkR1cmF0aW9uXHJcblxyXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoZHVyYXRpb24pICogKGR1cmF0aW9uLmluZGV4T2YoJ21zJykgIT09IC0xID8gMSA6IDEwMDApXHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tXHJcbiAgLy8gU2V0IG1lbnUgaG92ZXIgc3RhdGVcclxuICBfc2V0TWVudUhvdmVyU3RhdGUoaG92ZXJlZCkge1xyXG4gICAgdGhpc1tob3ZlcmVkID8gJ19hZGRDbGFzcycgOiAnX3JlbW92ZUNsYXNzJ10oJ2xheW91dC1tZW51LWhvdmVyJylcclxuICB9LFxyXG5cclxuICAvLyAtLS1cclxuICAvLyBUb2dnbGUgY29sbGFwc2VkXHJcbiAgX3NldENvbGxhcHNlZChjb2xsYXBzZWQpIHtcclxuICAgIGlmICh0aGlzLmlzU21hbGxTY3JlZW4oKSkge1xyXG4gICAgICBpZiAoY29sbGFwc2VkKSB7XHJcbiAgICAgICAgdGhpcy5fcmVtb3ZlQ2xhc3MoJ2xheW91dC1tZW51LWV4cGFuZGVkJylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9hZGRDbGFzcygnbGF5b3V0LW1lbnUtZXhwYW5kZWQnKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRoaXMuX3JlZHJhd0xheW91dE1lbnUoKSA/IDUgOiAwXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzW2NvbGxhcHNlZCA/ICdfYWRkQ2xhc3MnIDogJ19yZW1vdmVDbGFzcyddKCdsYXlvdXQtbWVudS1jb2xsYXBzZWQnKVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLVxyXG4gIC8vIEFkZCBsYXlvdXQgc2l2ZW5hdiB0b2dnbGUgYW5pbWF0aW9uRW5kIGV2ZW50XHJcbiAgX2JpbmRMYXlvdXRBbmltYXRpb25FbmRFdmVudChtb2RpZmllciwgY2IpIHtcclxuICAgIGNvbnN0IG1lbnUgPSB0aGlzLmdldE1lbnUoKVxyXG4gICAgY29uc3QgZHVyYXRpb24gPSBtZW51ID8gdGhpcy5fZ2V0QW5pbWF0aW9uRHVyYXRpb24obWVudSkgKyA1MCA6IDBcclxuXHJcbiAgICBpZiAoIWR1cmF0aW9uKSB7XHJcbiAgICAgIG1vZGlmaWVyLmNhbGwodGhpcylcclxuICAgICAgY2IuY2FsbCh0aGlzKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl90cmFuc2l0aW9uQ2FsbGJhY2sgPSBlID0+IHtcclxuICAgICAgaWYgKGUudGFyZ2V0ICE9PSBtZW51KSByZXR1cm5cclxuICAgICAgdGhpcy5fdW5iaW5kTGF5b3V0QW5pbWF0aW9uRW5kRXZlbnQoKVxyXG4gICAgICBjYi5jYWxsKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgVFJBTlNfRVZFTlRTLmZvckVhY2goZSA9PiB7XHJcbiAgICAgIG1lbnUuYWRkRXZlbnRMaXN0ZW5lcihlLCB0aGlzLl90cmFuc2l0aW9uQ2FsbGJhY2ssIGZhbHNlKVxyXG4gICAgfSlcclxuXHJcbiAgICBtb2RpZmllci5jYWxsKHRoaXMpXHJcblxyXG4gICAgdGhpcy5fdHJhbnNpdGlvbkNhbGxiYWNrVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl90cmFuc2l0aW9uQ2FsbGJhY2suY2FsbCh0aGlzLCB7IHRhcmdldDogbWVudSB9KVxyXG4gICAgfSwgZHVyYXRpb24pXHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tXHJcbiAgLy8gUmVtb3ZlIGxheW91dCBzaXZlbmF2IHRvZ2dsZSBhbmltYXRpb25FbmQgZXZlbnRcclxuICBfdW5iaW5kTGF5b3V0QW5pbWF0aW9uRW5kRXZlbnQoKSB7XHJcbiAgICBjb25zdCBtZW51ID0gdGhpcy5nZXRNZW51KClcclxuXHJcbiAgICBpZiAodGhpcy5fdHJhbnNpdGlvbkNhbGxiYWNrVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdHJhbnNpdGlvbkNhbGxiYWNrVGltZW91dClcclxuICAgICAgdGhpcy5fdHJhbnNpdGlvbkNhbGxiYWNrVGltZW91dCA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWVudSAmJiB0aGlzLl90cmFuc2l0aW9uQ2FsbGJhY2spIHtcclxuICAgICAgVFJBTlNfRVZFTlRTLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgbWVudS5yZW1vdmVFdmVudExpc3RlbmVyKGUsIHRoaXMuX3RyYW5zaXRpb25DYWxsYmFjaywgZmFsc2UpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3RyYW5zaXRpb25DYWxsYmFjaykge1xyXG4gICAgICB0aGlzLl90cmFuc2l0aW9uQ2FsbGJhY2sgPSBudWxsXHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tXHJcbiAgLy8gQmluZCBkZWxheWVkIHdpbmRvdyByZXNpemUgZXZlbnRcclxuICBfYmluZFdpbmRvd1Jlc2l6ZUV2ZW50KCkge1xyXG4gICAgdGhpcy5fdW5iaW5kV2luZG93UmVzaXplRXZlbnQoKVxyXG5cclxuICAgIGNvbnN0IGNiID0gKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5fcmVzaXplVGltZW91dCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNpemVUaW1lb3V0KVxyXG4gICAgICAgIHRoaXMuX3Jlc2l6ZVRpbWVvdXQgPSBudWxsXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fdHJpZ2dlckV2ZW50KCdyZXNpemUnKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Jlc2l6ZUNhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5fcmVzaXplVGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2l6ZVRpbWVvdXQpXHJcbiAgICAgIHRoaXMuX3Jlc2l6ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGNiLCB0aGlzLlJFU0laRV9ERUxBWSlcclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fcmVzaXplQ2FsbGJhY2ssIGZhbHNlKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLVxyXG4gIC8vIFVuYmluZCBkZWxheWVkIHdpbmRvdyByZXNpemUgZXZlbnRcclxuICBfdW5iaW5kV2luZG93UmVzaXplRXZlbnQoKSB7XHJcbiAgICBpZiAodGhpcy5fcmVzaXplVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVzaXplVGltZW91dClcclxuICAgICAgdGhpcy5fcmVzaXplVGltZW91dCA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcmVzaXplQ2FsbGJhY2spIHtcclxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3Jlc2l6ZUNhbGxiYWNrLCBmYWxzZSlcclxuICAgICAgdGhpcy5fcmVzaXplQ2FsbGJhY2sgPSBudWxsXHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgX2JpbmRNZW51TW91c2VFdmVudHMoKSB7XHJcbiAgICBpZiAodGhpcy5fbWVudU1vdXNlRW50ZXIgJiYgdGhpcy5fbWVudU1vdXNlTGVhdmUgJiYgdGhpcy5fd2luZG93VG91Y2hTdGFydCkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgbGF5b3V0TWVudSA9IHRoaXMuZ2V0TGF5b3V0TWVudSgpXHJcbiAgICBpZiAoIWxheW91dE1lbnUpIHJldHVybiB0aGlzLl91bmJpbmRNZW51TW91c2VFdmVudHMoKVxyXG5cclxuICAgIGlmICghdGhpcy5fbWVudU1vdXNlRW50ZXIpIHtcclxuICAgICAgdGhpcy5fbWVudU1vdXNlRW50ZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5pc1NtYWxsU2NyZWVuKCkgfHxcclxuICAgICAgICAgICF0aGlzLl9oYXNDbGFzcygnbGF5b3V0LW1lbnUtY29sbGFwc2VkJykgfHxcclxuICAgICAgICAgIHRoaXMuaXNPZmZjYW52YXMoKSB8fFxyXG4gICAgICAgICAgdGhpcy5faGFzQ2xhc3MoJ2xheW91dC10cmFuc2l0aW9uaW5nJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9zZXRNZW51SG92ZXJTdGF0ZShmYWxzZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXRNZW51SG92ZXJTdGF0ZSh0cnVlKVxyXG4gICAgICB9XHJcbiAgICAgIGxheW91dE1lbnUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMuX21lbnVNb3VzZUVudGVyLCBmYWxzZSlcclxuICAgICAgbGF5b3V0TWVudS5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5fbWVudU1vdXNlRW50ZXIsIGZhbHNlKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fbWVudU1vdXNlTGVhdmUpIHtcclxuICAgICAgdGhpcy5fbWVudU1vdXNlTGVhdmUgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2V0TWVudUhvdmVyU3RhdGUoZmFsc2UpXHJcbiAgICAgIH1cclxuICAgICAgbGF5b3V0TWVudS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5fbWVudU1vdXNlTGVhdmUsIGZhbHNlKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fd2luZG93VG91Y2hTdGFydCkge1xyXG4gICAgICB0aGlzLl93aW5kb3dUb3VjaFN0YXJ0ID0gZSA9PiB7XHJcbiAgICAgICAgaWYgKCFlIHx8ICFlLnRhcmdldCB8fCAhdGhpcy5fZmluZFBhcmVudChlLnRhcmdldCwgJy5sYXlvdXQtbWVudScpKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXRNZW51SG92ZXJTdGF0ZShmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLl93aW5kb3dUb3VjaFN0YXJ0LCB0cnVlKVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIF91bmJpbmRNZW51TW91c2VFdmVudHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuX21lbnVNb3VzZUVudGVyICYmICF0aGlzLl9tZW51TW91c2VMZWF2ZSAmJiAhdGhpcy5fd2luZG93VG91Y2hTdGFydCkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgbGF5b3V0TWVudSA9IHRoaXMuZ2V0TGF5b3V0TWVudSgpXHJcblxyXG4gICAgaWYgKHRoaXMuX21lbnVNb3VzZUVudGVyKSB7XHJcbiAgICAgIGlmIChsYXlvdXRNZW51KSB7XHJcbiAgICAgICAgbGF5b3V0TWVudS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5fbWVudU1vdXNlRW50ZXIsIGZhbHNlKVxyXG4gICAgICAgIGxheW91dE1lbnUucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX21lbnVNb3VzZUVudGVyLCBmYWxzZSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9tZW51TW91c2VFbnRlciA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fbWVudU1vdXNlTGVhdmUpIHtcclxuICAgICAgaWYgKGxheW91dE1lbnUpIHtcclxuICAgICAgICBsYXlvdXRNZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLl9tZW51TW91c2VMZWF2ZSwgZmFsc2UpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbWVudU1vdXNlTGVhdmUgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3dpbmRvd1RvdWNoU3RhcnQpIHtcclxuICAgICAgaWYgKGxheW91dE1lbnUpIHtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX3dpbmRvd1RvdWNoU3RhcnQsIHRydWUpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fd2luZG93VG91Y2hTdGFydCA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zZXRNZW51SG92ZXJTdGF0ZShmYWxzZSlcclxuICB9LFxyXG5cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gKiBNZXRob2RzXHJcblxyXG4gIHNjcm9sbFRvQWN0aXZlKGFuaW1hdGUgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5fc2Nyb2xsVG9BY3RpdmUoYW5pbWF0ZSlcclxuICB9LFxyXG5cclxuICBzd2lwZUluKGVsLCBjYWxsYmFjaykge1xyXG4gICAgdGhpcy5fc3dpcGVJbihlbCwgY2FsbGJhY2spXHJcbiAgfSxcclxuXHJcbiAgc3dpcGVPdXQoZWwsIGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl9zd2lwZU91dChlbCwgY2FsbGJhY2spXHJcbiAgfSxcclxuXHJcbiAgb3ZlcmxheVRhcChlbCwgY2FsbGJhY2spIHtcclxuICAgIHRoaXMuX292ZXJsYXlUYXAoZWwsIGNhbGxiYWNrKVxyXG4gIH0sXHJcblxyXG4gIHNjcm9sbFBhZ2VUbyh0bywgZHVyYXRpb24gPSA1MDApIHtcclxuICAgIC8vIHQgPSBjdXJyZW50IHRpbWVcclxuICAgIC8vIGIgPSBzdGFydCB2YWx1ZVxyXG4gICAgLy8gYyA9IGNoYW5nZSBpbiB2YWx1ZVxyXG4gICAgLy8gZCA9IGR1cmF0aW9uXHJcbiAgICBjb25zdCBlYXNlSW5PdXRRdWFkID0gKHQsIGIsIGMsIGQpID0+IHtcclxuICAgICAgdCAvPSBkIC8gMlxyXG4gICAgICBpZiAodCA8IDEpIHJldHVybiAoYyAvIDIpICogdCAqIHQgKyBiXHJcbiAgICAgIHQgLT0gMVxyXG4gICAgICByZXR1cm4gKC1jIC8gMikgKiAodCAqICh0IC0gMikgLSAxKSArIGJcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudFxyXG5cclxuICAgIGlmICh0eXBlb2YgdG8gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRvID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0bylcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdG8gIT09ICdudW1iZXInKSB7XHJcbiAgICAgIHRvID0gdG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgZWxlbWVudC5zY3JvbGxUb3BcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGFydCA9IGVsZW1lbnQuc2Nyb2xsVG9wXHJcbiAgICBjb25zdCBjaGFuZ2UgPSB0byAtIHN0YXJ0XHJcbiAgICBjb25zdCBzdGFydERhdGUgPSArbmV3IERhdGUoKVxyXG4gICAgLy8gY29uc3QgaW5jcmVtZW50ID0gMjBcclxuXHJcbiAgICBjb25zdCBhbmltYXRlU2Nyb2xsID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBjdXJyZW50RGF0ZSA9ICtuZXcgRGF0ZSgpXHJcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gY3VycmVudERhdGUgLSBzdGFydERhdGVcclxuICAgICAgY29uc3QgdmFsID0gZWFzZUluT3V0UXVhZChjdXJyZW50VGltZSwgc3RhcnQsIGNoYW5nZSwgZHVyYXRpb24pXHJcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdmFsXHJcbiAgICAgIGlmIChjdXJyZW50VGltZSA8IGR1cmF0aW9uKSB7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGVTY3JvbGwpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSB0b1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhbmltYXRlU2Nyb2xsKClcclxuICB9LFxyXG5cclxuICAvLyAtLS1cclxuICAvLyBDb2xsYXBzZSAvIGV4cGFuZCBsYXlvdXRcclxuICBzZXRDb2xsYXBzZWQoY29sbGFwc2VkID0gcmVxdWlyZWRQYXJhbSgnY29sbGFwc2VkJyksIGFuaW1hdGUgPSB0cnVlKSB7XHJcbiAgICBjb25zdCBsYXlvdXRNZW51ID0gdGhpcy5nZXRMYXlvdXRNZW51KClcclxuXHJcbiAgICBpZiAoIWxheW91dE1lbnUpIHJldHVyblxyXG5cclxuICAgIHRoaXMuX3VuYmluZExheW91dEFuaW1hdGlvbkVuZEV2ZW50KClcclxuXHJcbiAgICBpZiAoYW5pbWF0ZSAmJiB0aGlzLl9zdXBwb3J0c1RyYW5zaXRpb25FbmQoKSkge1xyXG4gICAgICB0aGlzLl9hZGRDbGFzcygnbGF5b3V0LXRyYW5zaXRpb25pbmcnKVxyXG4gICAgICBpZiAoY29sbGFwc2VkKSB0aGlzLl9zZXRNZW51SG92ZXJTdGF0ZShmYWxzZSlcclxuXHJcbiAgICAgIHRoaXMuX2JpbmRMYXlvdXRBbmltYXRpb25FbmRFdmVudChcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBDb2xsYXBzZSAvIEV4cGFuZFxyXG4gICAgICAgICAgdGhpcy5fc2V0Q29sbGFwc2VkKGNvbGxhcHNlZClcclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3JlbW92ZUNsYXNzKCdsYXlvdXQtdHJhbnNpdGlvbmluZycpXHJcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyV2luZG93RXZlbnQoJ3Jlc2l6ZScpXHJcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyRXZlbnQoJ3RvZ2dsZScpXHJcbiAgICAgICAgICB0aGlzLl9zZXRNZW51SG92ZXJTdGF0ZShmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2FkZENsYXNzKCdsYXlvdXQtbm8tdHJhbnNpdGlvbicpXHJcbiAgICAgIGlmIChjb2xsYXBzZWQpIHRoaXMuX3NldE1lbnVIb3ZlclN0YXRlKGZhbHNlKVxyXG5cclxuICAgICAgLy8gQ29sbGFwc2UgLyBFeHBhbmRcclxuICAgICAgdGhpcy5fc2V0Q29sbGFwc2VkKGNvbGxhcHNlZClcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3JlbW92ZUNsYXNzKCdsYXlvdXQtbm8tdHJhbnNpdGlvbicpXHJcbiAgICAgICAgdGhpcy5fdHJpZ2dlcldpbmRvd0V2ZW50KCdyZXNpemUnKVxyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJFdmVudCgndG9nZ2xlJylcclxuICAgICAgICB0aGlzLl9zZXRNZW51SG92ZXJTdGF0ZShmYWxzZSlcclxuICAgICAgfSwgMSlcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS1cclxuICAvLyBUb2dnbGUgbGF5b3V0XHJcbiAgdG9nZ2xlQ29sbGFwc2VkKGFuaW1hdGUgPSB0cnVlKSB7XHJcbiAgICB0aGlzLnNldENvbGxhcHNlZCghdGhpcy5pc0NvbGxhcHNlZCgpLCBhbmltYXRlKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLVxyXG4gIC8vIFNldCBsYXlvdXQgcG9zaXRpb25pbmdcclxuICBzZXRQb3NpdGlvbihmaXhlZCA9IHJlcXVpcmVkUGFyYW0oJ2ZpeGVkJyksIG9mZmNhbnZhcyA9IHJlcXVpcmVkUGFyYW0oJ29mZmNhbnZhcycpKSB7XHJcbiAgICB0aGlzLl9yZW1vdmVDbGFzcygnbGF5b3V0LW1lbnUtb2ZmY2FudmFzIGxheW91dC1tZW51LWZpeGVkIGxheW91dC1tZW51LWZpeGVkLW9mZmNhbnZhcycpXHJcblxyXG4gICAgaWYgKCFmaXhlZCAmJiBvZmZjYW52YXMpIHtcclxuICAgICAgdGhpcy5fYWRkQ2xhc3MoJ2xheW91dC1tZW51LW9mZmNhbnZhcycpXHJcbiAgICB9IGVsc2UgaWYgKGZpeGVkICYmICFvZmZjYW52YXMpIHtcclxuICAgICAgdGhpcy5fYWRkQ2xhc3MoJ2xheW91dC1tZW51LWZpeGVkJylcclxuICAgICAgdGhpcy5fcmVkcmF3TGF5b3V0TWVudSgpXHJcbiAgICB9IGVsc2UgaWYgKGZpeGVkICYmIG9mZmNhbnZhcykge1xyXG4gICAgICB0aGlzLl9hZGRDbGFzcygnbGF5b3V0LW1lbnUtZml4ZWQtb2ZmY2FudmFzJylcclxuICAgICAgdGhpcy5fcmVkcmF3TGF5b3V0TWVudSgpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKVxyXG4gIH0sXHJcblxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLyAqIEdldHRlcnNcclxuXHJcbiAgZ2V0TGF5b3V0TWVudSgpIHtcclxuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LW1lbnUnKVxyXG4gIH0sXHJcblxyXG4gIGdldE1lbnUoKSB7XHJcbiAgICBjb25zdCBsYXlvdXRNZW51ID0gdGhpcy5nZXRMYXlvdXRNZW51KClcclxuXHJcbiAgICBpZiAoIWxheW91dE1lbnUpIHJldHVybiBudWxsXHJcblxyXG4gICAgcmV0dXJuICF0aGlzLl9oYXNDbGFzcygnbWVudScsIGxheW91dE1lbnUpID8gbGF5b3V0TWVudS5xdWVyeVNlbGVjdG9yKCcubWVudScpIDogbGF5b3V0TWVudVxyXG4gIH0sXHJcblxyXG4gIGdldExheW91dE5hdmJhcigpIHtcclxuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LW5hdmJhcicpXHJcbiAgfSxcclxuXHJcbiAgZ2V0TGF5b3V0Rm9vdGVyKCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250ZW50LWZvb3RlcicpXHJcbiAgfSxcclxuXHJcbiAgZ2V0TGF5b3V0Q29udGFpbmVyKCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sYXlvdXQtcGFnZScpXHJcbiAgfSxcclxuXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vICogU2V0dGVyc1xyXG5cclxuICBzZXROYXZiYXJGaXhlZChmaXhlZCA9IHJlcXVpcmVkUGFyYW0oJ2ZpeGVkJykpIHtcclxuICAgIHRoaXNbZml4ZWQgPyAnX2FkZENsYXNzJyA6ICdfcmVtb3ZlQ2xhc3MnXSgnbGF5b3V0LW5hdmJhci1maXhlZCcpXHJcbiAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgfSxcclxuXHJcbiAgc2V0Rm9vdGVyRml4ZWQoZml4ZWQgPSByZXF1aXJlZFBhcmFtKCdmaXhlZCcpKSB7XHJcbiAgICB0aGlzW2ZpeGVkID8gJ19hZGRDbGFzcycgOiAnX3JlbW92ZUNsYXNzJ10oJ2xheW91dC1mb290ZXItZml4ZWQnKVxyXG4gICAgdGhpcy51cGRhdGUoKVxyXG4gIH0sXHJcblxyXG4gIHNldEZsaXBwZWQocmV2ZXJzZWQgPSByZXF1aXJlZFBhcmFtKCdyZXZlcnNlZCcpKSB7XHJcbiAgICB0aGlzW3JldmVyc2VkID8gJ19hZGRDbGFzcycgOiAnX3JlbW92ZUNsYXNzJ10oJ2xheW91dC1tZW51LWZsaXBwZWQnKVxyXG4gIH0sXHJcblxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLyAqIFVwZGF0ZVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICh0aGlzLmdldExheW91dE5hdmJhcigpICYmXHJcbiAgICAgICAgKCghdGhpcy5pc1NtYWxsU2NyZWVuKCkgJiYgdGhpcy5pc0xheW91dE5hdmJhckZ1bGwoKSAmJiB0aGlzLmlzRml4ZWQoKSkgfHwgdGhpcy5pc05hdmJhckZpeGVkKCkpKSB8fFxyXG4gICAgICAodGhpcy5nZXRMYXlvdXRGb290ZXIoKSAmJiB0aGlzLmlzRm9vdGVyRml4ZWQoKSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLl91cGRhdGVJbmxpbmVTdHlsZSh0aGlzLl9nZXROYXZiYXJIZWlnaHQoKSwgdGhpcy5fZ2V0Rm9vdGVySGVpZ2h0KCkpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fYmluZE1lbnVNb3VzZUV2ZW50cygpXHJcbiAgfSxcclxuXHJcbiAgc2V0QXV0b1VwZGF0ZShlbmFibGUgPSByZXF1aXJlZFBhcmFtKCdlbmFibGUnKSkge1xyXG4gICAgaWYgKGVuYWJsZSAmJiAhdGhpcy5fYXV0b1VwZGF0ZSkge1xyXG4gICAgICB0aGlzLm9uKCdyZXNpemUuSGVscGVyczphdXRvVXBkYXRlJywgKCkgPT4gdGhpcy51cGRhdGUoKSlcclxuICAgICAgdGhpcy5fYXV0b1VwZGF0ZSA9IHRydWVcclxuICAgIH0gZWxzZSBpZiAoIWVuYWJsZSAmJiB0aGlzLl9hdXRvVXBkYXRlKSB7XHJcbiAgICAgIHRoaXMub2ZmKCdyZXNpemUuSGVscGVyczphdXRvVXBkYXRlJylcclxuICAgICAgdGhpcy5fYXV0b1VwZGF0ZSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gVXBkYXRlIGN1c3RvbSBvcHRpb24gYmFzZWQgb24gZWxlbWVudFxyXG4gIHVwZGF0ZUN1c3RvbU9wdGlvbkNoZWNrKGVsKSB7XHJcbiAgICBpZiAoZWwuY2hlY2tlZCkge1xyXG4gICAgICAvLyBJZiBjdXN0b20gb3B0aW9uIGVsZW1lbnQgaXMgcmFkaW8sIHJlbW92ZSBjaGVja2VkIGZyb20gdGhlIHNpYmxpbmdzIChjbG9zZXN0IGAucm93YClcclxuICAgICAgaWYgKGVsLnR5cGUgPT09ICdyYWRpbycpIHtcclxuICAgICAgICBjb25zdCBjdXN0b21SYWRpb09wdGlvbkxpc3QgPSBbXS5zbGljZS5jYWxsKGVsLmNsb3Nlc3QoJy5yb3cnKS5xdWVyeVNlbGVjdG9yQWxsKCcuY3VzdG9tLW9wdGlvbicpKVxyXG4gICAgICAgIGN1c3RvbVJhZGlvT3B0aW9uTGlzdC5tYXAoZnVuY3Rpb24gKGN1c3RvbVJhZGlvT3B0aW9uRUwpIHtcclxuICAgICAgICAgIGN1c3RvbVJhZGlvT3B0aW9uRUwuY2xvc2VzdCgnLmN1c3RvbS1vcHRpb24nKS5jbGFzc0xpc3QucmVtb3ZlKCdjaGVja2VkJylcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIGVsLmNsb3Nlc3QoJy5jdXN0b20tb3B0aW9uJykuY2xhc3NMaXN0LmFkZCgnY2hlY2tlZCcpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbC5jbG9zZXN0KCcuY3VzdG9tLW9wdGlvbicpLmNsYXNzTGlzdC5yZW1vdmUoJ2NoZWNrZWQnKVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLyAqIFRlc3RzXHJcblxyXG4gIGlzUnRsKCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLmdldEF0dHJpYnV0ZSgnZGlyJykgPT09ICdydGwnIHx8XHJcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5nZXRBdHRyaWJ1dGUoJ2RpcicpID09PSAncnRsJ1xyXG4gICAgKVxyXG4gIH0sXHJcblxyXG4gIGlzTW9iaWxlRGV2aWNlKCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cub3JpZW50YXRpb24gIT09ICd1bmRlZmluZWQnIHx8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignSUVNb2JpbGUnKSAhPT0gLTFcclxuICB9LFxyXG5cclxuICBpc1NtYWxsU2NyZWVuKCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKSA8IHRoaXMuTEFZT1VUX0JSRUFLUE9JTlRcclxuICAgIClcclxuICB9LFxyXG5cclxuICBpc0xheW91dE5hdmJhckZ1bGwoKSB7XHJcbiAgICByZXR1cm4gISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LXdyYXBwZXIubGF5b3V0LW5hdmJhci1mdWxsJylcclxuICB9LFxyXG5cclxuICBpc0NvbGxhcHNlZCgpIHtcclxuICAgIGlmICh0aGlzLmlzU21hbGxTY3JlZW4oKSkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuX2hhc0NsYXNzKCdsYXlvdXQtbWVudS1leHBhbmRlZCcpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5faGFzQ2xhc3MoJ2xheW91dC1tZW51LWNvbGxhcHNlZCcpXHJcbiAgfSxcclxuXHJcbiAgaXNGaXhlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9oYXNDbGFzcygnbGF5b3V0LW1lbnUtZml4ZWQgbGF5b3V0LW1lbnUtZml4ZWQtb2ZmY2FudmFzJylcclxuICB9LFxyXG5cclxuICBpc09mZmNhbnZhcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9oYXNDbGFzcygnbGF5b3V0LW1lbnUtb2ZmY2FudmFzIGxheW91dC1tZW51LWZpeGVkLW9mZmNhbnZhcycpXHJcbiAgfSxcclxuXHJcbiAgaXNOYXZiYXJGaXhlZCgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuX2hhc0NsYXNzKCdsYXlvdXQtbmF2YmFyLWZpeGVkJykgfHwgKCF0aGlzLmlzU21hbGxTY3JlZW4oKSAmJiB0aGlzLmlzRml4ZWQoKSAmJiB0aGlzLmlzTGF5b3V0TmF2YmFyRnVsbCgpKVxyXG4gICAgKVxyXG4gIH0sXHJcblxyXG4gIGlzRm9vdGVyRml4ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faGFzQ2xhc3MoJ2xheW91dC1mb290ZXItZml4ZWQnKVxyXG4gIH0sXHJcblxyXG4gIGlzRmxpcHBlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9oYXNDbGFzcygnbGF5b3V0LW1lbnUtZmxpcHBlZCcpXHJcbiAgfSxcclxuXHJcbiAgaXNMaWdodFN0eWxlKCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2xpZ2h0LXN0eWxlJylcclxuICB9LFxyXG5cclxuICBpc0RhcmtTdHlsZSgpIHtcclxuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkYXJrLXN0eWxlJylcclxuICB9LFxyXG5cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gKiBFdmVudHNcclxuXHJcbiAgb24oZXZlbnQgPSByZXF1aXJlZFBhcmFtKCdldmVudCcpLCBjYWxsYmFjayA9IHJlcXVpcmVkUGFyYW0oJ2NhbGxiYWNrJykpIHtcclxuICAgIGNvbnN0IFtfZXZlbnRdID0gZXZlbnQuc3BsaXQoJy4nKVxyXG4gICAgbGV0IFssIC4uLm5hbWVzcGFjZV0gPSBldmVudC5zcGxpdCgnLicpXHJcbiAgICAvLyBsZXQgW19ldmVudCwgLi4ubmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KCcuJylcclxuICAgIG5hbWVzcGFjZSA9IG5hbWVzcGFjZS5qb2luKCcuJykgfHwgbnVsbFxyXG5cclxuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKHsgZXZlbnQ6IF9ldmVudCwgbmFtZXNwYWNlLCBjYWxsYmFjayB9KVxyXG4gIH0sXHJcblxyXG4gIG9mZihldmVudCA9IHJlcXVpcmVkUGFyYW0oJ2V2ZW50JykpIHtcclxuICAgIGNvbnN0IFtfZXZlbnRdID0gZXZlbnQuc3BsaXQoJy4nKVxyXG4gICAgbGV0IFssIC4uLm5hbWVzcGFjZV0gPSBldmVudC5zcGxpdCgnLicpXHJcbiAgICBuYW1lc3BhY2UgPSBuYW1lc3BhY2Uuam9pbignLicpIHx8IG51bGxcclxuXHJcbiAgICB0aGlzLl9saXN0ZW5lcnNcclxuICAgICAgLmZpbHRlcihsaXN0ZW5lciA9PiBsaXN0ZW5lci5ldmVudCA9PT0gX2V2ZW50ICYmIGxpc3RlbmVyLm5hbWVzcGFjZSA9PT0gbmFtZXNwYWNlKVxyXG4gICAgICAuZm9yRWFjaChsaXN0ZW5lciA9PiB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKSwgMSkpXHJcbiAgfSxcclxuXHJcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gIC8vICogTGlmZSBjeWNsZVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSByZXR1cm5cclxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZVxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgYHN0eWxlYCBlbGVtZW50XHJcbiAgICB0aGlzLl91cGRhdGVJbmxpbmVTdHlsZSgwKVxyXG5cclxuICAgIC8vIEJpbmQgd2luZG93IHJlc2l6ZSBldmVudFxyXG4gICAgdGhpcy5fYmluZFdpbmRvd1Jlc2l6ZUV2ZW50KClcclxuXHJcbiAgICAvLyBCaW5kIGluaXQgZXZlbnRcclxuICAgIHRoaXMub2ZmKCdpbml0Ll9IZWxwZXJzJylcclxuICAgIHRoaXMub24oJ2luaXQuX0hlbHBlcnMnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMub2ZmKCdyZXNpemUuX0hlbHBlcnM6cmVkcmF3TWVudScpXHJcbiAgICAgIHRoaXMub24oJ3Jlc2l6ZS5fSGVscGVyczpyZWRyYXdNZW51JywgKCkgPT4ge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcclxuICAgICAgICB0aGlzLmlzU21hbGxTY3JlZW4oKSAmJiAhdGhpcy5pc0NvbGxhcHNlZCgpICYmIHRoaXMuX3JlZHJhd0xheW91dE1lbnUoKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgLy8gRm9yY2UgcmVwYWludCBpbiBJRSAxMFxyXG4gICAgICBpZiAodHlwZW9mIGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PT0gJ251bWJlcicgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgMTEpIHtcclxuICAgICAgICB0aGlzLm9mZigncmVzaXplLl9IZWxwZXJzOmllMTBSZXBhaW50Qm9keScpXHJcbiAgICAgICAgdGhpcy5vbigncmVzaXplLl9IZWxwZXJzOmllMTBSZXBhaW50Qm9keScsICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmlzRml4ZWQoKSkgcmV0dXJuXHJcbiAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCB9ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgICAgIC8vIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLl90cmlnZ2VyRXZlbnQoJ2luaXQnKVxyXG4gIH0sXHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSByZXR1cm5cclxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gZmFsc2VcclxuXHJcbiAgICB0aGlzLl9yZW1vdmVDbGFzcygnbGF5b3V0LXRyYW5zaXRpb25pbmcnKVxyXG4gICAgdGhpcy5fcmVtb3ZlSW5saW5lU3R5bGUoKVxyXG4gICAgdGhpcy5fdW5iaW5kTGF5b3V0QW5pbWF0aW9uRW5kRXZlbnQoKVxyXG4gICAgdGhpcy5fdW5iaW5kV2luZG93UmVzaXplRXZlbnQoKVxyXG4gICAgdGhpcy5fdW5iaW5kTWVudU1vdXNlRXZlbnRzKClcclxuICAgIHRoaXMuc2V0QXV0b1VwZGF0ZShmYWxzZSlcclxuXHJcbiAgICB0aGlzLm9mZignaW5pdC5fSGVscGVycycpXHJcblxyXG4gICAgLy8gUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgZXhjZXB0IGBpbml0YFxyXG4gICAgdGhpcy5fbGlzdGVuZXJzXHJcbiAgICAgIC5maWx0ZXIobGlzdGVuZXIgPT4gbGlzdGVuZXIuZXZlbnQgIT09ICdpbml0JylcclxuICAgICAgLmZvckVhY2gobGlzdGVuZXIgPT4gdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lciksIDEpKVxyXG4gIH0sXHJcblxyXG4gIC8vIC0tLVxyXG4gIC8vIEluaXQgUGFzc3dvcmQgVG9nZ2xlXHJcbiAgaW5pdFBhc3N3b3JkVG9nZ2xlKCkge1xyXG4gICAgY29uc3QgdG9nZ2xlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5mb3JtLXBhc3N3b3JkLXRvZ2dsZSBpJylcclxuICAgIGlmICh0eXBlb2YgdG9nZ2xlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdG9nZ2xlciAhPT0gbnVsbCkge1xyXG4gICAgICB0b2dnbGVyLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XHJcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgIGNvbnN0IGZvcm1QYXNzd29yZFRvZ2dsZSA9IGVsLmNsb3Nlc3QoJy5mb3JtLXBhc3N3b3JkLXRvZ2dsZScpXHJcbiAgICAgICAgICBjb25zdCBmb3JtUGFzc3dvcmRUb2dnbGVJY29uID0gZm9ybVBhc3N3b3JkVG9nZ2xlLnF1ZXJ5U2VsZWN0b3IoJ2knKVxyXG4gICAgICAgICAgY29uc3QgZm9ybVBhc3N3b3JkVG9nZ2xlSW5wdXQgPSBmb3JtUGFzc3dvcmRUb2dnbGUucXVlcnlTZWxlY3RvcignaW5wdXQnKVxyXG5cclxuICAgICAgICAgIGlmIChmb3JtUGFzc3dvcmRUb2dnbGVJbnB1dC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ3RleHQnKSB7XHJcbiAgICAgICAgICAgIGZvcm1QYXNzd29yZFRvZ2dsZUlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdwYXNzd29yZCcpXHJcbiAgICAgICAgICAgIGZvcm1QYXNzd29yZFRvZ2dsZUljb24uY2xhc3NMaXN0LnJlcGxhY2UoJ2J4LXNob3cnLCAnYngtaGlkZScpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1QYXNzd29yZFRvZ2dsZUlucHV0LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAncGFzc3dvcmQnKSB7XHJcbiAgICAgICAgICAgIGZvcm1QYXNzd29yZFRvZ2dsZUlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0JylcclxuICAgICAgICAgICAgZm9ybVBhc3N3b3JkVG9nZ2xlSWNvbi5jbGFzc0xpc3QucmVwbGFjZSgnYngtaGlkZScsICdieC1zaG93JylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vLS1cclxuICAvLyBJbml0IGN1c3RvbSBvcHRpb24gY2hlY2tcclxuICBpbml0Q3VzdG9tT3B0aW9uQ2hlY2soKSB7XHJcbiAgICBjb25zdCBfdGhpcyA9IHRoaXNcclxuXHJcbiAgICBjb25zdCBjdXN0b3BPcHRpb25MaXN0ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3VzdG9tLW9wdGlvbiAuZm9ybS1jaGVjay1pbnB1dCcpKVxyXG4gICAgY3VzdG9wT3B0aW9uTGlzdC5tYXAoZnVuY3Rpb24gKGN1c3RvbU9wdGlvbkVMKSB7XHJcbiAgICAgIC8vIFVwZGF0ZSBjdXN0b20gb3B0aW9ucyBjaGVjayBvbiBwYWdlIGxvYWRcclxuICAgICAgX3RoaXMudXBkYXRlQ3VzdG9tT3B0aW9uQ2hlY2soY3VzdG9tT3B0aW9uRUwpXHJcblxyXG4gICAgICAvLyBVcGRhdGUgY3VzdG9tIG9wdGlvbnMgY2hlY2sgb24gY2xpY2tcclxuICAgICAgY3VzdG9tT3B0aW9uRUwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcclxuICAgICAgICBfdGhpcy51cGRhdGVDdXN0b21PcHRpb25DaGVjayhjdXN0b21PcHRpb25FTClcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfSxcclxuXHJcbiAgLy8gLS0tXHJcbiAgLy8gSW5pdCBTcGVlY2ggVG8gVGV4dFxyXG4gIGluaXRTcGVlY2hUb1RleHQoKSB7XHJcbiAgICBjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9IHdpbmRvdy5TcGVlY2hSZWNvZ25pdGlvbiB8fCB3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb25cclxuICAgIGNvbnN0IHNwZWVjaFRvVGV4dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zcGVlY2gtdG8tdGV4dCcpXHJcbiAgICBpZiAoU3BlZWNoUmVjb2duaXRpb24gIT09IHVuZGVmaW5lZCAmJiBTcGVlY2hSZWNvZ25pdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodHlwZW9mIHNwZWVjaFRvVGV4dCAhPT0gJ3VuZGVmaW5lZCcgJiYgc3BlZWNoVG9UZXh0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgcmVjb2duaXRpb24gPSBuZXcgU3BlZWNoUmVjb2duaXRpb24oKVxyXG4gICAgICAgIGNvbnN0IHRvZ2dsZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3BlZWNoLXRvLXRleHQgaScpXHJcbiAgICAgICAgdG9nZ2xlci5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgICAgIGxldCBsaXN0ZW5pbmcgPSBmYWxzZVxyXG4gICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGVsLmNsb3Nlc3QoJy5pbnB1dC1ncm91cCcpLnF1ZXJ5U2VsZWN0b3IoJy5mb3JtLWNvbnRyb2wnKS5mb2N1cygpXHJcbiAgICAgICAgICAgIHJlY29nbml0aW9uLm9uc3BlZWNoc3RhcnQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGlzdGVuaW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChsaXN0ZW5pbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgcmVjb2duaXRpb24uc3RhcnQoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlY29nbml0aW9uLm9uZXJyb3IgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGlzdGVuaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZWNvZ25pdGlvbi5vbnJlc3VsdCA9IGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgICBlbC5jbG9zZXN0KCcuaW5wdXQtZ3JvdXAnKS5xdWVyeVNlbGVjdG9yKCcuZm9ybS1jb250cm9sJykudmFsdWUgPSBldmVudC5yZXN1bHRzWzBdWzBdLnRyYW5zY3JpcHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZWNvZ25pdGlvbi5vbnNwZWVjaGVuZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICBsaXN0ZW5pbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgIHJlY29nbml0aW9uLnN0b3AoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvLyAtLS1cclxuICAvLyBJbml0IE5hdmJhciBEcm9wZG93biAoaS5lIG5vdGlmaWNhdGlvbikgUGVyZmVjdFNjcm9sbGJhclxyXG4gIGluaXROYXZiYXJEcm9wZG93blNjcm9sbGJhcigpIHtcclxuICAgIGNvbnN0IHNjcm9sbGJhckNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uYXZiYXItZHJvcGRvd24gLnNjcm9sbGFibGUtY29udGFpbmVyJylcclxuICAgIGNvbnN0IHsgUGVyZmVjdFNjcm9sbGJhciB9ID0gd2luZG93XHJcblxyXG4gICAgaWYgKFBlcmZlY3RTY3JvbGxiYXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodHlwZW9mIHNjcm9sbGJhckNvbnRhaW5lciAhPT0gJ3VuZGVmaW5lZCcgJiYgc2Nyb2xsYmFyQ29udGFpbmVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgc2Nyb2xsYmFyQ29udGFpbmVyLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ld1xyXG4gICAgICAgICAgbmV3IFBlcmZlY3RTY3JvbGxiYXIoZWwsIHtcclxuICAgICAgICAgICAgd2hlZWxQcm9wYWdhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHN1cHByZXNzU2Nyb2xsWDogdHJ1ZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLy8gQWpheCBDYWxsIFByb21pc2VcclxuICBhamF4Q2FsbCh1cmwpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXHJcbiAgICAgIHJlcS5vcGVuKCdHRVQnLCB1cmwpXHJcbiAgICAgIHJlcS5vbmxvYWQgPSAoKSA9PiAocmVxLnN0YXR1cyA9PT0gMjAwID8gcmVzb2x2ZShyZXEucmVzcG9uc2UpIDogcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0KSkpXHJcbiAgICAgIHJlcS5vbmVycm9yID0gZSA9PiByZWplY3QoRXJyb3IoYE5ldHdvcmsgRXJyb3I6ICR7ZX1gKSlcclxuICAgICAgcmVxLnNlbmQoKVxyXG4gICAgfSlcclxuICB9LFxyXG5cclxuICAvLyAtLS1cclxuICAvLyBTaWRlYmFyVG9nZ2xlIChVc2VkIGluIEFwcHMpXHJcbiAgaW5pdFNpZGViYXJUb2dnbGUoKSB7XHJcbiAgICBjb25zdCBzaWRlYmFyVG9nZ2xlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWJzLXRvZ2dsZT1cInNpZGViYXJcIl0nKVxyXG5cclxuICAgIHNpZGViYXJUb2dnbGVyLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0JylcclxuICAgICAgICBjb25zdCBvdmVybGF5ID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLW92ZXJsYXknKVxyXG4gICAgICAgIGNvbnN0IGFwcE92ZXJsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXBwLW92ZXJsYXknKVxyXG4gICAgICAgIGNvbnN0IHRhcmdldEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0YXJnZXQpXHJcblxyXG4gICAgICAgIHRhcmdldEVsLmZvckVhY2godGVsID0+IHtcclxuICAgICAgICAgIHRlbC5jbGFzc0xpc3QudG9nZ2xlKCdzaG93JylcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIG92ZXJsYXkgIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAgICAgICAgIG92ZXJsYXkgIT09IG51bGwgJiZcclxuICAgICAgICAgICAgb3ZlcmxheSAhPT0gZmFsc2UgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGFwcE92ZXJsYXkgIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKHRlbC5jbGFzc0xpc3QuY29udGFpbnMoJ3Nob3cnKSkge1xyXG4gICAgICAgICAgICAgIGFwcE92ZXJsYXlbMF0uY2xhc3NMaXN0LmFkZCgnc2hvdycpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgYXBwT3ZlcmxheVswXS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhcHBPdmVybGF5WzBdLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XHJcbiAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKVxyXG4gICAgICAgICAgICAgIHRlbC5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JylcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuLy8gKiBJbml0aWFsaXphdGlvblxyXG5cclxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgSGVscGVycy5pbml0KClcclxuXHJcbiAgaWYgKEhlbHBlcnMuaXNNb2JpbGVEZXZpY2UoKSAmJiB3aW5kb3cuY2hyb21lKSB7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbGF5b3V0LW1lbnUtMTAwdmgnKVxyXG4gIH1cclxuXHJcbiAgLy8gVXBkYXRlIGxheW91dCBhZnRlciBwYWdlIGxvYWRcclxuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykgSGVscGVycy51cGRhdGUoKVxyXG4gIGVsc2VcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiBvbkNvbnRlbnRMb2FkZWQoKSB7XHJcbiAgICAgIEhlbHBlcnMudXBkYXRlKClcclxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIG9uQ29udGVudExvYWRlZClcclxuICAgIH0pXHJcbn1cclxuXHJcbi8vIC0tLVxyXG5leHBvcnQgeyBIZWxwZXJzIH1cclxuIl0sIm5hbWVzIjpbIlRSQU5TX0VWRU5UUyIsIlRSQU5TX1BST1BFUlRJRVMiLCJJTkxJTkVfU1RZTEVTIiwicmVxdWlyZWRQYXJhbSIsIm5hbWUiLCJFcnJvciIsIkhlbHBlcnMiLCJST09UX0VMIiwid2luZG93IiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJMQVlPVVRfQlJFQUtQT0lOVCIsIlJFU0laRV9ERUxBWSIsIm1lbnVQc1Njcm9sbCIsIm1haW5NZW51IiwiX2N1clN0eWxlIiwiX3N0eWxlRWwiLCJfcmVzaXplVGltZW91dCIsIl9yZXNpemVDYWxsYmFjayIsIl90cmFuc2l0aW9uQ2FsbGJhY2siLCJfdHJhbnNpdGlvbkNhbGxiYWNrVGltZW91dCIsIl9saXN0ZW5lcnMiLCJfaW5pdGlhbGl6ZWQiLCJfYXV0b1VwZGF0ZSIsIl9sYXN0V2luZG93SGVpZ2h0IiwiX3Njcm9sbFRvQWN0aXZlIiwiYW5pbWF0ZSIsImR1cmF0aW9uIiwibGF5b3V0TWVudSIsImdldExheW91dE1lbnUiLCJhY3RpdmVFbCIsInF1ZXJ5U2VsZWN0b3IiLCJlYXNlSW5PdXRRdWFkIiwidCIsImIiLCJjIiwiZCIsImVsZW1lbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3AiLCJzY3JvbGxUb3AiLCJwYXJzZUludCIsImNsaWVudEhlaWdodCIsInN0YXJ0IiwiY2hhbmdlIiwic3RhcnREYXRlIiwiRGF0ZSIsImFuaW1hdGVTY3JvbGwiLCJjdXJyZW50RGF0ZSIsImN1cnJlbnRUaW1lIiwidmFsIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiX3N3aXBlSW4iLCJ0YXJnZXRFbCIsImNhbGxiYWNrIiwiSGFtbWVyIiwic3dpcGVJbkVsZW1lbnQiLCJoYW1tZXJJbnN0YW5jZSIsIm9uIiwiX3N3aXBlT3V0Iiwic2V0VGltZW91dCIsInN3aXBlT3V0RWxlbWVudCIsImdldCIsInNldCIsImRpcmVjdGlvbiIsIkRJUkVDVElPTl9BTEwiLCJ0aHJlc2hvbGQiLCJfb3ZlcmxheVRhcCIsInN3aXBlT3V0T3ZlcmxheUVsZW1lbnQiLCJfYWRkQ2xhc3MiLCJjbHMiLCJlbCIsImxlbmd0aCIsInVuZGVmaW5lZCIsImZvckVhY2giLCJlIiwic3BsaXQiLCJjbGFzc0xpc3QiLCJhZGQiLCJfcmVtb3ZlQ2xhc3MiLCJyZW1vdmUiLCJfdG9nZ2xlQ2xhc3MiLCJjbHMxIiwiY2xzMiIsImNvbnRhaW5zIiwicmVwbGFjZSIsIl9oYXNDbGFzcyIsInJlc3VsdCIsIl9maW5kUGFyZW50IiwidGFnTmFtZSIsInRvVXBwZXJDYXNlIiwicGFyZW50Tm9kZSIsIl90cmlnZ2VyV2luZG93RXZlbnQiLCJjcmVhdGVFdmVudCIsImV2ZW50IiwiRXZlbnQiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZmlyZUV2ZW50IiwiY3JlYXRlRXZlbnRPYmplY3QiLCJfdHJpZ2dlckV2ZW50IiwiZmlsdGVyIiwibGlzdGVuZXIiLCJjYWxsIiwiX3VwZGF0ZUlubGluZVN0eWxlIiwibmF2YmFySGVpZ2h0IiwiZm9vdGVySGVpZ2h0IiwiY3JlYXRlRWxlbWVudCIsInR5cGUiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJuZXdTdHlsZSIsInRleHRDb250ZW50IiwiX3JlbW92ZUlubGluZVN0eWxlIiwicmVtb3ZlQ2hpbGQiLCJfcmVkcmF3TGF5b3V0TWVudSIsImlubmVyIiwicGFnZVNjcm9sbFRvcCIsInN0eWxlIiwiZGlzcGxheSIsIl9zdXBwb3J0c1RyYW5zaXRpb25FbmQiLCJRVW5pdCIsImJvZHkiLCJldm50IiwiX2dldE5hdmJhckhlaWdodCIsImxheW91dE5hdmJhciIsImdldExheW91dE5hdmJhciIsImlzU21hbGxTY3JlZW4iLCJoZWlnaHQiLCJjbG9uZWRFbCIsImNsb25lTm9kZSIsImlkIiwidmlzaWJpbGl0eSIsInBvc2l0aW9uIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpbnNlcnRCZWZvcmUiLCJfZ2V0Rm9vdGVySGVpZ2h0IiwibGF5b3V0Rm9vdGVyIiwiZ2V0TGF5b3V0Rm9vdGVyIiwiX2dldEFuaW1hdGlvbkR1cmF0aW9uIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInRyYW5zaXRpb25EdXJhdGlvbiIsInBhcnNlRmxvYXQiLCJpbmRleE9mIiwiX3NldE1lbnVIb3ZlclN0YXRlIiwiaG92ZXJlZCIsIl9zZXRDb2xsYXBzZWQiLCJjb2xsYXBzZWQiLCJfYmluZExheW91dEFuaW1hdGlvbkVuZEV2ZW50IiwibW9kaWZpZXIiLCJjYiIsIm1lbnUiLCJnZXRNZW51IiwidGFyZ2V0IiwiX3VuYmluZExheW91dEFuaW1hdGlvbkVuZEV2ZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsZWFyVGltZW91dCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfYmluZFdpbmRvd1Jlc2l6ZUV2ZW50IiwiX3VuYmluZFdpbmRvd1Jlc2l6ZUV2ZW50IiwiX2JpbmRNZW51TW91c2VFdmVudHMiLCJfbWVudU1vdXNlRW50ZXIiLCJfbWVudU1vdXNlTGVhdmUiLCJfd2luZG93VG91Y2hTdGFydCIsIl91bmJpbmRNZW51TW91c2VFdmVudHMiLCJpc09mZmNhbnZhcyIsInNjcm9sbFRvQWN0aXZlIiwic3dpcGVJbiIsInN3aXBlT3V0Iiwib3ZlcmxheVRhcCIsInNjcm9sbFBhZ2VUbyIsInRvIiwic2Nyb2xsaW5nRWxlbWVudCIsInNldENvbGxhcHNlZCIsInRvZ2dsZUNvbGxhcHNlZCIsImlzQ29sbGFwc2VkIiwic2V0UG9zaXRpb24iLCJmaXhlZCIsIm9mZmNhbnZhcyIsInVwZGF0ZSIsImdldExheW91dENvbnRhaW5lciIsInNldE5hdmJhckZpeGVkIiwic2V0Rm9vdGVyRml4ZWQiLCJzZXRGbGlwcGVkIiwicmV2ZXJzZWQiLCJpc0xheW91dE5hdmJhckZ1bGwiLCJpc0ZpeGVkIiwiaXNOYXZiYXJGaXhlZCIsImlzRm9vdGVyRml4ZWQiLCJzZXRBdXRvVXBkYXRlIiwiZW5hYmxlIiwib2ZmIiwidXBkYXRlQ3VzdG9tT3B0aW9uQ2hlY2siLCJjaGVja2VkIiwiY3VzdG9tUmFkaW9PcHRpb25MaXN0IiwiY2xvc2VzdCIsIm1hcCIsImN1c3RvbVJhZGlvT3B0aW9uRUwiLCJpc1J0bCIsImdldEF0dHJpYnV0ZSIsImlzTW9iaWxlRGV2aWNlIiwib3JpZW50YXRpb24iLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJpbm5lcldpZHRoIiwiY2xpZW50V2lkdGgiLCJpc0ZsaXBwZWQiLCJpc0xpZ2h0U3R5bGUiLCJpc0RhcmtTdHlsZSIsIl9ldmVudCIsIm5hbWVzcGFjZSIsImpvaW4iLCJwdXNoIiwic3BsaWNlIiwiaW5pdCIsImRvY3VtZW50TW9kZSIsImRlc3Ryb3kiLCJpbml0UGFzc3dvcmRUb2dnbGUiLCJ0b2dnbGVyIiwicHJldmVudERlZmF1bHQiLCJmb3JtUGFzc3dvcmRUb2dnbGUiLCJmb3JtUGFzc3dvcmRUb2dnbGVJY29uIiwiZm9ybVBhc3N3b3JkVG9nZ2xlSW5wdXQiLCJzZXRBdHRyaWJ1dGUiLCJpbml0Q3VzdG9tT3B0aW9uQ2hlY2siLCJfdGhpcyIsImN1c3RvcE9wdGlvbkxpc3QiLCJjdXN0b21PcHRpb25FTCIsImluaXRTcGVlY2hUb1RleHQiLCJTcGVlY2hSZWNvZ25pdGlvbiIsIndlYmtpdFNwZWVjaFJlY29nbml0aW9uIiwic3BlZWNoVG9UZXh0IiwicmVjb2duaXRpb24iLCJsaXN0ZW5pbmciLCJmb2N1cyIsIm9uc3BlZWNoc3RhcnQiLCJvbmVycm9yIiwib25yZXN1bHQiLCJ2YWx1ZSIsInJlc3VsdHMiLCJ0cmFuc2NyaXB0Iiwib25zcGVlY2hlbmQiLCJzdG9wIiwiaW5pdE5hdmJhckRyb3Bkb3duU2Nyb2xsYmFyIiwic2Nyb2xsYmFyQ29udGFpbmVyIiwiUGVyZmVjdFNjcm9sbGJhciIsIndoZWVsUHJvcGFnYXRpb24iLCJzdXBwcmVzc1Njcm9sbFgiLCJhamF4Q2FsbCIsInVybCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVxIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25sb2FkIiwic3RhdHVzIiwicmVzcG9uc2UiLCJzdGF0dXNUZXh0Iiwic2VuZCIsImluaXRTaWRlYmFyVG9nZ2xlIiwic2lkZWJhclRvZ2dsZXIiLCJvdmVybGF5IiwiYXBwT3ZlcmxheSIsInRlbCIsInRvZ2dsZSIsImN1cnJlbnRUYXJnZXQiLCJjaHJvbWUiLCJyZWFkeVN0YXRlIiwib25Db250ZW50TG9hZGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./js/helpers.js\n"); - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The require scope -/******/ var __webpack_require__ = {}; -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ !function() { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = function(exports, definition) { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ !function() { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ }(); -/******/ -/************************************************************************/ -/******/ -/******/ // 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__["./js/helpers.js"](0, __webpack_exports__, __webpack_require__); -/******/ -/******/ return __webpack_exports__; -/******/ })() -; -}); \ No newline at end of file +// Constants +const TRANS_EVENTS = ['transitionend', 'webkitTransitionEnd', 'oTransitionEnd'] +const TRANS_PROPERTIES = ['transition', 'MozTransition', 'webkitTransition', 'WebkitTransition', 'OTransition'] +const INLINE_STYLES = ` +.layout-menu-fixed .layout-navbar-full .layout-menu, +.layout-menu-fixed-offcanvas .layout-navbar-full .layout-menu { + top: {navbarHeight}px !important; +} +.layout-page { + padding-top: {navbarHeight}px !important; +} +.content-wrapper { + padding-bottom: {footerHeight}px !important; +}` + +// Guard +function requiredParam(name) { + throw new Error(`Parameter required${name ? `: \`${name}\`` : ''}`) +} + +const Helpers = { + // Root Element + ROOT_EL: typeof window !== 'undefined' ? document.documentElement : null, + + // Large screens breakpoint + LAYOUT_BREAKPOINT: 1200, + + // Resize delay in milliseconds + RESIZE_DELAY: 200, + + menuPsScroll: null, + + mainMenu: null, + + // Internal variables + _curStyle: null, + _styleEl: null, + _resizeTimeout: null, + _resizeCallback: null, + _transitionCallback: null, + _transitionCallbackTimeout: null, + _listeners: [], + _initialized: false, + _autoUpdate: false, + _lastWindowHeight: 0, + + // ******************************************************************************* + // * Utilities + + // --- + // Scroll To Active Menu Item + _scrollToActive(animate = false, duration = 500) { + const layoutMenu = this.getLayoutMenu() + + if (!layoutMenu) return + + let activeEl = layoutMenu.querySelector('li.menu-item.active:not(.open)') + + if (activeEl) { + // t = current time + // b = start value + // c = change in value + // d = duration + const easeInOutQuad = (t, b, c, d) => { + t /= d / 2 + if (t < 1) return (c / 2) * t * t + b + t -= 1 + return (-c / 2) * (t * (t - 2) - 1) + b + } + + const element = this.getLayoutMenu().querySelector('.menu-inner') + + if (typeof activeEl === 'string') { + activeEl = document.querySelector(activeEl) + } + if (typeof activeEl !== 'number') { + activeEl = activeEl.getBoundingClientRect().top + element.scrollTop + } + + // If active element's top position is less than 2/3 (66%) of menu height than do not scroll + if (activeEl < parseInt((element.clientHeight * 2) / 3, 10)) return + + const start = element.scrollTop + const change = activeEl - start - parseInt(element.clientHeight / 2, 10) + const startDate = +new Date() + + if (animate === true) { + const animateScroll = () => { + const currentDate = +new Date() + const currentTime = currentDate - startDate + const val = easeInOutQuad(currentTime, start, change, duration) + element.scrollTop = val + if (currentTime < duration) { + requestAnimationFrame(animateScroll) + } else { + element.scrollTop = change + } + } + animateScroll() + } else { + element.scrollTop = change + } + } + }, + + // --- + // Swipe In Gesture + _swipeIn(targetEl, callback) { + const { Hammer } = window + if (typeof Hammer !== 'undefined' && typeof targetEl === 'string') { + // Swipe menu gesture + const swipeInElement = document.querySelector(targetEl) + + if (swipeInElement) { + const hammerInstance = new Hammer(swipeInElement) + + hammerInstance.on('panright', callback) + } + } + }, + + // --- + // Swipe Out Gesture + _swipeOut(targetEl, callback) { + const { Hammer } = window + if (typeof Hammer !== 'undefined' && typeof targetEl === 'string') { + setTimeout(() => { + // Swipe menu gesture + const swipeOutElement = document.querySelector(targetEl) + + if (swipeOutElement) { + const hammerInstance = new Hammer(swipeOutElement) + + hammerInstance.get('pan').set({ direction: Hammer.DIRECTION_ALL, threshold: 250 }) + hammerInstance.on('panleft', callback) + } + }, 500) + } + }, + + // --- + // Swipe Out On Overlay Tap + _overlayTap(targetEl, callback) { + const { Hammer } = window + + if (typeof Hammer !== 'undefined' && typeof targetEl === 'string') { + // Swipe out overlay element + const swipeOutOverlayElement = document.querySelector(targetEl) + + if (swipeOutOverlayElement) { + const hammerInstance = new Hammer(swipeOutOverlayElement) + + hammerInstance.on('tap', callback) + } + } + }, + + // --- + // Add classes + _addClass(cls, el = this.ROOT_EL) { + if (el.length !== undefined) { + // Add classes to multiple elements + el.forEach(e => { + cls.split(' ').forEach(c => e.classList.add(c)) + }) + } else { + // Add classes to single element + cls.split(' ').forEach(c => el.classList.add(c)) + } + }, + + // --- + // Remove classes + _removeClass(cls, el = this.ROOT_EL) { + if (el.length !== undefined) { + // Remove classes to multiple elements + el.forEach(e => { + cls.split(' ').forEach(c => e.classList.remove(c)) + }) + } else { + // Remove classes to single element + cls.split(' ').forEach(c => el.classList.remove(c)) + } + }, + + // Toggle classes + _toggleClass(el = this.ROOT_EL, cls1, cls2) { + if (el.classList.contains(cls1)) { + el.classList.replace(cls1, cls2) + } else { + el.classList.replace(cls2, cls1) + } + }, + + // --- + // Has class + _hasClass(cls, el = this.ROOT_EL) { + let result = false + + cls.split(' ').forEach(c => { + if (el.classList.contains(c)) result = true + }) + + return result + }, + + _findParent(el, cls) { + if ((el && el.tagName.toUpperCase() === 'BODY') || el.tagName.toUpperCase() === 'HTML') return null + el = el.parentNode + while (el && el.tagName.toUpperCase() !== 'BODY' && !el.classList.contains(cls)) { + el = el.parentNode + } + el = el && el.tagName.toUpperCase() !== 'BODY' ? el : null + return el + }, + + // --- + // Trigger window event + _triggerWindowEvent(name) { + if (typeof window === 'undefined') return + + if (document.createEvent) { + let event + + if (typeof Event === 'function') { + event = new Event(name) + } else { + event = document.createEvent('Event') + event.initEvent(name, false, true) + } + + window.dispatchEvent(event) + } else { + window.fireEvent(`on${name}`, document.createEventObject()) + } + }, + + // --- + // Trigger event + _triggerEvent(name) { + this._triggerWindowEvent(`layout${name}`) + + this._listeners.filter(listener => listener.event === name).forEach(listener => listener.callback.call(null)) + }, + + // --- + // Update style + _updateInlineStyle(navbarHeight = 0, footerHeight = 0) { + if (!this._styleEl) { + this._styleEl = document.createElement('style') + this._styleEl.type = 'text/css' + document.head.appendChild(this._styleEl) + } + + const newStyle = INLINE_STYLES.replace(/\{navbarHeight\}/gi, navbarHeight).replace( + /\{footerHeight\}/gi, + footerHeight + ) + + if (this._curStyle !== newStyle) { + this._curStyle = newStyle + this._styleEl.textContent = newStyle + } + }, + + // --- + // Remove style + _removeInlineStyle() { + if (this._styleEl) document.head.removeChild(this._styleEl) + this._styleEl = null + this._curStyle = null + }, + + // --- + // Redraw layout menu (Safari bugfix) + _redrawLayoutMenu() { + const layoutMenu = this.getLayoutMenu() + + if (layoutMenu && layoutMenu.querySelector('.menu')) { + const inner = layoutMenu.querySelector('.menu-inner') + const { scrollTop } = inner + const pageScrollTop = document.documentElement.scrollTop + + layoutMenu.style.display = 'none' + // layoutMenu.offsetHeight + layoutMenu.style.display = '' + inner.scrollTop = scrollTop + document.documentElement.scrollTop = pageScrollTop + + return true + } + + return false + }, + + // --- + // Check for transition support + _supportsTransitionEnd() { + if (window.QUnit) return false + + const el = document.body || document.documentElement + + if (!el) return false + + let result = false + TRANS_PROPERTIES.forEach(evnt => { + if (typeof el.style[evnt] !== 'undefined') result = true + }) + + return result + }, + + // --- + // Calculate current navbar height + _getNavbarHeight() { + const layoutNavbar = this.getLayoutNavbar() + + if (!layoutNavbar) return 0 + if (!this.isSmallScreen()) return layoutNavbar.getBoundingClientRect().height + + // Needs some logic to get navbar height on small screens + + const clonedEl = layoutNavbar.cloneNode(true) + clonedEl.id = null + clonedEl.style.visibility = 'hidden' + clonedEl.style.position = 'absolute' + + Array.prototype.slice.call(clonedEl.querySelectorAll('.collapse.show')).forEach(el => this._removeClass('show', el)) + + layoutNavbar.parentNode.insertBefore(clonedEl, layoutNavbar) + + const navbarHeight = clonedEl.getBoundingClientRect().height + + clonedEl.parentNode.removeChild(clonedEl) + + return navbarHeight + }, + + // --- + // Get current footer height + _getFooterHeight() { + const layoutFooter = this.getLayoutFooter() + + if (!layoutFooter) return 0 + + return layoutFooter.getBoundingClientRect().height + }, + + // --- + // Get animation duration of element + _getAnimationDuration(el) { + const duration = window.getComputedStyle(el).transitionDuration + + return parseFloat(duration) * (duration.indexOf('ms') !== -1 ? 1 : 1000) + }, + + // --- + // Set menu hover state + _setMenuHoverState(hovered) { + this[hovered ? '_addClass' : '_removeClass']('layout-menu-hover') + }, + + // --- + // Toggle collapsed + _setCollapsed(collapsed) { + if (this.isSmallScreen()) { + if (collapsed) { + this._removeClass('layout-menu-expanded') + } else { + setTimeout( + () => { + this._addClass('layout-menu-expanded') + }, + this._redrawLayoutMenu() ? 5 : 0 + ) + } + } else { + this[collapsed ? '_addClass' : '_removeClass']('layout-menu-collapsed') + } + }, + + // --- + // Add layout sivenav toggle animationEnd event + _bindLayoutAnimationEndEvent(modifier, cb) { + const menu = this.getMenu() + const duration = menu ? this._getAnimationDuration(menu) + 50 : 0 + + if (!duration) { + modifier.call(this) + cb.call(this) + return + } + + this._transitionCallback = e => { + if (e.target !== menu) return + this._unbindLayoutAnimationEndEvent() + cb.call(this) + } + + TRANS_EVENTS.forEach(e => { + menu.addEventListener(e, this._transitionCallback, false) + }) + + modifier.call(this) + + this._transitionCallbackTimeout = setTimeout(() => { + this._transitionCallback.call(this, { target: menu }) + }, duration) + }, + + // --- + // Remove layout sivenav toggle animationEnd event + _unbindLayoutAnimationEndEvent() { + const menu = this.getMenu() + + if (this._transitionCallbackTimeout) { + clearTimeout(this._transitionCallbackTimeout) + this._transitionCallbackTimeout = null + } + + if (menu && this._transitionCallback) { + TRANS_EVENTS.forEach(e => { + menu.removeEventListener(e, this._transitionCallback, false) + }) + } + + if (this._transitionCallback) { + this._transitionCallback = null + } + }, + + // --- + // Bind delayed window resize event + _bindWindowResizeEvent() { + this._unbindWindowResizeEvent() + + const cb = () => { + if (this._resizeTimeout) { + clearTimeout(this._resizeTimeout) + this._resizeTimeout = null + } + this._triggerEvent('resize') + } + + this._resizeCallback = () => { + if (this._resizeTimeout) clearTimeout(this._resizeTimeout) + this._resizeTimeout = setTimeout(cb, this.RESIZE_DELAY) + } + + window.addEventListener('resize', this._resizeCallback, false) + }, + + // --- + // Unbind delayed window resize event + _unbindWindowResizeEvent() { + if (this._resizeTimeout) { + clearTimeout(this._resizeTimeout) + this._resizeTimeout = null + } + + if (this._resizeCallback) { + window.removeEventListener('resize', this._resizeCallback, false) + this._resizeCallback = null + } + }, + + _bindMenuMouseEvents() { + if (this._menuMouseEnter && this._menuMouseLeave && this._windowTouchStart) return + + const layoutMenu = this.getLayoutMenu() + if (!layoutMenu) return this._unbindMenuMouseEvents() + + if (!this._menuMouseEnter) { + this._menuMouseEnter = () => { + if ( + this.isSmallScreen() || + !this._hasClass('layout-menu-collapsed') || + this.isOffcanvas() || + this._hasClass('layout-transitioning') + ) { + return this._setMenuHoverState(false) + } + + return this._setMenuHoverState(true) + } + layoutMenu.addEventListener('mouseenter', this._menuMouseEnter, false) + layoutMenu.addEventListener('touchstart', this._menuMouseEnter, false) + } + + if (!this._menuMouseLeave) { + this._menuMouseLeave = () => { + this._setMenuHoverState(false) + } + layoutMenu.addEventListener('mouseleave', this._menuMouseLeave, false) + } + + if (!this._windowTouchStart) { + this._windowTouchStart = e => { + if (!e || !e.target || !this._findParent(e.target, '.layout-menu')) { + this._setMenuHoverState(false) + } + } + window.addEventListener('touchstart', this._windowTouchStart, true) + } + }, + + _unbindMenuMouseEvents() { + if (!this._menuMouseEnter && !this._menuMouseLeave && !this._windowTouchStart) return + + const layoutMenu = this.getLayoutMenu() + + if (this._menuMouseEnter) { + if (layoutMenu) { + layoutMenu.removeEventListener('mouseenter', this._menuMouseEnter, false) + layoutMenu.removeEventListener('touchstart', this._menuMouseEnter, false) + } + this._menuMouseEnter = null + } + + if (this._menuMouseLeave) { + if (layoutMenu) { + layoutMenu.removeEventListener('mouseleave', this._menuMouseLeave, false) + } + this._menuMouseLeave = null + } + + if (this._windowTouchStart) { + if (layoutMenu) { + window.addEventListener('touchstart', this._windowTouchStart, true) + } + this._windowTouchStart = null + } + + this._setMenuHoverState(false) + }, + + // ******************************************************************************* + // * Methods + + scrollToActive(animate = false) { + this._scrollToActive(animate) + }, + + swipeIn(el, callback) { + this._swipeIn(el, callback) + }, + + swipeOut(el, callback) { + this._swipeOut(el, callback) + }, + + overlayTap(el, callback) { + this._overlayTap(el, callback) + }, + + scrollPageTo(to, duration = 500) { + // t = current time + // b = start value + // c = change in value + // d = duration + const easeInOutQuad = (t, b, c, d) => { + t /= d / 2 + if (t < 1) return (c / 2) * t * t + b + t -= 1 + return (-c / 2) * (t * (t - 2) - 1) + b + } + + const element = document.scrollingElement + + if (typeof to === 'string') { + to = document.querySelector(to) + } + if (typeof to !== 'number') { + to = to.getBoundingClientRect().top + element.scrollTop + } + + const start = element.scrollTop + const change = to - start + const startDate = +new Date() + // const increment = 20 + + const animateScroll = () => { + const currentDate = +new Date() + const currentTime = currentDate - startDate + const val = easeInOutQuad(currentTime, start, change, duration) + element.scrollTop = val + if (currentTime < duration) { + requestAnimationFrame(animateScroll) + } else { + element.scrollTop = to + } + } + animateScroll() + }, + + // --- + // Collapse / expand layout + setCollapsed(collapsed = requiredParam('collapsed'), animate = true) { + const layoutMenu = this.getLayoutMenu() + + if (!layoutMenu) return + + this._unbindLayoutAnimationEndEvent() + + if (animate && this._supportsTransitionEnd()) { + this._addClass('layout-transitioning') + if (collapsed) this._setMenuHoverState(false) + + this._bindLayoutAnimationEndEvent( + () => { + // Collapse / Expand + this._setCollapsed(collapsed) + }, + () => { + this._removeClass('layout-transitioning') + this._triggerWindowEvent('resize') + this._triggerEvent('toggle') + this._setMenuHoverState(false) + } + ) + } else { + this._addClass('layout-no-transition') + if (collapsed) this._setMenuHoverState(false) + + // Collapse / Expand + this._setCollapsed(collapsed) + + setTimeout(() => { + this._removeClass('layout-no-transition') + this._triggerWindowEvent('resize') + this._triggerEvent('toggle') + this._setMenuHoverState(false) + }, 1) + } + }, + + // --- + // Toggle layout + toggleCollapsed(animate = true) { + this.setCollapsed(!this.isCollapsed(), animate) + }, + + // --- + // Set layout positioning + setPosition(fixed = requiredParam('fixed'), offcanvas = requiredParam('offcanvas')) { + this._removeClass('layout-menu-offcanvas layout-menu-fixed layout-menu-fixed-offcanvas') + + if (!fixed && offcanvas) { + this._addClass('layout-menu-offcanvas') + } else if (fixed && !offcanvas) { + this._addClass('layout-menu-fixed') + this._redrawLayoutMenu() + } else if (fixed && offcanvas) { + this._addClass('layout-menu-fixed-offcanvas') + this._redrawLayoutMenu() + } + + this.update() + }, + + // ******************************************************************************* + // * Getters + + getLayoutMenu() { + return document.querySelector('.layout-menu') + }, + + getMenu() { + const layoutMenu = this.getLayoutMenu() + + if (!layoutMenu) return null + + return !this._hasClass('menu', layoutMenu) ? layoutMenu.querySelector('.menu') : layoutMenu + }, + + getLayoutNavbar() { + return document.querySelector('.layout-navbar') + }, + + getLayoutFooter() { + return document.querySelector('.content-footer') + }, + + getLayoutContainer() { + return document.querySelector('.layout-page') + }, + + // ******************************************************************************* + // * Setters + + setNavbarFixed(fixed = requiredParam('fixed')) { + this[fixed ? '_addClass' : '_removeClass']('layout-navbar-fixed') + this.update() + }, + + setFooterFixed(fixed = requiredParam('fixed')) { + this[fixed ? '_addClass' : '_removeClass']('layout-footer-fixed') + this.update() + }, + + setFlipped(reversed = requiredParam('reversed')) { + this[reversed ? '_addClass' : '_removeClass']('layout-menu-flipped') + }, + + // ******************************************************************************* + // * Update + + update() { + if ( + (this.getLayoutNavbar() && + ((!this.isSmallScreen() && this.isLayoutNavbarFull() && this.isFixed()) || this.isNavbarFixed())) || + (this.getLayoutFooter() && this.isFooterFixed()) + ) { + this._updateInlineStyle(this._getNavbarHeight(), this._getFooterHeight()) + } + + this._bindMenuMouseEvents() + }, + + setAutoUpdate(enable = requiredParam('enable')) { + if (enable && !this._autoUpdate) { + this.on('resize.Helpers:autoUpdate', () => this.update()) + this._autoUpdate = true + } else if (!enable && this._autoUpdate) { + this.off('resize.Helpers:autoUpdate') + this._autoUpdate = false + } + }, + + // Update custom option based on element + updateCustomOptionCheck(el) { + if (el.checked) { + // If custom option element is radio, remove checked from the siblings (closest `.row`) + if (el.type === 'radio') { + const customRadioOptionList = [].slice.call(el.closest('.row').querySelectorAll('.custom-option')) + customRadioOptionList.map(function (customRadioOptionEL) { + customRadioOptionEL.closest('.custom-option').classList.remove('checked') + }) + } + el.closest('.custom-option').classList.add('checked') + } else { + el.closest('.custom-option').classList.remove('checked') + } + }, + + // ******************************************************************************* + // * Tests + + isRtl() { + return ( + document.querySelector('body').getAttribute('dir') === 'rtl' || + document.querySelector('html').getAttribute('dir') === 'rtl' + ) + }, + + isMobileDevice() { + return typeof window.orientation !== 'undefined' || navigator.userAgent.indexOf('IEMobile') !== -1 + }, + + isSmallScreen() { + return ( + (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) < this.LAYOUT_BREAKPOINT + ) + }, + + isLayoutNavbarFull() { + return !!document.querySelector('.layout-wrapper.layout-navbar-full') + }, + + isCollapsed() { + if (this.isSmallScreen()) { + return !this._hasClass('layout-menu-expanded') + } + return this._hasClass('layout-menu-collapsed') + }, + + isFixed() { + return this._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas') + }, + + isOffcanvas() { + return this._hasClass('layout-menu-offcanvas layout-menu-fixed-offcanvas') + }, + + isNavbarFixed() { + return ( + this._hasClass('layout-navbar-fixed') || (!this.isSmallScreen() && this.isFixed() && this.isLayoutNavbarFull()) + ) + }, + + isFooterFixed() { + return this._hasClass('layout-footer-fixed') + }, + + isFlipped() { + return this._hasClass('layout-menu-flipped') + }, + + isLightStyle() { + return document.documentElement.classList.contains('light-style') + }, + + isDarkStyle() { + return document.documentElement.classList.contains('dark-style') + }, + + // ******************************************************************************* + // * Events + + on(event = requiredParam('event'), callback = requiredParam('callback')) { + const [_event] = event.split('.') + let [, ...namespace] = event.split('.') + // let [_event, ...namespace] = event.split('.') + namespace = namespace.join('.') || null + + this._listeners.push({ event: _event, namespace, callback }) + }, + + off(event = requiredParam('event')) { + const [_event] = event.split('.') + let [, ...namespace] = event.split('.') + namespace = namespace.join('.') || null + + this._listeners + .filter(listener => listener.event === _event && listener.namespace === namespace) + .forEach(listener => this._listeners.splice(this._listeners.indexOf(listener), 1)) + }, + + // ******************************************************************************* + // * Life cycle + + init() { + if (this._initialized) return + this._initialized = true + + // Initialize `style` element + this._updateInlineStyle(0) + + // Bind window resize event + this._bindWindowResizeEvent() + + // Bind init event + this.off('init._Helpers') + this.on('init._Helpers', () => { + this.off('resize._Helpers:redrawMenu') + this.on('resize._Helpers:redrawMenu', () => { + // eslint-disable-next-line no-unused-expressions + this.isSmallScreen() && !this.isCollapsed() && this._redrawLayoutMenu() + }) + + // Force repaint in IE 10 + if (typeof document.documentMode === 'number' && document.documentMode < 11) { + this.off('resize._Helpers:ie10RepaintBody') + this.on('resize._Helpers:ie10RepaintBody', () => { + if (this.isFixed()) return + const { scrollTop } = document.documentElement + document.body.style.display = 'none' + // document.body.offsetHeight + document.body.style.display = 'block' + document.documentElement.scrollTop = scrollTop + }) + } + }) + + this._triggerEvent('init') + }, + + destroy() { + if (!this._initialized) return + this._initialized = false + + this._removeClass('layout-transitioning') + this._removeInlineStyle() + this._unbindLayoutAnimationEndEvent() + this._unbindWindowResizeEvent() + this._unbindMenuMouseEvents() + this.setAutoUpdate(false) + + this.off('init._Helpers') + + // Remove all listeners except `init` + this._listeners + .filter(listener => listener.event !== 'init') + .forEach(listener => this._listeners.splice(this._listeners.indexOf(listener), 1)) + }, + + // --- + // Init Password Toggle + initPasswordToggle() { + const toggler = document.querySelectorAll('.form-password-toggle i') + if (typeof toggler !== 'undefined' && toggler !== null) { + toggler.forEach(el => { + el.addEventListener('click', e => { + e.preventDefault() + const formPasswordToggle = el.closest('.form-password-toggle') + const formPasswordToggleIcon = formPasswordToggle.querySelector('i') + const formPasswordToggleInput = formPasswordToggle.querySelector('input') + + if (formPasswordToggleInput.getAttribute('type') === 'text') { + formPasswordToggleInput.setAttribute('type', 'password') + formPasswordToggleIcon.classList.replace('bx-show', 'bx-hide') + } else if (formPasswordToggleInput.getAttribute('type') === 'password') { + formPasswordToggleInput.setAttribute('type', 'text') + formPasswordToggleIcon.classList.replace('bx-hide', 'bx-show') + } + }) + }) + } + }, + + //-- + // Init custom option check + initCustomOptionCheck() { + const _this = this + + const custopOptionList = [].slice.call(document.querySelectorAll('.custom-option .form-check-input')) + custopOptionList.map(function (customOptionEL) { + // Update custom options check on page load + _this.updateCustomOptionCheck(customOptionEL) + + // Update custom options check on click + customOptionEL.addEventListener('click', e => { + _this.updateCustomOptionCheck(customOptionEL) + }) + }) + }, + + // --- + // Init Speech To Text + initSpeechToText() { + const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition + const speechToText = document.querySelectorAll('.speech-to-text') + if (SpeechRecognition !== undefined && SpeechRecognition !== null) { + if (typeof speechToText !== 'undefined' && speechToText !== null) { + const recognition = new SpeechRecognition() + const toggler = document.querySelectorAll('.speech-to-text i') + toggler.forEach(el => { + let listening = false + el.addEventListener('click', () => { + el.closest('.input-group').querySelector('.form-control').focus() + recognition.onspeechstart = () => { + listening = true + } + if (listening === false) { + recognition.start() + } + recognition.onerror = () => { + listening = false + } + recognition.onresult = event => { + el.closest('.input-group').querySelector('.form-control').value = event.results[0][0].transcript + } + recognition.onspeechend = () => { + listening = false + recognition.stop() + } + }) + }) + } + } + }, + + // --- + // Init Navbar Dropdown (i.e notification) PerfectScrollbar + initNavbarDropdownScrollbar() { + const scrollbarContainer = document.querySelectorAll('.navbar-dropdown .scrollable-container') + const { PerfectScrollbar } = window + + if (PerfectScrollbar !== undefined) { + if (typeof scrollbarContainer !== 'undefined' && scrollbarContainer !== null) { + scrollbarContainer.forEach(el => { + // eslint-disable-next-line no-new + new PerfectScrollbar(el, { + wheelPropagation: false, + suppressScrollX: true + }) + }) + } + } + }, + + // Ajax Call Promise + ajaxCall(url) { + return new Promise((resolve, reject) => { + const req = new XMLHttpRequest() + req.open('GET', url) + req.onload = () => (req.status === 200 ? resolve(req.response) : reject(Error(req.statusText))) + req.onerror = e => reject(Error(`Network Error: ${e}`)) + req.send() + }) + }, + + // --- + // SidebarToggle (Used in Apps) + initSidebarToggle() { + const sidebarToggler = document.querySelectorAll('[data-bs-toggle="sidebar"]') + + sidebarToggler.forEach(el => { + el.addEventListener('click', () => { + const target = el.getAttribute('data-target') + const overlay = el.getAttribute('data-overlay') + const appOverlay = document.querySelectorAll('.app-overlay') + const targetEl = document.querySelectorAll(target) + + targetEl.forEach(tel => { + tel.classList.toggle('show') + if ( + typeof overlay !== 'undefined' && + overlay !== null && + overlay !== false && + typeof appOverlay !== 'undefined' + ) { + if (tel.classList.contains('show')) { + appOverlay[0].classList.add('show') + } else { + appOverlay[0].classList.remove('show') + } + appOverlay[0].addEventListener('click', e => { + e.currentTarget.classList.remove('show') + tel.classList.remove('show') + }) + } + }) + }) + }) + } +} + +// ******************************************************************************* +// * Initialization + +if (typeof window !== 'undefined') { + Helpers.init() + + if (Helpers.isMobileDevice() && window.chrome) { + document.documentElement.classList.add('layout-menu-100vh') + } + + // Update layout after page load + if (document.readyState === 'complete') Helpers.update() + else + document.addEventListener('DOMContentLoaded', function onContentLoaded() { + Helpers.update() + document.removeEventListener('DOMContentLoaded', onContentLoaded) + }) +} + +window.Helpers = Helpers; diff --git a/src/main/webapp/resources/3rd-party/sneat/js/mega-dropdown.js b/src/main/webapp/resources/3rd-party/sneat/js/mega-dropdown.js deleted file mode 100644 index 5fc981ed..00000000 --- a/src/main/webapp/resources/3rd-party/sneat/js/mega-dropdown.js +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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/). - */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else { - var a = factory(); - for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; - } -})(self, function() { -return /******/ (function() { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./js/mega-dropdown.js": -/*!*****************************!*\ - !*** ./js/mega-dropdown.js ***! - \*****************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"MegaDropdown\": function() { return /* binding */ MegaDropdown; }\n/* harmony export */ });\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar TIMEOUT = 150;\nvar MegaDropdown = /*#__PURE__*/function () {\n function MegaDropdown(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, MegaDropdown);\n this._onHover = options.trigger === 'hover' || element.getAttribute('data-trigger') === 'hover';\n this._container = MegaDropdown._findParent(element, 'mega-dropdown');\n if (!this._container) return;\n this._menu = this._container.querySelector('.dropdown-toggle ~ .dropdown-menu');\n if (!this._menu) return;\n element.setAttribute('aria-expanded', 'false');\n this._el = element;\n this._bindEvents();\n }\n _createClass(MegaDropdown, [{\n key: \"open\",\n value: function open() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n if (this._focusTimeout) {\n clearTimeout(this._focusTimeout);\n this._focusTimeout = null;\n }\n if (this._el.getAttribute('aria-expanded') !== 'true') {\n this._triggerEvent('show');\n this._container.classList.add('show');\n this._menu.classList.add('show');\n this._el.setAttribute('aria-expanded', 'true');\n this._el.focus();\n this._triggerEvent('shown');\n }\n }\n }, {\n key: \"close\",\n value: function close(force) {\n var _this = this;\n if (this._timeout) {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n if (this._focusTimeout) {\n clearTimeout(this._focusTimeout);\n this._focusTimeout = null;\n }\n if (this._onHover && !force) {\n this._timeout = setTimeout(function () {\n if (_this._timeout) {\n clearTimeout(_this._timeout);\n _this._timeout = null;\n }\n _this._close();\n }, TIMEOUT);\n } else {\n this._close();\n }\n }\n }, {\n key: \"toggle\",\n value: function toggle() {\n // eslint-disable-next-line no-unused-expressions\n this._el.getAttribute('aria-expanded') === 'true' ? this.close(true) : this.open();\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this._unbindEvents();\n this._el = null;\n if (this._timeout) {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n if (this._focusTimeout) {\n clearTimeout(this._focusTimeout);\n this._focusTimeout = null;\n }\n }\n }, {\n key: \"_close\",\n value: function _close() {\n if (this._el.getAttribute('aria-expanded') === 'true') {\n this._triggerEvent('hide');\n this._container.classList.remove('show');\n this._menu.classList.remove('show');\n this._el.setAttribute('aria-expanded', 'false');\n this._triggerEvent('hidden');\n }\n }\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents() {\n var _this2 = this;\n this._elClickEvnt = function (e) {\n e.preventDefault();\n _this2.toggle();\n };\n this._el.addEventListener('click', this._elClickEvnt);\n this._bodyClickEvnt = function (e) {\n if (!_this2._container.contains(e.target) && _this2._container.classList.contains('show')) {\n _this2.close(true);\n }\n };\n document.body.addEventListener('click', this._bodyClickEvnt, true);\n this._menuClickEvnt = function (e) {\n if (e.target.classList.contains('mega-dropdown-link')) {\n _this2.close(true);\n }\n };\n this._menu.addEventListener('click', this._menuClickEvnt, true);\n this._focusoutEvnt = function () {\n if (_this2._focusTimeout) {\n clearTimeout(_this2._focusTimeout);\n _this2._focusTimeout = null;\n }\n if (_this2._el.getAttribute('aria-expanded') !== 'true') return;\n _this2._focusTimeout = setTimeout(function () {\n if (document.activeElement.tagName.toUpperCase() !== 'BODY' && MegaDropdown._findParent(document.activeElement, 'mega-dropdown') !== _this2._container) {\n _this2.close(true);\n }\n }, 100);\n };\n this._container.addEventListener('focusout', this._focusoutEvnt, true);\n if (this._onHover) {\n this._enterEvnt = function () {\n if (window.getComputedStyle(_this2._menu, null).getPropertyValue('position') === 'static') return;\n _this2.open();\n };\n this._leaveEvnt = function () {\n if (window.getComputedStyle(_this2._menu, null).getPropertyValue('position') === 'static') return;\n _this2.close();\n };\n this._el.addEventListener('mouseenter', this._enterEvnt);\n this._menu.addEventListener('mouseenter', this._enterEvnt);\n this._el.addEventListener('mouseleave', this._leaveEvnt);\n this._menu.addEventListener('mouseleave', this._leaveEvnt);\n }\n }\n }, {\n key: \"_unbindEvents\",\n value: function _unbindEvents() {\n if (this._elClickEvnt) {\n this._el.removeEventListener('click', this._elClickEvnt);\n this._elClickEvnt = null;\n }\n if (this._bodyClickEvnt) {\n document.body.removeEventListener('click', this._bodyClickEvnt, true);\n this._bodyClickEvnt = null;\n }\n if (this._menuClickEvnt) {\n this._menu.removeEventListener('click', this._menuClickEvnt, true);\n this._menuClickEvnt = null;\n }\n if (this._focusoutEvnt) {\n this._container.removeEventListener('focusout', this._focusoutEvnt, true);\n this._focusoutEvnt = null;\n }\n if (this._enterEvnt) {\n this._el.removeEventListener('mouseenter', this._enterEvnt);\n this._menu.removeEventListener('mouseenter', this._enterEvnt);\n this._enterEvnt = null;\n }\n if (this._leaveEvnt) {\n this._el.removeEventListener('mouseleave', this._leaveEvnt);\n this._menu.removeEventListener('mouseleave', this._leaveEvnt);\n this._leaveEvnt = null;\n }\n }\n }, {\n key: \"_triggerEvent\",\n value: function _triggerEvent(event) {\n if (document.createEvent) {\n var customEvent;\n if (typeof Event === 'function') {\n customEvent = new Event(event);\n } else {\n customEvent = document.createEvent('Event');\n customEvent.initEvent(event, false, true);\n }\n this._container.dispatchEvent(customEvent);\n } else {\n this._container.fireEvent(\"on\".concat(event), document.createEventObject());\n }\n }\n }], [{\n key: \"_findParent\",\n value: function _findParent(el, cls) {\n if (el.tagName.toUpperCase() === 'BODY') return null;\n el = el.parentNode;\n while (el.tagName.toUpperCase() !== 'BODY' && !el.classList.contains(cls)) {\n el = el.parentNode;\n }\n return el.tagName.toUpperCase() !== 'BODY' ? el : null;\n }\n }]);\n return MegaDropdown;\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBRSxDQUFDaEIsT0FBTyxDQUFDQyxXQUFXLEVBQUUsS0FBSyxNQUFNLElBQUksQ0FBQ2UsRUFBRSxDQUFDdkMsU0FBUyxDQUFDZ0IsUUFBUSxDQUFDd0IsR0FBRyxDQUFDLEVBQUU7UUFDekVELEVBQUUsR0FBR0EsRUFBRSxDQUFDRSxVQUFVO01BQ3BCO01BQ0EsT0FBT0YsRUFBRSxDQUFDaEIsT0FBTyxDQUFDQyxXQUFXLEVBQUUsS0FBSyxNQUFNLEdBQUdlLEVBQUUsR0FBRyxJQUFJO0lBQ3hEO0VBQUM7RUFBQTtBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vU25lYXQvLi9qcy9tZWdhLWRyb3Bkb3duLmpzPzM5OTgiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgVElNRU9VVCA9IDE1MFxyXG5cclxuY2xhc3MgTWVnYURyb3Bkb3duIHtcclxuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIHRoaXMuX29uSG92ZXIgPSBvcHRpb25zLnRyaWdnZXIgPT09ICdob3ZlcicgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHJpZ2dlcicpID09PSAnaG92ZXInXHJcblxyXG4gICAgdGhpcy5fY29udGFpbmVyID0gTWVnYURyb3Bkb3duLl9maW5kUGFyZW50KGVsZW1lbnQsICdtZWdhLWRyb3Bkb3duJylcclxuICAgIGlmICghdGhpcy5fY29udGFpbmVyKSByZXR1cm5cclxuXHJcbiAgICB0aGlzLl9tZW51ID0gdGhpcy5fY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5kcm9wZG93bi10b2dnbGUgfiAuZHJvcGRvd24tbWVudScpXHJcbiAgICBpZiAoIXRoaXMuX21lbnUpIHJldHVyblxyXG5cclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJylcclxuXHJcbiAgICB0aGlzLl9lbCA9IGVsZW1lbnRcclxuICAgIHRoaXMuX2JpbmRFdmVudHMoKVxyXG4gIH1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICh0aGlzLl90aW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxyXG4gICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2ZvY3VzVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fZm9jdXNUaW1lb3V0KVxyXG4gICAgICB0aGlzLl9mb2N1c1RpbWVvdXQgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2VsLmdldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpICE9PSAndHJ1ZScpIHtcclxuICAgICAgdGhpcy5fdHJpZ2dlckV2ZW50KCdzaG93JylcclxuICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKVxyXG4gICAgICB0aGlzLl9tZW51LmNsYXNzTGlzdC5hZGQoJ3Nob3cnKVxyXG4gICAgICB0aGlzLl9lbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpXHJcbiAgICAgIHRoaXMuX2VsLmZvY3VzKClcclxuICAgICAgdGhpcy5fdHJpZ2dlckV2ZW50KCdzaG93bicpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZShmb3JjZSkge1xyXG4gICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpXHJcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fZm9jdXNUaW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9mb2N1c1RpbWVvdXQpXHJcbiAgICAgIHRoaXMuX2ZvY3VzVGltZW91dCA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fb25Ib3ZlciAmJiAhZm9yY2UpIHtcclxuICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl90aW1lb3V0KSB7XHJcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dClcclxuICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2Nsb3NlKClcclxuICAgICAgfSwgVElNRU9VVClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2Nsb3NlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZSgpIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcclxuICAgIHRoaXMuX2VsLmdldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpID09PSAndHJ1ZScgPyB0aGlzLmNsb3NlKHRydWUpIDogdGhpcy5vcGVuKClcclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLl91bmJpbmRFdmVudHMoKVxyXG4gICAgdGhpcy5fZWwgPSBudWxsXHJcblxyXG4gICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpXHJcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2ZvY3VzVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fZm9jdXNUaW1lb3V0KVxyXG4gICAgICB0aGlzLl9mb2N1c1RpbWVvdXQgPSBudWxsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfY2xvc2UoKSB7XHJcbiAgICBpZiAodGhpcy5fZWwuZ2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJykgPT09ICd0cnVlJykge1xyXG4gICAgICB0aGlzLl90cmlnZ2VyRXZlbnQoJ2hpZGUnKVxyXG4gICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpXHJcbiAgICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpXHJcbiAgICAgIHRoaXMuX2VsLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXHJcbiAgICAgIHRoaXMuX3RyaWdnZXJFdmVudCgnaGlkZGVuJylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9iaW5kRXZlbnRzKCkge1xyXG4gICAgdGhpcy5fZWxDbGlja0V2bnQgPSBlID0+IHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgIHRoaXMudG9nZ2xlKClcclxuICAgIH1cclxuICAgIHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fZWxDbGlja0V2bnQpXHJcblxyXG4gICAgdGhpcy5fYm9keUNsaWNrRXZudCA9IGUgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuX2NvbnRhaW5lci5jb250YWlucyhlLnRhcmdldCkgJiYgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucygnc2hvdycpKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZSh0cnVlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fYm9keUNsaWNrRXZudCwgdHJ1ZSlcclxuXHJcbiAgICB0aGlzLl9tZW51Q2xpY2tFdm50ID0gZSA9PiB7XHJcbiAgICAgIGlmIChlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ21lZ2EtZHJvcGRvd24tbGluaycpKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZSh0cnVlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9tZW51LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fbWVudUNsaWNrRXZudCwgdHJ1ZSlcclxuXHJcbiAgICB0aGlzLl9mb2N1c291dEV2bnQgPSAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9mb2N1c1RpbWVvdXQpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fZm9jdXNUaW1lb3V0KVxyXG4gICAgICAgIHRoaXMuX2ZvY3VzVGltZW91dCA9IG51bGxcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuX2VsLmdldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpICE9PSAndHJ1ZScpIHJldHVyblxyXG5cclxuICAgICAgdGhpcy5fZm9jdXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCT0RZJyAmJlxyXG4gICAgICAgICAgTWVnYURyb3Bkb3duLl9maW5kUGFyZW50KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsICdtZWdhLWRyb3Bkb3duJykgIT09IHRoaXMuX2NvbnRhaW5lclxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5jbG9zZSh0cnVlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMTAwKVxyXG4gICAgfVxyXG4gICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fZm9jdXNvdXRFdm50LCB0cnVlKVxyXG5cclxuICAgIGlmICh0aGlzLl9vbkhvdmVyKSB7XHJcbiAgICAgIHRoaXMuX2VudGVyRXZudCA9ICgpID0+IHtcclxuICAgICAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fbWVudSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgncG9zaXRpb24nKSA9PT0gJ3N0YXRpYycpIHJldHVyblxyXG4gICAgICAgIHRoaXMub3BlbigpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbGVhdmVFdm50ID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9tZW51LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdwb3NpdGlvbicpID09PSAnc3RhdGljJykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLl9lbnRlckV2bnQpXHJcbiAgICAgIHRoaXMuX21lbnUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMuX2VudGVyRXZudClcclxuICAgICAgdGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMuX2xlYXZlRXZudClcclxuICAgICAgdGhpcy5fbWVudS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5fbGVhdmVFdm50KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX3VuYmluZEV2ZW50cygpIHtcclxuICAgIGlmICh0aGlzLl9lbENsaWNrRXZudCkge1xyXG4gICAgICB0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2VsQ2xpY2tFdm50KVxyXG4gICAgICB0aGlzLl9lbENsaWNrRXZudCA9IG51bGxcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9ib2R5Q2xpY2tFdm50KSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9ib2R5Q2xpY2tFdm50LCB0cnVlKVxyXG4gICAgICB0aGlzLl9ib2R5Q2xpY2tFdm50ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX21lbnVDbGlja0V2bnQpIHtcclxuICAgICAgdGhpcy5fbWVudS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX21lbnVDbGlja0V2bnQsIHRydWUpXHJcbiAgICAgIHRoaXMuX21lbnVDbGlja0V2bnQgPSBudWxsXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fZm9jdXNvdXRFdm50KSB7XHJcbiAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX2ZvY3Vzb3V0RXZudCwgdHJ1ZSlcclxuICAgICAgdGhpcy5fZm9jdXNvdXRFdm50ID0gbnVsbFxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2VudGVyRXZudCkge1xyXG4gICAgICB0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5fZW50ZXJFdm50KVxyXG4gICAgICB0aGlzLl9tZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLl9lbnRlckV2bnQpXHJcbiAgICAgIHRoaXMuX2VudGVyRXZudCA9IG51bGxcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9sZWF2ZUV2bnQpIHtcclxuICAgICAgdGhpcy5fZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMuX2xlYXZlRXZudClcclxuICAgICAgdGhpcy5fbWVudS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5fbGVhdmVFdm50KVxyXG4gICAgICB0aGlzLl9sZWF2ZUV2bnQgPSBudWxsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX2ZpbmRQYXJlbnQoZWwsIGNscykge1xyXG4gICAgaWYgKGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSByZXR1cm4gbnVsbFxyXG4gICAgZWwgPSBlbC5wYXJlbnROb2RlXHJcbiAgICB3aGlsZSAoZWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnQk9EWScgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucyhjbHMpKSB7XHJcbiAgICAgIGVsID0gZWwucGFyZW50Tm9kZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSAhPT0gJ0JPRFknID8gZWwgOiBudWxsXHJcbiAgfVxyXG5cclxuICBfdHJpZ2dlckV2ZW50KGV2ZW50KSB7XHJcbiAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcclxuICAgICAgbGV0IGN1c3RvbUV2ZW50XHJcblxyXG4gICAgICBpZiAodHlwZW9mIEV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY3VzdG9tRXZlbnQgPSBuZXcgRXZlbnQoZXZlbnQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3VzdG9tRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKVxyXG4gICAgICAgIGN1c3RvbUV2ZW50LmluaXRFdmVudChldmVudCwgZmFsc2UsIHRydWUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2NvbnRhaW5lci5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fY29udGFpbmVyLmZpcmVFdmVudChgb24ke2V2ZW50fWAsIGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCkpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgeyBNZWdhRHJvcGRvd24gfVxyXG4iXSwibmFtZXMiOlsiVElNRU9VVCIsIk1lZ2FEcm9wZG93biIsImVsZW1lbnQiLCJvcHRpb25zIiwiX29uSG92ZXIiLCJ0cmlnZ2VyIiwiZ2V0QXR0cmlidXRlIiwiX2NvbnRhaW5lciIsIl9maW5kUGFyZW50IiwiX21lbnUiLCJxdWVyeVNlbGVjdG9yIiwic2V0QXR0cmlidXRlIiwiX2VsIiwiX2JpbmRFdmVudHMiLCJfdGltZW91dCIsImNsZWFyVGltZW91dCIsIl9mb2N1c1RpbWVvdXQiLCJfdHJpZ2dlckV2ZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiZm9jdXMiLCJmb3JjZSIsInNldFRpbWVvdXQiLCJfY2xvc2UiLCJjbG9zZSIsIm9wZW4iLCJfdW5iaW5kRXZlbnRzIiwicmVtb3ZlIiwiX2VsQ2xpY2tFdm50IiwiZSIsInByZXZlbnREZWZhdWx0IiwidG9nZ2xlIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9ib2R5Q2xpY2tFdm50IiwiY29udGFpbnMiLCJ0YXJnZXQiLCJkb2N1bWVudCIsImJvZHkiLCJfbWVudUNsaWNrRXZudCIsIl9mb2N1c291dEV2bnQiLCJhY3RpdmVFbGVtZW50IiwidGFnTmFtZSIsInRvVXBwZXJDYXNlIiwiX2VudGVyRXZudCIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiX2xlYXZlRXZudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJldmVudCIsImNyZWF0ZUV2ZW50IiwiY3VzdG9tRXZlbnQiLCJFdmVudCIsImluaXRFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJmaXJlRXZlbnQiLCJjcmVhdGVFdmVudE9iamVjdCIsImVsIiwiY2xzIiwicGFyZW50Tm9kZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./js/mega-dropdown.js\n"); - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The require scope -/******/ var __webpack_require__ = {}; -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ !function() { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = function(exports, definition) { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ !function() { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ }(); -/******/ -/************************************************************************/ -/******/ -/******/ // 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__["./js/mega-dropdown.js"](0, __webpack_exports__, __webpack_require__); -/******/ -/******/ return __webpack_exports__; -/******/ })() -; -}); \ No newline at end of file diff --git a/src/main/webapp/resources/3rd-party/sneat/js/menu.js b/src/main/webapp/resources/3rd-party/sneat/js/menu.js index 6bf28cba..ee039a80 100644 --- a/src/main/webapp/resources/3rd-party/sneat/js/menu.js +++ b/src/main/webapp/resources/3rd-party/sneat/js/menu.js @@ -1,78 +1,986 @@ -/* - * 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/). - */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else { - var a = factory(); - for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; - } -})(self, function() { -return /******/ (function() { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./js/menu.js": -/*!********************!*\ - !*** ./js/menu.js ***! - \********************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Menu\": function() { return /* binding */ Menu; }\n/* harmony export */ });\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar TRANSITION_EVENTS = ['transitionend', 'webkitTransitionEnd', 'oTransitionEnd'];\n// const TRANSITION_PROPERTIES = ['transition', 'MozTransition', 'webkitTransition', 'WebkitTransition', 'OTransition']\nvar DELTA = 5;\nvar Menu = /*#__PURE__*/function () {\n function Menu(el) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _PS = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n _classCallCheck(this, Menu);\n this._el = el;\n this._horizontal = config.orientation === 'horizontal';\n this._animate = config.animate !== false;\n this._accordion = config.accordion !== false;\n this._showDropdownOnHover = Boolean(config.showDropdownOnHover);\n this._closeChildren = Boolean(config.closeChildren);\n this._rtl = document.documentElement.getAttribute('dir') === 'rtl' || document.body.getAttribute('dir') === 'rtl';\n this._onOpen = config.onOpen || function () {};\n this._onOpened = config.onOpened || function () {};\n this._onClose = config.onClose || function () {};\n this._onClosed = config.onClosed || function () {};\n this._psScroll = null;\n this._topParent = null;\n this._menuBgClass = null;\n el.classList.add('menu');\n el.classList[this._animate ? 'remove' : 'add']('menu-no-animation');\n if (!this._horizontal) {\n el.classList.add('menu-vertical');\n el.classList.remove('menu-horizontal');\n var PerfectScrollbarLib = _PS || window.PerfectScrollbar;\n if (PerfectScrollbarLib) {\n this._scrollbar = new PerfectScrollbarLib(el.querySelector('.menu-inner'), {\n suppressScrollX: true,\n wheelPropagation: !Menu._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas')\n });\n window.Helpers.menuPsScroll = this._scrollbar;\n } else {\n el.querySelector('.menu-inner').classList.add('overflow-auto');\n }\n } else {\n el.classList.add('menu-horizontal');\n el.classList.remove('menu-vertical');\n this._inner = el.querySelector('.menu-inner');\n var container = this._inner.parentNode;\n this._prevBtn = el.querySelector('.menu-horizontal-prev');\n if (!this._prevBtn) {\n this._prevBtn = document.createElement('a');\n this._prevBtn.href = '#';\n this._prevBtn.className = 'menu-horizontal-prev';\n container.appendChild(this._prevBtn);\n }\n this._wrapper = el.querySelector('.menu-horizontal-wrapper');\n if (!this._wrapper) {\n this._wrapper = document.createElement('div');\n this._wrapper.className = 'menu-horizontal-wrapper';\n this._wrapper.appendChild(this._inner);\n container.appendChild(this._wrapper);\n }\n this._nextBtn = el.querySelector('.menu-horizontal-next');\n if (!this._nextBtn) {\n this._nextBtn = document.createElement('a');\n this._nextBtn.href = '#';\n this._nextBtn.className = 'menu-horizontal-next';\n container.appendChild(this._nextBtn);\n }\n this._innerPosition = 0;\n this.update();\n }\n\n // Add data attribute for bg color class of menu\n var menuClassList = el.classList;\n for (var i = 0; i < menuClassList.length; i++) {\n if (menuClassList[i].startsWith('bg-')) {\n this._menuBgClass = menuClassList[i];\n }\n }\n el.setAttribute('data-bg-class', this._menuBgClass);\n\n // Switch to vertical menu on small screen for horizontal menu layout on page load\n if (this._horizontal && window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) this.switchMenu('vertical');\n this._bindEvents();\n\n // Link menu instance to element\n el.menuInstance = this;\n }\n _createClass(Menu, [{\n key: \"_bindEvents\",\n value: function _bindEvents() {\n var _this = this;\n // Click Event\n this._evntElClick = function (e) {\n // Find top parent element\n if (e.target.closest('ul') && e.target.closest('ul').classList.contains('menu-inner')) {\n var menuItem = Menu._findParent(e.target, 'menu-item', false);\n\n // eslint-disable-next-line prefer-destructuring\n if (menuItem) _this._topParent = menuItem.childNodes[0];\n }\n var toggleLink = e.target.classList.contains('menu-toggle') ? e.target : Menu._findParent(e.target, 'menu-toggle', false);\n if (toggleLink) {\n e.preventDefault();\n if (toggleLink.getAttribute('data-hover') !== 'true') {\n _this.toggle(toggleLink);\n }\n }\n };\n if (!this._showDropdownOnHover && this._horizontal || !this._horizontal || window.Helpers.isMobileDevice) this._el.addEventListener('click', this._evntElClick);\n this._evntWindowResize = function () {\n _this.update();\n if (_this._lastWidth !== window.innerWidth) {\n _this._lastWidth = window.innerWidth;\n _this.update();\n }\n var horizontalMenuTemplate = document.querySelector(\"[data-template^='horizontal-menu']\");\n if (!_this._horizontal && !horizontalMenuTemplate) _this.manageScroll();\n };\n window.addEventListener('resize', this._evntWindowResize);\n if (this._horizontal) {\n this._evntPrevBtnClick = function (e) {\n e.preventDefault();\n if (_this._prevBtn.classList.contains('disabled')) return;\n _this._slide('prev');\n };\n this._prevBtn.addEventListener('click', this._evntPrevBtnClick);\n this._evntNextBtnClick = function (e) {\n e.preventDefault();\n if (_this._nextBtn.classList.contains('disabled')) return;\n _this._slide('next');\n };\n this._nextBtn.addEventListener('click', this._evntNextBtnClick);\n this._evntBodyClick = function (e) {\n if (!_this._inner.contains(e.target) && _this._el.querySelectorAll('.menu-inner > .menu-item.open').length) _this.closeAll();\n };\n document.body.addEventListener('click', this._evntBodyClick);\n if (this._showDropdownOnHover) {\n /** ***********************************************\r\n * Horizontal Menu Mouse Over Event\r\n * ? e.target !== e.currentTarget condition to disable mouseover event on whole menu navbar\r\n * ? !e.target.parentNode.classList.contains('open') to disable mouseover events on icon, text and dropdown arrow\r\n */\n this._evntElMouseOver = function (e) {\n if (e.target !== e.currentTarget && !e.target.parentNode.classList.contains('open')) {\n var toggleLink = e.target.classList.contains('menu-toggle') ? e.target : null;\n if (toggleLink) {\n e.preventDefault();\n if (toggleLink.getAttribute('data-hover') !== 'true') {\n _this.toggle(toggleLink);\n }\n }\n }\n e.stopPropagation();\n };\n if (this._horizontal && window.screen.width > window.Helpers.LAYOUT_BREAKPOINT) {\n this._el.addEventListener('mouseover', this._evntElMouseOver);\n }\n\n /** ***********************************************\r\n * Horizontal Menu Mouse Out Event\r\n * ? e.target !== e.currentTarget condition to disable mouseout event on whole menu navbar\r\n * ? mouseOutEl.parentNode.classList.contains('open') to check if the mouseout element has open class or not\r\n * ? !mouseOutEl.classList.contains('menu-toggle') to check if mouseout was from single menu item and not from the one which has submenu\r\n * ? !mouseOverEl.parentNode.classList.contains('menu-link') to disable mouseout event for icon, text and dropdown arrow\r\n */\n this._evntElMouseOut = function (e) {\n var mainEl = e.currentTarget;\n var mouseOutEl = e.target;\n var mouseOverEl = e.toElement || e.relatedTarget;\n\n // Find absolute parent of any menu item from which mouseout event triggered\n if (mouseOutEl.closest('ul') && mouseOutEl.closest('ul').classList.contains('menu-inner')) {\n _this._topParent = mouseOutEl;\n }\n if (mouseOutEl !== mainEl && (mouseOutEl.parentNode.classList.contains('open') || !mouseOutEl.classList.contains('menu-toggle')) && mouseOverEl && mouseOverEl.parentNode && !mouseOverEl.parentNode.classList.contains('menu-link')) {\n // When mouse goes totally out of menu items, check mouse over element to confirm it's not the child of menu, once confirmed close the menu\n if (_this._topParent && !Menu.childOf(mouseOverEl, _this._topParent.parentNode)) {\n var _toggleLink = _this._topParent.classList.contains('menu-toggle') ? _this._topParent : null;\n if (_toggleLink) {\n e.preventDefault();\n if (_toggleLink.getAttribute('data-hover') !== 'true') {\n _this.toggle(_toggleLink);\n _this._topParent = null;\n }\n }\n }\n\n // When mouse enter the sub menu, check if it's child of the initially mouse overed menu item(Actual Parent),\n // if it's the parent do not close the sub menu else close the sub menu\n if (Menu.childOf(mouseOverEl, mouseOutEl.parentNode)) {\n return;\n }\n var toggleLink = mouseOutEl.classList.contains('menu-toggle') ? mouseOutEl : null;\n if (toggleLink) {\n e.preventDefault();\n if (toggleLink.getAttribute('data-hover') !== 'true') {\n _this.toggle(toggleLink);\n }\n }\n }\n e.stopPropagation();\n };\n if (this._horizontal && window.screen.width > window.Helpers.LAYOUT_BREAKPOINT) {\n this._el.addEventListener('mouseout', this._evntElMouseOut);\n }\n }\n }\n }\n }, {\n key: \"_unbindEvents\",\n value: function _unbindEvents() {\n if (this._evntElClick) {\n this._el.removeEventListener('click', this._evntElClick);\n this._evntElClick = null;\n }\n if (this._evntElMouseOver) {\n this._el.removeEventListener('mouseover', this._evntElMouseOver);\n this._evntElMouseOver = null;\n }\n if (this._evntElMouseOut) {\n this._el.removeEventListener('mouseout', this._evntElMouseOut);\n this._evntElMouseOut = null;\n }\n if (this._evntWindowResize) {\n window.removeEventListener('resize', this._evntWindowResize);\n this._evntWindowResize = null;\n }\n if (this._evntBodyClick) {\n document.body.removeEventListener('click', this._evntBodyClick);\n this._evntBodyClick = null;\n }\n if (this._evntInnerMousemove) {\n this._inner.removeEventListener('mousemove', this._evntInnerMousemove);\n this._evntInnerMousemove = null;\n }\n if (this._evntInnerMouseleave) {\n this._inner.removeEventListener('mouseleave', this._evntInnerMouseleave);\n this._evntInnerMouseleave = null;\n }\n }\n }, {\n key: \"open\",\n value: function open(el) {\n var _this2 = this;\n var closeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._closeChildren;\n var item = this._findUnopenedParent(Menu._getItem(el, true), closeChildren);\n if (!item) return;\n var toggleLink = Menu._getLink(item, true);\n Menu._promisify(this._onOpen, this, item, toggleLink, Menu._findMenu(item)).then(function () {\n if (!_this2._horizontal || !Menu._isRoot(item)) {\n if (_this2._animate && !_this2._horizontal) {\n window.requestAnimationFrame(function () {\n return _this2._toggleAnimation(true, item, false);\n });\n if (_this2._accordion) _this2._closeOther(item, closeChildren);\n } else if (_this2._animate) {\n _this2._toggleDropdown(true, item, closeChildren);\n // eslint-disable-next-line no-unused-expressions\n _this2._onOpened && _this2._onOpened(_this2, item, toggleLink, Menu._findMenu(item));\n } else {\n item.classList.add('open');\n // eslint-disable-next-line no-unused-expressions\n _this2._onOpened && _this2._onOpened(_this2, item, toggleLink, Menu._findMenu(item));\n if (_this2._accordion) _this2._closeOther(item, closeChildren);\n }\n } else {\n _this2._toggleDropdown(true, item, closeChildren);\n // eslint-disable-next-line no-unused-expressions\n _this2._onOpened && _this2._onOpened(_this2, item, toggleLink, Menu._findMenu(item));\n }\n }).catch(function () {});\n }\n }, {\n key: \"close\",\n value: function close(el) {\n var _this3 = this;\n var closeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._closeChildren;\n var _autoClose = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var item = Menu._getItem(el, true);\n var toggleLink = Menu._getLink(el, true);\n if (!item.classList.contains('open') || item.classList.contains('disabled')) return;\n Menu._promisify(this._onClose, this, item, toggleLink, Menu._findMenu(item), _autoClose).then(function () {\n if (!_this3._horizontal || !Menu._isRoot(item)) {\n if (_this3._animate && !_this3._horizontal) {\n window.requestAnimationFrame(function () {\n return _this3._toggleAnimation(false, item, closeChildren);\n });\n } else {\n item.classList.remove('open');\n if (closeChildren) {\n var opened = item.querySelectorAll('.menu-item.open');\n for (var i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open');\n }\n\n // eslint-disable-next-line no-unused-expressions\n _this3._onClosed && _this3._onClosed(_this3, item, toggleLink, Menu._findMenu(item));\n }\n } else {\n _this3._toggleDropdown(false, item, closeChildren);\n // eslint-disable-next-line no-unused-expressions\n _this3._onClosed && _this3._onClosed(_this3, item, toggleLink, Menu._findMenu(item));\n }\n }).catch(function () {});\n }\n }, {\n key: \"_closeOther\",\n value: function _closeOther(item, closeChildren) {\n var opened = Menu._findChild(item.parentNode, ['menu-item', 'open']);\n for (var i = 0, l = opened.length; i < l; i++) {\n if (opened[i] !== item) this.close(opened[i], closeChildren);\n }\n }\n }, {\n key: \"toggle\",\n value: function toggle(el) {\n var closeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._closeChildren;\n var item = Menu._getItem(el, true);\n // const toggleLink = Menu._getLink(el, true)\n\n if (item.classList.contains('open')) this.close(item, closeChildren);else this.open(item, closeChildren);\n }\n }, {\n key: \"_toggleDropdown\",\n value: function _toggleDropdown(show, item, closeChildren) {\n var menu = Menu._findMenu(item);\n var actualItem = item;\n var subMenuItem = false;\n if (show) {\n if (Menu._findParent(item, 'menu-sub', false)) {\n subMenuItem = true;\n item = this._topParent ? this._topParent.parentNode : item;\n }\n var wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width);\n var position = this._innerPosition;\n var itemOffset = this._getItemOffset(item);\n var itemWidth = Math.round(item.getBoundingClientRect().width);\n if (itemOffset - DELTA <= -1 * position) {\n this._innerPosition = -1 * itemOffset;\n } else if (itemOffset + position + itemWidth + DELTA >= wrapperWidth) {\n if (itemWidth > wrapperWidth) {\n this._innerPosition = -1 * itemOffset;\n } else {\n this._innerPosition = -1 * (itemOffset + itemWidth - wrapperWidth);\n }\n }\n actualItem.classList.add('open');\n var menuWidth = Math.round(menu.getBoundingClientRect().width);\n if (subMenuItem) {\n if (itemOffset + this._innerPosition + menuWidth * 2 > wrapperWidth && menuWidth < wrapperWidth && menuWidth >= itemWidth) {\n menu.style.left = [this._rtl ? '100%' : '-100%'];\n }\n } else if (itemOffset + this._innerPosition + menuWidth > wrapperWidth && menuWidth < wrapperWidth && menuWidth > itemWidth) {\n menu.style[this._rtl ? 'marginRight' : 'marginLeft'] = \"-\".concat(menuWidth - itemWidth, \"px\");\n }\n this._closeOther(actualItem, closeChildren);\n this._updateSlider();\n } else {\n var toggle = Menu._findChild(item, ['menu-toggle']);\n\n // eslint-disable-next-line no-unused-expressions\n toggle.length && toggle[0].removeAttribute('data-hover', 'true');\n item.classList.remove('open');\n menu.style[this._rtl ? 'marginRight' : 'marginLeft'] = null;\n if (closeChildren) {\n var opened = menu.querySelectorAll('.menu-item.open');\n for (var i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open');\n }\n }\n }\n }, {\n key: \"_slide\",\n value: function _slide(direction) {\n var wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width);\n var innerWidth = this._innerWidth;\n var newPosition;\n if (direction === 'next') {\n newPosition = this._getSlideNextPos();\n if (innerWidth + newPosition < wrapperWidth) {\n newPosition = wrapperWidth - innerWidth;\n }\n } else {\n newPosition = this._getSlidePrevPos();\n if (newPosition > 0) newPosition = 0;\n }\n this._innerPosition = newPosition;\n this.update();\n }\n }, {\n key: \"_getSlideNextPos\",\n value: function _getSlideNextPos() {\n var wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width);\n var position = this._innerPosition;\n var curItem = this._inner.childNodes[0];\n var left = 0;\n while (curItem) {\n if (curItem.tagName) {\n var curItemWidth = Math.round(curItem.getBoundingClientRect().width);\n if (left + position - DELTA <= wrapperWidth && left + position + curItemWidth + DELTA >= wrapperWidth) {\n if (curItemWidth > wrapperWidth && left === -1 * position) left += curItemWidth;\n break;\n }\n left += curItemWidth;\n }\n curItem = curItem.nextSibling;\n }\n return -1 * left;\n }\n }, {\n key: \"_getSlidePrevPos\",\n value: function _getSlidePrevPos() {\n var wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width);\n var position = this._innerPosition;\n var curItem = this._inner.childNodes[0];\n var left = 0;\n while (curItem) {\n if (curItem.tagName) {\n var curItemWidth = Math.round(curItem.getBoundingClientRect().width);\n if (left - DELTA <= -1 * position && left + curItemWidth + DELTA >= -1 * position) {\n if (curItemWidth <= wrapperWidth) left = left + curItemWidth - wrapperWidth;\n break;\n }\n left += curItemWidth;\n }\n curItem = curItem.nextSibling;\n }\n return -1 * left;\n }\n }, {\n key: \"_findUnopenedParent\",\n value: function _findUnopenedParent(item, closeChildren) {\n var tree = [];\n var parentItem = null;\n while (item) {\n if (item.classList.contains('disabled')) {\n parentItem = null;\n tree = [];\n } else {\n if (!item.classList.contains('open')) parentItem = item;\n tree.push(item);\n }\n item = Menu._findParent(item, 'menu-item', false);\n }\n if (!parentItem) return null;\n if (tree.length === 1) return parentItem;\n tree = tree.slice(0, tree.indexOf(parentItem));\n for (var i = 0, l = tree.length; i < l; i++) {\n tree[i].classList.add('open');\n if (this._accordion) {\n var openedItems = Menu._findChild(tree[i].parentNode, ['menu-item', 'open']);\n for (var j = 0, k = openedItems.length; j < k; j++) {\n if (openedItems[j] !== tree[i]) {\n openedItems[j].classList.remove('open');\n if (closeChildren) {\n var openedChildren = openedItems[j].querySelectorAll('.menu-item.open');\n for (var x = 0, z = openedChildren.length; x < z; x++) {\n openedChildren[x].classList.remove('open');\n }\n }\n }\n }\n }\n }\n return parentItem;\n }\n }, {\n key: \"_toggleAnimation\",\n value: function _toggleAnimation(open, item, closeChildren) {\n var _this4 = this;\n var toggleLink = Menu._getLink(item, true);\n var menu = Menu._findMenu(item);\n Menu._unbindAnimationEndEvent(item);\n var linkHeight = Math.round(toggleLink.getBoundingClientRect().height);\n item.style.overflow = 'hidden';\n var clearItemStyle = function clearItemStyle() {\n item.classList.remove('menu-item-animating');\n item.classList.remove('menu-item-closing');\n item.style.overflow = null;\n item.style.height = null;\n if (!_this4._horizontal) _this4.update();\n };\n if (open) {\n item.style.height = \"\".concat(linkHeight, \"px\");\n item.classList.add('menu-item-animating');\n item.classList.add('open');\n Menu._bindAnimationEndEvent(item, function () {\n clearItemStyle();\n _this4._onOpened(_this4, item, toggleLink, menu);\n });\n setTimeout(function () {\n item.style.height = \"\".concat(linkHeight + Math.round(menu.getBoundingClientRect().height), \"px\");\n }, 50);\n } else {\n item.style.height = \"\".concat(linkHeight + Math.round(menu.getBoundingClientRect().height), \"px\");\n item.classList.add('menu-item-animating');\n item.classList.add('menu-item-closing');\n Menu._bindAnimationEndEvent(item, function () {\n item.classList.remove('open');\n clearItemStyle();\n if (closeChildren) {\n var opened = item.querySelectorAll('.menu-item.open');\n for (var i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open');\n }\n _this4._onClosed(_this4, item, toggleLink, menu);\n });\n setTimeout(function () {\n item.style.height = \"\".concat(linkHeight, \"px\");\n }, 50);\n }\n }\n }, {\n key: \"_getItemOffset\",\n value: function _getItemOffset(item) {\n var curItem = this._inner.childNodes[0];\n var left = 0;\n while (curItem !== item) {\n if (curItem.tagName) {\n left += Math.round(curItem.getBoundingClientRect().width);\n }\n curItem = curItem.nextSibling;\n }\n return left;\n }\n }, {\n key: \"_updateSlider\",\n value: function _updateSlider() {\n var wrapperWidth = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var innerWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var position = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var _wrapperWidth = wrapperWidth !== null ? wrapperWidth : Math.round(this._wrapper.getBoundingClientRect().width);\n var _innerWidth = innerWidth !== null ? innerWidth : this._innerWidth;\n var _position = position !== null ? position : this._innerPosition;\n if (_innerWidth < _wrapperWidth || window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) {\n this._prevBtn.classList.add('d-none');\n this._nextBtn.classList.add('d-none');\n } else {\n this._prevBtn.classList.remove('d-none');\n this._nextBtn.classList.remove('d-none');\n }\n if (_innerWidth > _wrapperWidth && window.innerWidth > window.Helpers.LAYOUT_BREAKPOINT) {\n if (_position === 0) this._prevBtn.classList.add('disabled');else this._prevBtn.classList.remove('disabled');\n if (_innerWidth + _position <= _wrapperWidth) this._nextBtn.classList.add('disabled');else this._nextBtn.classList.remove('disabled');\n }\n }\n }, {\n key: \"_innerWidth\",\n get: function get() {\n var items = this._inner.childNodes;\n var width = 0;\n for (var i = 0, l = items.length; i < l; i++) {\n if (items[i].tagName) {\n width += Math.round(items[i].getBoundingClientRect().width);\n }\n }\n return width;\n }\n }, {\n key: \"_innerPosition\",\n get: function get() {\n return parseInt(this._inner.style[this._rtl ? 'marginRight' : 'marginLeft'] || '0px', 10);\n },\n set: function set(value) {\n this._inner.style[this._rtl ? 'marginRight' : 'marginLeft'] = \"\".concat(value, \"px\");\n return value;\n }\n }, {\n key: \"closeAll\",\n value: function closeAll() {\n var closeChildren = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._closeChildren;\n var opened = this._el.querySelectorAll('.menu-inner > .menu-item.open');\n for (var i = 0, l = opened.length; i < l; i++) this.close(opened[i], closeChildren);\n }\n }, {\n key: \"update\",\n value: function update() {\n if (!this._horizontal) {\n if (this._scrollbar) {\n this._scrollbar.update();\n }\n } else {\n this.closeAll();\n var wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width);\n var innerWidth = this._innerWidth;\n var position = this._innerPosition;\n if (wrapperWidth - position > innerWidth) {\n position = wrapperWidth - innerWidth;\n if (position > 0) position = 0;\n this._innerPosition = position;\n }\n this._updateSlider(wrapperWidth, innerWidth, position);\n }\n }\n }, {\n key: \"manageScroll\",\n value: function manageScroll() {\n var _window = window,\n PerfectScrollbar = _window.PerfectScrollbar;\n var menuInner = document.querySelector('.menu-inner');\n if (window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) {\n if (this._scrollbar !== null) {\n // window.Helpers.menuPsScroll.destroy()\n this._scrollbar.destroy();\n this._scrollbar = null;\n }\n menuInner.classList.add('overflow-auto');\n } else {\n if (this._scrollbar === null) {\n var menuScroll = new PerfectScrollbar(document.querySelector('.menu-inner'), {\n suppressScrollX: true,\n wheelPropagation: false\n });\n // window.Helpers.menuPsScroll = menuScroll\n this._scrollbar = menuScroll;\n }\n menuInner.classList.remove('overflow-auto');\n }\n }\n }, {\n key: \"switchMenu\",\n value: function switchMenu(menu) {\n // Unbind Events\n this._unbindEvents();\n\n // const html = document.documentElement\n var navbar = document.querySelector('nav.layout-navbar');\n var navbarCollapse = document.querySelector('#navbar-collapse');\n /* const fullNavbar = document.querySelector('.layout-navbar-full')\r\n const contentNavbar = document.querySelector('.layout-content-navbar')\r\n const contentWrapper = document.querySelector('.content-wrapper') */\n var asideMenuWrapper = document.querySelector('#layout-menu div');\n var asideMenu = document.querySelector('#layout-menu');\n var horzMenuClasses = ['layout-menu-horizontal', 'menu', 'menu-horizontal', 'container-fluid', 'flex-grow-0'];\n var vertMenuClasses = ['layout-menu', 'menu', 'menu-vertical'];\n var horzMenuWrapper = document.querySelector('.menu-horizontal-wrapper');\n var menuInner = document.querySelector('.menu-inner');\n var brand = document.querySelector('.app-brand');\n var menuToggler = document.querySelector('.layout-menu-toggle');\n var activeMenuItems = document.querySelectorAll('.menu-inner .active');\n /* const layoutPage = document.querySelector('.layout-page')\r\n const layoutContainer = document.querySelector('.layout-container')\r\n const content = document.querySelector('.container-fluid') */\n\n // const { PerfectScrollbar } = window\n\n if (menu === 'vertical') {\n var _asideMenu$classList, _asideMenu$classList2;\n this._horizontal = false;\n asideMenuWrapper.insertBefore(brand, horzMenuWrapper);\n asideMenuWrapper.insertBefore(menuInner, horzMenuWrapper);\n asideMenuWrapper.classList.add('flex-column', 'p-0');\n (_asideMenu$classList = asideMenu.classList).remove.apply(_asideMenu$classList, _toConsumableArray(asideMenu.classList));\n (_asideMenu$classList2 = asideMenu.classList).add.apply(_asideMenu$classList2, vertMenuClasses.concat([this._menuBgClass]));\n brand.classList.remove('d-none', 'd-lg-flex');\n menuToggler.classList.remove('d-none');\n // if (PerfectScrollbar !== undefined) {\n // this._psScroll = new PerfectScrollbar(document.querySelector('.menu-inner'), {\n // suppressScrollX: true,\n // wheelPropagation: !Menu._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas')\n // })\n // }\n\n menuInner.classList.add('overflow-auto');\n\n // Add open class to active items\n for (var i = 0; i < activeMenuItems.length - 1; ++i) {\n activeMenuItems[i].classList.add('open');\n }\n } else {\n var _asideMenu$classList3, _asideMenu$classList4;\n this._horizontal = true;\n navbar.children[0].insertBefore(brand, navbarCollapse);\n brand.classList.add('d-none', 'd-lg-flex');\n horzMenuWrapper.appendChild(menuInner);\n asideMenuWrapper.classList.remove('flex-column', 'p-0');\n (_asideMenu$classList3 = asideMenu.classList).remove.apply(_asideMenu$classList3, _toConsumableArray(asideMenu.classList));\n (_asideMenu$classList4 = asideMenu.classList).add.apply(_asideMenu$classList4, horzMenuClasses.concat([this._menuBgClass]));\n menuToggler.classList.add('d-none');\n menuInner.classList.remove('overflow-auto');\n\n // if (PerfectScrollbar !== undefined && this._psScroll !== null) {\n // this._psScroll.destroy()\n // this._psScroll = null\n // }\n\n // Remove open class from active items\n for (var _i = 0; _i < activeMenuItems.length; ++_i) {\n activeMenuItems[_i].classList.remove('open');\n }\n }\n this._bindEvents();\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n if (!this._el) return;\n this._unbindEvents();\n var items = this._el.querySelectorAll('.menu-item');\n for (var i = 0, l = items.length; i < l; i++) {\n Menu._unbindAnimationEndEvent(items[i]);\n items[i].classList.remove('menu-item-animating');\n items[i].classList.remove('open');\n items[i].style.overflow = null;\n items[i].style.height = null;\n }\n var menus = this._el.querySelectorAll('.menu-menu');\n for (var i2 = 0, l2 = menus.length; i2 < l2; i2++) {\n menus[i2].style.marginRight = null;\n menus[i2].style.marginLeft = null;\n }\n this._el.classList.remove('menu-no-animation');\n if (this._wrapper) {\n this._prevBtn.parentNode.removeChild(this._prevBtn);\n this._nextBtn.parentNode.removeChild(this._nextBtn);\n this._wrapper.parentNode.insertBefore(this._inner, this._wrapper);\n this._wrapper.parentNode.removeChild(this._wrapper);\n this._inner.style.marginLeft = null;\n this._inner.style.marginRight = null;\n }\n this._el.menuInstance = null;\n delete this._el.menuInstance;\n this._el = null;\n this._horizontal = null;\n this._animate = null;\n this._accordion = null;\n this._showDropdownOnHover = null;\n this._closeChildren = null;\n this._rtl = null;\n this._onOpen = null;\n this._onOpened = null;\n this._onClose = null;\n this._onClosed = null;\n if (this._scrollbar) {\n this._scrollbar.destroy();\n this._scrollbar = null;\n }\n this._inner = null;\n this._prevBtn = null;\n this._wrapper = null;\n this._nextBtn = null;\n }\n }], [{\n key: \"childOf\",\n value: function childOf( /* child node */c, /* parent node */p) {\n // returns boolean\n if (c.parentNode) {\n while ((c = c.parentNode) && c !== p);\n return !!c;\n }\n return false;\n }\n }, {\n key: \"_isRoot\",\n value: function _isRoot(item) {\n return !Menu._findParent(item, 'menu-item', false);\n }\n }, {\n key: \"_findParent\",\n value: function _findParent(el, cls) {\n var throwError = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (el.tagName.toUpperCase() === 'BODY') return null;\n el = el.parentNode;\n while (el.tagName.toUpperCase() !== 'BODY' && !el.classList.contains(cls)) {\n el = el.parentNode;\n }\n el = el.tagName.toUpperCase() !== 'BODY' ? el : null;\n if (!el && throwError) throw new Error(\"Cannot find `.\".concat(cls, \"` parent element\"));\n return el;\n }\n }, {\n key: \"_findChild\",\n value: function _findChild(el, cls) {\n var items = el.childNodes;\n var found = [];\n for (var i = 0, l = items.length; i < l; i++) {\n if (items[i].classList) {\n var passed = 0;\n for (var j = 0; j < cls.length; j++) {\n if (items[i].classList.contains(cls[j])) passed += 1;\n }\n if (cls.length === passed) found.push(items[i]);\n }\n }\n return found;\n }\n }, {\n key: \"_findMenu\",\n value: function _findMenu(item) {\n var curEl = item.childNodes[0];\n var menu = null;\n while (curEl && !menu) {\n if (curEl.classList && curEl.classList.contains('menu-sub')) menu = curEl;\n curEl = curEl.nextSibling;\n }\n if (!menu) throw new Error('Cannot find `.menu-sub` element for the current `.menu-toggle`');\n return menu;\n }\n\n // Has class\n }, {\n key: \"_hasClass\",\n value: function _hasClass(cls) {\n var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.Helpers.ROOT_EL;\n var result = false;\n cls.split(' ').forEach(function (c) {\n if (el.classList.contains(c)) result = true;\n });\n return result;\n }\n }, {\n key: \"_getItem\",\n value: function _getItem(el, toggle) {\n var item = null;\n var selector = toggle ? 'menu-toggle' : 'menu-link';\n if (el.classList.contains('menu-item')) {\n if (Menu._findChild(el, [selector]).length) item = el;\n } else if (el.classList.contains(selector)) {\n item = el.parentNode.classList.contains('menu-item') ? el.parentNode : null;\n }\n if (!item) {\n throw new Error(\"\".concat(toggle ? 'Toggable ' : '', \"`.menu-item` element not found.\"));\n }\n return item;\n }\n }, {\n key: \"_getLink\",\n value: function _getLink(el, toggle) {\n var found = [];\n var selector = toggle ? 'menu-toggle' : 'menu-link';\n if (el.classList.contains(selector)) found = [el];else if (el.classList.contains('menu-item')) found = Menu._findChild(el, [selector]);\n if (!found.length) throw new Error(\"`\".concat(selector, \"` element not found.\"));\n return found[0];\n }\n }, {\n key: \"_bindAnimationEndEvent\",\n value: function _bindAnimationEndEvent(el, handler) {\n var cb = function cb(e) {\n if (e.target !== el) return;\n Menu._unbindAnimationEndEvent(el);\n handler(e);\n };\n var duration = window.getComputedStyle(el).transitionDuration;\n duration = parseFloat(duration) * (duration.indexOf('ms') !== -1 ? 1 : 1000);\n el._menuAnimationEndEventCb = cb;\n TRANSITION_EVENTS.forEach(function (ev) {\n return el.addEventListener(ev, el._menuAnimationEndEventCb, false);\n });\n el._menuAnimationEndEventTimeout = setTimeout(function () {\n cb({\n target: el\n });\n }, duration + 50);\n }\n }, {\n key: \"_promisify\",\n value: function _promisify(fn) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n var result = fn.apply(void 0, args);\n if (result instanceof Promise) {\n return result;\n }\n if (result === false) {\n return Promise.reject();\n }\n return Promise.resolve();\n }\n }, {\n key: \"_unbindAnimationEndEvent\",\n value: function _unbindAnimationEndEvent(el) {\n var cb = el._menuAnimationEndEventCb;\n if (el._menuAnimationEndEventTimeout) {\n clearTimeout(el._menuAnimationEndEventTimeout);\n el._menuAnimationEndEventTimeout = null;\n }\n if (!cb) return;\n TRANSITION_EVENTS.forEach(function (ev) {\n return el.removeEventListener(ev, cb, false);\n });\n el._menuAnimationEndEventCb = null;\n }\n }, {\n key: \"setDisabled\",\n value: function setDisabled(el, disabled) {\n Menu._getItem(el, false).classList[disabled ? 'add' : 'remove']('disabled');\n }\n }, {\n key: \"isActive\",\n value: function isActive(el) {\n return Menu._getItem(el, false).classList.contains('active');\n }\n }, {\n key: \"isOpened\",\n value: function isOpened(el) {\n return Menu._getItem(el, false).classList.contains('open');\n }\n }, {\n key: \"isDisabled\",\n value: function isDisabled(el) {\n return Menu._getItem(el, false).classList.contains('disabled');\n }\n }]);\n return Menu;\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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b0JBQWtCdEUsRUFBRSxFQUFFO01BQ3BCLE9BQU9ELElBQUksQ0FBQzJHLFFBQVEsQ0FBQzFHLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQytCLFNBQVMsQ0FBQ3VDLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDaEU7RUFBQztFQUFBO0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TbmVhdC8uL2pzL21lbnUuanM/ODc3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBUUkFOU0lUSU9OX0VWRU5UUyA9IFsndHJhbnNpdGlvbmVuZCcsICd3ZWJraXRUcmFuc2l0aW9uRW5kJywgJ29UcmFuc2l0aW9uRW5kJ11cclxuLy8gY29uc3QgVFJBTlNJVElPTl9QUk9QRVJUSUVTID0gWyd0cmFuc2l0aW9uJywgJ01velRyYW5zaXRpb24nLCAnd2Via2l0VHJhbnNpdGlvbicsICdXZWJraXRUcmFuc2l0aW9uJywgJ09UcmFuc2l0aW9uJ11cclxuY29uc3QgREVMVEEgPSA1XHJcblxyXG5jbGFzcyBNZW51IHtcclxuICBjb25zdHJ1Y3RvcihlbCwgY29uZmlnID0ge30sIF9QUyA9IG51bGwpIHtcclxuICAgIHRoaXMuX2VsID0gZWxcclxuICAgIHRoaXMuX2hvcml6b250YWwgPSBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJ1xyXG4gICAgdGhpcy5fYW5pbWF0ZSA9IGNvbmZpZy5hbmltYXRlICE9PSBmYWxzZVxyXG4gICAgdGhpcy5fYWNjb3JkaW9uID0gY29uZmlnLmFjY29yZGlvbiAhPT0gZmFsc2VcclxuICAgIHRoaXMuX3Nob3dEcm9wZG93bk9uSG92ZXIgPSBCb29sZWFuKGNvbmZpZy5zaG93RHJvcGRvd25PbkhvdmVyKVxyXG4gICAgdGhpcy5fY2xvc2VDaGlsZHJlbiA9IEJvb2xlYW4oY29uZmlnLmNsb3NlQ2hpbGRyZW4pXHJcbiAgICB0aGlzLl9ydGwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXInKSA9PT0gJ3J0bCcgfHwgZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RpcicpID09PSAncnRsJ1xyXG5cclxuICAgIHRoaXMuX29uT3BlbiA9IGNvbmZpZy5vbk9wZW4gfHwgKCgpID0+IHt9KVxyXG4gICAgdGhpcy5fb25PcGVuZWQgPSBjb25maWcub25PcGVuZWQgfHwgKCgpID0+IHt9KVxyXG4gICAgdGhpcy5fb25DbG9zZSA9IGNvbmZpZy5vbkNsb3NlIHx8ICgoKSA9PiB7fSlcclxuICAgIHRoaXMuX29uQ2xvc2VkID0gY29uZmlnLm9uQ2xvc2VkIHx8ICgoKSA9PiB7fSlcclxuXHJcbiAgICB0aGlzLl9wc1Njcm9sbCA9IG51bGxcclxuICAgIHRoaXMuX3RvcFBhcmVudCA9IG51bGxcclxuICAgIHRoaXMuX21lbnVCZ0NsYXNzID0gbnVsbFxyXG5cclxuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ21lbnUnKVxyXG4gICAgZWwuY2xhc3NMaXN0W3RoaXMuX2FuaW1hdGUgPyAncmVtb3ZlJyA6ICdhZGQnXSgnbWVudS1uby1hbmltYXRpb24nKVxyXG5cclxuICAgIGlmICghdGhpcy5faG9yaXpvbnRhbCkge1xyXG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKCdtZW51LXZlcnRpY2FsJylcclxuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnbWVudS1ob3Jpem9udGFsJylcclxuXHJcbiAgICAgIGNvbnN0IFBlcmZlY3RTY3JvbGxiYXJMaWIgPSBfUFMgfHwgd2luZG93LlBlcmZlY3RTY3JvbGxiYXJcclxuXHJcbiAgICAgIGlmIChQZXJmZWN0U2Nyb2xsYmFyTGliKSB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsYmFyID0gbmV3IFBlcmZlY3RTY3JvbGxiYXJMaWIoZWwucXVlcnlTZWxlY3RvcignLm1lbnUtaW5uZXInKSwge1xyXG4gICAgICAgICAgc3VwcHJlc3NTY3JvbGxYOiB0cnVlLFxyXG4gICAgICAgICAgd2hlZWxQcm9wYWdhdGlvbjogIU1lbnUuX2hhc0NsYXNzKCdsYXlvdXQtbWVudS1maXhlZCBsYXlvdXQtbWVudS1maXhlZC1vZmZjYW52YXMnKVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHdpbmRvdy5IZWxwZXJzLm1lbnVQc1Njcm9sbCA9IHRoaXMuX3Njcm9sbGJhclxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVsLnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWlubmVyJykuY2xhc3NMaXN0LmFkZCgnb3ZlcmZsb3ctYXV0bycpXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ21lbnUtaG9yaXpvbnRhbCcpXHJcbiAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ21lbnUtdmVydGljYWwnKVxyXG5cclxuICAgICAgdGhpcy5faW5uZXIgPSBlbC5xdWVyeVNlbGVjdG9yKCcubWVudS1pbm5lcicpXHJcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2lubmVyLnBhcmVudE5vZGVcclxuXHJcbiAgICAgIHRoaXMuX3ByZXZCdG4gPSBlbC5xdWVyeVNlbGVjdG9yKCcubWVudS1ob3Jpem9udGFsLXByZXYnKVxyXG4gICAgICBpZiAoIXRoaXMuX3ByZXZCdG4pIHtcclxuICAgICAgICB0aGlzLl9wcmV2QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXHJcbiAgICAgICAgdGhpcy5fcHJldkJ0bi5ocmVmID0gJyMnXHJcbiAgICAgICAgdGhpcy5fcHJldkJ0bi5jbGFzc05hbWUgPSAnbWVudS1ob3Jpem9udGFsLXByZXYnXHJcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3ByZXZCdG4pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX3dyYXBwZXIgPSBlbC5xdWVyeVNlbGVjdG9yKCcubWVudS1ob3Jpem9udGFsLXdyYXBwZXInKVxyXG4gICAgICBpZiAoIXRoaXMuX3dyYXBwZXIpIHtcclxuICAgICAgICB0aGlzLl93cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgICAgICB0aGlzLl93cmFwcGVyLmNsYXNzTmFtZSA9ICdtZW51LWhvcml6b250YWwtd3JhcHBlcidcclxuICAgICAgICB0aGlzLl93cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuX2lubmVyKVxyXG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl93cmFwcGVyKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9uZXh0QnRuID0gZWwucXVlcnlTZWxlY3RvcignLm1lbnUtaG9yaXpvbnRhbC1uZXh0JylcclxuICAgICAgaWYgKCF0aGlzLl9uZXh0QnRuKSB7XHJcbiAgICAgICAgdGhpcy5fbmV4dEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxyXG4gICAgICAgIHRoaXMuX25leHRCdG4uaHJlZiA9ICcjJ1xyXG4gICAgICAgIHRoaXMuX25leHRCdG4uY2xhc3NOYW1lID0gJ21lbnUtaG9yaXpvbnRhbC1uZXh0J1xyXG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9uZXh0QnRuKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9pbm5lclBvc2l0aW9uID0gMFxyXG4gICAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIGRhdGEgYXR0cmlidXRlIGZvciBiZyBjb2xvciBjbGFzcyBvZiBtZW51XHJcbiAgICBjb25zdCBtZW51Q2xhc3NMaXN0ID0gZWwuY2xhc3NMaXN0XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZW51Q2xhc3NMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChtZW51Q2xhc3NMaXN0W2ldLnN0YXJ0c1dpdGgoJ2JnLScpKSB7XHJcbiAgICAgICAgdGhpcy5fbWVudUJnQ2xhc3MgPSBtZW51Q2xhc3NMaXN0W2ldXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS1iZy1jbGFzcycsIHRoaXMuX21lbnVCZ0NsYXNzKVxyXG5cclxuICAgIC8vIFN3aXRjaCB0byB2ZXJ0aWNhbCBtZW51IG9uIHNtYWxsIHNjcmVlbiBmb3IgaG9yaXpvbnRhbCBtZW51IGxheW91dCBvbiBwYWdlIGxvYWRcclxuICAgIGlmICh0aGlzLl9ob3Jpem9udGFsICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgd2luZG93LkhlbHBlcnMuTEFZT1VUX0JSRUFLUE9JTlQpIHRoaXMuc3dpdGNoTWVudSgndmVydGljYWwnKVxyXG5cclxuICAgIHRoaXMuX2JpbmRFdmVudHMoKVxyXG5cclxuICAgIC8vIExpbmsgbWVudSBpbnN0YW5jZSB0byBlbGVtZW50XHJcbiAgICBlbC5tZW51SW5zdGFuY2UgPSB0aGlzXHJcbiAgfVxyXG5cclxuICBfYmluZEV2ZW50cygpIHtcclxuICAgIC8vIENsaWNrIEV2ZW50XHJcbiAgICB0aGlzLl9ldm50RWxDbGljayA9IGUgPT4ge1xyXG4gICAgICAvLyBGaW5kIHRvcCBwYXJlbnQgZWxlbWVudFxyXG4gICAgICBpZiAoZS50YXJnZXQuY2xvc2VzdCgndWwnKSAmJiBlLnRhcmdldC5jbG9zZXN0KCd1bCcpLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1pbm5lcicpKSB7XHJcbiAgICAgICAgY29uc3QgbWVudUl0ZW0gPSBNZW51Ll9maW5kUGFyZW50KGUudGFyZ2V0LCAnbWVudS1pdGVtJywgZmFsc2UpXHJcblxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xyXG4gICAgICAgIGlmIChtZW51SXRlbSkgdGhpcy5fdG9wUGFyZW50ID0gbWVudUl0ZW0uY2hpbGROb2Rlc1swXVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB0b2dnbGVMaW5rID0gZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LXRvZ2dsZScpXHJcbiAgICAgICAgPyBlLnRhcmdldFxyXG4gICAgICAgIDogTWVudS5fZmluZFBhcmVudChlLnRhcmdldCwgJ21lbnUtdG9nZ2xlJywgZmFsc2UpXHJcblxyXG4gICAgICBpZiAodG9nZ2xlTGluaykge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG5cclxuICAgICAgICBpZiAodG9nZ2xlTGluay5nZXRBdHRyaWJ1dGUoJ2RhdGEtaG92ZXInKSAhPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICB0aGlzLnRvZ2dsZSh0b2dnbGVMaW5rKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCghdGhpcy5fc2hvd0Ryb3Bkb3duT25Ib3ZlciAmJiB0aGlzLl9ob3Jpem9udGFsKSB8fCAhdGhpcy5faG9yaXpvbnRhbCB8fCB3aW5kb3cuSGVscGVycy5pc01vYmlsZURldmljZSlcclxuICAgICAgdGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9ldm50RWxDbGljaylcclxuXHJcbiAgICB0aGlzLl9ldm50V2luZG93UmVzaXplID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICAgIGlmICh0aGlzLl9sYXN0V2lkdGggIT09IHdpbmRvdy5pbm5lcldpZHRoKSB7XHJcbiAgICAgICAgdGhpcy5fbGFzdFdpZHRoID0gd2luZG93LmlubmVyV2lkdGhcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGhvcml6b250YWxNZW51VGVtcGxhdGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtdGVtcGxhdGVePSdob3Jpem9udGFsLW1lbnUnXVwiKVxyXG4gICAgICBpZiAoIXRoaXMuX2hvcml6b250YWwgJiYgIWhvcml6b250YWxNZW51VGVtcGxhdGUpIHRoaXMubWFuYWdlU2Nyb2xsKClcclxuICAgIH1cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9ldm50V2luZG93UmVzaXplKVxyXG5cclxuICAgIGlmICh0aGlzLl9ob3Jpem9udGFsKSB7XHJcbiAgICAgIHRoaXMuX2V2bnRQcmV2QnRuQ2xpY2sgPSBlID0+IHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICBpZiAodGhpcy5fcHJldkJ0bi5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHJldHVyblxyXG4gICAgICAgIHRoaXMuX3NsaWRlKCdwcmV2JylcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9wcmV2QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fZXZudFByZXZCdG5DbGljaylcclxuXHJcbiAgICAgIHRoaXMuX2V2bnROZXh0QnRuQ2xpY2sgPSBlID0+IHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICBpZiAodGhpcy5fbmV4dEJ0bi5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHJldHVyblxyXG4gICAgICAgIHRoaXMuX3NsaWRlKCduZXh0JylcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9uZXh0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fZXZudE5leHRCdG5DbGljaylcclxuXHJcbiAgICAgIHRoaXMuX2V2bnRCb2R5Q2xpY2sgPSBlID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX2lubmVyLmNvbnRhaW5zKGUudGFyZ2V0KSAmJiB0aGlzLl9lbC5xdWVyeVNlbGVjdG9yQWxsKCcubWVudS1pbm5lciA+IC5tZW51LWl0ZW0ub3BlbicpLmxlbmd0aClcclxuICAgICAgICAgIHRoaXMuY2xvc2VBbGwoKVxyXG4gICAgICB9XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9ldm50Qm9keUNsaWNrKVxyXG5cclxuICAgICAgaWYgKHRoaXMuX3Nob3dEcm9wZG93bk9uSG92ZXIpIHtcclxuICAgICAgICAvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAgICAgKiBIb3Jpem9udGFsIE1lbnUgTW91c2UgT3ZlciBFdmVudFxyXG4gICAgICAgICAqID8gZS50YXJnZXQgIT09IGUuY3VycmVudFRhcmdldCBjb25kaXRpb24gdG8gZGlzYWJsZSBtb3VzZW92ZXIgZXZlbnQgb24gd2hvbGUgbWVudSBuYXZiYXJcclxuICAgICAgICAgKiA/ICFlLnRhcmdldC5wYXJlbnROb2RlLmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpIHRvIGRpc2FibGUgbW91c2VvdmVyIGV2ZW50cyBvbiBpY29uLCB0ZXh0IGFuZCBkcm9wZG93biBhcnJvd1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2V2bnRFbE1vdXNlT3ZlciA9IGUgPT4ge1xyXG4gICAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQgJiYgIWUudGFyZ2V0LnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJykpIHtcclxuICAgICAgICAgICAgY29uc3QgdG9nZ2xlTGluayA9IGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbWVudS10b2dnbGUnKSA/IGUudGFyZ2V0IDogbnVsbFxyXG5cclxuICAgICAgICAgICAgaWYgKHRvZ2dsZUxpbmspIHtcclxuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRvZ2dsZUxpbmsuZ2V0QXR0cmlidXRlKCdkYXRhLWhvdmVyJykgIT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGUodG9nZ2xlTGluaylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2hvcml6b250YWwgJiYgd2luZG93LnNjcmVlbi53aWR0aCA+IHdpbmRvdy5IZWxwZXJzLkxBWU9VVF9CUkVBS1BPSU5UKSB7XHJcbiAgICAgICAgICB0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLl9ldm50RWxNb3VzZU92ZXIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAgICAgKiBIb3Jpem9udGFsIE1lbnUgTW91c2UgT3V0IEV2ZW50XHJcbiAgICAgICAgICogPyBlLnRhcmdldCAhPT0gZS5jdXJyZW50VGFyZ2V0IGNvbmRpdGlvbiB0byBkaXNhYmxlIG1vdXNlb3V0IGV2ZW50IG9uIHdob2xlIG1lbnUgbmF2YmFyXHJcbiAgICAgICAgICogPyBtb3VzZU91dEVsLnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJykgdG8gY2hlY2sgaWYgdGhlIG1vdXNlb3V0IGVsZW1lbnQgaGFzIG9wZW4gY2xhc3Mgb3Igbm90XHJcbiAgICAgICAgICogPyAhbW91c2VPdXRFbC5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtdG9nZ2xlJykgdG8gY2hlY2sgaWYgbW91c2VvdXQgd2FzIGZyb20gc2luZ2xlIG1lbnUgaXRlbSBhbmQgbm90IGZyb20gdGhlIG9uZSB3aGljaCBoYXMgc3VibWVudVxyXG4gICAgICAgICAqID8gIW1vdXNlT3ZlckVsLnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LWxpbmsnKSB0byBkaXNhYmxlIG1vdXNlb3V0IGV2ZW50IGZvciBpY29uLCB0ZXh0IGFuZCBkcm9wZG93biBhcnJvd1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuX2V2bnRFbE1vdXNlT3V0ID0gZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBtYWluRWwgPSBlLmN1cnJlbnRUYXJnZXRcclxuICAgICAgICAgIGNvbnN0IG1vdXNlT3V0RWwgPSBlLnRhcmdldFxyXG4gICAgICAgICAgY29uc3QgbW91c2VPdmVyRWwgPSBlLnRvRWxlbWVudCB8fCBlLnJlbGF0ZWRUYXJnZXRcclxuXHJcbiAgICAgICAgICAvLyBGaW5kIGFic29sdXRlIHBhcmVudCBvZiBhbnkgbWVudSBpdGVtIGZyb20gd2hpY2ggbW91c2VvdXQgZXZlbnQgdHJpZ2dlcmVkXHJcbiAgICAgICAgICBpZiAobW91c2VPdXRFbC5jbG9zZXN0KCd1bCcpICYmIG1vdXNlT3V0RWwuY2xvc2VzdCgndWwnKS5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtaW5uZXInKSkge1xyXG4gICAgICAgICAgICB0aGlzLl90b3BQYXJlbnQgPSBtb3VzZU91dEVsXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBtb3VzZU91dEVsICE9PSBtYWluRWwgJiZcclxuICAgICAgICAgICAgKG1vdXNlT3V0RWwucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ29wZW4nKSB8fCAhbW91c2VPdXRFbC5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtdG9nZ2xlJykpICYmXHJcbiAgICAgICAgICAgIG1vdXNlT3ZlckVsICYmXHJcbiAgICAgICAgICAgIG1vdXNlT3ZlckVsLnBhcmVudE5vZGUgJiZcclxuICAgICAgICAgICAgIW1vdXNlT3ZlckVsLnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LWxpbmsnKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIFdoZW4gbW91c2UgZ29lcyB0b3RhbGx5IG91dCBvZiBtZW51IGl0ZW1zLCBjaGVjayBtb3VzZSBvdmVyIGVsZW1lbnQgdG8gY29uZmlybSBpdCdzIG5vdCB0aGUgY2hpbGQgb2YgbWVudSwgb25jZSBjb25maXJtZWQgY2xvc2UgdGhlIG1lbnVcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3RvcFBhcmVudCAmJiAhTWVudS5jaGlsZE9mKG1vdXNlT3ZlckVsLCB0aGlzLl90b3BQYXJlbnQucGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0b2dnbGVMaW5rID0gdGhpcy5fdG9wUGFyZW50LmNsYXNzTGlzdC5jb250YWlucygnbWVudS10b2dnbGUnKSA/IHRoaXMuX3RvcFBhcmVudCA6IG51bGxcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRvZ2dsZUxpbmspIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0b2dnbGVMaW5rLmdldEF0dHJpYnV0ZSgnZGF0YS1ob3ZlcicpICE9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUodG9nZ2xlTGluaylcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fdG9wUGFyZW50ID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gV2hlbiBtb3VzZSBlbnRlciB0aGUgc3ViIG1lbnUsIGNoZWNrIGlmIGl0J3MgY2hpbGQgb2YgdGhlIGluaXRpYWxseSBtb3VzZSBvdmVyZWQgbWVudSBpdGVtKEFjdHVhbCBQYXJlbnQpLFxyXG4gICAgICAgICAgICAvLyBpZiBpdCdzIHRoZSBwYXJlbnQgZG8gbm90IGNsb3NlIHRoZSBzdWIgbWVudSBlbHNlIGNsb3NlIHRoZSBzdWIgbWVudVxyXG4gICAgICAgICAgICBpZiAoTWVudS5jaGlsZE9mKG1vdXNlT3ZlckVsLCBtb3VzZU91dEVsLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdG9nZ2xlTGluayA9IG1vdXNlT3V0RWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LXRvZ2dsZScpID8gbW91c2VPdXRFbCA6IG51bGxcclxuXHJcbiAgICAgICAgICAgIGlmICh0b2dnbGVMaW5rKSB7XHJcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXHJcblxyXG4gICAgICAgICAgICAgIGlmICh0b2dnbGVMaW5rLmdldEF0dHJpYnV0ZSgnZGF0YS1ob3ZlcicpICE9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKHRvZ2dsZUxpbmspXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9ob3Jpem9udGFsICYmIHdpbmRvdy5zY3JlZW4ud2lkdGggPiB3aW5kb3cuSGVscGVycy5MQVlPVVRfQlJFQUtQT0lOVCkge1xyXG4gICAgICAgICAgdGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCB0aGlzLl9ldm50RWxNb3VzZU91dClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBjaGlsZE9mKC8qIGNoaWxkIG5vZGUgKi8gYywgLyogcGFyZW50IG5vZGUgKi8gcCkge1xyXG4gICAgLy8gcmV0dXJucyBib29sZWFuXHJcbiAgICBpZiAoYy5wYXJlbnROb2RlKSB7XHJcbiAgICAgIHdoaWxlICgoYyA9IGMucGFyZW50Tm9kZSkgJiYgYyAhPT0gcCk7XHJcbiAgICAgIHJldHVybiAhIWNcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgX3VuYmluZEV2ZW50cygpIHtcclxuICAgIGlmICh0aGlzLl9ldm50RWxDbGljaykge1xyXG4gICAgICB0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2V2bnRFbENsaWNrKVxyXG4gICAgICB0aGlzLl9ldm50RWxDbGljayA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZXZudEVsTW91c2VPdmVyKSB7XHJcbiAgICAgIHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIHRoaXMuX2V2bnRFbE1vdXNlT3ZlcilcclxuICAgICAgdGhpcy5fZXZudEVsTW91c2VPdmVyID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9ldm50RWxNb3VzZU91dCkge1xyXG4gICAgICB0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIHRoaXMuX2V2bnRFbE1vdXNlT3V0KVxyXG4gICAgICB0aGlzLl9ldm50RWxNb3VzZU91dCA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZXZudFdpbmRvd1Jlc2l6ZSkge1xyXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fZXZudFdpbmRvd1Jlc2l6ZSlcclxuICAgICAgdGhpcy5fZXZudFdpbmRvd1Jlc2l6ZSA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZXZudEJvZHlDbGljaykge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fZXZudEJvZHlDbGljaylcclxuICAgICAgdGhpcy5fZXZudEJvZHlDbGljayA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZXZudElubmVyTW91c2Vtb3ZlKSB7XHJcbiAgICAgIHRoaXMuX2lubmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX2V2bnRJbm5lck1vdXNlbW92ZSlcclxuICAgICAgdGhpcy5fZXZudElubmVyTW91c2Vtb3ZlID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9ldm50SW5uZXJNb3VzZWxlYXZlKSB7XHJcbiAgICAgIHRoaXMuX2lubmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLl9ldm50SW5uZXJNb3VzZWxlYXZlKVxyXG4gICAgICB0aGlzLl9ldm50SW5uZXJNb3VzZWxlYXZlID0gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIF9pc1Jvb3QoaXRlbSkge1xyXG4gICAgcmV0dXJuICFNZW51Ll9maW5kUGFyZW50KGl0ZW0sICdtZW51LWl0ZW0nLCBmYWxzZSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBfZmluZFBhcmVudChlbCwgY2xzLCB0aHJvd0Vycm9yID0gdHJ1ZSkge1xyXG4gICAgaWYgKGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSByZXR1cm4gbnVsbFxyXG4gICAgZWwgPSBlbC5wYXJlbnROb2RlXHJcbiAgICB3aGlsZSAoZWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnQk9EWScgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucyhjbHMpKSB7XHJcbiAgICAgIGVsID0gZWwucGFyZW50Tm9kZVxyXG4gICAgfVxyXG5cclxuICAgIGVsID0gZWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnQk9EWScgPyBlbCA6IG51bGxcclxuXHJcbiAgICBpZiAoIWVsICYmIHRocm93RXJyb3IpIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgXFxgLiR7Y2xzfVxcYCBwYXJlbnQgZWxlbWVudGApXHJcblxyXG4gICAgcmV0dXJuIGVsXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX2ZpbmRDaGlsZChlbCwgY2xzKSB7XHJcbiAgICBjb25zdCBpdGVtcyA9IGVsLmNoaWxkTm9kZXNcclxuICAgIGNvbnN0IGZvdW5kID0gW11cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBpZiAoaXRlbXNbaV0uY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgbGV0IHBhc3NlZCA9IDBcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjbHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGlmIChpdGVtc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoY2xzW2pdKSkgcGFzc2VkICs9IDFcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjbHMubGVuZ3RoID09PSBwYXNzZWQpIGZvdW5kLnB1c2goaXRlbXNbaV0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm91bmRcclxuICB9XHJcblxyXG4gIHN0YXRpYyBfZmluZE1lbnUoaXRlbSkge1xyXG4gICAgbGV0IGN1ckVsID0gaXRlbS5jaGlsZE5vZGVzWzBdXHJcbiAgICBsZXQgbWVudSA9IG51bGxcclxuXHJcbiAgICB3aGlsZSAoY3VyRWwgJiYgIW1lbnUpIHtcclxuICAgICAgaWYgKGN1ckVsLmNsYXNzTGlzdCAmJiBjdXJFbC5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtc3ViJykpIG1lbnUgPSBjdXJFbFxyXG4gICAgICBjdXJFbCA9IGN1ckVsLm5leHRTaWJsaW5nXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFtZW51KSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIGAubWVudS1zdWJgIGVsZW1lbnQgZm9yIHRoZSBjdXJyZW50IGAubWVudS10b2dnbGVgJylcclxuXHJcbiAgICByZXR1cm4gbWVudVxyXG4gIH1cclxuXHJcbiAgLy8gSGFzIGNsYXNzXHJcbiAgc3RhdGljIF9oYXNDbGFzcyhjbHMsIGVsID0gd2luZG93LkhlbHBlcnMuUk9PVF9FTCkge1xyXG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlXHJcblxyXG4gICAgY2xzLnNwbGl0KCcgJykuZm9yRWFjaChjID0+IHtcclxuICAgICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhjKSkgcmVzdWx0ID0gdHJ1ZVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbiAgfVxyXG5cclxuICBvcGVuKGVsLCBjbG9zZUNoaWxkcmVuID0gdGhpcy5fY2xvc2VDaGlsZHJlbikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2ZpbmRVbm9wZW5lZFBhcmVudChNZW51Ll9nZXRJdGVtKGVsLCB0cnVlKSwgY2xvc2VDaGlsZHJlbilcclxuXHJcbiAgICBpZiAoIWl0ZW0pIHJldHVyblxyXG5cclxuICAgIGNvbnN0IHRvZ2dsZUxpbmsgPSBNZW51Ll9nZXRMaW5rKGl0ZW0sIHRydWUpXHJcblxyXG4gICAgTWVudS5fcHJvbWlzaWZ5KHRoaXMuX29uT3BlbiwgdGhpcywgaXRlbSwgdG9nZ2xlTGluaywgTWVudS5fZmluZE1lbnUoaXRlbSkpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX2hvcml6b250YWwgfHwgIU1lbnUuX2lzUm9vdChpdGVtKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2FuaW1hdGUgJiYgIXRoaXMuX2hvcml6b250YWwpIHtcclxuICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLl90b2dnbGVBbmltYXRpb24odHJ1ZSwgaXRlbSwgZmFsc2UpKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fYWNjb3JkaW9uKSB0aGlzLl9jbG9zZU90aGVyKGl0ZW0sIGNsb3NlQ2hpbGRyZW4pXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2FuaW1hdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlRHJvcGRvd24odHJ1ZSwgaXRlbSwgY2xvc2VDaGlsZHJlbilcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xyXG4gICAgICAgICAgICB0aGlzLl9vbk9wZW5lZCAmJiB0aGlzLl9vbk9wZW5lZCh0aGlzLCBpdGVtLCB0b2dnbGVMaW5rLCBNZW51Ll9maW5kTWVudShpdGVtKSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnb3BlbicpXHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcclxuICAgICAgICAgICAgdGhpcy5fb25PcGVuZWQgJiYgdGhpcy5fb25PcGVuZWQodGhpcywgaXRlbSwgdG9nZ2xlTGluaywgTWVudS5fZmluZE1lbnUoaXRlbSkpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9hY2NvcmRpb24pIHRoaXMuX2Nsb3NlT3RoZXIoaXRlbSwgY2xvc2VDaGlsZHJlbilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fdG9nZ2xlRHJvcGRvd24odHJ1ZSwgaXRlbSwgY2xvc2VDaGlsZHJlbilcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcclxuICAgICAgICAgIHRoaXMuX29uT3BlbmVkICYmIHRoaXMuX29uT3BlbmVkKHRoaXMsIGl0ZW0sIHRvZ2dsZUxpbmssIE1lbnUuX2ZpbmRNZW51KGl0ZW0pKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKCgpID0+IHt9KVxyXG4gIH1cclxuXHJcbiAgY2xvc2UoZWwsIGNsb3NlQ2hpbGRyZW4gPSB0aGlzLl9jbG9zZUNoaWxkcmVuLCBfYXV0b0Nsb3NlID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGl0ZW0gPSBNZW51Ll9nZXRJdGVtKGVsLCB0cnVlKVxyXG4gICAgY29uc3QgdG9nZ2xlTGluayA9IE1lbnUuX2dldExpbmsoZWwsIHRydWUpXHJcblxyXG4gICAgaWYgKCFpdGVtLmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpIHx8IGl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSByZXR1cm5cclxuXHJcbiAgICBNZW51Ll9wcm9taXNpZnkodGhpcy5fb25DbG9zZSwgdGhpcywgaXRlbSwgdG9nZ2xlTGluaywgTWVudS5fZmluZE1lbnUoaXRlbSksIF9hdXRvQ2xvc2UpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX2hvcml6b250YWwgfHwgIU1lbnUuX2lzUm9vdChpdGVtKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2FuaW1hdGUgJiYgIXRoaXMuX2hvcml6b250YWwpIHtcclxuICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLl90b2dnbGVBbmltYXRpb24oZmFsc2UsIGl0ZW0sIGNsb3NlQ2hpbGRyZW4pKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJylcclxuXHJcbiAgICAgICAgICAgIGlmIChjbG9zZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3BlbmVkID0gaXRlbS5xdWVyeVNlbGVjdG9yQWxsKCcubWVudS1pdGVtLm9wZW4nKVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gb3BlbmVkLmxlbmd0aDsgaSA8IGw7IGkrKykgb3BlbmVkW2ldLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXHJcbiAgICAgICAgICAgIHRoaXMuX29uQ2xvc2VkICYmIHRoaXMuX29uQ2xvc2VkKHRoaXMsIGl0ZW0sIHRvZ2dsZUxpbmssIE1lbnUuX2ZpbmRNZW51KGl0ZW0pKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl90b2dnbGVEcm9wZG93bihmYWxzZSwgaXRlbSwgY2xvc2VDaGlsZHJlbilcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcclxuICAgICAgICAgIHRoaXMuX29uQ2xvc2VkICYmIHRoaXMuX29uQ2xvc2VkKHRoaXMsIGl0ZW0sIHRvZ2dsZUxpbmssIE1lbnUuX2ZpbmRNZW51KGl0ZW0pKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKCgpID0+IHt9KVxyXG4gIH1cclxuXHJcbiAgX2Nsb3NlT3RoZXIoaXRlbSwgY2xvc2VDaGlsZHJlbikge1xyXG4gICAgY29uc3Qgb3BlbmVkID0gTWVudS5fZmluZENoaWxkKGl0ZW0ucGFyZW50Tm9kZSwgWydtZW51LWl0ZW0nLCAnb3BlbiddKVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gb3BlbmVkLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBpZiAob3BlbmVkW2ldICE9PSBpdGVtKSB0aGlzLmNsb3NlKG9wZW5lZFtpXSwgY2xvc2VDaGlsZHJlbilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZShlbCwgY2xvc2VDaGlsZHJlbiA9IHRoaXMuX2Nsb3NlQ2hpbGRyZW4pIHtcclxuICAgIGNvbnN0IGl0ZW0gPSBNZW51Ll9nZXRJdGVtKGVsLCB0cnVlKVxyXG4gICAgLy8gY29uc3QgdG9nZ2xlTGluayA9IE1lbnUuX2dldExpbmsoZWwsIHRydWUpXHJcblxyXG4gICAgaWYgKGl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJykpIHRoaXMuY2xvc2UoaXRlbSwgY2xvc2VDaGlsZHJlbilcclxuICAgIGVsc2UgdGhpcy5vcGVuKGl0ZW0sIGNsb3NlQ2hpbGRyZW4pXHJcbiAgfVxyXG5cclxuICBfdG9nZ2xlRHJvcGRvd24oc2hvdywgaXRlbSwgY2xvc2VDaGlsZHJlbikge1xyXG4gICAgY29uc3QgbWVudSA9IE1lbnUuX2ZpbmRNZW51KGl0ZW0pXHJcbiAgICBjb25zdCBhY3R1YWxJdGVtID0gaXRlbVxyXG4gICAgbGV0IHN1Yk1lbnVJdGVtID0gZmFsc2VcclxuXHJcbiAgICBpZiAoc2hvdykge1xyXG4gICAgICBpZiAoTWVudS5fZmluZFBhcmVudChpdGVtLCAnbWVudS1zdWInLCBmYWxzZSkpIHtcclxuICAgICAgICBzdWJNZW51SXRlbSA9IHRydWVcclxuICAgICAgICBpdGVtID0gdGhpcy5fdG9wUGFyZW50ID8gdGhpcy5fdG9wUGFyZW50LnBhcmVudE5vZGUgOiBpdGVtXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHdyYXBwZXJXaWR0aCA9IE1hdGgucm91bmQodGhpcy5fd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcclxuICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLl9pbm5lclBvc2l0aW9uXHJcbiAgICAgIGNvbnN0IGl0ZW1PZmZzZXQgPSB0aGlzLl9nZXRJdGVtT2Zmc2V0KGl0ZW0pXHJcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IE1hdGgucm91bmQoaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcclxuXHJcbiAgICAgIGlmIChpdGVtT2Zmc2V0IC0gREVMVEEgPD0gLTEgKiBwb3NpdGlvbikge1xyXG4gICAgICAgIHRoaXMuX2lubmVyUG9zaXRpb24gPSAtMSAqIGl0ZW1PZmZzZXRcclxuICAgICAgfSBlbHNlIGlmIChpdGVtT2Zmc2V0ICsgcG9zaXRpb24gKyBpdGVtV2lkdGggKyBERUxUQSA+PSB3cmFwcGVyV2lkdGgpIHtcclxuICAgICAgICBpZiAoaXRlbVdpZHRoID4gd3JhcHBlcldpZHRoKSB7XHJcbiAgICAgICAgICB0aGlzLl9pbm5lclBvc2l0aW9uID0gLTEgKiBpdGVtT2Zmc2V0XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2lubmVyUG9zaXRpb24gPSAtMSAqIChpdGVtT2Zmc2V0ICsgaXRlbVdpZHRoIC0gd3JhcHBlcldpZHRoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgYWN0dWFsSXRlbS5jbGFzc0xpc3QuYWRkKCdvcGVuJylcclxuXHJcbiAgICAgIGNvbnN0IG1lbnVXaWR0aCA9IE1hdGgucm91bmQobWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcclxuXHJcbiAgICAgIGlmIChzdWJNZW51SXRlbSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGl0ZW1PZmZzZXQgKyB0aGlzLl9pbm5lclBvc2l0aW9uICsgbWVudVdpZHRoICogMiA+IHdyYXBwZXJXaWR0aCAmJlxyXG4gICAgICAgICAgbWVudVdpZHRoIDwgd3JhcHBlcldpZHRoICYmXHJcbiAgICAgICAgICBtZW51V2lkdGggPj0gaXRlbVdpZHRoXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBtZW51LnN0eWxlLmxlZnQgPSBbdGhpcy5fcnRsID8gJzEwMCUnIDogJy0xMDAlJ11cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgaXRlbU9mZnNldCArIHRoaXMuX2lubmVyUG9zaXRpb24gKyBtZW51V2lkdGggPiB3cmFwcGVyV2lkdGggJiZcclxuICAgICAgICBtZW51V2lkdGggPCB3cmFwcGVyV2lkdGggJiZcclxuICAgICAgICBtZW51V2lkdGggPiBpdGVtV2lkdGhcclxuICAgICAgKSB7XHJcbiAgICAgICAgbWVudS5zdHlsZVt0aGlzLl9ydGwgPyAnbWFyZ2luUmlnaHQnIDogJ21hcmdpbkxlZnQnXSA9IGAtJHttZW51V2lkdGggLSBpdGVtV2lkdGh9cHhgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2Nsb3NlT3RoZXIoYWN0dWFsSXRlbSwgY2xvc2VDaGlsZHJlbilcclxuICAgICAgdGhpcy5fdXBkYXRlU2xpZGVyKClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRvZ2dsZSA9IE1lbnUuX2ZpbmRDaGlsZChpdGVtLCBbJ21lbnUtdG9nZ2xlJ10pXHJcblxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXHJcbiAgICAgIHRvZ2dsZS5sZW5ndGggJiYgdG9nZ2xlWzBdLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1ob3ZlcicsICd0cnVlJylcclxuICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJylcclxuICAgICAgbWVudS5zdHlsZVt0aGlzLl9ydGwgPyAnbWFyZ2luUmlnaHQnIDogJ21hcmdpbkxlZnQnXSA9IG51bGxcclxuXHJcbiAgICAgIGlmIChjbG9zZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgY29uc3Qgb3BlbmVkID0gbWVudS5xdWVyeVNlbGVjdG9yQWxsKCcubWVudS1pdGVtLm9wZW4nKVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IG9wZW5lZC5sZW5ndGg7IGkgPCBsOyBpKyspIG9wZW5lZFtpXS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX3NsaWRlKGRpcmVjdGlvbikge1xyXG4gICAgY29uc3Qgd3JhcHBlcldpZHRoID0gTWF0aC5yb3VuZCh0aGlzLl93cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxyXG4gICAgY29uc3QgaW5uZXJXaWR0aCA9IHRoaXMuX2lubmVyV2lkdGhcclxuICAgIGxldCBuZXdQb3NpdGlvblxyXG5cclxuICAgIGlmIChkaXJlY3Rpb24gPT09ICduZXh0Jykge1xyXG4gICAgICBuZXdQb3NpdGlvbiA9IHRoaXMuX2dldFNsaWRlTmV4dFBvcygpXHJcblxyXG4gICAgICBpZiAoaW5uZXJXaWR0aCArIG5ld1Bvc2l0aW9uIDwgd3JhcHBlcldpZHRoKSB7XHJcbiAgICAgICAgbmV3UG9zaXRpb24gPSB3cmFwcGVyV2lkdGggLSBpbm5lcldpZHRoXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1Bvc2l0aW9uID0gdGhpcy5fZ2V0U2xpZGVQcmV2UG9zKClcclxuXHJcbiAgICAgIGlmIChuZXdQb3NpdGlvbiA+IDApIG5ld1Bvc2l0aW9uID0gMFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lubmVyUG9zaXRpb24gPSBuZXdQb3NpdGlvblxyXG4gICAgdGhpcy51cGRhdGUoKVxyXG4gIH1cclxuXHJcbiAgX2dldFNsaWRlTmV4dFBvcygpIHtcclxuICAgIGNvbnN0IHdyYXBwZXJXaWR0aCA9IE1hdGgucm91bmQodGhpcy5fd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcclxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5faW5uZXJQb3NpdGlvblxyXG4gICAgbGV0IGN1ckl0ZW0gPSB0aGlzLl9pbm5lci5jaGlsZE5vZGVzWzBdXHJcbiAgICBsZXQgbGVmdCA9IDBcclxuXHJcbiAgICB3aGlsZSAoY3VySXRlbSkge1xyXG4gICAgICBpZiAoY3VySXRlbS50YWdOYW1lKSB7XHJcbiAgICAgICAgY29uc3QgY3VySXRlbVdpZHRoID0gTWF0aC5yb3VuZChjdXJJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxyXG5cclxuICAgICAgICBpZiAobGVmdCArIHBvc2l0aW9uIC0gREVMVEEgPD0gd3JhcHBlcldpZHRoICYmIGxlZnQgKyBwb3NpdGlvbiArIGN1ckl0ZW1XaWR0aCArIERFTFRBID49IHdyYXBwZXJXaWR0aCkge1xyXG4gICAgICAgICAgaWYgKGN1ckl0ZW1XaWR0aCA+IHdyYXBwZXJXaWR0aCAmJiBsZWZ0ID09PSAtMSAqIHBvc2l0aW9uKSBsZWZ0ICs9IGN1ckl0ZW1XaWR0aFxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxlZnQgKz0gY3VySXRlbVdpZHRoXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1ckl0ZW0gPSBjdXJJdGVtLm5leHRTaWJsaW5nXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xICogbGVmdFxyXG4gIH1cclxuXHJcbiAgX2dldFNsaWRlUHJldlBvcygpIHtcclxuICAgIGNvbnN0IHdyYXBwZXJXaWR0aCA9IE1hdGgucm91bmQodGhpcy5fd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcclxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5faW5uZXJQb3NpdGlvblxyXG4gICAgbGV0IGN1ckl0ZW0gPSB0aGlzLl9pbm5lci5jaGlsZE5vZGVzWzBdXHJcbiAgICBsZXQgbGVmdCA9IDBcclxuXHJcbiAgICB3aGlsZSAoY3VySXRlbSkge1xyXG4gICAgICBpZiAoY3VySXRlbS50YWdOYW1lKSB7XHJcbiAgICAgICAgY29uc3QgY3VySXRlbVdpZHRoID0gTWF0aC5yb3VuZChjdXJJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxyXG5cclxuICAgICAgICBpZiAobGVmdCAtIERFTFRBIDw9IC0xICogcG9zaXRpb24gJiYgbGVmdCArIGN1ckl0ZW1XaWR0aCArIERFTFRBID49IC0xICogcG9zaXRpb24pIHtcclxuICAgICAgICAgIGlmIChjdXJJdGVtV2lkdGggPD0gd3JhcHBlcldpZHRoKSBsZWZ0ID0gbGVmdCArIGN1ckl0ZW1XaWR0aCAtIHdyYXBwZXJXaWR0aFxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxlZnQgKz0gY3VySXRlbVdpZHRoXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1ckl0ZW0gPSBjdXJJdGVtLm5leHRTaWJsaW5nXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xICogbGVmdFxyXG4gIH1cclxuXHJcbiAgc3RhdGljIF9nZXRJdGVtKGVsLCB0b2dnbGUpIHtcclxuICAgIGxldCBpdGVtID0gbnVsbFxyXG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0b2dnbGUgPyAnbWVudS10b2dnbGUnIDogJ21lbnUtbGluaydcclxuXHJcbiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LWl0ZW0nKSkge1xyXG4gICAgICBpZiAoTWVudS5fZmluZENoaWxkKGVsLCBbc2VsZWN0b3JdKS5sZW5ndGgpIGl0ZW0gPSBlbFxyXG4gICAgfSBlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoc2VsZWN0b3IpKSB7XHJcbiAgICAgIGl0ZW0gPSBlbC5wYXJlbnROb2RlLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1pdGVtJykgPyBlbC5wYXJlbnROb2RlIDogbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dG9nZ2xlID8gJ1RvZ2dhYmxlICcgOiAnJ31cXGAubWVudS1pdGVtXFxgIGVsZW1lbnQgbm90IGZvdW5kLmApXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBfZ2V0TGluayhlbCwgdG9nZ2xlKSB7XHJcbiAgICBsZXQgZm91bmQgPSBbXVxyXG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0b2dnbGUgPyAnbWVudS10b2dnbGUnIDogJ21lbnUtbGluaydcclxuXHJcbiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKHNlbGVjdG9yKSkgZm91bmQgPSBbZWxdXHJcbiAgICBlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtaXRlbScpKSBmb3VuZCA9IE1lbnUuX2ZpbmRDaGlsZChlbCwgW3NlbGVjdG9yXSlcclxuXHJcbiAgICBpZiAoIWZvdW5kLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKGBcXGAke3NlbGVjdG9yfVxcYCBlbGVtZW50IG5vdCBmb3VuZC5gKVxyXG5cclxuICAgIHJldHVybiBmb3VuZFswXVxyXG4gIH1cclxuXHJcbiAgX2ZpbmRVbm9wZW5lZFBhcmVudChpdGVtLCBjbG9zZUNoaWxkcmVuKSB7XHJcbiAgICBsZXQgdHJlZSA9IFtdXHJcbiAgICBsZXQgcGFyZW50SXRlbSA9IG51bGxcclxuXHJcbiAgICB3aGlsZSAoaXRlbSkge1xyXG4gICAgICBpZiAoaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcclxuICAgICAgICBwYXJlbnRJdGVtID0gbnVsbFxyXG4gICAgICAgIHRyZWUgPSBbXVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ29wZW4nKSkgcGFyZW50SXRlbSA9IGl0ZW1cclxuICAgICAgICB0cmVlLnB1c2goaXRlbSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaXRlbSA9IE1lbnUuX2ZpbmRQYXJlbnQoaXRlbSwgJ21lbnUtaXRlbScsIGZhbHNlKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghcGFyZW50SXRlbSkgcmV0dXJuIG51bGxcclxuICAgIGlmICh0cmVlLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHBhcmVudEl0ZW1cclxuXHJcbiAgICB0cmVlID0gdHJlZS5zbGljZSgwLCB0cmVlLmluZGV4T2YocGFyZW50SXRlbSkpXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSB0cmVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICB0cmVlW2ldLmNsYXNzTGlzdC5hZGQoJ29wZW4nKVxyXG5cclxuICAgICAgaWYgKHRoaXMuX2FjY29yZGlvbikge1xyXG4gICAgICAgIGNvbnN0IG9wZW5lZEl0ZW1zID0gTWVudS5fZmluZENoaWxkKHRyZWVbaV0ucGFyZW50Tm9kZSwgWydtZW51LWl0ZW0nLCAnb3BlbiddKVxyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMCwgayA9IG9wZW5lZEl0ZW1zLmxlbmd0aDsgaiA8IGs7IGorKykge1xyXG4gICAgICAgICAgaWYgKG9wZW5lZEl0ZW1zW2pdICE9PSB0cmVlW2ldKSB7XHJcbiAgICAgICAgICAgIG9wZW5lZEl0ZW1zW2pdLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxyXG5cclxuICAgICAgICAgICAgaWYgKGNsb3NlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICBjb25zdCBvcGVuZWRDaGlsZHJlbiA9IG9wZW5lZEl0ZW1zW2pdLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWl0ZW0ub3BlbicpXHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgeCA9IDAsIHogPSBvcGVuZWRDaGlsZHJlbi5sZW5ndGg7IHggPCB6OyB4KyspIHtcclxuICAgICAgICAgICAgICAgIG9wZW5lZENoaWxkcmVuW3hdLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXJlbnRJdGVtXHJcbiAgfVxyXG5cclxuICBfdG9nZ2xlQW5pbWF0aW9uKG9wZW4sIGl0ZW0sIGNsb3NlQ2hpbGRyZW4pIHtcclxuICAgIGNvbnN0IHRvZ2dsZUxpbmsgPSBNZW51Ll9nZXRMaW5rKGl0ZW0sIHRydWUpXHJcbiAgICBjb25zdCBtZW51ID0gTWVudS5fZmluZE1lbnUoaXRlbSlcclxuXHJcbiAgICBNZW51Ll91bmJpbmRBbmltYXRpb25FbmRFdmVudChpdGVtKVxyXG5cclxuICAgIGNvbnN0IGxpbmtIZWlnaHQgPSBNYXRoLnJvdW5kKHRvZ2dsZUxpbmsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KVxyXG5cclxuICAgIGl0ZW0uc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xyXG5cclxuICAgIGNvbnN0IGNsZWFySXRlbVN0eWxlID0gKCkgPT4ge1xyXG4gICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ21lbnUtaXRlbS1hbmltYXRpbmcnKVxyXG4gICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ21lbnUtaXRlbS1jbG9zaW5nJylcclxuICAgICAgaXRlbS5zdHlsZS5vdmVyZmxvdyA9IG51bGxcclxuICAgICAgaXRlbS5zdHlsZS5oZWlnaHQgPSBudWxsXHJcblxyXG4gICAgICBpZiAoIXRoaXMuX2hvcml6b250YWwpIHRoaXMudXBkYXRlKClcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3Blbikge1xyXG4gICAgICBpdGVtLnN0eWxlLmhlaWdodCA9IGAke2xpbmtIZWlnaHR9cHhgXHJcbiAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnbWVudS1pdGVtLWFuaW1hdGluZycpXHJcbiAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnb3BlbicpXHJcblxyXG4gICAgICBNZW51Ll9iaW5kQW5pbWF0aW9uRW5kRXZlbnQoaXRlbSwgKCkgPT4ge1xyXG4gICAgICAgIGNsZWFySXRlbVN0eWxlKClcclxuICAgICAgICB0aGlzLl9vbk9wZW5lZCh0aGlzLCBpdGVtLCB0b2dnbGVMaW5rLCBtZW51KVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaXRlbS5zdHlsZS5oZWlnaHQgPSBgJHtsaW5rSGVpZ2h0ICsgTWF0aC5yb3VuZChtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCl9cHhgXHJcbiAgICAgIH0sIDUwKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbS5zdHlsZS5oZWlnaHQgPSBgJHtsaW5rSGVpZ2h0ICsgTWF0aC5yb3VuZChtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCl9cHhgXHJcbiAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnbWVudS1pdGVtLWFuaW1hdGluZycpXHJcbiAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnbWVudS1pdGVtLWNsb3NpbmcnKVxyXG5cclxuICAgICAgTWVudS5fYmluZEFuaW1hdGlvbkVuZEV2ZW50KGl0ZW0sICgpID0+IHtcclxuICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxyXG4gICAgICAgIGNsZWFySXRlbVN0eWxlKClcclxuXHJcbiAgICAgICAgaWYgKGNsb3NlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgIGNvbnN0IG9wZW5lZCA9IGl0ZW0ucXVlcnlTZWxlY3RvckFsbCgnLm1lbnUtaXRlbS5vcGVuJylcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gb3BlbmVkLmxlbmd0aDsgaSA8IGw7IGkrKykgb3BlbmVkW2ldLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fb25DbG9zZWQodGhpcywgaXRlbSwgdG9nZ2xlTGluaywgbWVudSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGl0ZW0uc3R5bGUuaGVpZ2h0ID0gYCR7bGlua0hlaWdodH1weGBcclxuICAgICAgfSwgNTApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX2JpbmRBbmltYXRpb25FbmRFdmVudChlbCwgaGFuZGxlcikge1xyXG4gICAgY29uc3QgY2IgPSBlID0+IHtcclxuICAgICAgaWYgKGUudGFyZ2V0ICE9PSBlbCkgcmV0dXJuXHJcbiAgICAgIE1lbnUuX3VuYmluZEFuaW1hdGlvbkVuZEV2ZW50KGVsKVxyXG4gICAgICBoYW5kbGVyKGUpXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGR1cmF0aW9uID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLnRyYW5zaXRpb25EdXJhdGlvblxyXG4gICAgZHVyYXRpb24gPSBwYXJzZUZsb2F0KGR1cmF0aW9uKSAqIChkdXJhdGlvbi5pbmRleE9mKCdtcycpICE9PSAtMSA/IDEgOiAxMDAwKVxyXG5cclxuICAgIGVsLl9tZW51QW5pbWF0aW9uRW5kRXZlbnRDYiA9IGNiXHJcbiAgICBUUkFOU0lUSU9OX0VWRU5UUy5mb3JFYWNoKGV2ID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoZXYsIGVsLl9tZW51QW5pbWF0aW9uRW5kRXZlbnRDYiwgZmFsc2UpKVxyXG5cclxuICAgIGVsLl9tZW51QW5pbWF0aW9uRW5kRXZlbnRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNiKHsgdGFyZ2V0OiBlbCB9KVxyXG4gICAgfSwgZHVyYXRpb24gKyA1MClcclxuICB9XHJcblxyXG4gIF9nZXRJdGVtT2Zmc2V0KGl0ZW0pIHtcclxuICAgIGxldCBjdXJJdGVtID0gdGhpcy5faW5uZXIuY2hpbGROb2Rlc1swXVxyXG4gICAgbGV0IGxlZnQgPSAwXHJcblxyXG4gICAgd2hpbGUgKGN1ckl0ZW0gIT09IGl0ZW0pIHtcclxuICAgICAgaWYgKGN1ckl0ZW0udGFnTmFtZSkge1xyXG4gICAgICAgIGxlZnQgKz0gTWF0aC5yb3VuZChjdXJJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjdXJJdGVtID0gY3VySXRlbS5uZXh0U2libGluZ1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsZWZ0XHJcbiAgfVxyXG5cclxuICBfdXBkYXRlU2xpZGVyKHdyYXBwZXJXaWR0aCA9IG51bGwsIGlubmVyV2lkdGggPSBudWxsLCBwb3NpdGlvbiA9IG51bGwpIHtcclxuICAgIGNvbnN0IF93cmFwcGVyV2lkdGggPSB3cmFwcGVyV2lkdGggIT09IG51bGwgPyB3cmFwcGVyV2lkdGggOiBNYXRoLnJvdW5kKHRoaXMuX3dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpXHJcbiAgICBjb25zdCBfaW5uZXJXaWR0aCA9IGlubmVyV2lkdGggIT09IG51bGwgPyBpbm5lcldpZHRoIDogdGhpcy5faW5uZXJXaWR0aFxyXG4gICAgY29uc3QgX3Bvc2l0aW9uID0gcG9zaXRpb24gIT09IG51bGwgPyBwb3NpdGlvbiA6IHRoaXMuX2lubmVyUG9zaXRpb25cclxuXHJcbiAgICBpZiAoX2lubmVyV2lkdGggPCBfd3JhcHBlcldpZHRoIHx8IHdpbmRvdy5pbm5lcldpZHRoIDwgd2luZG93LkhlbHBlcnMuTEFZT1VUX0JSRUFLUE9JTlQpIHtcclxuICAgICAgdGhpcy5fcHJldkJ0bi5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKVxyXG4gICAgICB0aGlzLl9uZXh0QnRuLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9wcmV2QnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpXHJcbiAgICAgIHRoaXMuX25leHRCdG4uY2xhc3NMaXN0LnJlbW92ZSgnZC1ub25lJylcclxuICAgIH1cclxuICAgIGlmIChfaW5uZXJXaWR0aCA+IF93cmFwcGVyV2lkdGggJiYgd2luZG93LmlubmVyV2lkdGggPiB3aW5kb3cuSGVscGVycy5MQVlPVVRfQlJFQUtQT0lOVCkge1xyXG4gICAgICBpZiAoX3Bvc2l0aW9uID09PSAwKSB0aGlzLl9wcmV2QnRuLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJylcclxuICAgICAgZWxzZSB0aGlzLl9wcmV2QnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJylcclxuXHJcbiAgICAgIGlmIChfaW5uZXJXaWR0aCArIF9wb3NpdGlvbiA8PSBfd3JhcHBlcldpZHRoKSB0aGlzLl9uZXh0QnRuLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJylcclxuICAgICAgZWxzZSB0aGlzLl9uZXh0QnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBfcHJvbWlzaWZ5KGZuLCAuLi5hcmdzKSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBmbiguLi5hcmdzKVxyXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KClcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IF9pbm5lcldpZHRoKCkge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9pbm5lci5jaGlsZE5vZGVzXHJcbiAgICBsZXQgd2lkdGggPSAwXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgaWYgKGl0ZW1zW2ldLnRhZ05hbWUpIHtcclxuICAgICAgICB3aWR0aCArPSBNYXRoLnJvdW5kKGl0ZW1zW2ldLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdpZHRoXHJcbiAgfVxyXG5cclxuICBnZXQgX2lubmVyUG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5faW5uZXIuc3R5bGVbdGhpcy5fcnRsID8gJ21hcmdpblJpZ2h0JyA6ICdtYXJnaW5MZWZ0J10gfHwgJzBweCcsIDEwKVxyXG4gIH1cclxuXHJcbiAgc2V0IF9pbm5lclBvc2l0aW9uKHZhbHVlKSB7XHJcbiAgICB0aGlzLl9pbm5lci5zdHlsZVt0aGlzLl9ydGwgPyAnbWFyZ2luUmlnaHQnIDogJ21hcmdpbkxlZnQnXSA9IGAke3ZhbHVlfXB4YFxyXG4gICAgcmV0dXJuIHZhbHVlXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX3VuYmluZEFuaW1hdGlvbkVuZEV2ZW50KGVsKSB7XHJcbiAgICBjb25zdCBjYiA9IGVsLl9tZW51QW5pbWF0aW9uRW5kRXZlbnRDYlxyXG5cclxuICAgIGlmIChlbC5fbWVudUFuaW1hdGlvbkVuZEV2ZW50VGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoZWwuX21lbnVBbmltYXRpb25FbmRFdmVudFRpbWVvdXQpXHJcbiAgICAgIGVsLl9tZW51QW5pbWF0aW9uRW5kRXZlbnRUaW1lb3V0ID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmICghY2IpIHJldHVyblxyXG5cclxuICAgIFRSQU5TSVRJT05fRVZFTlRTLmZvckVhY2goZXYgPT4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldiwgY2IsIGZhbHNlKSlcclxuICAgIGVsLl9tZW51QW5pbWF0aW9uRW5kRXZlbnRDYiA9IG51bGxcclxuICB9XHJcblxyXG4gIGNsb3NlQWxsKGNsb3NlQ2hpbGRyZW4gPSB0aGlzLl9jbG9zZUNoaWxkcmVuKSB7XHJcbiAgICBjb25zdCBvcGVuZWQgPSB0aGlzLl9lbC5xdWVyeVNlbGVjdG9yQWxsKCcubWVudS1pbm5lciA+IC5tZW51LWl0ZW0ub3BlbicpXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBvcGVuZWQubGVuZ3RoOyBpIDwgbDsgaSsrKSB0aGlzLmNsb3NlKG9wZW5lZFtpXSwgY2xvc2VDaGlsZHJlbilcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXREaXNhYmxlZChlbCwgZGlzYWJsZWQpIHtcclxuICAgIE1lbnUuX2dldEl0ZW0oZWwsIGZhbHNlKS5jbGFzc0xpc3RbZGlzYWJsZWQgPyAnYWRkJyA6ICdyZW1vdmUnXSgnZGlzYWJsZWQnKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzQWN0aXZlKGVsKSB7XHJcbiAgICByZXR1cm4gTWVudS5fZ2V0SXRlbShlbCwgZmFsc2UpLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJylcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc09wZW5lZChlbCkge1xyXG4gICAgcmV0dXJuIE1lbnUuX2dldEl0ZW0oZWwsIGZhbHNlKS5jbGFzc0xpc3QuY29udGFpbnMoJ29wZW4nKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzRGlzYWJsZWQoZWwpIHtcclxuICAgIHJldHVybiBNZW51Ll9nZXRJdGVtKGVsLCBmYWxzZSkuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpXHJcbiAgfVxyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuX2hvcml6b250YWwpIHtcclxuICAgICAgaWYgKHRoaXMuX3Njcm9sbGJhcikge1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbGJhci51cGRhdGUoKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlQWxsKClcclxuXHJcbiAgICAgIGNvbnN0IHdyYXBwZXJXaWR0aCA9IE1hdGgucm91bmQodGhpcy5fd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcclxuICAgICAgY29uc3QgaW5uZXJXaWR0aCA9IHRoaXMuX2lubmVyV2lkdGhcclxuICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5faW5uZXJQb3NpdGlvblxyXG5cclxuICAgICAgaWYgKHdyYXBwZXJXaWR0aCAtIHBvc2l0aW9uID4gaW5uZXJXaWR0aCkge1xyXG4gICAgICAgIHBvc2l0aW9uID0gd3JhcHBlcldpZHRoIC0gaW5uZXJXaWR0aFxyXG4gICAgICAgIGlmIChwb3NpdGlvbiA+IDApIHBvc2l0aW9uID0gMFxyXG4gICAgICAgIHRoaXMuX2lubmVyUG9zaXRpb24gPSBwb3NpdGlvblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl91cGRhdGVTbGlkZXIod3JhcHBlcldpZHRoLCBpbm5lcldpZHRoLCBwb3NpdGlvbilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1hbmFnZVNjcm9sbCgpIHtcclxuICAgIGNvbnN0IHsgUGVyZmVjdFNjcm9sbGJhciB9ID0gd2luZG93XHJcbiAgICBjb25zdCBtZW51SW5uZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWVudS1pbm5lcicpXHJcblxyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgd2luZG93LkhlbHBlcnMuTEFZT1VUX0JSRUFLUE9JTlQpIHtcclxuICAgICAgaWYgKHRoaXMuX3Njcm9sbGJhciAhPT0gbnVsbCkge1xyXG4gICAgICAgIC8vIHdpbmRvdy5IZWxwZXJzLm1lbnVQc1Njcm9sbC5kZXN0cm95KClcclxuICAgICAgICB0aGlzLl9zY3JvbGxiYXIuZGVzdHJveSgpXHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsYmFyID0gbnVsbFxyXG4gICAgICB9XHJcbiAgICAgIG1lbnVJbm5lci5jbGFzc0xpc3QuYWRkKCdvdmVyZmxvdy1hdXRvJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9zY3JvbGxiYXIgPT09IG51bGwpIHtcclxuICAgICAgICBjb25zdCBtZW51U2Nyb2xsID0gbmV3IFBlcmZlY3RTY3JvbGxiYXIoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1lbnUtaW5uZXInKSwge1xyXG4gICAgICAgICAgc3VwcHJlc3NTY3JvbGxYOiB0cnVlLFxyXG4gICAgICAgICAgd2hlZWxQcm9wYWdhdGlvbjogZmFsc2VcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIHdpbmRvdy5IZWxwZXJzLm1lbnVQc1Njcm9sbCA9IG1lbnVTY3JvbGxcclxuICAgICAgICB0aGlzLl9zY3JvbGxiYXIgPSBtZW51U2Nyb2xsXHJcbiAgICAgIH1cclxuICAgICAgbWVudUlubmVyLmNsYXNzTGlzdC5yZW1vdmUoJ292ZXJmbG93LWF1dG8nKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3dpdGNoTWVudShtZW51KSB7XHJcbiAgICAvLyBVbmJpbmQgRXZlbnRzXHJcbiAgICB0aGlzLl91bmJpbmRFdmVudHMoKVxyXG5cclxuICAgIC8vIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcclxuICAgIGNvbnN0IG5hdmJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ25hdi5sYXlvdXQtbmF2YmFyJylcclxuICAgIGNvbnN0IG5hdmJhckNvbGxhcHNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI25hdmJhci1jb2xsYXBzZScpXHJcbiAgICAvKiBjb25zdCBmdWxsTmF2YmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxheW91dC1uYXZiYXItZnVsbCcpXHJcbiAgICBjb25zdCBjb250ZW50TmF2YmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxheW91dC1jb250ZW50LW5hdmJhcicpXHJcbiAgICBjb25zdCBjb250ZW50V3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250ZW50LXdyYXBwZXInKSAqL1xyXG4gICAgY29uc3QgYXNpZGVNZW51V3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNsYXlvdXQtbWVudSBkaXYnKVxyXG4gICAgY29uc3QgYXNpZGVNZW51ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2xheW91dC1tZW51JylcclxuICAgIGNvbnN0IGhvcnpNZW51Q2xhc3NlcyA9IFsnbGF5b3V0LW1lbnUtaG9yaXpvbnRhbCcsICdtZW51JywgJ21lbnUtaG9yaXpvbnRhbCcsICdjb250YWluZXItZmx1aWQnLCAnZmxleC1ncm93LTAnXVxyXG4gICAgY29uc3QgdmVydE1lbnVDbGFzc2VzID0gWydsYXlvdXQtbWVudScsICdtZW51JywgJ21lbnUtdmVydGljYWwnXVxyXG4gICAgY29uc3QgaG9yek1lbnVXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1lbnUtaG9yaXpvbnRhbC13cmFwcGVyJylcclxuICAgIGNvbnN0IG1lbnVJbm5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWlubmVyJylcclxuICAgIGNvbnN0IGJyYW5kID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1icmFuZCcpXHJcbiAgICBjb25zdCBtZW51VG9nZ2xlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sYXlvdXQtbWVudS10b2dnbGUnKVxyXG4gICAgY29uc3QgYWN0aXZlTWVudUl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1lbnUtaW5uZXIgLmFjdGl2ZScpXHJcbiAgICAvKiBjb25zdCBsYXlvdXRQYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxheW91dC1wYWdlJylcclxuICAgIGNvbnN0IGxheW91dENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sYXlvdXQtY29udGFpbmVyJylcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29udGFpbmVyLWZsdWlkJykgKi9cclxuXHJcbiAgICAvLyBjb25zdCB7IFBlcmZlY3RTY3JvbGxiYXIgfSA9IHdpbmRvd1xyXG5cclxuICAgIGlmIChtZW51ID09PSAndmVydGljYWwnKSB7XHJcbiAgICAgIHRoaXMuX2hvcml6b250YWwgPSBmYWxzZVxyXG4gICAgICBhc2lkZU1lbnVXcmFwcGVyLmluc2VydEJlZm9yZShicmFuZCwgaG9yek1lbnVXcmFwcGVyKVxyXG4gICAgICBhc2lkZU1lbnVXcmFwcGVyLmluc2VydEJlZm9yZShtZW51SW5uZXIsIGhvcnpNZW51V3JhcHBlcilcclxuICAgICAgYXNpZGVNZW51V3JhcHBlci5jbGFzc0xpc3QuYWRkKCdmbGV4LWNvbHVtbicsICdwLTAnKVxyXG4gICAgICBhc2lkZU1lbnUuY2xhc3NMaXN0LnJlbW92ZSguLi5hc2lkZU1lbnUuY2xhc3NMaXN0KVxyXG4gICAgICBhc2lkZU1lbnUuY2xhc3NMaXN0LmFkZCguLi52ZXJ0TWVudUNsYXNzZXMsIHRoaXMuX21lbnVCZ0NsYXNzKVxyXG4gICAgICBicmFuZC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnLCAnZC1sZy1mbGV4JylcclxuICAgICAgbWVudVRvZ2dsZXIuY2xhc3NMaXN0LnJlbW92ZSgnZC1ub25lJylcclxuICAgICAgLy8gaWYgKFBlcmZlY3RTY3JvbGxiYXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyAgIHRoaXMuX3BzU2Nyb2xsID0gbmV3IFBlcmZlY3RTY3JvbGxiYXIoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1lbnUtaW5uZXInKSwge1xyXG4gICAgICAvLyAgICAgc3VwcHJlc3NTY3JvbGxYOiB0cnVlLFxyXG4gICAgICAvLyAgICAgd2hlZWxQcm9wYWdhdGlvbjogIU1lbnUuX2hhc0NsYXNzKCdsYXlvdXQtbWVudS1maXhlZCBsYXlvdXQtbWVudS1maXhlZC1vZmZjYW52YXMnKVxyXG4gICAgICAvLyAgIH0pXHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIG1lbnVJbm5lci5jbGFzc0xpc3QuYWRkKCdvdmVyZmxvdy1hdXRvJylcclxuXHJcbiAgICAgIC8vIEFkZCBvcGVuIGNsYXNzIHRvIGFjdGl2ZSBpdGVtc1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGl2ZU1lbnVJdGVtcy5sZW5ndGggLSAxOyArK2kpIHtcclxuICAgICAgICBhY3RpdmVNZW51SXRlbXNbaV0uY2xhc3NMaXN0LmFkZCgnb3BlbicpXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2hvcml6b250YWwgPSB0cnVlXHJcbiAgICAgIG5hdmJhci5jaGlsZHJlblswXS5pbnNlcnRCZWZvcmUoYnJhbmQsIG5hdmJhckNvbGxhcHNlKVxyXG4gICAgICBicmFuZC5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnLCAnZC1sZy1mbGV4JylcclxuICAgICAgaG9yek1lbnVXcmFwcGVyLmFwcGVuZENoaWxkKG1lbnVJbm5lcilcclxuICAgICAgYXNpZGVNZW51V3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCdmbGV4LWNvbHVtbicsICdwLTAnKVxyXG4gICAgICBhc2lkZU1lbnUuY2xhc3NMaXN0LnJlbW92ZSguLi5hc2lkZU1lbnUuY2xhc3NMaXN0KVxyXG4gICAgICBhc2lkZU1lbnUuY2xhc3NMaXN0LmFkZCguLi5ob3J6TWVudUNsYXNzZXMsIHRoaXMuX21lbnVCZ0NsYXNzKVxyXG4gICAgICBtZW51VG9nZ2xlci5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKVxyXG4gICAgICBtZW51SW5uZXIuY2xhc3NMaXN0LnJlbW92ZSgnb3ZlcmZsb3ctYXV0bycpXHJcblxyXG4gICAgICAvLyBpZiAoUGVyZmVjdFNjcm9sbGJhciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3BzU2Nyb2xsICE9PSBudWxsKSB7XHJcbiAgICAgIC8vICAgdGhpcy5fcHNTY3JvbGwuZGVzdHJveSgpXHJcbiAgICAgIC8vICAgdGhpcy5fcHNTY3JvbGwgPSBudWxsXHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBvcGVuIGNsYXNzIGZyb20gYWN0aXZlIGl0ZW1zXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aXZlTWVudUl0ZW1zLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgYWN0aXZlTWVudUl0ZW1zW2ldLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fYmluZEV2ZW50cygpXHJcbiAgfVxyXG5cclxuICBkZXN0cm95KCkge1xyXG4gICAgaWYgKCF0aGlzLl9lbCkgcmV0dXJuXHJcblxyXG4gICAgdGhpcy5fdW5iaW5kRXZlbnRzKClcclxuXHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2VsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWl0ZW0nKVxyXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgTWVudS5fdW5iaW5kQW5pbWF0aW9uRW5kRXZlbnQoaXRlbXNbaV0pXHJcbiAgICAgIGl0ZW1zW2ldLmNsYXNzTGlzdC5yZW1vdmUoJ21lbnUtaXRlbS1hbmltYXRpbmcnKVxyXG4gICAgICBpdGVtc1tpXS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJylcclxuICAgICAgaXRlbXNbaV0uc3R5bGUub3ZlcmZsb3cgPSBudWxsXHJcbiAgICAgIGl0ZW1zW2ldLnN0eWxlLmhlaWdodCA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtZW51cyA9IHRoaXMuX2VsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LW1lbnUnKVxyXG4gICAgZm9yIChsZXQgaTIgPSAwLCBsMiA9IG1lbnVzLmxlbmd0aDsgaTIgPCBsMjsgaTIrKykge1xyXG4gICAgICBtZW51c1tpMl0uc3R5bGUubWFyZ2luUmlnaHQgPSBudWxsXHJcbiAgICAgIG1lbnVzW2kyXS5zdHlsZS5tYXJnaW5MZWZ0ID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2VsLmNsYXNzTGlzdC5yZW1vdmUoJ21lbnUtbm8tYW5pbWF0aW9uJylcclxuXHJcbiAgICBpZiAodGhpcy5fd3JhcHBlcikge1xyXG4gICAgICB0aGlzLl9wcmV2QnRuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fcHJldkJ0bilcclxuICAgICAgdGhpcy5fbmV4dEJ0bi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX25leHRCdG4pXHJcbiAgICAgIHRoaXMuX3dyYXBwZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5faW5uZXIsIHRoaXMuX3dyYXBwZXIpXHJcbiAgICAgIHRoaXMuX3dyYXBwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl93cmFwcGVyKVxyXG4gICAgICB0aGlzLl9pbm5lci5zdHlsZS5tYXJnaW5MZWZ0ID0gbnVsbFxyXG4gICAgICB0aGlzLl9pbm5lci5zdHlsZS5tYXJnaW5SaWdodCA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9lbC5tZW51SW5zdGFuY2UgPSBudWxsXHJcbiAgICBkZWxldGUgdGhpcy5fZWwubWVudUluc3RhbmNlXHJcblxyXG4gICAgdGhpcy5fZWwgPSBudWxsXHJcbiAgICB0aGlzLl9ob3Jpem9udGFsID0gbnVsbFxyXG4gICAgdGhpcy5fYW5pbWF0ZSA9IG51bGxcclxuICAgIHRoaXMuX2FjY29yZGlvbiA9IG51bGxcclxuICAgIHRoaXMuX3Nob3dEcm9wZG93bk9uSG92ZXIgPSBudWxsXHJcbiAgICB0aGlzLl9jbG9zZUNoaWxkcmVuID0gbnVsbFxyXG4gICAgdGhpcy5fcnRsID0gbnVsbFxyXG4gICAgdGhpcy5fb25PcGVuID0gbnVsbFxyXG4gICAgdGhpcy5fb25PcGVuZWQgPSBudWxsXHJcbiAgICB0aGlzLl9vbkNsb3NlID0gbnVsbFxyXG4gICAgdGhpcy5fb25DbG9zZWQgPSBudWxsXHJcbiAgICBpZiAodGhpcy5fc2Nyb2xsYmFyKSB7XHJcbiAgICAgIHRoaXMuX3Njcm9sbGJhci5kZXN0cm95KClcclxuICAgICAgdGhpcy5fc2Nyb2xsYmFyID0gbnVsbFxyXG4gICAgfVxyXG4gICAgdGhpcy5faW5uZXIgPSBudWxsXHJcbiAgICB0aGlzLl9wcmV2QnRuID0gbnVsbFxyXG4gICAgdGhpcy5fd3JhcHBlciA9IG51bGxcclxuICAgIHRoaXMuX25leHRCdG4gPSBudWxsXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgeyBNZW51IH1cclxuIl0sIm5hbWVzIjpbIlRSQU5TSVRJT05fRVZFTlRTIiwiREVMVEEiLCJNZW51IiwiZWwiLCJjb25maWciLCJfUFMiLCJfZWwiLCJfaG9yaXpvbnRhbCIsIm9yaWVudGF0aW9uIiwiX2FuaW1hdGUiLCJhbmltYXRlIiwiX2FjY29yZGlvbiIsImFjY29yZGlvbiIsIl9zaG93RHJvcGRvd25PbkhvdmVyIiwiQm9vbGVhbiIsInNob3dEcm9wZG93bk9uSG92ZXIiLCJfY2xvc2VDaGlsZHJlbiIsImNsb3NlQ2hpbGRyZW4iLCJfcnRsIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRBdHRyaWJ1dGUiLCJib2R5IiwiX29uT3BlbiIsIm9uT3BlbiIsIl9vbk9wZW5lZCIsIm9uT3BlbmVkIiwiX29uQ2xvc2UiLCJvbkNsb3NlIiwiX29uQ2xvc2VkIiwib25DbG9zZWQiLCJfcHNTY3JvbGwiLCJfdG9wUGFyZW50IiwiX21lbnVCZ0NsYXNzIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwiUGVyZmVjdFNjcm9sbGJhckxpYiIsIndpbmRvdyIsIlBlcmZlY3RTY3JvbGxiYXIiLCJfc2Nyb2xsYmFyIiwicXVlcnlTZWxlY3RvciIsInN1cHByZXNzU2Nyb2xsWCIsIndoZWVsUHJvcGFnYXRpb24iLCJfaGFzQ2xhc3MiLCJIZWxwZXJzIiwibWVudVBzU2Nyb2xsIiwiX2lubmVyIiwiY29udGFpbmVyIiwicGFyZW50Tm9kZSIsIl9wcmV2QnRuIiwiY3JlYXRlRWxlbWVudCIsImhyZWYiLCJjbGFzc05hbWUiLCJhcHBlbmRDaGlsZCIsIl93cmFwcGVyIiwiX25leHRCdG4iLCJfaW5uZXJQb3NpdGlvbiIsInVwZGF0ZSIsIm1lbnVDbGFzc0xpc3QiLCJpIiwibGVuZ3RoIiwic3RhcnRzV2l0aCIsInNldEF0dHJpYnV0ZSIsImlubmVyV2lkdGgiLCJMQVlPVVRfQlJFQUtQT0lOVCIsInN3aXRjaE1lbnUiLCJfYmluZEV2ZW50cyIsIm1lbnVJbnN0YW5jZSIsIl9ldm50RWxDbGljayIsImUiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiY29udGFpbnMiLCJtZW51SXRlbSIsIl9maW5kUGFyZW50IiwiY2hpbGROb2RlcyIsInRvZ2dsZUxpbmsiLCJwcmV2ZW50RGVmYXVsdCIsInRvZ2dsZSIsImlzTW9iaWxlRGV2aWNlIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9ldm50V2luZG93UmVzaXplIiwiX2xhc3RXaWR0aCIsImhvcml6b250YWxNZW51VGVtcGxhdGUiLCJtYW5hZ2VTY3JvbGwiLCJfZXZudFByZXZCdG5DbGljayIsIl9zbGlkZSIsIl9ldm50TmV4dEJ0bkNsaWNrIiwiX2V2bnRCb2R5Q2xpY2siLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2xvc2VBbGwiLCJfZXZudEVsTW91c2VPdmVyIiwiY3VycmVudFRhcmdldCIsInN0b3BQcm9wYWdhdGlvbiIsInNjcmVlbiIsIndpZHRoIiwiX2V2bnRFbE1vdXNlT3V0IiwibWFpbkVsIiwibW91c2VPdXRFbCIsIm1vdXNlT3ZlckVsIiwidG9FbGVtZW50IiwicmVsYXRlZFRhcmdldCIsImNoaWxkT2YiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX2V2bnRJbm5lck1vdXNlbW92ZSIsIl9ldm50SW5uZXJNb3VzZWxlYXZlIiwiaXRlbSIsIl9maW5kVW5vcGVuZWRQYXJlbnQiLCJfZ2V0SXRlbSIsIl9nZXRMaW5rIiwiX3Byb21pc2lmeSIsIl9maW5kTWVudSIsInRoZW4iLCJfaXNSb290IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiX3RvZ2dsZUFuaW1hdGlvbiIsIl9jbG9zZU90aGVyIiwiX3RvZ2dsZURyb3Bkb3duIiwiY2F0Y2giLCJfYXV0b0Nsb3NlIiwib3BlbmVkIiwibCIsIl9maW5kQ2hpbGQiLCJjbG9zZSIsIm9wZW4iLCJzaG93IiwibWVudSIsImFjdHVhbEl0ZW0iLCJzdWJNZW51SXRlbSIsIndyYXBwZXJXaWR0aCIsIk1hdGgiLCJyb3VuZCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInBvc2l0aW9uIiwiaXRlbU9mZnNldCIsIl9nZXRJdGVtT2Zmc2V0IiwiaXRlbVdpZHRoIiwibWVudVdpZHRoIiwic3R5bGUiLCJsZWZ0IiwiX3VwZGF0ZVNsaWRlciIsInJlbW92ZUF0dHJpYnV0ZSIsImRpcmVjdGlvbiIsIl9pbm5lcldpZHRoIiwibmV3UG9zaXRpb24iLCJfZ2V0U2xpZGVOZXh0UG9zIiwiX2dldFNsaWRlUHJldlBvcyIsImN1ckl0ZW0iLCJ0YWdOYW1lIiwiY3VySXRlbVdpZHRoIiwibmV4dFNpYmxpbmciLCJ0cmVlIiwicGFyZW50SXRlbSIsInB1c2giLCJzbGljZSIsImluZGV4T2YiLCJvcGVuZWRJdGVtcyIsImoiLCJrIiwib3BlbmVkQ2hpbGRyZW4iLCJ4IiwieiIsIl91bmJpbmRBbmltYXRpb25FbmRFdmVudCIsImxpbmtIZWlnaHQiLCJoZWlnaHQiLCJvdmVyZmxvdyIsImNsZWFySXRlbVN0eWxlIiwiX2JpbmRBbmltYXRpb25FbmRFdmVudCIsInNldFRpbWVvdXQiLCJfd3JhcHBlcldpZHRoIiwiX3Bvc2l0aW9uIiwiaXRlbXMiLCJwYXJzZUludCIsInZhbHVlIiwibWVudUlubmVyIiwiZGVzdHJveSIsIm1lbnVTY3JvbGwiLCJfdW5iaW5kRXZlbnRzIiwibmF2YmFyIiwibmF2YmFyQ29sbGFwc2UiLCJhc2lkZU1lbnVXcmFwcGVyIiwiYXNpZGVNZW51IiwiaG9yek1lbnVDbGFzc2VzIiwidmVydE1lbnVDbGFzc2VzIiwiaG9yek1lbnVXcmFwcGVyIiwiYnJhbmQiLCJtZW51VG9nZ2xlciIsImFjdGl2ZU1lbnVJdGVtcyIsImluc2VydEJlZm9yZSIsImNoaWxkcmVuIiwibWVudXMiLCJpMiIsImwyIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5MZWZ0IiwicmVtb3ZlQ2hpbGQiLCJjIiwicCIsImNscyIsInRocm93RXJyb3IiLCJ0b1VwcGVyQ2FzZSIsIkVycm9yIiwiZm91bmQiLCJwYXNzZWQiLCJjdXJFbCIsIlJPT1RfRUwiLCJyZXN1bHQiLCJzcGxpdCIsImZvckVhY2giLCJzZWxlY3RvciIsImhhbmRsZXIiLCJjYiIsImR1cmF0aW9uIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInRyYW5zaXRpb25EdXJhdGlvbiIsInBhcnNlRmxvYXQiLCJfbWVudUFuaW1hdGlvbkVuZEV2ZW50Q2IiLCJldiIsIl9tZW51QW5pbWF0aW9uRW5kRXZlbnRUaW1lb3V0IiwiZm4iLCJhcmdzIiwiUHJvbWlzZSIsInJlamVjdCIsInJlc29sdmUiLCJjbGVhclRpbWVvdXQiLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./js/menu.js\n"); - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The require scope -/******/ var __webpack_require__ = {}; -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ !function() { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = function(exports, definition) { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ !function() { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ }(); -/******/ -/************************************************************************/ -/******/ -/******/ // 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__["./js/menu.js"](0, __webpack_exports__, __webpack_require__); -/******/ -/******/ return __webpack_exports__; -/******/ })() -; -}); \ No newline at end of file +const TRANSITION_EVENTS = ['transitionend', 'webkitTransitionEnd', 'oTransitionEnd'] +// const TRANSITION_PROPERTIES = ['transition', 'MozTransition', 'webkitTransition', 'WebkitTransition', 'OTransition'] +const DELTA = 5 + +class Menu { + constructor(el, config = {}, _PS = null) { + this._el = el + this._horizontal = config.orientation === 'horizontal' + this._animate = config.animate !== false + this._accordion = config.accordion !== false + this._showDropdownOnHover = Boolean(config.showDropdownOnHover) + this._closeChildren = Boolean(config.closeChildren) + this._rtl = document.documentElement.getAttribute('dir') === 'rtl' || document.body.getAttribute('dir') === 'rtl' + + this._onOpen = config.onOpen || (() => {}) + this._onOpened = config.onOpened || (() => {}) + this._onClose = config.onClose || (() => {}) + this._onClosed = config.onClosed || (() => {}) + + this._psScroll = null + this._topParent = null + this._menuBgClass = null + + el.classList.add('menu') + el.classList[this._animate ? 'remove' : 'add']('menu-no-animation') + + if (!this._horizontal) { + el.classList.add('menu-vertical') + el.classList.remove('menu-horizontal') + + const PerfectScrollbarLib = _PS || window.PerfectScrollbar + + if (PerfectScrollbarLib) { + this._scrollbar = new PerfectScrollbarLib(el.querySelector('.menu-inner'), { + suppressScrollX: true, + wheelPropagation: !Menu._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas') + }) + + window.Helpers.menuPsScroll = this._scrollbar + } else { + el.querySelector('.menu-inner').classList.add('overflow-auto') + } + } else { + el.classList.add('menu-horizontal') + el.classList.remove('menu-vertical') + + this._inner = el.querySelector('.menu-inner') + const container = this._inner.parentNode + + this._prevBtn = el.querySelector('.menu-horizontal-prev') + if (!this._prevBtn) { + this._prevBtn = document.createElement('a') + this._prevBtn.href = '#' + this._prevBtn.className = 'menu-horizontal-prev' + container.appendChild(this._prevBtn) + } + + this._wrapper = el.querySelector('.menu-horizontal-wrapper') + if (!this._wrapper) { + this._wrapper = document.createElement('div') + this._wrapper.className = 'menu-horizontal-wrapper' + this._wrapper.appendChild(this._inner) + container.appendChild(this._wrapper) + } + + this._nextBtn = el.querySelector('.menu-horizontal-next') + if (!this._nextBtn) { + this._nextBtn = document.createElement('a') + this._nextBtn.href = '#' + this._nextBtn.className = 'menu-horizontal-next' + container.appendChild(this._nextBtn) + } + + this._innerPosition = 0 + this.update() + } + + // Add data attribute for bg color class of menu + const menuClassList = el.classList + + for (let i = 0; i < menuClassList.length; i++) { + if (menuClassList[i].startsWith('bg-')) { + this._menuBgClass = menuClassList[i] + } + } + el.setAttribute('data-bg-class', this._menuBgClass) + + // Switch to vertical menu on small screen for horizontal menu layout on page load + if (this._horizontal && window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) this.switchMenu('vertical') + + this._bindEvents() + + // Link menu instance to element + el.menuInstance = this + } + + _bindEvents() { + // Click Event + this._evntElClick = e => { + // Find top parent element + if (e.target.closest('ul') && e.target.closest('ul').classList.contains('menu-inner')) { + const menuItem = Menu._findParent(e.target, 'menu-item', false) + + // eslint-disable-next-line prefer-destructuring + if (menuItem) this._topParent = menuItem.childNodes[0] + } + + const toggleLink = e.target.classList.contains('menu-toggle') + ? e.target + : Menu._findParent(e.target, 'menu-toggle', false) + + if (toggleLink) { + e.preventDefault() + + if (toggleLink.getAttribute('data-hover') !== 'true') { + this.toggle(toggleLink) + } + } + } + if ((!this._showDropdownOnHover && this._horizontal) || !this._horizontal || window.Helpers.isMobileDevice) + this._el.addEventListener('click', this._evntElClick) + + this._evntWindowResize = () => { + this.update() + if (this._lastWidth !== window.innerWidth) { + this._lastWidth = window.innerWidth + this.update() + } + + const horizontalMenuTemplate = document.querySelector("[data-template^='horizontal-menu']") + if (!this._horizontal && !horizontalMenuTemplate) this.manageScroll() + } + window.addEventListener('resize', this._evntWindowResize) + + if (this._horizontal) { + this._evntPrevBtnClick = e => { + e.preventDefault() + if (this._prevBtn.classList.contains('disabled')) return + this._slide('prev') + } + this._prevBtn.addEventListener('click', this._evntPrevBtnClick) + + this._evntNextBtnClick = e => { + e.preventDefault() + if (this._nextBtn.classList.contains('disabled')) return + this._slide('next') + } + this._nextBtn.addEventListener('click', this._evntNextBtnClick) + + this._evntBodyClick = e => { + if (!this._inner.contains(e.target) && this._el.querySelectorAll('.menu-inner > .menu-item.open').length) + this.closeAll() + } + document.body.addEventListener('click', this._evntBodyClick) + + if (this._showDropdownOnHover) { + /** *********************************************** + * Horizontal Menu Mouse Over Event + * ? e.target !== e.currentTarget condition to disable mouseover event on whole menu navbar + * ? !e.target.parentNode.classList.contains('open') to disable mouseover events on icon, text and dropdown arrow + */ + this._evntElMouseOver = e => { + if (e.target !== e.currentTarget && !e.target.parentNode.classList.contains('open')) { + const toggleLink = e.target.classList.contains('menu-toggle') ? e.target : null + + if (toggleLink) { + e.preventDefault() + + if (toggleLink.getAttribute('data-hover') !== 'true') { + this.toggle(toggleLink) + } + } + } + e.stopPropagation() + } + if (this._horizontal && window.screen.width > window.Helpers.LAYOUT_BREAKPOINT) { + this._el.addEventListener('mouseover', this._evntElMouseOver) + } + + /** *********************************************** + * Horizontal Menu Mouse Out Event + * ? e.target !== e.currentTarget condition to disable mouseout event on whole menu navbar + * ? mouseOutEl.parentNode.classList.contains('open') to check if the mouseout element has open class or not + * ? !mouseOutEl.classList.contains('menu-toggle') to check if mouseout was from single menu item and not from the one which has submenu + * ? !mouseOverEl.parentNode.classList.contains('menu-link') to disable mouseout event for icon, text and dropdown arrow + */ + this._evntElMouseOut = e => { + const mainEl = e.currentTarget + const mouseOutEl = e.target + const mouseOverEl = e.toElement || e.relatedTarget + + // Find absolute parent of any menu item from which mouseout event triggered + if (mouseOutEl.closest('ul') && mouseOutEl.closest('ul').classList.contains('menu-inner')) { + this._topParent = mouseOutEl + } + + if ( + mouseOutEl !== mainEl && + (mouseOutEl.parentNode.classList.contains('open') || !mouseOutEl.classList.contains('menu-toggle')) && + mouseOverEl && + mouseOverEl.parentNode && + !mouseOverEl.parentNode.classList.contains('menu-link') + ) { + // When mouse goes totally out of menu items, check mouse over element to confirm it's not the child of menu, once confirmed close the menu + if (this._topParent && !Menu.childOf(mouseOverEl, this._topParent.parentNode)) { + const toggleLink = this._topParent.classList.contains('menu-toggle') ? this._topParent : null + + if (toggleLink) { + e.preventDefault() + + if (toggleLink.getAttribute('data-hover') !== 'true') { + this.toggle(toggleLink) + this._topParent = null + } + } + } + + // When mouse enter the sub menu, check if it's child of the initially mouse overed menu item(Actual Parent), + // if it's the parent do not close the sub menu else close the sub menu + if (Menu.childOf(mouseOverEl, mouseOutEl.parentNode)) { + return + } + const toggleLink = mouseOutEl.classList.contains('menu-toggle') ? mouseOutEl : null + + if (toggleLink) { + e.preventDefault() + + if (toggleLink.getAttribute('data-hover') !== 'true') { + this.toggle(toggleLink) + } + } + } + e.stopPropagation() + } + if (this._horizontal && window.screen.width > window.Helpers.LAYOUT_BREAKPOINT) { + this._el.addEventListener('mouseout', this._evntElMouseOut) + } + } + } + } + + static childOf(/* child node */ c, /* parent node */ p) { + // returns boolean + if (c.parentNode) { + while ((c = c.parentNode) && c !== p); + return !!c + } + return false + } + + _unbindEvents() { + if (this._evntElClick) { + this._el.removeEventListener('click', this._evntElClick) + this._evntElClick = null + } + + if (this._evntElMouseOver) { + this._el.removeEventListener('mouseover', this._evntElMouseOver) + this._evntElMouseOver = null + } + + if (this._evntElMouseOut) { + this._el.removeEventListener('mouseout', this._evntElMouseOut) + this._evntElMouseOut = null + } + + if (this._evntWindowResize) { + window.removeEventListener('resize', this._evntWindowResize) + this._evntWindowResize = null + } + + if (this._evntBodyClick) { + document.body.removeEventListener('click', this._evntBodyClick) + this._evntBodyClick = null + } + + if (this._evntInnerMousemove) { + this._inner.removeEventListener('mousemove', this._evntInnerMousemove) + this._evntInnerMousemove = null + } + + if (this._evntInnerMouseleave) { + this._inner.removeEventListener('mouseleave', this._evntInnerMouseleave) + this._evntInnerMouseleave = null + } + } + + static _isRoot(item) { + return !Menu._findParent(item, 'menu-item', false) + } + + static _findParent(el, cls, throwError = true) { + if (el.tagName.toUpperCase() === 'BODY') return null + el = el.parentNode + while (el.tagName.toUpperCase() !== 'BODY' && !el.classList.contains(cls)) { + el = el.parentNode + } + + el = el.tagName.toUpperCase() !== 'BODY' ? el : null + + if (!el && throwError) throw new Error(`Cannot find \`.${cls}\` parent element`) + + return el + } + + static _findChild(el, cls) { + const items = el.childNodes + const found = [] + + for (let i = 0, l = items.length; i < l; i++) { + if (items[i].classList) { + let passed = 0 + + for (let j = 0; j < cls.length; j++) { + if (items[i].classList.contains(cls[j])) passed += 1 + } + + if (cls.length === passed) found.push(items[i]) + } + } + + return found + } + + static _findMenu(item) { + let curEl = item.childNodes[0] + let menu = null + + while (curEl && !menu) { + if (curEl.classList && curEl.classList.contains('menu-sub')) menu = curEl + curEl = curEl.nextSibling + } + + if (!menu) throw new Error('Cannot find `.menu-sub` element for the current `.menu-toggle`') + + return menu + } + + // Has class + static _hasClass(cls, el = window.Helpers.ROOT_EL) { + let result = false + + cls.split(' ').forEach(c => { + if (el.classList.contains(c)) result = true + }) + + return result + } + + open(el, closeChildren = this._closeChildren) { + const item = this._findUnopenedParent(Menu._getItem(el, true), closeChildren) + + if (!item) return + + const toggleLink = Menu._getLink(item, true) + + Menu._promisify(this._onOpen, this, item, toggleLink, Menu._findMenu(item)) + .then(() => { + if (!this._horizontal || !Menu._isRoot(item)) { + if (this._animate && !this._horizontal) { + window.requestAnimationFrame(() => this._toggleAnimation(true, item, false)) + if (this._accordion) this._closeOther(item, closeChildren) + } else if (this._animate) { + this._toggleDropdown(true, item, closeChildren) + // eslint-disable-next-line no-unused-expressions + this._onOpened && this._onOpened(this, item, toggleLink, Menu._findMenu(item)) + } else { + item.classList.add('open') + // eslint-disable-next-line no-unused-expressions + this._onOpened && this._onOpened(this, item, toggleLink, Menu._findMenu(item)) + if (this._accordion) this._closeOther(item, closeChildren) + } + } else { + this._toggleDropdown(true, item, closeChildren) + // eslint-disable-next-line no-unused-expressions + this._onOpened && this._onOpened(this, item, toggleLink, Menu._findMenu(item)) + } + }) + .catch(() => {}) + } + + close(el, closeChildren = this._closeChildren, _autoClose = false) { + const item = Menu._getItem(el, true) + const toggleLink = Menu._getLink(el, true) + + if (!item.classList.contains('open') || item.classList.contains('disabled')) return + + Menu._promisify(this._onClose, this, item, toggleLink, Menu._findMenu(item), _autoClose) + .then(() => { + if (!this._horizontal || !Menu._isRoot(item)) { + if (this._animate && !this._horizontal) { + window.requestAnimationFrame(() => this._toggleAnimation(false, item, closeChildren)) + } else { + item.classList.remove('open') + + if (closeChildren) { + const opened = item.querySelectorAll('.menu-item.open') + for (let i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open') + } + + // eslint-disable-next-line no-unused-expressions + this._onClosed && this._onClosed(this, item, toggleLink, Menu._findMenu(item)) + } + } else { + this._toggleDropdown(false, item, closeChildren) + // eslint-disable-next-line no-unused-expressions + this._onClosed && this._onClosed(this, item, toggleLink, Menu._findMenu(item)) + } + }) + .catch(() => {}) + } + + _closeOther(item, closeChildren) { + const opened = Menu._findChild(item.parentNode, ['menu-item', 'open']) + + for (let i = 0, l = opened.length; i < l; i++) { + if (opened[i] !== item) this.close(opened[i], closeChildren) + } + } + + toggle(el, closeChildren = this._closeChildren) { + const item = Menu._getItem(el, true) + // const toggleLink = Menu._getLink(el, true) + + if (item.classList.contains('open')) this.close(item, closeChildren) + else this.open(item, closeChildren) + } + + _toggleDropdown(show, item, closeChildren) { + const menu = Menu._findMenu(item) + const actualItem = item + let subMenuItem = false + + if (show) { + if (Menu._findParent(item, 'menu-sub', false)) { + subMenuItem = true + item = this._topParent ? this._topParent.parentNode : item + } + + const wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width) + const position = this._innerPosition + const itemOffset = this._getItemOffset(item) + const itemWidth = Math.round(item.getBoundingClientRect().width) + + if (itemOffset - DELTA <= -1 * position) { + this._innerPosition = -1 * itemOffset + } else if (itemOffset + position + itemWidth + DELTA >= wrapperWidth) { + if (itemWidth > wrapperWidth) { + this._innerPosition = -1 * itemOffset + } else { + this._innerPosition = -1 * (itemOffset + itemWidth - wrapperWidth) + } + } + + actualItem.classList.add('open') + + const menuWidth = Math.round(menu.getBoundingClientRect().width) + + if (subMenuItem) { + if ( + itemOffset + this._innerPosition + menuWidth * 2 > wrapperWidth && + menuWidth < wrapperWidth && + menuWidth >= itemWidth + ) { + menu.style.left = [this._rtl ? '100%' : '-100%'] + } + } else if ( + itemOffset + this._innerPosition + menuWidth > wrapperWidth && + menuWidth < wrapperWidth && + menuWidth > itemWidth + ) { + menu.style[this._rtl ? 'marginRight' : 'marginLeft'] = `-${menuWidth - itemWidth}px` + } + + this._closeOther(actualItem, closeChildren) + this._updateSlider() + } else { + const toggle = Menu._findChild(item, ['menu-toggle']) + + // eslint-disable-next-line no-unused-expressions + toggle.length && toggle[0].removeAttribute('data-hover', 'true') + item.classList.remove('open') + menu.style[this._rtl ? 'marginRight' : 'marginLeft'] = null + + if (closeChildren) { + const opened = menu.querySelectorAll('.menu-item.open') + + for (let i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open') + } + } + } + + _slide(direction) { + const wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width) + const innerWidth = this._innerWidth + let newPosition + + if (direction === 'next') { + newPosition = this._getSlideNextPos() + + if (innerWidth + newPosition < wrapperWidth) { + newPosition = wrapperWidth - innerWidth + } + } else { + newPosition = this._getSlidePrevPos() + + if (newPosition > 0) newPosition = 0 + } + + this._innerPosition = newPosition + this.update() + } + + _getSlideNextPos() { + const wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width) + const position = this._innerPosition + let curItem = this._inner.childNodes[0] + let left = 0 + + while (curItem) { + if (curItem.tagName) { + const curItemWidth = Math.round(curItem.getBoundingClientRect().width) + + if (left + position - DELTA <= wrapperWidth && left + position + curItemWidth + DELTA >= wrapperWidth) { + if (curItemWidth > wrapperWidth && left === -1 * position) left += curItemWidth + break + } + + left += curItemWidth + } + + curItem = curItem.nextSibling + } + + return -1 * left + } + + _getSlidePrevPos() { + const wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width) + const position = this._innerPosition + let curItem = this._inner.childNodes[0] + let left = 0 + + while (curItem) { + if (curItem.tagName) { + const curItemWidth = Math.round(curItem.getBoundingClientRect().width) + + if (left - DELTA <= -1 * position && left + curItemWidth + DELTA >= -1 * position) { + if (curItemWidth <= wrapperWidth) left = left + curItemWidth - wrapperWidth + break + } + + left += curItemWidth + } + + curItem = curItem.nextSibling + } + + return -1 * left + } + + static _getItem(el, toggle) { + let item = null + const selector = toggle ? 'menu-toggle' : 'menu-link' + + if (el.classList.contains('menu-item')) { + if (Menu._findChild(el, [selector]).length) item = el + } else if (el.classList.contains(selector)) { + item = el.parentNode.classList.contains('menu-item') ? el.parentNode : null + } + + if (!item) { + throw new Error(`${toggle ? 'Toggable ' : ''}\`.menu-item\` element not found.`) + } + + return item + } + + static _getLink(el, toggle) { + let found = [] + const selector = toggle ? 'menu-toggle' : 'menu-link' + + if (el.classList.contains(selector)) found = [el] + else if (el.classList.contains('menu-item')) found = Menu._findChild(el, [selector]) + + if (!found.length) throw new Error(`\`${selector}\` element not found.`) + + return found[0] + } + + _findUnopenedParent(item, closeChildren) { + let tree = [] + let parentItem = null + + while (item) { + if (item.classList.contains('disabled')) { + parentItem = null + tree = [] + } else { + if (!item.classList.contains('open')) parentItem = item + tree.push(item) + } + + item = Menu._findParent(item, 'menu-item', false) + } + + if (!parentItem) return null + if (tree.length === 1) return parentItem + + tree = tree.slice(0, tree.indexOf(parentItem)) + + for (let i = 0, l = tree.length; i < l; i++) { + tree[i].classList.add('open') + + if (this._accordion) { + const openedItems = Menu._findChild(tree[i].parentNode, ['menu-item', 'open']) + + for (let j = 0, k = openedItems.length; j < k; j++) { + if (openedItems[j] !== tree[i]) { + openedItems[j].classList.remove('open') + + if (closeChildren) { + const openedChildren = openedItems[j].querySelectorAll('.menu-item.open') + for (let x = 0, z = openedChildren.length; x < z; x++) { + openedChildren[x].classList.remove('open') + } + } + } + } + } + } + + return parentItem + } + + _toggleAnimation(open, item, closeChildren) { + const toggleLink = Menu._getLink(item, true) + const menu = Menu._findMenu(item) + + Menu._unbindAnimationEndEvent(item) + + const linkHeight = Math.round(toggleLink.getBoundingClientRect().height) + + item.style.overflow = 'hidden' + + const clearItemStyle = () => { + item.classList.remove('menu-item-animating') + item.classList.remove('menu-item-closing') + item.style.overflow = null + item.style.height = null + + if (!this._horizontal) this.update() + } + + if (open) { + item.style.height = `${linkHeight}px` + item.classList.add('menu-item-animating') + item.classList.add('open') + + Menu._bindAnimationEndEvent(item, () => { + clearItemStyle() + this._onOpened(this, item, toggleLink, menu) + }) + + setTimeout(() => { + item.style.height = `${linkHeight + Math.round(menu.getBoundingClientRect().height)}px` + }, 50) + } else { + item.style.height = `${linkHeight + Math.round(menu.getBoundingClientRect().height)}px` + item.classList.add('menu-item-animating') + item.classList.add('menu-item-closing') + + Menu._bindAnimationEndEvent(item, () => { + item.classList.remove('open') + clearItemStyle() + + if (closeChildren) { + const opened = item.querySelectorAll('.menu-item.open') + for (let i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open') + } + + this._onClosed(this, item, toggleLink, menu) + }) + + setTimeout(() => { + item.style.height = `${linkHeight}px` + }, 50) + } + } + + static _bindAnimationEndEvent(el, handler) { + const cb = e => { + if (e.target !== el) return + Menu._unbindAnimationEndEvent(el) + handler(e) + } + + let duration = window.getComputedStyle(el).transitionDuration + duration = parseFloat(duration) * (duration.indexOf('ms') !== -1 ? 1 : 1000) + + el._menuAnimationEndEventCb = cb + TRANSITION_EVENTS.forEach(ev => el.addEventListener(ev, el._menuAnimationEndEventCb, false)) + + el._menuAnimationEndEventTimeout = setTimeout(() => { + cb({ target: el }) + }, duration + 50) + } + + _getItemOffset(item) { + let curItem = this._inner.childNodes[0] + let left = 0 + + while (curItem !== item) { + if (curItem.tagName) { + left += Math.round(curItem.getBoundingClientRect().width) + } + + curItem = curItem.nextSibling + } + + return left + } + + _updateSlider(wrapperWidth = null, innerWidth = null, position = null) { + const _wrapperWidth = wrapperWidth !== null ? wrapperWidth : Math.round(this._wrapper.getBoundingClientRect().width) + const _innerWidth = innerWidth !== null ? innerWidth : this._innerWidth + const _position = position !== null ? position : this._innerPosition + + if (_innerWidth < _wrapperWidth || window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) { + this._prevBtn.classList.add('d-none') + this._nextBtn.classList.add('d-none') + } else { + this._prevBtn.classList.remove('d-none') + this._nextBtn.classList.remove('d-none') + } + if (_innerWidth > _wrapperWidth && window.innerWidth > window.Helpers.LAYOUT_BREAKPOINT) { + if (_position === 0) this._prevBtn.classList.add('disabled') + else this._prevBtn.classList.remove('disabled') + + if (_innerWidth + _position <= _wrapperWidth) this._nextBtn.classList.add('disabled') + else this._nextBtn.classList.remove('disabled') + } + } + + static _promisify(fn, ...args) { + const result = fn(...args) + if (result instanceof Promise) { + return result + } + if (result === false) { + return Promise.reject() + } + return Promise.resolve() + } + + get _innerWidth() { + const items = this._inner.childNodes + let width = 0 + + for (let i = 0, l = items.length; i < l; i++) { + if (items[i].tagName) { + width += Math.round(items[i].getBoundingClientRect().width) + } + } + + return width + } + + get _innerPosition() { + return parseInt(this._inner.style[this._rtl ? 'marginRight' : 'marginLeft'] || '0px', 10) + } + + set _innerPosition(value) { + this._inner.style[this._rtl ? 'marginRight' : 'marginLeft'] = `${value}px` + return value + } + + static _unbindAnimationEndEvent(el) { + const cb = el._menuAnimationEndEventCb + + if (el._menuAnimationEndEventTimeout) { + clearTimeout(el._menuAnimationEndEventTimeout) + el._menuAnimationEndEventTimeout = null + } + + if (!cb) return + + TRANSITION_EVENTS.forEach(ev => el.removeEventListener(ev, cb, false)) + el._menuAnimationEndEventCb = null + } + + closeAll(closeChildren = this._closeChildren) { + const opened = this._el.querySelectorAll('.menu-inner > .menu-item.open') + + for (let i = 0, l = opened.length; i < l; i++) this.close(opened[i], closeChildren) + } + + static setDisabled(el, disabled) { + Menu._getItem(el, false).classList[disabled ? 'add' : 'remove']('disabled') + } + + static isActive(el) { + return Menu._getItem(el, false).classList.contains('active') + } + + static isOpened(el) { + return Menu._getItem(el, false).classList.contains('open') + } + + static isDisabled(el) { + return Menu._getItem(el, false).classList.contains('disabled') + } + + update() { + if (!this._horizontal) { + if (this._scrollbar) { + this._scrollbar.update() + } + } else { + this.closeAll() + + const wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width) + const innerWidth = this._innerWidth + let position = this._innerPosition + + if (wrapperWidth - position > innerWidth) { + position = wrapperWidth - innerWidth + if (position > 0) position = 0 + this._innerPosition = position + } + + this._updateSlider(wrapperWidth, innerWidth, position) + } + } + + manageScroll() { + const { PerfectScrollbar } = window + const menuInner = document.querySelector('.menu-inner') + + if (window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) { + if (this._scrollbar !== null) { + // window.Helpers.menuPsScroll.destroy() + this._scrollbar.destroy() + this._scrollbar = null + } + menuInner.classList.add('overflow-auto') + } else { + if (this._scrollbar === null) { + const menuScroll = new PerfectScrollbar(document.querySelector('.menu-inner'), { + suppressScrollX: true, + wheelPropagation: false + }) + // window.Helpers.menuPsScroll = menuScroll + this._scrollbar = menuScroll + } + menuInner.classList.remove('overflow-auto') + } + } + + switchMenu(menu) { + // Unbind Events + this._unbindEvents() + + // const html = document.documentElement + const navbar = document.querySelector('nav.layout-navbar') + const navbarCollapse = document.querySelector('#navbar-collapse') + /* const fullNavbar = document.querySelector('.layout-navbar-full') + const contentNavbar = document.querySelector('.layout-content-navbar') + const contentWrapper = document.querySelector('.content-wrapper') */ + const asideMenuWrapper = document.querySelector('#layout-menu div') + const asideMenu = document.querySelector('#layout-menu') + const horzMenuClasses = ['layout-menu-horizontal', 'menu', 'menu-horizontal', 'container-fluid', 'flex-grow-0'] + const vertMenuClasses = ['layout-menu', 'menu', 'menu-vertical'] + const horzMenuWrapper = document.querySelector('.menu-horizontal-wrapper') + const menuInner = document.querySelector('.menu-inner') + const brand = document.querySelector('.app-brand') + const menuToggler = document.querySelector('.layout-menu-toggle') + const activeMenuItems = document.querySelectorAll('.menu-inner .active') + /* const layoutPage = document.querySelector('.layout-page') + const layoutContainer = document.querySelector('.layout-container') + const content = document.querySelector('.container-fluid') */ + + // const { PerfectScrollbar } = window + + if (menu === 'vertical') { + this._horizontal = false + asideMenuWrapper.insertBefore(brand, horzMenuWrapper) + asideMenuWrapper.insertBefore(menuInner, horzMenuWrapper) + asideMenuWrapper.classList.add('flex-column', 'p-0') + asideMenu.classList.remove(...asideMenu.classList) + asideMenu.classList.add(...vertMenuClasses, this._menuBgClass) + brand.classList.remove('d-none', 'd-lg-flex') + menuToggler.classList.remove('d-none') + // if (PerfectScrollbar !== undefined) { + // this._psScroll = new PerfectScrollbar(document.querySelector('.menu-inner'), { + // suppressScrollX: true, + // wheelPropagation: !Menu._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas') + // }) + // } + + menuInner.classList.add('overflow-auto') + + // Add open class to active items + for (let i = 0; i < activeMenuItems.length - 1; ++i) { + activeMenuItems[i].classList.add('open') + } + } else { + this._horizontal = true + navbar.children[0].insertBefore(brand, navbarCollapse) + brand.classList.add('d-none', 'd-lg-flex') + horzMenuWrapper.appendChild(menuInner) + asideMenuWrapper.classList.remove('flex-column', 'p-0') + asideMenu.classList.remove(...asideMenu.classList) + asideMenu.classList.add(...horzMenuClasses, this._menuBgClass) + menuToggler.classList.add('d-none') + menuInner.classList.remove('overflow-auto') + + // if (PerfectScrollbar !== undefined && this._psScroll !== null) { + // this._psScroll.destroy() + // this._psScroll = null + // } + + // Remove open class from active items + for (let i = 0; i < activeMenuItems.length; ++i) { + activeMenuItems[i].classList.remove('open') + } + } + + this._bindEvents() + } + + destroy() { + if (!this._el) return + + this._unbindEvents() + + const items = this._el.querySelectorAll('.menu-item') + for (let i = 0, l = items.length; i < l; i++) { + Menu._unbindAnimationEndEvent(items[i]) + items[i].classList.remove('menu-item-animating') + items[i].classList.remove('open') + items[i].style.overflow = null + items[i].style.height = null + } + + const menus = this._el.querySelectorAll('.menu-menu') + for (let i2 = 0, l2 = menus.length; i2 < l2; i2++) { + menus[i2].style.marginRight = null + menus[i2].style.marginLeft = null + } + + this._el.classList.remove('menu-no-animation') + + if (this._wrapper) { + this._prevBtn.parentNode.removeChild(this._prevBtn) + this._nextBtn.parentNode.removeChild(this._nextBtn) + this._wrapper.parentNode.insertBefore(this._inner, this._wrapper) + this._wrapper.parentNode.removeChild(this._wrapper) + this._inner.style.marginLeft = null + this._inner.style.marginRight = null + } + + this._el.menuInstance = null + delete this._el.menuInstance + + this._el = null + this._horizontal = null + this._animate = null + this._accordion = null + this._showDropdownOnHover = null + this._closeChildren = null + this._rtl = null + this._onOpen = null + this._onOpened = null + this._onClose = null + this._onClosed = null + if (this._scrollbar) { + this._scrollbar.destroy() + this._scrollbar = null + } + this._inner = null + this._prevBtn = null + this._wrapper = null + this._nextBtn = null + } +} diff --git a/src/main/webapp/resources/3rd-party/sneat/js/template-customizer.js b/src/main/webapp/resources/3rd-party/sneat/js/template-customizer.js deleted file mode 100644 index 7b1f6a1c..00000000 --- a/src/main/webapp/resources/3rd-party/sneat/js/template-customizer.js +++ /dev/null @@ -1,274 +0,0 @@ -/* - * 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/). - */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else { - var a = factory(); - for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; - } -})(self, function() { -return /******/ (function() { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./js/template-customizer.js": -/*!***********************************!*\ - !*** ./js/template-customizer.js ***! - \***********************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TemplateCustomizer\": function() { return /* binding */ TemplateCustomizer; }\n/* harmony export */ });\n/* harmony import */ var _template_customizer_template_customizer_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_template-customizer/_template-customizer.scss */ \"./js/_template-customizer/_template-customizer.scss\");\n/* harmony import */ var _template_customizer_template_customizer_html__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_template-customizer/_template-customizer.html */ \"./js/_template-customizer/_template-customizer.html\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n\n\nvar CSS_FILENAME_PATTERN = '%name%.css';\nvar CONTROLS = ['rtl', 'style', 'layoutType', 'layoutMenuFlipped', 'showDropdownOnHover', 'layoutNavbarFixed', 'layoutFooterFixed', 'themes'];\nvar STYLES = ['light', 'dark'];\nvar cl = document.documentElement.classList;\nvar DISPLAY_CUSTOMIZER = true;\nvar DEFAULT_THEME = document.getElementsByTagName('HTML')[0].getAttribute('data-theme') || 0;\nvar DEFAULT_STYLE = cl.contains('dark-style') ? 'dark' : 'light';\nvar DEFAULT_TEXT_DIR = document.documentElement.getAttribute('dir') === 'rtl';\nvar DEFAULT_MENU_COLLAPSED = !!cl.contains('layout-menu-collapsed');\nvar DEFAULT_MENU_FLIPPED = !!cl.contains('layout-menu-flipped');\nvar DEFAULT_SHOW_DROPDOWN_ON_HOVER = undefined;\nvar DEFAULT_NAVBAR_FIXED = !!cl.contains('layout-navbar-fixed');\nvar DEFAULT_FOOTER_FIXED = !!cl.contains('layout-footer-fixed');\nvar layoutType;\nif (cl.contains('layout-menu-offcanvas')) {\n layoutType = 'static-offcanvas';\n} else if (cl.contains('layout-menu-fixed')) {\n layoutType = 'fixed';\n} else if (cl.contains('layout-menu-fixed-offcanvas')) {\n layoutType = 'fixed-offcanvas';\n} else {\n layoutType = 'static';\n}\nvar DEFAULT_LAYOUT_TYPE = layoutType;\nvar TemplateCustomizer = /*#__PURE__*/function () {\n function TemplateCustomizer(_ref) {\n var cssPath = _ref.cssPath,\n themesPath = _ref.themesPath,\n cssFilenamePattern = _ref.cssFilenamePattern,\n displayCustomizer = _ref.displayCustomizer,\n controls = _ref.controls,\n defaultTextDir = _ref.defaultTextDir,\n defaultLayoutType = _ref.defaultLayoutType,\n defaultMenuCollapsed = _ref.defaultMenuCollapsed,\n defaultMenuFlipped = _ref.defaultMenuFlipped,\n defaultShowDropdownOnHover = _ref.defaultShowDropdownOnHover,\n defaultNavbarFixed = _ref.defaultNavbarFixed,\n defaultFooterFixed = _ref.defaultFooterFixed,\n styles = _ref.styles,\n defaultStyle = _ref.defaultStyle,\n availableThemes = _ref.availableThemes,\n defaultTheme = _ref.defaultTheme,\n pathResolver = _ref.pathResolver,\n onSettingsChange = _ref.onSettingsChange,\n lang = _ref.lang;\n _classCallCheck(this, TemplateCustomizer);\n if (this._ssr) return;\n if (!window.Helpers) throw new Error('window.Helpers required.');\n this.settings = {};\n this.settings.cssPath = cssPath;\n this.settings.themesPath = themesPath;\n this.settings.cssFilenamePattern = cssFilenamePattern || CSS_FILENAME_PATTERN;\n this.settings.displayCustomizer = typeof displayCustomizer !== 'undefined' ? displayCustomizer : DISPLAY_CUSTOMIZER;\n this.settings.controls = controls || CONTROLS;\n this.settings.defaultTextDir = defaultTextDir === 'rtl' ? true : false || DEFAULT_TEXT_DIR;\n this.settings.defaultLayoutType = defaultLayoutType || DEFAULT_LAYOUT_TYPE;\n this.settings.defaultMenuCollapsed = typeof defaultMenuCollapsed !== 'undefined' ? defaultMenuCollapsed : DEFAULT_MENU_COLLAPSED;\n this.settings.defaultMenuFlipped = typeof defaultMenuFlipped !== 'undefined' ? defaultMenuFlipped : DEFAULT_MENU_FLIPPED;\n this.settings.defaultShowDropdownOnHover = typeof defaultShowDropdownOnHover !== 'undefined' ? defaultShowDropdownOnHover : DEFAULT_SHOW_DROPDOWN_ON_HOVER;\n this.settings.defaultNavbarFixed = typeof defaultNavbarFixed !== 'undefined' ? defaultNavbarFixed : DEFAULT_NAVBAR_FIXED;\n this.settings.defaultFooterFixed = typeof defaultFooterFixed !== 'undefined' ? defaultFooterFixed : DEFAULT_FOOTER_FIXED;\n this.settings.availableThemes = availableThemes || TemplateCustomizer.THEMES;\n this.settings.defaultTheme = this._getDefaultTheme(typeof defaultTheme !== 'undefined' ? defaultTheme : DEFAULT_THEME);\n this.settings.styles = styles || STYLES;\n this.settings.defaultStyle = defaultStyle || DEFAULT_STYLE;\n this.settings.lang = lang || 'en';\n this.pathResolver = pathResolver || function (p) {\n return p;\n };\n if (this.settings.styles.length < 2) {\n var i = this.settings.controls.indexOf('style');\n if (i !== -1) {\n this.settings.controls = this.settings.controls.slice(0, i).concat(this.settings.controls.slice(i + 1));\n }\n }\n this.settings.onSettingsChange = typeof onSettingsChange === 'function' ? onSettingsChange : function () {};\n this._loadSettings();\n this._listeners = [];\n this._controls = {};\n this._initDirection();\n this._initStyle();\n this._initTheme();\n this.setLayoutType(this.settings.layoutType, false);\n this.setLayoutMenuFlipped(this.settings.layoutMenuFlipped, false);\n this.setDropdownOnHover(this.settings.showDropdownOnHover, false);\n this.setLayoutNavbarFixed(this.settings.layoutNavbarFixed, false);\n this.setLayoutFooterFixed(this.settings.layoutFooterFixed, false);\n this._setup();\n }\n _createClass(TemplateCustomizer, [{\n key: \"setRtl\",\n value: function setRtl(rtl) {\n if (!this._hasControls('rtl')) return;\n this._setSetting('Rtl', String(rtl));\n window.location.reload();\n }\n }, {\n key: \"setStyle\",\n value: function setStyle(style) {\n if (!this._hasControls('style')) return;\n this._setSetting('Style', ['dark'].indexOf(style) === -1 ? 'light' : style);\n window.location.reload();\n }\n }, {\n key: \"setTheme\",\n value: function setTheme(themeName) {\n var updateStorage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var cb = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n if (!this._hasControls('themes')) return;\n var theme = this._getThemeByName(themeName);\n if (!theme) return;\n this.settings.theme = theme;\n if (updateStorage) this._setSetting('Theme', themeName);\n var themeUrl = this.pathResolver(this.settings.themesPath + this.settings.cssFilenamePattern.replace('%name%', themeName + (this.settings.style !== 'light' ? \"-\".concat(this.settings.style) : '')));\n this._loadStylesheets(_defineProperty({}, themeUrl, document.querySelector('.template-customizer-theme-css')), cb || function () {});\n if (updateStorage) this.settings.onSettingsChange.call(this, this.settings);\n }\n }, {\n key: \"setLayoutType\",\n value: function setLayoutType(pos) {\n var updateStorage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (!this._hasControls('layoutType')) return;\n if (pos !== 'static' && pos !== 'static-offcanvas' && pos !== 'fixed' && pos !== 'fixed-offcanvas') return;\n this.settings.layoutType = pos;\n if (updateStorage) this._setSetting('LayoutType', pos);\n window.Helpers.setPosition(pos === 'fixed' || pos === 'fixed-offcanvas', pos === 'static-offcanvas' || pos === 'fixed-offcanvas');\n if (updateStorage) this.settings.onSettingsChange.call(this, this.settings);\n\n // Perfectscrollbar change on Layout change\n var menuScroll = window.Helpers.menuPsScroll;\n var PerfectScrollbarLib = window.PerfectScrollbar;\n if (this.settings.layoutType === 'fixed' || this.settings.layoutType === 'fixed-offcanvas') {\n // Set perfectscrollbar wheelPropagation false for fixed layout\n if (PerfectScrollbarLib && menuScroll) {\n window.Helpers.menuPsScroll.destroy();\n menuScroll = new PerfectScrollbarLib(document.querySelector('.menu-inner'), {\n suppressScrollX: true,\n wheelPropagation: false\n });\n window.Helpers.menuPsScroll = menuScroll;\n }\n } else if (menuScroll) {\n // Destroy perfectscrollbar for static layout\n window.Helpers.menuPsScroll.destroy();\n }\n }\n }, {\n key: \"setLayoutMenuFlipped\",\n value: function setLayoutMenuFlipped(flipped) {\n var updateStorage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (!this._hasControls('layoutMenuFlipped')) return;\n this.settings.layoutMenuFlipped = flipped;\n if (updateStorage) this._setSetting('MenuFlipped', flipped);\n window.Helpers.setFlipped(flipped);\n if (updateStorage) this.settings.onSettingsChange.call(this, this.settings);\n }\n }, {\n key: \"setDropdownOnHover\",\n value: function setDropdownOnHover(open) {\n var updateStorage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (!this._hasControls('showDropdownOnHover')) return;\n this.settings.showDropdownOnHover = open;\n if (updateStorage) this._setSetting('ShowDropdownOnHover', open);\n if (window.Helpers.mainMenu) {\n window.Helpers.mainMenu.destroy();\n config.showDropdownOnHover = open;\n var _window = window,\n Menu = _window.Menu;\n window.Helpers.mainMenu = new Menu(document.getElementById('layout-menu'), {\n orientation: 'horizontal',\n closeChildren: true,\n showDropdownOnHover: config.showDropdownOnHover\n });\n }\n if (updateStorage) this.settings.onSettingsChange.call(this, this.settings);\n }\n }, {\n key: \"setLayoutNavbarFixed\",\n value: function setLayoutNavbarFixed(fixed) {\n var updateStorage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (!this._hasControls('layoutNavbarFixed')) return;\n this.settings.layoutNavbarFixed = fixed;\n if (updateStorage) this._setSetting('FixedNavbar', fixed);\n window.Helpers.setNavbarFixed(fixed);\n if (updateStorage) this.settings.onSettingsChange.call(this, this.settings);\n }\n }, {\n key: \"setLayoutFooterFixed\",\n value: function setLayoutFooterFixed(fixed) {\n var updateStorage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (!this._hasControls('layoutFooterFixed')) return;\n this.settings.layoutFooterFixed = fixed;\n if (updateStorage) this._setSetting('FixedFooter', fixed);\n window.Helpers.setFooterFixed(fixed);\n if (updateStorage) this.settings.onSettingsChange.call(this, this.settings);\n }\n }, {\n key: \"setLang\",\n value: function setLang(lang) {\n var _this = this;\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (lang === this.settings.lang && !force) return;\n if (!TemplateCustomizer.LANGUAGES[lang]) throw new Error(\"Language \\\"\".concat(lang, \"\\\" not found!\"));\n var t = TemplateCustomizer.LANGUAGES[lang];\n ['panel_header', 'panel_sub_header', 'theming_header', 'theme_header', 'style_label', 'style_switch_light', 'style_switch_dark', 'layout_header', 'layout_label', 'layout_static', 'layout_offcanvas', 'layout_fixed', 'layout_fixed_offcanvas', 'layout_flipped_label', 'layout_dd_open_label', 'layout_navbar_label', 'layout_footer_label', 'misc_header', 'theme_label', 'rtl_label'].forEach(function (key) {\n var el = _this.container.querySelector(\".template-customizer-t-\".concat(key));\n // eslint-disable-next-line no-unused-expressions\n el && (el.textContent = t[key]);\n });\n var tt = t.themes || {};\n var themes = this.container.querySelectorAll('.template-customizer-theme-item') || [];\n for (var i = 0, l = themes.length; i < l; i++) {\n var themeName = themes[i].querySelector('input[type=\"radio\"]').value;\n themes[i].querySelector('.template-customizer-theme-name').textContent = tt[themeName] || this._getThemeByName(themeName).title;\n }\n this.settings.lang = lang;\n }\n\n // Update theme settings control\n }, {\n key: \"update\",\n value: function update() {\n if (this._ssr) return;\n var hasNavbar = !!document.querySelector('.layout-navbar');\n var hasMenu = !!document.querySelector('.layout-menu');\n var hasHorizontalMenu = !!document.querySelector('.layout-menu-horizontal.menu, .layout-menu-horizontal .menu');\n var isLayout1 = !!document.querySelector('.layout-wrapper.layout-navbar-full');\n var hasFooter = !!document.querySelector('.content-footer');\n if (this._controls.layoutMenuFlipped) {\n if (!hasMenu) {\n this._controls.layoutMenuFlipped.setAttribute('disabled', 'disabled');\n this._controls.layoutMenuFlipped.classList.add('disabled');\n } else {\n this._controls.layoutMenuFlipped.removeAttribute('disabled');\n this._controls.layoutMenuFlipped.classList.remove('disabled');\n }\n }\n if (this._controls.showDropdownOnHover) {\n if (hasMenu) {\n this._controls.showDropdownOnHover.setAttribute('disabled', 'disabled');\n this._controls.showDropdownOnHover.classList.add('disabled');\n } else {\n this._controls.showDropdownOnHover.removeAttribute('disabled');\n this._controls.showDropdownOnHover.classList.remove('disabled');\n }\n }\n if (this._controls.layoutNavbarFixed) {\n if (!hasNavbar) {\n this._controls.layoutNavbarFixed.setAttribute('disabled', 'disabled');\n this._controls.layoutNavbarFixedW.classList.add('disabled');\n } else {\n this._controls.layoutNavbarFixed.removeAttribute('disabled');\n this._controls.layoutNavbarFixedW.classList.remove('disabled');\n }\n\n // Horizontal menu fixed layout - disabled fixed navbar switch\n if (hasHorizontalMenu && hasNavbar && this.settings.layoutType == 'fixed') {\n this._controls.layoutNavbarFixed.setAttribute('disabled', 'disabled');\n this._controls.layoutNavbarFixedW.classList.add('disabled');\n }\n }\n if (this._controls.layoutFooterFixed) {\n if (!hasFooter) {\n this._controls.layoutFooterFixed.setAttribute('disabled', 'disabled');\n this._controls.layoutFooterFixedW.classList.add('disabled');\n } else {\n this._controls.layoutFooterFixed.removeAttribute('disabled');\n this._controls.layoutFooterFixedW.classList.remove('disabled');\n }\n }\n if (this._controls.layoutType) {\n // ? Uncomment If using offcanvas layout\n /*\r\n if (!hasMenu) {\r\n this._controls.layoutType.querySelector('[value=\"static-offcanvas\"]').setAttribute('disabled', 'disabled')\r\n this._controls.layoutType.querySelector('[value=\"fixed-offcanvas\"]').setAttribute('disabled', 'disabled')\r\n } else {\r\n this._controls.layoutType.querySelector('[value=\"static-offcanvas\"]').removeAttribute('disabled')\r\n this._controls.layoutType.querySelector('[value=\"fixed-offcanvas\"]').removeAttribute('disabled')\r\n }\r\n */\n\n // Disable menu layouts options if menu (vertical or horizontal) is not there\n // if ((!hasNavbar && !hasMenu) || (!hasMenu && !isLayout1)) {\n if (hasMenu || hasHorizontalMenu) {\n // (Updated condition)\n this._controls.layoutType.removeAttribute('disabled');\n } else {\n this._controls.layoutType.setAttribute('disabled', 'disabled');\n }\n }\n }\n\n // Clear local storage\n }, {\n key: \"clearLocalStorage\",\n value: function clearLocalStorage() {\n if (this._ssr) return;\n this._setSetting('Theme', '');\n this._setSetting('Rtl', '');\n this._setSetting('Style', '');\n this._setSetting('MenuFlipped', '');\n this._setSetting('FixedNavbar', '');\n this._setSetting('FixedFooter', '');\n this._setSetting('LayoutType', '');\n }\n\n // Clear local storage\n }, {\n key: \"destroy\",\n value: function destroy() {\n if (this._ssr) return;\n this._cleanup();\n this.settings = null;\n this.container.parentNode.removeChild(this.container);\n this.container = null;\n }\n }, {\n key: \"_loadSettings\",\n value: function _loadSettings() {\n // Get settings\n\n // const cl = document.documentElement.classList;\n var rtl = this._getSetting('Rtl');\n var style = this._getSetting('Style');\n var collapsedMenu = this._getSetting('LayoutCollapsed'); // Value will be set from main.js\n var flippedMenu = this._getSetting('LayoutMenuFlipped');\n var dropdownOnHover = this._getSetting('ShowDropdownOnHover'); // Value will be set from main.js\n var fixedNavbar = this._getSetting('FixedNavbar');\n var fixedFooter = this._getSetting('FixedFooter');\n var lType = this._getSetting('LayoutType');\n var type;\n if (lType !== '' && ['static', 'static-offcanvas', 'fixed', 'fixed-offcanvas'].indexOf(lType) !== -1) {\n type = lType;\n } else {\n type = this.settings.defaultLayoutType;\n }\n this.settings.layoutType = type;\n\n // ! Set settings by following priority: Local Storage, Theme Config, HTML Classes\n this.settings.rtl = rtl !== '' ? rtl === 'true' : this.settings.defaultTextDir;\n this.settings.style = this.settings.styles.indexOf(style) !== -1 ? style : this.settings.defaultStyle;\n if (this.settings.styles.indexOf(this.settings.style) === -1) {\n // eslint-disable-next-line prefer-destructuring\n this.settings.style = this.settings.styles[0];\n }\n this.settings.layoutMenu = collapsedMenu !== '' ? collapsedMenu === 'true' : this.settings.defaultMenuCollapsed;\n this.settings.layoutMenuFlipped = flippedMenu !== '' ? flippedMenu === 'true' : this.settings.defaultMenuFlipped;\n this.settings.showDropdownOnHover = dropdownOnHover !== '' ? dropdownOnHover === 'true' : this.settings.defaultShowDropdownOnHover;\n this.settings.layoutNavbarFixed = fixedNavbar !== '' ? fixedNavbar === 'true' : this.settings.defaultNavbarFixed;\n this.settings.layoutFooterFixed = fixedFooter !== '' ? fixedFooter === 'true' : this.settings.defaultFooterFixed;\n this.settings.theme = this._getThemeByName(this._getSetting('Theme'), true);\n\n // Filter options depending on available controls\n if (!this._hasControls('rtl')) this.settings.rtl = document.documentElement.getAttribute('dir') === 'rtl';\n if (!this._hasControls('style')) this.settings.style = cl.contains('dark-style') ? 'dark' : 'light';\n if (!this._hasControls('layoutType')) this.settings.layoutType = null;\n if (!this._hasControls('layoutMenuFlipped')) this.settings.layoutMenuFlipped = null;\n if (!this._hasControls('showDropdownOnHover')) this.settings.showDropdownOnHover = null;\n if (!this._hasControls('layoutNavbarFixed')) this.settings.layoutNavbarFixed = null;\n if (!this._hasControls('layoutFooterFixed')) this.settings.layoutFooterFixed = null;\n if (!this._hasControls('themes')) this.settings.theme = null;\n }\n\n // Setup theme settings controls and events\n }, {\n key: \"_setup\",\n value: function _setup() {\n var _this2 = this;\n var _container = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;\n this._cleanup();\n this.container = this._getElementFromString(_template_customizer_template_customizer_html__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n // Customizer visibility condition\n //\n var customizerW = this.container;\n if (this.settings.displayCustomizer) customizerW.setAttribute('style', 'visibility: visible');else customizerW.setAttribute('style', 'visibility: hidden');\n\n // Open btn\n //\n var openBtn = this.container.querySelector('.template-customizer-open-btn');\n var openBtnCb = function openBtnCb() {\n _this2.container.classList.add('template-customizer-open');\n _this2.update();\n if (_this2._updateInterval) clearInterval(_this2._updateInterval);\n _this2._updateInterval = setInterval(function () {\n _this2.update();\n }, 500);\n };\n openBtn.addEventListener('click', openBtnCb);\n this._listeners.push([openBtn, 'click', openBtnCb]);\n\n // Close btn\n //\n\n var closeBtn = this.container.querySelector('.template-customizer-close-btn');\n var closeBtnCb = function closeBtnCb() {\n _this2.container.classList.remove('template-customizer-open');\n if (_this2._updateInterval) {\n clearInterval(_this2._updateInterval);\n _this2._updateInterval = null;\n }\n };\n closeBtn.addEventListener('click', closeBtnCb);\n this._listeners.push([closeBtn, 'click', closeBtnCb]);\n\n // RTL\n //\n\n var rtlW = this.container.querySelector('.template-customizer-misc');\n // ? Hide RTL control in following 2 case\n if (!this._hasControls('rtl') || !rtlSupport) {\n rtlW.parentNode.removeChild(rtlW);\n } else {\n var rtl = rtlW.querySelector('input');\n if (this.settings.rtl) rtl.setAttribute('checked', 'checked');\n var rtlCb = function rtlCb(e) {\n _this2._loadingState(true);\n _this2.setRtl(e.target.checked);\n };\n rtl.addEventListener('change', rtlCb);\n this._listeners.push([rtl, 'change', rtlCb]);\n }\n\n // Style\n\n //\n\n var styleW = this.container.querySelector('.template-customizer-style');\n if (!this._hasControls('style')) {\n styleW.parentNode.removeChild(styleW);\n } else {\n var style = styleW.querySelector('input');\n if (this.settings.style === 'dark') style.setAttribute('checked', 'checked');\n var styleCb = function styleCb(e) {\n _this2._loadingState(true);\n if (e.target.checked) {\n _this2.setStyle('dark');\n } else {\n _this2.setStyle('light');\n }\n };\n style.addEventListener('change', styleCb);\n this._listeners.push([style, 'change', styleCb]);\n }\n\n // Theme\n\n var themesW = this.container.querySelector('.template-customizer-themes');\n if (!this._hasControls('themes')) {\n themesW.parentNode.removeChild(themesW);\n } else {\n var themesWInner = themesW.querySelector('.template-customizer-themes-options');\n this.settings.availableThemes.forEach(function (theme) {\n var themeEl = _this2._getElementFromString(\"
\"));\n themesWInner.appendChild(themeEl);\n });\n themesWInner.querySelector(\"input[value=\\\"\".concat(this.settings.theme.name, \"\\\"]\")).setAttribute('checked', 'checked');\n var themeCb = function themeCb(e) {\n if (_this2._loading) return;\n _this2._loading = true;\n _this2._loadingState(true, true);\n _this2.setTheme(e.target.value, true, function () {\n _this2._loading = false;\n _this2._loadingState(false, true);\n });\n };\n themesWInner.addEventListener('change', themeCb);\n this._listeners.push([themesWInner, 'change', themeCb]);\n }\n var themingW = this.container.querySelector('.template-customizer-theming');\n if (!this._hasControls('style') && !this._hasControls('themes')) {\n themingW.parentNode.removeChild(themingW);\n }\n\n // Layout wrapper\n //\n\n var layoutW = this.container.querySelector('.template-customizer-layout');\n if (!this._hasControls('layoutType layoutNavbarFixed layoutFooterFixed layoutMenuFlipped showDropdownOnHover', true)) {\n layoutW.parentNode.removeChild(layoutW);\n } else {\n // Position\n //\n\n var layoutTypeW = this.container.querySelector('.template-customizer-layoutType');\n if (!this._hasControls('layoutType')) {\n layoutTypeW.parentNode.removeChild(layoutTypeW);\n } else {\n this._controls.layoutType = layoutTypeW.querySelector('.template-customizer-layouts-options');\n\n // this._controls.layoutType.value = this.settings.layoutType\n this._controls.layoutType.querySelector(\"input[value=\\\"\".concat(this.settings.layoutType, \"\\\"]\")).setAttribute('checked', 'checked');\n var layoutTypeCb = function layoutTypeCb(e) {\n return _this2.setLayoutType(e.target.value);\n };\n this._controls.layoutType.addEventListener('change', layoutTypeCb);\n this._listeners.push([this._controls.layoutType, 'change', layoutTypeCb]);\n }\n\n // Menu flipped\n // ? Uncomment If needed\n\n /* this._controls.layoutMenuFlipped = this.container.querySelector('.template-customizer-layoutMenuFlipped')\r\n if (!this._hasControls('layoutMenuFlipped')) {\r\n this._controls.layoutMenuFlipped.parentNode.removeChild(this._controls.layoutMenuFlipped)\r\n } else {\r\n this._controls.layoutMenuFlipped = this._controls.layoutMenuFlipped.querySelector('input')\r\n if (this.settings.layoutMenuFlipped) this._controls.layoutMenuFlipped.setAttribute('checked', 'checked')\r\n const layoutMenuFlipped = e => this.setLayoutMenuFlipped(e.target.checked)\r\n this._controls.layoutMenuFlipped.addEventListener('change', layoutMenuFlipped)\r\n this._listeners.push([this._controls.layoutMenuFlipped, 'change', layoutMenuFlipped])\r\n } */\n\n // Menu open\n //\n\n this._controls.showDropdownOnHover = this.container.querySelector('.template-customizer-showDropdownOnHover');\n if (!this._hasControls('showDropdownOnHover')) {\n this._controls.showDropdownOnHover.parentNode.removeChild(this._controls.showDropdownOnHover);\n } else {\n this._controls.showDropdownOnHover = this._controls.showDropdownOnHover.querySelector('input');\n if (this.settings.showDropdownOnHover) this._controls.showDropdownOnHover.setAttribute('checked', 'checked');\n var showDropdownOnHover = function showDropdownOnHover(e) {\n return _this2.setDropdownOnHover(e.target.checked);\n };\n this._controls.showDropdownOnHover.addEventListener('change', showDropdownOnHover);\n this._listeners.push([this._controls.showDropdownOnHover, 'change', showDropdownOnHover]);\n }\n\n // Navbar\n //\n\n this._controls.layoutNavbarFixedW = this.container.querySelector('.template-customizer-layoutNavbarFixed');\n if (!this._hasControls('layoutNavbarFixed')) {\n this._controls.layoutNavbarFixedW.parentNode.removeChild(this._controls.layoutNavbarFixedW);\n } else {\n this._controls.layoutNavbarFixed = this._controls.layoutNavbarFixedW.querySelector('input');\n if (this.settings.layoutNavbarFixed) this._controls.layoutNavbarFixed.setAttribute('checked', 'checked');\n var layoutNavbarFixedCb = function layoutNavbarFixedCb(e) {\n return _this2.setLayoutNavbarFixed(e.target.checked);\n };\n this._controls.layoutNavbarFixed.addEventListener('change', layoutNavbarFixedCb);\n this._listeners.push([this._controls.layoutNavbarFixed, 'change', layoutNavbarFixedCb]);\n }\n\n // Footer\n //\n\n this._controls.layoutFooterFixedW = this.container.querySelector('.template-customizer-layoutFooterFixed');\n if (!this._hasControls('layoutFooterFixed')) {\n this._controls.layoutFooterFixedW.parentNode.removeChild(this._controls.layoutFooterFixedW);\n } else {\n this._controls.layoutFooterFixed = this._controls.layoutFooterFixedW.querySelector('input');\n if (this.settings.layoutFooterFixed) this._controls.layoutFooterFixed.setAttribute('checked', 'checked');\n var layoutFooterFixedCb = function layoutFooterFixedCb(e) {\n return _this2.setLayoutFooterFixed(e.target.checked);\n };\n this._controls.layoutFooterFixed.addEventListener('change', layoutFooterFixedCb);\n this._listeners.push([this._controls.layoutFooterFixed, 'change', layoutFooterFixedCb]);\n }\n }\n\n // Set language\n this.setLang(this.settings.lang, true);\n\n // Append container\n if (_container === document) {\n if (_container.body) {\n _container.body.appendChild(this.container);\n } else {\n window.addEventListener('DOMContentLoaded', function () {\n return _container.body.appendChild(_this2.container);\n });\n }\n } else {\n _container.appendChild(this.container);\n }\n }\n }, {\n key: \"_initDirection\",\n value: function _initDirection() {\n if (this._hasControls('rtl')) document.documentElement.setAttribute('dir', this.settings.rtl ? 'rtl' : 'ltr');\n }\n\n // Init template styles\n }, {\n key: \"_initStyle\",\n value: function _initStyle() {\n if (!this._hasControls('style')) return;\n var style = this.settings.style;\n this._insertStylesheet('template-customizer-core-css', this.pathResolver(this.settings.cssPath + this.settings.cssFilenamePattern.replace('%name%', \"core\".concat(style !== 'light' ? \"-\".concat(style) : ''))));\n // ? Uncomment if needed\n /*\r\n this._insertStylesheet(\r\n 'template-customizer-bootstrap-css',\r\n this.pathResolver(\r\n this.settings.cssPath +\r\n this.settings.cssFilenamePattern.replace('%name%', `bootstrap${style !== 'light' ? `-${style}` : ''}`)\r\n )\r\n )\r\n this._insertStylesheet(\r\n 'template-customizer-bsextended-css',\r\n this.pathResolver(\r\n this.settings.cssPath +\r\n this.settings.cssFilenamePattern.replace(\r\n '%name%',\r\n `bootstrap-extended${style !== 'light' ? `-${style}` : ''}`\r\n )\r\n )\r\n )\r\n this._insertStylesheet(\r\n 'template-customizer-components-css',\r\n this.pathResolver(\r\n this.settings.cssPath +\r\n this.settings.cssFilenamePattern.replace('%name%', `components${style !== 'light' ? `-${style}` : ''}`)\r\n )\r\n )\r\n this._insertStylesheet(\r\n 'template-customizer-colors-css',\r\n this.pathResolver(\r\n this.settings.cssPath +\r\n this.settings.cssFilenamePattern.replace('%name%', `colors${style !== 'light' ? `-${style}` : ''}`)\r\n )\r\n )\r\n */\n\n var classesToRemove = style === 'light' ? ['dark-style'] : ['light-style'];\n classesToRemove.forEach(function (cls) {\n document.documentElement.classList.remove(cls);\n });\n document.documentElement.classList.add(\"\".concat(style, \"-style\"));\n }\n\n // Init theme style\n }, {\n key: \"_initTheme\",\n value: function _initTheme() {\n if (this._hasControls('themes')) {\n this._insertStylesheet('template-customizer-theme-css', this.pathResolver(this.settings.themesPath + this.settings.cssFilenamePattern.replace('%name%', this.settings.theme.name + (this.settings.style !== 'light' ? \"-\".concat(this.settings.style) : ''))));\n } else {\n // If theme control is not enabled, get the current theme from localstorage else display default theme\n var theme = this._getSetting('Theme');\n this._insertStylesheet('template-customizer-theme-css', this.pathResolver(this.settings.themesPath + this.settings.cssFilenamePattern.replace('%name%', theme ? theme : 'theme-default' + (this.settings.style !== 'light' ? \"-\".concat(this.settings.style) : ''))));\n }\n }\n }, {\n key: \"_insertStylesheet\",\n value: function _insertStylesheet(className, href) {\n var curLink = document.querySelector(\".\".concat(className));\n if (typeof document.documentMode === 'number' && document.documentMode < 11) {\n if (!curLink) return;\n if (href === curLink.getAttribute('href')) return;\n var link = document.createElement('link');\n link.setAttribute('rel', 'stylesheet');\n link.setAttribute('type', 'text/css');\n link.className = className;\n link.setAttribute('href', href);\n curLink.parentNode.insertBefore(link, curLink.nextSibling);\n } else {\n document.write(\"\"));\n }\n curLink.parentNode.removeChild(curLink);\n }\n }, {\n key: \"_loadStylesheets\",\n value: function _loadStylesheets(stylesheets, cb) {\n var paths = Object.keys(stylesheets);\n var count = paths.length;\n var loaded = 0;\n function loadStylesheet(path, curLink, _cb) {\n var link = document.createElement('link');\n link.setAttribute('href', path);\n link.setAttribute('rel', 'stylesheet');\n link.setAttribute('type', 'text/css');\n link.className = curLink.className;\n var sheet = 'sheet' in link ? 'sheet' : 'styleSheet';\n var cssRules = 'sheet' in link ? 'cssRules' : 'rules';\n var intervalId;\n var timeoutId = setTimeout(function () {\n clearInterval(intervalId);\n clearTimeout(timeoutId);\n curLink.parentNode.removeChild(link);\n _cb(false, path);\n }, 15000);\n intervalId = setInterval(function () {\n try {\n if (link[sheet] && link[sheet][cssRules].length) {\n clearInterval(intervalId);\n clearTimeout(timeoutId);\n curLink.parentNode.removeChild(curLink);\n _cb(true);\n }\n } catch (e) {\n // Catch error\n }\n }, 10);\n curLink.parentNode.insertBefore(link, curLink.nextSibling);\n }\n function stylesheetCallBack() {\n if ((loaded += 1) >= count) {\n cb();\n }\n }\n for (var i = 0; i < paths.length; i++) {\n loadStylesheet(paths[i], stylesheets[paths[i]], stylesheetCallBack());\n }\n }\n }, {\n key: \"_loadingState\",\n value: function _loadingState(enable, themes) {\n this.container.classList[enable ? 'add' : 'remove'](\"template-customizer-loading\".concat(themes ? '-theme' : ''));\n }\n }, {\n key: \"_getElementFromString\",\n value: function _getElementFromString(str) {\n var wrapper = document.createElement('div');\n wrapper.innerHTML = str;\n return wrapper.firstChild;\n }\n\n // Set settings in LocalStorage with layout & key\n }, {\n key: \"_getSetting\",\n value: function _getSetting(key) {\n var result = null;\n var layoutName = this._getLayoutName();\n try {\n result = localStorage.getItem(\"templateCustomizer-\".concat(layoutName, \"--\").concat(key));\n } catch (e) {\n // Catch error\n }\n return String(result || '');\n }\n\n // Set settings in LocalStorage with layout & key\n }, {\n key: \"_setSetting\",\n value: function _setSetting(key, val) {\n var layoutName = this._getLayoutName();\n try {\n localStorage.setItem(\"templateCustomizer-\".concat(layoutName, \"--\").concat(key), String(val));\n } catch (e) {\n // Catch Error\n }\n }\n\n // Get layout name to set unique\n }, {\n key: \"_getLayoutName\",\n value: function _getLayoutName() {\n return document.getElementsByTagName('HTML')[0].getAttribute('data-template');\n }\n }, {\n key: \"_removeListeners\",\n value: function _removeListeners() {\n for (var i = 0, l = this._listeners.length; i < l; i++) {\n this._listeners[i][0].removeEventListener(this._listeners[i][1], this._listeners[i][2]);\n }\n }\n }, {\n key: \"_cleanup\",\n value: function _cleanup() {\n this._removeListeners();\n this._listeners = [];\n this._controls = {};\n if (this._updateInterval) {\n clearInterval(this._updateInterval);\n this._updateInterval = null;\n }\n }\n }, {\n key: \"_ssr\",\n get: function get() {\n return typeof window === 'undefined';\n }\n\n // Check controls availability\n }, {\n key: \"_hasControls\",\n value: function _hasControls(controls) {\n var _this3 = this;\n var oneOf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return controls.split(' ').reduce(function (result, control) {\n if (_this3.settings.controls.indexOf(control) !== -1) {\n if (oneOf || result !== false) result = true;\n } else if (!oneOf || result !== true) result = false;\n return result;\n }, null);\n }\n\n // Get the default theme\n }, {\n key: \"_getDefaultTheme\",\n value: function _getDefaultTheme(themeId) {\n var theme;\n if (typeof themeId === 'string') {\n theme = this._getThemeByName(themeId, false);\n } else {\n theme = this.settings.availableThemes[themeId];\n }\n if (!theme) {\n throw new Error(\"Theme ID \\\"\".concat(themeId, \"\\\" not found!\"));\n }\n return theme;\n }\n\n // Get theme by themeId/themeName\n }, {\n key: \"_getThemeByName\",\n value: function _getThemeByName(themeName) {\n var returnDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var themes = this.settings.availableThemes;\n for (var i = 0, l = themes.length; i < l; i++) {\n if (themes[i].name === themeName) return themes[i];\n }\n return returnDefault ? this.settings.defaultTheme : null;\n }\n }]);\n return TemplateCustomizer;\n}(); // Themes\nTemplateCustomizer.THEMES = [{\n name: 'theme-default',\n title: 'Default'\n}, {\n name: 'theme-semi-dark',\n title: 'Semi Dark'\n}, {\n name: 'theme-bordered',\n title: 'Bordered'\n}];\n\n// Theme setting language\nTemplateCustomizer.LANGUAGES = {\n en: {\n panel_header: 'TEMPLATE CUSTOMIZER',\n panel_sub_header: 'Customize and preview in real time',\n theming_header: 'THEMING',\n theme_header: 'THEME',\n theme_label: 'Themes',\n style_label: 'Style (Mode)',\n style_switch_light: 'Light',\n style_switch_dark: 'Dark',\n layout_header: 'LAYOUT',\n layout_label: 'Layout (Menu)',\n layout_static: 'Static',\n layout_offcanvas: 'Offcanvas',\n layout_fixed: 'Fixed',\n layout_fixed_offcanvas: 'Fixed offcanvas',\n layout_flipped_label: 'Menu flipped',\n layout_dd_open_label: 'Dropdown on hover',\n layout_navbar_label: 'Fixed navbar',\n layout_footer_label: 'Fixed footer',\n misc_header: 'MISC',\n rtl_label: 'RTL direction'\n },\n fr: {\n panel_header: 'MODÈLE DE PERSONNALISATION',\n panel_sub_header: 'Personnalisez et prévisualisez en temps réel',\n theming_header: 'THÉMATISATION',\n theme_header: 'THÈME',\n theme_label: 'Thèmes',\n style_label: 'Style (Mode)',\n style_switch_light: 'Léger',\n style_switch_dark: 'Sombre',\n layout_header: 'DISPOSITION',\n layout_label: 'Mise en page (Menu)',\n layout_static: 'Statique',\n layout_offcanvas: 'Hors toile',\n layout_fixed: 'Fixé',\n layout_fixed_offcanvas: 'Fixe hors toile',\n layout_flipped_label: 'Menu inversé',\n layout_dd_open_label: 'Liste déroulante au survol',\n layout_navbar_label: 'Barre de navigation fixe',\n layout_footer_label: 'Pied de page fixe',\n misc_header: 'DIVERS',\n rtl_label: 'Sens RTL'\n },\n de: {\n panel_header: 'VORLAGEN-ANPASSER',\n panel_sub_header: 'Anpassen und Vorschau in Echtzeit',\n theming_header: 'THEMEN',\n theme_header: 'THEMA',\n theme_label: 'Themen',\n style_label: 'Stil (Modus)',\n style_switch_light: 'Hell',\n style_switch_dark: 'Dunkel',\n layout_header: 'LAYOUT',\n layout_label: 'Layout (Speisekarte)',\n layout_static: 'Statisch',\n layout_offcanvas: 'Leinwand',\n layout_fixed: 'Fest',\n layout_fixed_offcanvas: 'Außerhalb der Leinwand behoben',\n layout_flipped_label: 'Menü umgedreht',\n layout_dd_open_label: 'Dropdown beim Hover',\n layout_navbar_label: 'Navigationsleiste behoben',\n layout_footer_label: 'Feste Fußzeile',\n misc_header: 'VERSCHIEDENES',\n rtl_label: 'RTL-Regie'\n },\n pt: {\n panel_header: 'PERSONALIZADOR DE MODELO',\n panel_sub_header: 'Personalize e visualize em tempo real',\n theming_header: 'TEMAS',\n theme_header: 'TEMA',\n theme_label: 'Temas',\n style_label: 'Estilo (Modo)',\n style_switch_light: 'Luz',\n style_switch_dark: 'Escuro',\n layout_header: 'ESQUEMA',\n layout_label: 'Esquema (Cardápio)',\n layout_static: 'Estático',\n layout_offcanvas: 'Offcanvas',\n layout_fixed: 'Fixo',\n layout_fixed_offcanvas: 'Offscreen fixo',\n layout_flipped_label: 'Menu invertido',\n layout_dd_open_label: 'Suspensão ao passar o mouse',\n layout_navbar_label: 'Barra de navegação fixa',\n layout_footer_label: 'Rodapé fixo',\n misc_header: 'DIVERSOS',\n rtl_label: 'Direção RTL'\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFNBQVM7SUFDeEJDLFlBQVksRUFBRSxvQkFBb0I7SUFDbENDLGFBQWEsRUFBRSxVQUFVO0lBQ3pCQyxnQkFBZ0IsRUFBRSxXQUFXO0lBQzdCQyxZQUFZLEVBQUUsTUFBTTtJQUNwQkMsc0JBQXNCLEVBQUUsZ0JBQWdCO0lBQ3hDQyxvQkFBb0IsRUFBRSxnQkFBZ0I7SUFDdENDLG9CQUFvQixFQUFFLDZCQUE2QjtJQUNuREMsbUJBQW1CLEVBQUUseUJBQXlCO0lBQzlDQyxtQkFBbUIsRUFBRSxhQUFhO0lBQ2xDQyxXQUFXLEVBQUUsVUFBVTtJQUN2QkMsU0FBUyxFQUFFO0VBQ2I7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vU25lYXQvLi9qcy90ZW1wbGF0ZS1jdXN0b21pemVyLmpzP2E5NDYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGN1c3RvbWl6ZXJTdHlsZSBmcm9tICcuL190ZW1wbGF0ZS1jdXN0b21pemVyL190ZW1wbGF0ZS1jdXN0b21pemVyLnNjc3MnXHJcbmltcG9ydCBjdXN0b21pemVyTWFya3VwIGZyb20gJy4vX3RlbXBsYXRlLWN1c3RvbWl6ZXIvX3RlbXBsYXRlLWN1c3RvbWl6ZXIuaHRtbCdcclxuXHJcbmNvbnN0IENTU19GSUxFTkFNRV9QQVRURVJOID0gJyVuYW1lJS5jc3MnXHJcbmNvbnN0IENPTlRST0xTID0gW1xyXG4gICdydGwnLFxyXG4gICdzdHlsZScsXHJcbiAgJ2xheW91dFR5cGUnLFxyXG4gICdsYXlvdXRNZW51RmxpcHBlZCcsXHJcbiAgJ3Nob3dEcm9wZG93bk9uSG92ZXInLFxyXG4gICdsYXlvdXROYXZiYXJGaXhlZCcsXHJcbiAgJ2xheW91dEZvb3RlckZpeGVkJyxcclxuICAndGhlbWVzJ1xyXG5dXHJcbmNvbnN0IFNUWUxFUyA9IFsnbGlnaHQnLCAnZGFyayddXHJcblxyXG5jb25zdCBjbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3RcclxuXHJcbmNvbnN0IERJU1BMQVlfQ1VTVE9NSVpFUiA9IHRydWVcclxuY29uc3QgREVGQVVMVF9USEVNRSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdIVE1MJylbMF0uZ2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJykgfHwgMFxyXG5jb25zdCBERUZBVUxUX1NUWUxFID0gY2wuY29udGFpbnMoJ2Rhcmstc3R5bGUnKSA/ICdkYXJrJyA6ICdsaWdodCdcclxuY29uc3QgREVGQVVMVF9URVhUX0RJUiA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RpcicpID09PSAncnRsJ1xyXG5jb25zdCBERUZBVUxUX01FTlVfQ09MTEFQU0VEID0gISFjbC5jb250YWlucygnbGF5b3V0LW1lbnUtY29sbGFwc2VkJylcclxuY29uc3QgREVGQVVMVF9NRU5VX0ZMSVBQRUQgPSAhIWNsLmNvbnRhaW5zKCdsYXlvdXQtbWVudS1mbGlwcGVkJylcclxuY29uc3QgREVGQVVMVF9TSE9XX0RST1BET1dOX09OX0hPVkVSID0gdW5kZWZpbmVkXHJcbmNvbnN0IERFRkFVTFRfTkFWQkFSX0ZJWEVEID0gISFjbC5jb250YWlucygnbGF5b3V0LW5hdmJhci1maXhlZCcpXHJcbmNvbnN0IERFRkFVTFRfRk9PVEVSX0ZJWEVEID0gISFjbC5jb250YWlucygnbGF5b3V0LWZvb3Rlci1maXhlZCcpXHJcblxyXG5sZXQgbGF5b3V0VHlwZVxyXG5pZiAoY2wuY29udGFpbnMoJ2xheW91dC1tZW51LW9mZmNhbnZhcycpKSB7XHJcbiAgbGF5b3V0VHlwZSA9ICdzdGF0aWMtb2ZmY2FudmFzJ1xyXG59IGVsc2UgaWYgKGNsLmNvbnRhaW5zKCdsYXlvdXQtbWVudS1maXhlZCcpKSB7XHJcbiAgbGF5b3V0VHlwZSA9ICdmaXhlZCdcclxufSBlbHNlIGlmIChjbC5jb250YWlucygnbGF5b3V0LW1lbnUtZml4ZWQtb2ZmY2FudmFzJykpIHtcclxuICBsYXlvdXRUeXBlID0gJ2ZpeGVkLW9mZmNhbnZhcydcclxufSBlbHNlIHtcclxuICBsYXlvdXRUeXBlID0gJ3N0YXRpYydcclxufVxyXG5jb25zdCBERUZBVUxUX0xBWU9VVF9UWVBFID0gbGF5b3V0VHlwZVxyXG5cclxuY2xhc3MgVGVtcGxhdGVDdXN0b21pemVyIHtcclxuICBjb25zdHJ1Y3Rvcih7XHJcbiAgICBjc3NQYXRoLFxyXG4gICAgdGhlbWVzUGF0aCxcclxuICAgIGNzc0ZpbGVuYW1lUGF0dGVybixcclxuICAgIGRpc3BsYXlDdXN0b21pemVyLFxyXG4gICAgY29udHJvbHMsXHJcbiAgICBkZWZhdWx0VGV4dERpcixcclxuICAgIGRlZmF1bHRMYXlvdXRUeXBlLFxyXG4gICAgZGVmYXVsdE1lbnVDb2xsYXBzZWQsXHJcbiAgICBkZWZhdWx0TWVudUZsaXBwZWQsXHJcbiAgICBkZWZhdWx0U2hvd0Ryb3Bkb3duT25Ib3ZlcixcclxuICAgIGRlZmF1bHROYXZiYXJGaXhlZCxcclxuICAgIGRlZmF1bHRGb290ZXJGaXhlZCxcclxuICAgIHN0eWxlcyxcclxuICAgIGRlZmF1bHRTdHlsZSxcclxuICAgIGF2YWlsYWJsZVRoZW1lcyxcclxuICAgIGRlZmF1bHRUaGVtZSxcclxuICAgIHBhdGhSZXNvbHZlcixcclxuICAgIG9uU2V0dGluZ3NDaGFuZ2UsXHJcbiAgICBsYW5nXHJcbiAgfSkge1xyXG4gICAgaWYgKHRoaXMuX3NzcikgcmV0dXJuXHJcbiAgICBpZiAoIXdpbmRvdy5IZWxwZXJzKSB0aHJvdyBuZXcgRXJyb3IoJ3dpbmRvdy5IZWxwZXJzIHJlcXVpcmVkLicpXHJcblxyXG4gICAgdGhpcy5zZXR0aW5ncyA9IHt9XHJcbiAgICB0aGlzLnNldHRpbmdzLmNzc1BhdGggPSBjc3NQYXRoXHJcbiAgICB0aGlzLnNldHRpbmdzLnRoZW1lc1BhdGggPSB0aGVtZXNQYXRoXHJcbiAgICB0aGlzLnNldHRpbmdzLmNzc0ZpbGVuYW1lUGF0dGVybiA9IGNzc0ZpbGVuYW1lUGF0dGVybiB8fCBDU1NfRklMRU5BTUVfUEFUVEVSTlxyXG4gICAgdGhpcy5zZXR0aW5ncy5kaXNwbGF5Q3VzdG9taXplciA9IHR5cGVvZiBkaXNwbGF5Q3VzdG9taXplciAhPT0gJ3VuZGVmaW5lZCcgPyBkaXNwbGF5Q3VzdG9taXplciA6IERJU1BMQVlfQ1VTVE9NSVpFUlxyXG5cclxuICAgIHRoaXMuc2V0dGluZ3MuY29udHJvbHMgPSBjb250cm9scyB8fCBDT05UUk9MU1xyXG4gICAgdGhpcy5zZXR0aW5ncy5kZWZhdWx0VGV4dERpciA9IGRlZmF1bHRUZXh0RGlyID09PSAncnRsJyA/IHRydWUgOiBmYWxzZSB8fCBERUZBVUxUX1RFWFRfRElSXHJcbiAgICB0aGlzLnNldHRpbmdzLmRlZmF1bHRMYXlvdXRUeXBlID0gZGVmYXVsdExheW91dFR5cGUgfHwgREVGQVVMVF9MQVlPVVRfVFlQRVxyXG4gICAgdGhpcy5zZXR0aW5ncy5kZWZhdWx0TWVudUNvbGxhcHNlZCA9XHJcbiAgICAgIHR5cGVvZiBkZWZhdWx0TWVudUNvbGxhcHNlZCAhPT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0TWVudUNvbGxhcHNlZCA6IERFRkFVTFRfTUVOVV9DT0xMQVBTRURcclxuICAgIHRoaXMuc2V0dGluZ3MuZGVmYXVsdE1lbnVGbGlwcGVkID1cclxuICAgICAgdHlwZW9mIGRlZmF1bHRNZW51RmxpcHBlZCAhPT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0TWVudUZsaXBwZWQgOiBERUZBVUxUX01FTlVfRkxJUFBFRFxyXG4gICAgdGhpcy5zZXR0aW5ncy5kZWZhdWx0U2hvd0Ryb3Bkb3duT25Ib3ZlciA9XHJcbiAgICAgIHR5cGVvZiBkZWZhdWx0U2hvd0Ryb3Bkb3duT25Ib3ZlciAhPT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0U2hvd0Ryb3Bkb3duT25Ib3ZlciA6IERFRkFVTFRfU0hPV19EUk9QRE9XTl9PTl9IT1ZFUlxyXG4gICAgdGhpcy5zZXR0aW5ncy5kZWZhdWx0TmF2YmFyRml4ZWQgPVxyXG4gICAgICB0eXBlb2YgZGVmYXVsdE5hdmJhckZpeGVkICE9PSAndW5kZWZpbmVkJyA/IGRlZmF1bHROYXZiYXJGaXhlZCA6IERFRkFVTFRfTkFWQkFSX0ZJWEVEXHJcbiAgICB0aGlzLnNldHRpbmdzLmRlZmF1bHRGb290ZXJGaXhlZCA9XHJcbiAgICAgIHR5cGVvZiBkZWZhdWx0Rm9vdGVyRml4ZWQgIT09ICd1bmRlZmluZWQnID8gZGVmYXVsdEZvb3RlckZpeGVkIDogREVGQVVMVF9GT09URVJfRklYRURcclxuXHJcbiAgICB0aGlzLnNldHRpbmdzLmF2YWlsYWJsZVRoZW1lcyA9IGF2YWlsYWJsZVRoZW1lcyB8fCBUZW1wbGF0ZUN1c3RvbWl6ZXIuVEhFTUVTXHJcbiAgICB0aGlzLnNldHRpbmdzLmRlZmF1bHRUaGVtZSA9IHRoaXMuX2dldERlZmF1bHRUaGVtZShcclxuICAgICAgdHlwZW9mIGRlZmF1bHRUaGVtZSAhPT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0VGhlbWUgOiBERUZBVUxUX1RIRU1FXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5zZXR0aW5ncy5zdHlsZXMgPSBzdHlsZXMgfHwgU1RZTEVTXHJcbiAgICB0aGlzLnNldHRpbmdzLmRlZmF1bHRTdHlsZSA9IGRlZmF1bHRTdHlsZSB8fCBERUZBVUxUX1NUWUxFXHJcbiAgICB0aGlzLnNldHRpbmdzLmxhbmcgPSBsYW5nIHx8ICdlbidcclxuICAgIHRoaXMucGF0aFJlc29sdmVyID0gcGF0aFJlc29sdmVyIHx8IChwID0+IHApXHJcblxyXG4gICAgaWYgKHRoaXMuc2V0dGluZ3Muc3R5bGVzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgY29uc3QgaSA9IHRoaXMuc2V0dGluZ3MuY29udHJvbHMuaW5kZXhPZignc3R5bGUnKVxyXG4gICAgICBpZiAoaSAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmNvbnRyb2xzID0gdGhpcy5zZXR0aW5ncy5jb250cm9scy5zbGljZSgwLCBpKS5jb25jYXQodGhpcy5zZXR0aW5ncy5jb250cm9scy5zbGljZShpICsgMSkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldHRpbmdzLm9uU2V0dGluZ3NDaGFuZ2UgPSB0eXBlb2Ygb25TZXR0aW5nc0NoYW5nZSA9PT0gJ2Z1bmN0aW9uJyA/IG9uU2V0dGluZ3NDaGFuZ2UgOiAoKSA9PiB7fVxyXG5cclxuICAgIHRoaXMuX2xvYWRTZXR0aW5ncygpXHJcblxyXG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW11cclxuICAgIHRoaXMuX2NvbnRyb2xzID0ge31cclxuXHJcbiAgICB0aGlzLl9pbml0RGlyZWN0aW9uKClcclxuICAgIHRoaXMuX2luaXRTdHlsZSgpXHJcbiAgICB0aGlzLl9pbml0VGhlbWUoKVxyXG4gICAgdGhpcy5zZXRMYXlvdXRUeXBlKHRoaXMuc2V0dGluZ3MubGF5b3V0VHlwZSwgZmFsc2UpXHJcbiAgICB0aGlzLnNldExheW91dE1lbnVGbGlwcGVkKHRoaXMuc2V0dGluZ3MubGF5b3V0TWVudUZsaXBwZWQsIGZhbHNlKVxyXG4gICAgdGhpcy5zZXREcm9wZG93bk9uSG92ZXIodGhpcy5zZXR0aW5ncy5zaG93RHJvcGRvd25PbkhvdmVyLCBmYWxzZSlcclxuICAgIHRoaXMuc2V0TGF5b3V0TmF2YmFyRml4ZWQodGhpcy5zZXR0aW5ncy5sYXlvdXROYXZiYXJGaXhlZCwgZmFsc2UpXHJcbiAgICB0aGlzLnNldExheW91dEZvb3RlckZpeGVkKHRoaXMuc2V0dGluZ3MubGF5b3V0Rm9vdGVyRml4ZWQsIGZhbHNlKVxyXG4gICAgdGhpcy5fc2V0dXAoKVxyXG4gIH1cclxuXHJcbiAgc2V0UnRsKHJ0bCkge1xyXG4gICAgaWYgKCF0aGlzLl9oYXNDb250cm9scygncnRsJykpIHJldHVyblxyXG4gICAgdGhpcy5fc2V0U2V0dGluZygnUnRsJywgU3RyaW5nKHJ0bCkpXHJcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcclxuICB9XHJcblxyXG4gIHNldFN0eWxlKHN0eWxlKSB7XHJcbiAgICBpZiAoIXRoaXMuX2hhc0NvbnRyb2xzKCdzdHlsZScpKSByZXR1cm5cclxuICAgIHRoaXMuX3NldFNldHRpbmcoJ1N0eWxlJywgWydkYXJrJ10uaW5kZXhPZihzdHlsZSkgPT09IC0xID8gJ2xpZ2h0JyA6IHN0eWxlKVxyXG5cclxuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxyXG4gIH1cclxuXHJcbiAgc2V0VGhlbWUodGhlbWVOYW1lLCB1cGRhdGVTdG9yYWdlID0gdHJ1ZSwgY2IgPSBudWxsKSB7XHJcbiAgICBpZiAoIXRoaXMuX2hhc0NvbnRyb2xzKCd0aGVtZXMnKSkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgdGhlbWUgPSB0aGlzLl9nZXRUaGVtZUJ5TmFtZSh0aGVtZU5hbWUpXHJcblxyXG4gICAgaWYgKCF0aGVtZSkgcmV0dXJuXHJcblxyXG4gICAgdGhpcy5zZXR0aW5ncy50aGVtZSA9IHRoZW1lXHJcbiAgICBpZiAodXBkYXRlU3RvcmFnZSkgdGhpcy5fc2V0U2V0dGluZygnVGhlbWUnLCB0aGVtZU5hbWUpXHJcblxyXG4gICAgY29uc3QgdGhlbWVVcmwgPSB0aGlzLnBhdGhSZXNvbHZlcihcclxuICAgICAgdGhpcy5zZXR0aW5ncy50aGVtZXNQYXRoICtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmNzc0ZpbGVuYW1lUGF0dGVybi5yZXBsYWNlKFxyXG4gICAgICAgICAgJyVuYW1lJScsXHJcbiAgICAgICAgICB0aGVtZU5hbWUgKyAodGhpcy5zZXR0aW5ncy5zdHlsZSAhPT0gJ2xpZ2h0JyA/IGAtJHt0aGlzLnNldHRpbmdzLnN0eWxlfWAgOiAnJylcclxuICAgICAgICApXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5fbG9hZFN0eWxlc2hlZXRzKHsgW3RoZW1lVXJsXTogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRlbXBsYXRlLWN1c3RvbWl6ZXItdGhlbWUtY3NzJykgfSwgY2IgfHwgKCgpID0+IHt9KSlcclxuXHJcbiAgICBpZiAodXBkYXRlU3RvcmFnZSkgdGhpcy5zZXR0aW5ncy5vblNldHRpbmdzQ2hhbmdlLmNhbGwodGhpcywgdGhpcy5zZXR0aW5ncylcclxuICB9XHJcblxyXG4gIHNldExheW91dFR5cGUocG9zLCB1cGRhdGVTdG9yYWdlID0gdHJ1ZSkge1xyXG4gICAgaWYgKCF0aGlzLl9oYXNDb250cm9scygnbGF5b3V0VHlwZScpKSByZXR1cm5cclxuICAgIGlmIChwb3MgIT09ICdzdGF0aWMnICYmIHBvcyAhPT0gJ3N0YXRpYy1vZmZjYW52YXMnICYmIHBvcyAhPT0gJ2ZpeGVkJyAmJiBwb3MgIT09ICdmaXhlZC1vZmZjYW52YXMnKSByZXR1cm5cclxuXHJcbiAgICB0aGlzLnNldHRpbmdzLmxheW91dFR5cGUgPSBwb3NcclxuICAgIGlmICh1cGRhdGVTdG9yYWdlKSB0aGlzLl9zZXRTZXR0aW5nKCdMYXlvdXRUeXBlJywgcG9zKVxyXG5cclxuICAgIHdpbmRvdy5IZWxwZXJzLnNldFBvc2l0aW9uKFxyXG4gICAgICBwb3MgPT09ICdmaXhlZCcgfHwgcG9zID09PSAnZml4ZWQtb2ZmY2FudmFzJyxcclxuICAgICAgcG9zID09PSAnc3RhdGljLW9mZmNhbnZhcycgfHwgcG9zID09PSAnZml4ZWQtb2ZmY2FudmFzJ1xyXG4gICAgKVxyXG5cclxuICAgIGlmICh1cGRhdGVTdG9yYWdlKSB0aGlzLnNldHRpbmdzLm9uU2V0dGluZ3NDaGFuZ2UuY2FsbCh0aGlzLCB0aGlzLnNldHRpbmdzKVxyXG5cclxuICAgIC8vIFBlcmZlY3RzY3JvbGxiYXIgY2hhbmdlIG9uIExheW91dCBjaGFuZ2VcclxuICAgIGxldCBtZW51U2Nyb2xsID0gd2luZG93LkhlbHBlcnMubWVudVBzU2Nyb2xsXHJcbiAgICBjb25zdCBQZXJmZWN0U2Nyb2xsYmFyTGliID0gd2luZG93LlBlcmZlY3RTY3JvbGxiYXJcclxuXHJcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5sYXlvdXRUeXBlID09PSAnZml4ZWQnIHx8IHRoaXMuc2V0dGluZ3MubGF5b3V0VHlwZSA9PT0gJ2ZpeGVkLW9mZmNhbnZhcycpIHtcclxuICAgICAgLy8gU2V0IHBlcmZlY3RzY3JvbGxiYXIgd2hlZWxQcm9wYWdhdGlvbiBmYWxzZSBmb3IgZml4ZWQgbGF5b3V0XHJcbiAgICAgIGlmIChQZXJmZWN0U2Nyb2xsYmFyTGliICYmIG1lbnVTY3JvbGwpIHtcclxuICAgICAgICB3aW5kb3cuSGVscGVycy5tZW51UHNTY3JvbGwuZGVzdHJveSgpXHJcbiAgICAgICAgbWVudVNjcm9sbCA9IG5ldyBQZXJmZWN0U2Nyb2xsYmFyTGliKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWlubmVyJyksIHtcclxuICAgICAgICAgIHN1cHByZXNzU2Nyb2xsWDogdHJ1ZSxcclxuICAgICAgICAgIHdoZWVsUHJvcGFnYXRpb246IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB3aW5kb3cuSGVscGVycy5tZW51UHNTY3JvbGwgPSBtZW51U2Nyb2xsXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAobWVudVNjcm9sbCkge1xyXG4gICAgICAvLyBEZXN0cm95IHBlcmZlY3RzY3JvbGxiYXIgZm9yIHN0YXRpYyBsYXlvdXRcclxuICAgICAgd2luZG93LkhlbHBlcnMubWVudVBzU2Nyb2xsLmRlc3Ryb3koKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0TGF5b3V0TWVudUZsaXBwZWQoZmxpcHBlZCwgdXBkYXRlU3RvcmFnZSA9IHRydWUpIHtcclxuICAgIGlmICghdGhpcy5faGFzQ29udHJvbHMoJ2xheW91dE1lbnVGbGlwcGVkJykpIHJldHVyblxyXG4gICAgdGhpcy5zZXR0aW5ncy5sYXlvdXRNZW51RmxpcHBlZCA9IGZsaXBwZWRcclxuICAgIGlmICh1cGRhdGVTdG9yYWdlKSB0aGlzLl9zZXRTZXR0aW5nKCdNZW51RmxpcHBlZCcsIGZsaXBwZWQpXHJcblxyXG4gICAgd2luZG93LkhlbHBlcnMuc2V0RmxpcHBlZChmbGlwcGVkKVxyXG5cclxuICAgIGlmICh1cGRhdGVTdG9yYWdlKSB0aGlzLnNldHRpbmdzLm9uU2V0dGluZ3NDaGFuZ2UuY2FsbCh0aGlzLCB0aGlzLnNldHRpbmdzKVxyXG4gIH1cclxuXHJcbiAgc2V0RHJvcGRvd25PbkhvdmVyKG9wZW4sIHVwZGF0ZVN0b3JhZ2UgPSB0cnVlKSB7XHJcbiAgICBpZiAoIXRoaXMuX2hhc0NvbnRyb2xzKCdzaG93RHJvcGRvd25PbkhvdmVyJykpIHJldHVyblxyXG4gICAgdGhpcy5zZXR0aW5ncy5zaG93RHJvcGRvd25PbkhvdmVyID0gb3BlblxyXG4gICAgaWYgKHVwZGF0ZVN0b3JhZ2UpIHRoaXMuX3NldFNldHRpbmcoJ1Nob3dEcm9wZG93bk9uSG92ZXInLCBvcGVuKVxyXG5cclxuICAgIGlmICh3aW5kb3cuSGVscGVycy5tYWluTWVudSkge1xyXG4gICAgICB3aW5kb3cuSGVscGVycy5tYWluTWVudS5kZXN0cm95KClcclxuICAgICAgY29uZmlnLnNob3dEcm9wZG93bk9uSG92ZXIgPSBvcGVuXHJcblxyXG4gICAgICBjb25zdCB7IE1lbnUgfSA9IHdpbmRvd1xyXG5cclxuICAgICAgd2luZG93LkhlbHBlcnMubWFpbk1lbnUgPSBuZXcgTWVudShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5b3V0LW1lbnUnKSwge1xyXG4gICAgICAgIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcsXHJcbiAgICAgICAgY2xvc2VDaGlsZHJlbjogdHJ1ZSxcclxuICAgICAgICBzaG93RHJvcGRvd25PbkhvdmVyOiBjb25maWcuc2hvd0Ryb3Bkb3duT25Ib3ZlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cGRhdGVTdG9yYWdlKSB0aGlzLnNldHRpbmdzLm9uU2V0dGluZ3NDaGFuZ2UuY2FsbCh0aGlzLCB0aGlzLnNldHRpbmdzKVxyXG4gIH1cclxuXHJcbiAgc2V0TGF5b3V0TmF2YmFyRml4ZWQoZml4ZWQsIHVwZGF0ZVN0b3JhZ2UgPSB0cnVlKSB7XHJcbiAgICBpZiAoIXRoaXMuX2hhc0NvbnRyb2xzKCdsYXlvdXROYXZiYXJGaXhlZCcpKSByZXR1cm5cclxuICAgIHRoaXMuc2V0dGluZ3MubGF5b3V0TmF2YmFyRml4ZWQgPSBmaXhlZFxyXG4gICAgaWYgKHVwZGF0ZVN0b3JhZ2UpIHRoaXMuX3NldFNldHRpbmcoJ0ZpeGVkTmF2YmFyJywgZml4ZWQpXHJcblxyXG4gICAgd2luZG93LkhlbHBlcnMuc2V0TmF2YmFyRml4ZWQoZml4ZWQpXHJcblxyXG4gICAgaWYgKHVwZGF0ZVN0b3JhZ2UpIHRoaXMuc2V0dGluZ3Mub25TZXR0aW5nc0NoYW5nZS5jYWxsKHRoaXMsIHRoaXMuc2V0dGluZ3MpXHJcbiAgfVxyXG5cclxuICBzZXRMYXlvdXRGb290ZXJGaXhlZChmaXhlZCwgdXBkYXRlU3RvcmFnZSA9IHRydWUpIHtcclxuICAgIGlmICghdGhpcy5faGFzQ29udHJvbHMoJ2xheW91dEZvb3RlckZpeGVkJykpIHJldHVyblxyXG4gICAgdGhpcy5zZXR0aW5ncy5sYXlvdXRGb290ZXJGaXhlZCA9IGZpeGVkXHJcbiAgICBpZiAodXBkYXRlU3RvcmFnZSkgdGhpcy5fc2V0U2V0dGluZygnRml4ZWRGb290ZXInLCBmaXhlZClcclxuXHJcbiAgICB3aW5kb3cuSGVscGVycy5zZXRGb290ZXJGaXhlZChmaXhlZClcclxuXHJcbiAgICBpZiAodXBkYXRlU3RvcmFnZSkgdGhpcy5zZXR0aW5ncy5vblNldHRpbmdzQ2hhbmdlLmNhbGwodGhpcywgdGhpcy5zZXR0aW5ncylcclxuICB9XHJcblxyXG4gIHNldExhbmcobGFuZywgZm9yY2UgPSBmYWxzZSkge1xyXG4gICAgaWYgKGxhbmcgPT09IHRoaXMuc2V0dGluZ3MubGFuZyAmJiAhZm9yY2UpIHJldHVyblxyXG4gICAgaWYgKCFUZW1wbGF0ZUN1c3RvbWl6ZXIuTEFOR1VBR0VTW2xhbmddKSB0aHJvdyBuZXcgRXJyb3IoYExhbmd1YWdlIFwiJHtsYW5nfVwiIG5vdCBmb3VuZCFgKVxyXG5cclxuICAgIGNvbnN0IHQgPSBUZW1wbGF0ZUN1c3RvbWl6ZXIuTEFOR1VBR0VTW2xhbmddXHJcblxyXG4gICAgO1tcclxuICAgICAgJ3BhbmVsX2hlYWRlcicsXHJcbiAgICAgICdwYW5lbF9zdWJfaGVhZGVyJyxcclxuICAgICAgJ3RoZW1pbmdfaGVhZGVyJyxcclxuICAgICAgJ3RoZW1lX2hlYWRlcicsXHJcbiAgICAgICdzdHlsZV9sYWJlbCcsXHJcbiAgICAgICdzdHlsZV9zd2l0Y2hfbGlnaHQnLFxyXG4gICAgICAnc3R5bGVfc3dpdGNoX2RhcmsnLFxyXG4gICAgICAnbGF5b3V0X2hlYWRlcicsXHJcbiAgICAgICdsYXlvdXRfbGFiZWwnLFxyXG4gICAgICAnbGF5b3V0X3N0YXRpYycsXHJcbiAgICAgICdsYXlvdXRfb2ZmY2FudmFzJyxcclxuICAgICAgJ2xheW91dF9maXhlZCcsXHJcbiAgICAgICdsYXlvdXRfZml4ZWRfb2ZmY2FudmFzJyxcclxuICAgICAgJ2xheW91dF9mbGlwcGVkX2xhYmVsJyxcclxuICAgICAgJ2xheW91dF9kZF9vcGVuX2xhYmVsJyxcclxuICAgICAgJ2xheW91dF9uYXZiYXJfbGFiZWwnLFxyXG4gICAgICAnbGF5b3V0X2Zvb3Rlcl9sYWJlbCcsXHJcbiAgICAgICdtaXNjX2hlYWRlcicsXHJcbiAgICAgICd0aGVtZV9sYWJlbCcsXHJcbiAgICAgICdydGxfbGFiZWwnXHJcbiAgICBdLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAudGVtcGxhdGUtY3VzdG9taXplci10LSR7a2V5fWApXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcclxuICAgICAgZWwgJiYgKGVsLnRleHRDb250ZW50ID0gdFtrZXldKVxyXG4gICAgfSlcclxuXHJcbiAgICBjb25zdCB0dCA9IHQudGhlbWVzIHx8IHt9XHJcbiAgICBjb25zdCB0aGVtZXMgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcudGVtcGxhdGUtY3VzdG9taXplci10aGVtZS1pdGVtJykgfHwgW11cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoZW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgdGhlbWVOYW1lID0gdGhlbWVzW2ldLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpLnZhbHVlXHJcbiAgICAgIHRoZW1lc1tpXS5xdWVyeVNlbGVjdG9yKCcudGVtcGxhdGUtY3VzdG9taXplci10aGVtZS1uYW1lJykudGV4dENvbnRlbnQgPVxyXG4gICAgICAgIHR0W3RoZW1lTmFtZV0gfHwgdGhpcy5fZ2V0VGhlbWVCeU5hbWUodGhlbWVOYW1lKS50aXRsZVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0dGluZ3MubGFuZyA9IGxhbmdcclxuICB9XHJcblxyXG4gIC8vIFVwZGF0ZSB0aGVtZSBzZXR0aW5ncyBjb250cm9sXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgaWYgKHRoaXMuX3NzcikgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgaGFzTmF2YmFyID0gISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LW5hdmJhcicpXHJcbiAgICBjb25zdCBoYXNNZW51ID0gISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LW1lbnUnKVxyXG4gICAgY29uc3QgaGFzSG9yaXpvbnRhbE1lbnUgPSAhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sYXlvdXQtbWVudS1ob3Jpem9udGFsLm1lbnUsIC5sYXlvdXQtbWVudS1ob3Jpem9udGFsIC5tZW51JylcclxuICAgIGNvbnN0IGlzTGF5b3V0MSA9ICEhZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxheW91dC13cmFwcGVyLmxheW91dC1uYXZiYXItZnVsbCcpXHJcbiAgICBjb25zdCBoYXNGb290ZXIgPSAhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250ZW50LWZvb3RlcicpXHJcblxyXG4gICAgaWYgKHRoaXMuX2NvbnRyb2xzLmxheW91dE1lbnVGbGlwcGVkKSB7XHJcbiAgICAgIGlmICghaGFzTWVudSkge1xyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmxheW91dE1lbnVGbGlwcGVkLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKVxyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmxheW91dE1lbnVGbGlwcGVkLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jb250cm9scy5sYXlvdXRNZW51RmxpcHBlZC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJylcclxuICAgICAgICB0aGlzLl9jb250cm9scy5sYXlvdXRNZW51RmxpcHBlZC5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fY29udHJvbHMuc2hvd0Ryb3Bkb3duT25Ib3Zlcikge1xyXG4gICAgICBpZiAoaGFzTWVudSkge1xyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLnNob3dEcm9wZG93bk9uSG92ZXIuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpXHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMuc2hvd0Ryb3Bkb3duT25Ib3Zlci5jbGFzc0xpc3QuYWRkKCdkaXNhYmxlZCcpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMuc2hvd0Ryb3Bkb3duT25Ib3Zlci5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJylcclxuICAgICAgICB0aGlzLl9jb250cm9scy5zaG93RHJvcGRvd25PbkhvdmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJylcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9jb250cm9scy5sYXlvdXROYXZiYXJGaXhlZCkge1xyXG4gICAgICBpZiAoIWhhc05hdmJhcikge1xyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmxheW91dE5hdmJhckZpeGVkLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKVxyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmxheW91dE5hdmJhckZpeGVkVy5jbGFzc0xpc3QuYWRkKCdkaXNhYmxlZCcpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMubGF5b3V0TmF2YmFyRml4ZWQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpXHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMubGF5b3V0TmF2YmFyRml4ZWRXLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJylcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gIEhvcml6b250YWwgbWVudSBmaXhlZCBsYXlvdXQgLSBkaXNhYmxlZCBmaXhlZCBuYXZiYXIgc3dpdGNoXHJcbiAgICAgIGlmIChoYXNIb3Jpem9udGFsTWVudSAmJiBoYXNOYXZiYXIgJiYgdGhpcy5zZXR0aW5ncy5sYXlvdXRUeXBlID09ICdmaXhlZCcpIHtcclxuICAgICAgICB0aGlzLl9jb250cm9scy5sYXlvdXROYXZiYXJGaXhlZC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJylcclxuICAgICAgICB0aGlzLl9jb250cm9scy5sYXlvdXROYXZiYXJGaXhlZFcuY2xhc3NMaXN0LmFkZCgnZGlzYWJsZWQnKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2NvbnRyb2xzLmxheW91dEZvb3RlckZpeGVkKSB7XHJcbiAgICAgIGlmICghaGFzRm9vdGVyKSB7XHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMubGF5b3V0Rm9vdGVyRml4ZWQuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpXHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMubGF5b3V0Rm9vdGVyRml4ZWRXLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jb250cm9scy5sYXlvdXRGb290ZXJGaXhlZC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJylcclxuICAgICAgICB0aGlzLl9jb250cm9scy5sYXlvdXRGb290ZXJGaXhlZFcuY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2NvbnRyb2xzLmxheW91dFR5cGUpIHtcclxuICAgICAgLy8gPyBVbmNvbW1lbnQgSWYgdXNpbmcgb2ZmY2FudmFzIGxheW91dFxyXG4gICAgICAvKlxyXG4gICAgICBpZiAoIWhhc01lbnUpIHtcclxuICAgICAgICB0aGlzLl9jb250cm9scy5sYXlvdXRUeXBlLnF1ZXJ5U2VsZWN0b3IoJ1t2YWx1ZT1cInN0YXRpYy1vZmZjYW52YXNcIl0nKS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJylcclxuICAgICAgICB0aGlzLl9jb250cm9scy5sYXlvdXRUeXBlLnF1ZXJ5U2VsZWN0b3IoJ1t2YWx1ZT1cImZpeGVkLW9mZmNhbnZhc1wiXScpLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmxheW91dFR5cGUucXVlcnlTZWxlY3RvcignW3ZhbHVlPVwic3RhdGljLW9mZmNhbnZhc1wiXScpLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKVxyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmxheW91dFR5cGUucXVlcnlTZWxlY3RvcignW3ZhbHVlPVwiZml4ZWQtb2ZmY2FudmFzXCJdJykucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpXHJcbiAgICAgIH1cclxuICAgICAgKi9cclxuXHJcbiAgICAgIC8vIERpc2FibGUgbWVudSBsYXlvdXRzIG9wdGlvbnMgaWYgbWVudSAodmVydGljYWwgb3IgaG9yaXpvbnRhbCkgaXMgbm90IHRoZXJlXHJcbiAgICAgIC8vIGlmICgoIWhhc05hdmJhciAmJiAhaGFzTWVudSkgfHwgKCFoYXNNZW51ICYmICFpc0xheW91dDEpKSB7XHJcbiAgICAgIGlmIChoYXNNZW51IHx8IGhhc0hvcml6b250YWxNZW51KSB7XHJcbiAgICAgICAgLy8gKFVwZGF0ZWQgY29uZGl0aW9uKVxyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmxheW91dFR5cGUucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMubGF5b3V0VHlwZS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2xlYXIgbG9jYWwgc3RvcmFnZVxyXG4gIGNsZWFyTG9jYWxTdG9yYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuX3NzcikgcmV0dXJuXHJcblxyXG4gICAgdGhpcy5fc2V0U2V0dGluZygnVGhlbWUnLCAnJylcclxuICAgIHRoaXMuX3NldFNldHRpbmcoJ1J0bCcsICcnKVxyXG4gICAgdGhpcy5fc2V0U2V0dGluZygnU3R5bGUnLCAnJylcclxuICAgIHRoaXMuX3NldFNldHRpbmcoJ01lbnVGbGlwcGVkJywgJycpXHJcbiAgICB0aGlzLl9zZXRTZXR0aW5nKCdGaXhlZE5hdmJhcicsICcnKVxyXG4gICAgdGhpcy5fc2V0U2V0dGluZygnRml4ZWRGb290ZXInLCAnJylcclxuICAgIHRoaXMuX3NldFNldHRpbmcoJ0xheW91dFR5cGUnLCAnJylcclxuICB9XHJcblxyXG4gIC8vIENsZWFyIGxvY2FsIHN0b3JhZ2VcclxuICBkZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuX3NzcikgcmV0dXJuXHJcblxyXG4gICAgdGhpcy5fY2xlYW51cCgpXHJcblxyXG4gICAgdGhpcy5zZXR0aW5ncyA9IG51bGxcclxuICAgIHRoaXMuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpXHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IG51bGxcclxuICB9XHJcblxyXG4gIF9sb2FkU2V0dGluZ3MoKSB7XHJcbiAgICAvLyBHZXQgc2V0dGluZ3NcclxuXHJcbiAgICAvLyBjb25zdCBjbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3Q7XHJcbiAgICBjb25zdCBydGwgPSB0aGlzLl9nZXRTZXR0aW5nKCdSdGwnKVxyXG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLl9nZXRTZXR0aW5nKCdTdHlsZScpXHJcbiAgICBjb25zdCBjb2xsYXBzZWRNZW51ID0gdGhpcy5fZ2V0U2V0dGluZygnTGF5b3V0Q29sbGFwc2VkJykgLy8gVmFsdWUgd2lsbCBiZSBzZXQgZnJvbSBtYWluLmpzXHJcbiAgICBjb25zdCBmbGlwcGVkTWVudSA9IHRoaXMuX2dldFNldHRpbmcoJ0xheW91dE1lbnVGbGlwcGVkJylcclxuICAgIGNvbnN0IGRyb3Bkb3duT25Ib3ZlciA9IHRoaXMuX2dldFNldHRpbmcoJ1Nob3dEcm9wZG93bk9uSG92ZXInKSAvLyBWYWx1ZSB3aWxsIGJlIHNldCBmcm9tIG1haW4uanNcclxuICAgIGNvbnN0IGZpeGVkTmF2YmFyID0gdGhpcy5fZ2V0U2V0dGluZygnRml4ZWROYXZiYXInKVxyXG4gICAgY29uc3QgZml4ZWRGb290ZXIgPSB0aGlzLl9nZXRTZXR0aW5nKCdGaXhlZEZvb3RlcicpXHJcbiAgICBjb25zdCBsVHlwZSA9IHRoaXMuX2dldFNldHRpbmcoJ0xheW91dFR5cGUnKVxyXG4gICAgbGV0IHR5cGVcclxuXHJcbiAgICBpZiAobFR5cGUgIT09ICcnICYmIFsnc3RhdGljJywgJ3N0YXRpYy1vZmZjYW52YXMnLCAnZml4ZWQnLCAnZml4ZWQtb2ZmY2FudmFzJ10uaW5kZXhPZihsVHlwZSkgIT09IC0xKSB7XHJcbiAgICAgIHR5cGUgPSBsVHlwZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHlwZSA9IHRoaXMuc2V0dGluZ3MuZGVmYXVsdExheW91dFR5cGVcclxuICAgIH1cclxuICAgIHRoaXMuc2V0dGluZ3MubGF5b3V0VHlwZSA9IHR5cGVcclxuXHJcbiAgICAvLyAhIFNldCBzZXR0aW5ncyBieSBmb2xsb3dpbmcgcHJpb3JpdHk6IExvY2FsIFN0b3JhZ2UsIFRoZW1lIENvbmZpZywgSFRNTCBDbGFzc2VzXHJcbiAgICB0aGlzLnNldHRpbmdzLnJ0bCA9IHJ0bCAhPT0gJycgPyBydGwgPT09ICd0cnVlJyA6IHRoaXMuc2V0dGluZ3MuZGVmYXVsdFRleHREaXJcclxuXHJcbiAgICB0aGlzLnNldHRpbmdzLnN0eWxlID0gdGhpcy5zZXR0aW5ncy5zdHlsZXMuaW5kZXhPZihzdHlsZSkgIT09IC0xID8gc3R5bGUgOiB0aGlzLnNldHRpbmdzLmRlZmF1bHRTdHlsZVxyXG4gICAgaWYgKHRoaXMuc2V0dGluZ3Muc3R5bGVzLmluZGV4T2YodGhpcy5zZXR0aW5ncy5zdHlsZSkgPT09IC0xKSB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xyXG4gICAgICB0aGlzLnNldHRpbmdzLnN0eWxlID0gdGhpcy5zZXR0aW5ncy5zdHlsZXNbMF1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldHRpbmdzLmxheW91dE1lbnUgPSBjb2xsYXBzZWRNZW51ICE9PSAnJyA/IGNvbGxhcHNlZE1lbnUgPT09ICd0cnVlJyA6IHRoaXMuc2V0dGluZ3MuZGVmYXVsdE1lbnVDb2xsYXBzZWRcclxuICAgIHRoaXMuc2V0dGluZ3MubGF5b3V0TWVudUZsaXBwZWQgPSBmbGlwcGVkTWVudSAhPT0gJycgPyBmbGlwcGVkTWVudSA9PT0gJ3RydWUnIDogdGhpcy5zZXR0aW5ncy5kZWZhdWx0TWVudUZsaXBwZWRcclxuICAgIHRoaXMuc2V0dGluZ3Muc2hvd0Ryb3Bkb3duT25Ib3ZlciA9XHJcbiAgICAgIGRyb3Bkb3duT25Ib3ZlciAhPT0gJycgPyBkcm9wZG93bk9uSG92ZXIgPT09ICd0cnVlJyA6IHRoaXMuc2V0dGluZ3MuZGVmYXVsdFNob3dEcm9wZG93bk9uSG92ZXJcclxuICAgIHRoaXMuc2V0dGluZ3MubGF5b3V0TmF2YmFyRml4ZWQgPSBmaXhlZE5hdmJhciAhPT0gJycgPyBmaXhlZE5hdmJhciA9PT0gJ3RydWUnIDogdGhpcy5zZXR0aW5ncy5kZWZhdWx0TmF2YmFyRml4ZWRcclxuICAgIHRoaXMuc2V0dGluZ3MubGF5b3V0Rm9vdGVyRml4ZWQgPSBmaXhlZEZvb3RlciAhPT0gJycgPyBmaXhlZEZvb3RlciA9PT0gJ3RydWUnIDogdGhpcy5zZXR0aW5ncy5kZWZhdWx0Rm9vdGVyRml4ZWRcclxuXHJcbiAgICB0aGlzLnNldHRpbmdzLnRoZW1lID0gdGhpcy5fZ2V0VGhlbWVCeU5hbWUodGhpcy5fZ2V0U2V0dGluZygnVGhlbWUnKSwgdHJ1ZSlcclxuXHJcbiAgICAvLyBGaWx0ZXIgb3B0aW9ucyBkZXBlbmRpbmcgb24gYXZhaWxhYmxlIGNvbnRyb2xzXHJcbiAgICBpZiAoIXRoaXMuX2hhc0NvbnRyb2xzKCdydGwnKSkgdGhpcy5zZXR0aW5ncy5ydGwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXInKSA9PT0gJ3J0bCdcclxuICAgIGlmICghdGhpcy5faGFzQ29udHJvbHMoJ3N0eWxlJykpIHRoaXMuc2V0dGluZ3Muc3R5bGUgPSBjbC5jb250YWlucygnZGFyay1zdHlsZScpID8gJ2RhcmsnIDogJ2xpZ2h0J1xyXG4gICAgaWYgKCF0aGlzLl9oYXNDb250cm9scygnbGF5b3V0VHlwZScpKSB0aGlzLnNldHRpbmdzLmxheW91dFR5cGUgPSBudWxsXHJcbiAgICBpZiAoIXRoaXMuX2hhc0NvbnRyb2xzKCdsYXlvdXRNZW51RmxpcHBlZCcpKSB0aGlzLnNldHRpbmdzLmxheW91dE1lbnVGbGlwcGVkID0gbnVsbFxyXG4gICAgaWYgKCF0aGlzLl9oYXNDb250cm9scygnc2hvd0Ryb3Bkb3duT25Ib3ZlcicpKSB0aGlzLnNldHRpbmdzLnNob3dEcm9wZG93bk9uSG92ZXIgPSBudWxsXHJcbiAgICBpZiAoIXRoaXMuX2hhc0NvbnRyb2xzKCdsYXlvdXROYXZiYXJGaXhlZCcpKSB0aGlzLnNldHRpbmdzLmxheW91dE5hdmJhckZpeGVkID0gbnVsbFxyXG4gICAgaWYgKCF0aGlzLl9oYXNDb250cm9scygnbGF5b3V0Rm9vdGVyRml4ZWQnKSkgdGhpcy5zZXR0aW5ncy5sYXlvdXRGb290ZXJGaXhlZCA9IG51bGxcclxuICAgIGlmICghdGhpcy5faGFzQ29udHJvbHMoJ3RoZW1lcycpKSB0aGlzLnNldHRpbmdzLnRoZW1lID0gbnVsbFxyXG4gIH1cclxuXHJcbiAgLy8gU2V0dXAgdGhlbWUgc2V0dGluZ3MgY29udHJvbHMgYW5kIGV2ZW50c1xyXG4gIF9zZXR1cChfY29udGFpbmVyID0gZG9jdW1lbnQpIHtcclxuICAgIHRoaXMuX2NsZWFudXAoKVxyXG4gICAgdGhpcy5jb250YWluZXIgPSB0aGlzLl9nZXRFbGVtZW50RnJvbVN0cmluZyhjdXN0b21pemVyTWFya3VwKVxyXG5cclxuICAgIC8vIEN1c3RvbWl6ZXIgdmlzaWJpbGl0eSBjb25kaXRpb25cclxuICAgIC8vXHJcbiAgICBjb25zdCBjdXN0b21pemVyVyA9IHRoaXMuY29udGFpbmVyXHJcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5kaXNwbGF5Q3VzdG9taXplcikgY3VzdG9taXplclcuc2V0QXR0cmlidXRlKCdzdHlsZScsICd2aXNpYmlsaXR5OiB2aXNpYmxlJylcclxuICAgIGVsc2UgY3VzdG9taXplclcuc2V0QXR0cmlidXRlKCdzdHlsZScsICd2aXNpYmlsaXR5OiBoaWRkZW4nKVxyXG5cclxuICAgIC8vIE9wZW4gYnRuXHJcbiAgICAvL1xyXG4gICAgY29uc3Qgb3BlbkJ0biA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy50ZW1wbGF0ZS1jdXN0b21pemVyLW9wZW4tYnRuJylcclxuICAgIGNvbnN0IG9wZW5CdG5DYiA9ICgpID0+IHtcclxuICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgndGVtcGxhdGUtY3VzdG9taXplci1vcGVuJylcclxuICAgICAgdGhpcy51cGRhdGUoKVxyXG5cclxuICAgICAgaWYgKHRoaXMuX3VwZGF0ZUludGVydmFsKSBjbGVhckludGVydmFsKHRoaXMuX3VwZGF0ZUludGVydmFsKVxyXG4gICAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICAgIH0sIDUwMClcclxuICAgIH1cclxuICAgIG9wZW5CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvcGVuQnRuQ2IpXHJcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChbb3BlbkJ0biwgJ2NsaWNrJywgb3BlbkJ0bkNiXSlcclxuXHJcbiAgICAvLyBDbG9zZSBidG5cclxuICAgIC8vXHJcblxyXG4gICAgY29uc3QgY2xvc2VCdG4gPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcudGVtcGxhdGUtY3VzdG9taXplci1jbG9zZS1idG4nKVxyXG4gICAgY29uc3QgY2xvc2VCdG5DYiA9ICgpID0+IHtcclxuICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgndGVtcGxhdGUtY3VzdG9taXplci1vcGVuJylcclxuXHJcbiAgICAgIGlmICh0aGlzLl91cGRhdGVJbnRlcnZhbCkge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fdXBkYXRlSW50ZXJ2YWwpXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNsb3NlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xvc2VCdG5DYilcclxuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKFtjbG9zZUJ0biwgJ2NsaWNrJywgY2xvc2VCdG5DYl0pXHJcblxyXG4gICAgLy8gUlRMXHJcbiAgICAvL1xyXG5cclxuICAgIGNvbnN0IHJ0bFcgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcudGVtcGxhdGUtY3VzdG9taXplci1taXNjJylcclxuICAgIC8vID8gSGlkZSBSVEwgY29udHJvbCBpbiBmb2xsb3dpbmcgMiBjYXNlXHJcbiAgICBpZiAoIXRoaXMuX2hhc0NvbnRyb2xzKCdydGwnKSB8fCAhcnRsU3VwcG9ydCkge1xyXG4gICAgICBydGxXLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocnRsVylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHJ0bCA9IHJ0bFcucXVlcnlTZWxlY3RvcignaW5wdXQnKVxyXG5cclxuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MucnRsKSBydGwuc2V0QXR0cmlidXRlKCdjaGVja2VkJywgJ2NoZWNrZWQnKVxyXG5cclxuICAgICAgY29uc3QgcnRsQ2IgPSBlID0+IHtcclxuICAgICAgICB0aGlzLl9sb2FkaW5nU3RhdGUodHJ1ZSlcclxuICAgICAgICB0aGlzLnNldFJ0bChlLnRhcmdldC5jaGVja2VkKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBydGwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcnRsQ2IpXHJcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKFtydGwsICdjaGFuZ2UnLCBydGxDYl0pXHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3R5bGVcclxuXHJcbiAgICAvL1xyXG5cclxuICAgIGNvbnN0IHN0eWxlVyA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy50ZW1wbGF0ZS1jdXN0b21pemVyLXN0eWxlJylcclxuXHJcbiAgICBpZiAoIXRoaXMuX2hhc0NvbnRyb2xzKCdzdHlsZScpKSB7XHJcbiAgICAgIHN0eWxlVy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlVylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHN0eWxlID0gc3R5bGVXLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcclxuXHJcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN0eWxlID09PSAnZGFyaycpIHN0eWxlLnNldEF0dHJpYnV0ZSgnY2hlY2tlZCcsICdjaGVja2VkJylcclxuXHJcbiAgICAgIGNvbnN0IHN0eWxlQ2IgPSBlID0+IHtcclxuICAgICAgICB0aGlzLl9sb2FkaW5nU3RhdGUodHJ1ZSlcclxuICAgICAgICBpZiAoZS50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgICAgdGhpcy5zZXRTdHlsZSgnZGFyaycpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2V0U3R5bGUoJ2xpZ2h0JylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0eWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHN0eWxlQ2IpXHJcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKFtzdHlsZSwgJ2NoYW5nZScsIHN0eWxlQ2JdKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoZW1lXHJcblxyXG4gICAgY29uc3QgdGhlbWVzVyA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy50ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1lcycpXHJcblxyXG4gICAgaWYgKCF0aGlzLl9oYXNDb250cm9scygndGhlbWVzJykpIHtcclxuICAgICAgdGhlbWVzVy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoZW1lc1cpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0aGVtZXNXSW5uZXIgPSB0aGVtZXNXLnF1ZXJ5U2VsZWN0b3IoJy50ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1lcy1vcHRpb25zJylcclxuICAgICAgdGhpcy5zZXR0aW5ncy5hdmFpbGFibGVUaGVtZXMuZm9yRWFjaCh0aGVtZSA9PiB7XHJcbiAgICAgICAgY29uc3QgdGhlbWVFbCA9IHRoaXMuX2dldEVsZW1lbnRGcm9tU3RyaW5nKFxyXG4gICAgICAgICAgYDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPjxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwidGhlbWVSYWRpb3NcIiBpZD1cInRoZW1lUmFkaW9zJHt0aGVtZS5uYW1lfVwiIHZhbHVlPVwiJHt0aGVtZS5uYW1lfVwiPjxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJ0aGVtZVJhZGlvcyR7dGhlbWUubmFtZX1cIj4ke3RoZW1lLnRpdGxlfTwvbGFiZWw+PC9kaXY+PC9kaXY+YFxyXG4gICAgICAgIClcclxuICAgICAgICB0aGVtZXNXSW5uZXIuYXBwZW5kQ2hpbGQodGhlbWVFbClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoZW1lc1dJbm5lci5xdWVyeVNlbGVjdG9yKGBpbnB1dFt2YWx1ZT1cIiR7dGhpcy5zZXR0aW5ncy50aGVtZS5uYW1lfVwiXWApLnNldEF0dHJpYnV0ZSgnY2hlY2tlZCcsICdjaGVja2VkJylcclxuXHJcbiAgICAgIGNvbnN0IHRoZW1lQ2IgPSBlID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fbG9hZGluZykgcmV0dXJuXHJcblxyXG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5fbG9hZGluZ1N0YXRlKHRydWUsIHRydWUpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0VGhlbWUoZS50YXJnZXQudmFsdWUsIHRydWUsICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy5fbG9hZGluZ1N0YXRlKGZhbHNlLCB0cnVlKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoZW1lc1dJbm5lci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGVtZUNiKVxyXG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChbdGhlbWVzV0lubmVyLCAnY2hhbmdlJywgdGhlbWVDYl0pXHJcbiAgICB9XHJcbiAgICBjb25zdCB0aGVtaW5nVyA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy50ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1pbmcnKVxyXG5cclxuICAgIGlmICghdGhpcy5faGFzQ29udHJvbHMoJ3N0eWxlJykgJiYgIXRoaXMuX2hhc0NvbnRyb2xzKCd0aGVtZXMnKSkge1xyXG4gICAgICB0aGVtaW5nVy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoZW1pbmdXKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIExheW91dCB3cmFwcGVyXHJcbiAgICAvL1xyXG5cclxuICAgIGNvbnN0IGxheW91dFcgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcudGVtcGxhdGUtY3VzdG9taXplci1sYXlvdXQnKVxyXG5cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuX2hhc0NvbnRyb2xzKCdsYXlvdXRUeXBlIGxheW91dE5hdmJhckZpeGVkIGxheW91dEZvb3RlckZpeGVkIGxheW91dE1lbnVGbGlwcGVkIHNob3dEcm9wZG93bk9uSG92ZXInLCB0cnVlKVxyXG4gICAgKSB7XHJcbiAgICAgIGxheW91dFcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsYXlvdXRXKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gUG9zaXRpb25cclxuICAgICAgLy9cclxuXHJcbiAgICAgIGNvbnN0IGxheW91dFR5cGVXID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcignLnRlbXBsYXRlLWN1c3RvbWl6ZXItbGF5b3V0VHlwZScpXHJcblxyXG4gICAgICBpZiAoIXRoaXMuX2hhc0NvbnRyb2xzKCdsYXlvdXRUeXBlJykpIHtcclxuICAgICAgICBsYXlvdXRUeXBlVy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGxheW91dFR5cGVXKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmxheW91dFR5cGUgPSBsYXlvdXRUeXBlVy5xdWVyeVNlbGVjdG9yKCcudGVtcGxhdGUtY3VzdG9taXplci1sYXlvdXRzLW9wdGlvbnMnKVxyXG5cclxuICAgICAgICAvLyB0aGlzLl9jb250cm9scy5sYXlvdXRUeXBlLnZhbHVlID0gdGhpcy5zZXR0aW5ncy5sYXlvdXRUeXBlXHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMubGF5b3V0VHlwZVxyXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoYGlucHV0W3ZhbHVlPVwiJHt0aGlzLnNldHRpbmdzLmxheW91dFR5cGV9XCJdYClcclxuICAgICAgICAgIC5zZXRBdHRyaWJ1dGUoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpXHJcblxyXG4gICAgICAgIGNvbnN0IGxheW91dFR5cGVDYiA9IGUgPT4gdGhpcy5zZXRMYXlvdXRUeXBlKGUudGFyZ2V0LnZhbHVlKVxyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmxheW91dFR5cGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGF5b3V0VHlwZUNiKVxyXG4gICAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKFt0aGlzLl9jb250cm9scy5sYXlvdXRUeXBlLCAnY2hhbmdlJywgbGF5b3V0VHlwZUNiXSlcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTWVudSBmbGlwcGVkXHJcbiAgICAgIC8vID8gVW5jb21tZW50IElmIG5lZWRlZFxyXG5cclxuICAgICAgLyogdGhpcy5fY29udHJvbHMubGF5b3V0TWVudUZsaXBwZWQgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcudGVtcGxhdGUtY3VzdG9taXplci1sYXlvdXRNZW51RmxpcHBlZCcpXHJcblxyXG4gICAgICBpZiAoIXRoaXMuX2hhc0NvbnRyb2xzKCdsYXlvdXRNZW51RmxpcHBlZCcpKSB7XHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMubGF5b3V0TWVudUZsaXBwZWQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250cm9scy5sYXlvdXRNZW51RmxpcHBlZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jb250cm9scy5sYXlvdXRNZW51RmxpcHBlZCA9IHRoaXMuX2NvbnRyb2xzLmxheW91dE1lbnVGbGlwcGVkLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubGF5b3V0TWVudUZsaXBwZWQpIHRoaXMuX2NvbnRyb2xzLmxheW91dE1lbnVGbGlwcGVkLnNldEF0dHJpYnV0ZSgnY2hlY2tlZCcsICdjaGVja2VkJylcclxuXHJcbiAgICAgICAgY29uc3QgbGF5b3V0TWVudUZsaXBwZWQgPSBlID0+IHRoaXMuc2V0TGF5b3V0TWVudUZsaXBwZWQoZS50YXJnZXQuY2hlY2tlZClcclxuICAgICAgICB0aGlzLl9jb250cm9scy5sYXlvdXRNZW51RmxpcHBlZC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsYXlvdXRNZW51RmxpcHBlZClcclxuICAgICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChbdGhpcy5fY29udHJvbHMubGF5b3V0TWVudUZsaXBwZWQsICdjaGFuZ2UnLCBsYXlvdXRNZW51RmxpcHBlZF0pXHJcbiAgICAgIH0gKi9cclxuXHJcbiAgICAgIC8vIE1lbnUgb3BlblxyXG4gICAgICAvL1xyXG5cclxuICAgICAgdGhpcy5fY29udHJvbHMuc2hvd0Ryb3Bkb3duT25Ib3ZlciA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy50ZW1wbGF0ZS1jdXN0b21pemVyLXNob3dEcm9wZG93bk9uSG92ZXInKVxyXG5cclxuICAgICAgaWYgKCF0aGlzLl9oYXNDb250cm9scygnc2hvd0Ryb3Bkb3duT25Ib3ZlcicpKSB7XHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMuc2hvd0Ryb3Bkb3duT25Ib3Zlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRyb2xzLnNob3dEcm9wZG93bk9uSG92ZXIpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMuc2hvd0Ryb3Bkb3duT25Ib3ZlciA9IHRoaXMuX2NvbnRyb2xzLnNob3dEcm9wZG93bk9uSG92ZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5zaG93RHJvcGRvd25PbkhvdmVyKSB0aGlzLl9jb250cm9scy5zaG93RHJvcGRvd25PbkhvdmVyLnNldEF0dHJpYnV0ZSgnY2hlY2tlZCcsICdjaGVja2VkJylcclxuXHJcbiAgICAgICAgY29uc3Qgc2hvd0Ryb3Bkb3duT25Ib3ZlciA9IGUgPT4gdGhpcy5zZXREcm9wZG93bk9uSG92ZXIoZS50YXJnZXQuY2hlY2tlZClcclxuICAgICAgICB0aGlzLl9jb250cm9scy5zaG93RHJvcGRvd25PbkhvdmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHNob3dEcm9wZG93bk9uSG92ZXIpXHJcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2goW3RoaXMuX2NvbnRyb2xzLnNob3dEcm9wZG93bk9uSG92ZXIsICdjaGFuZ2UnLCBzaG93RHJvcGRvd25PbkhvdmVyXSlcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTmF2YmFyXHJcbiAgICAgIC8vXHJcblxyXG4gICAgICB0aGlzLl9jb250cm9scy5sYXlvdXROYXZiYXJGaXhlZFcgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcudGVtcGxhdGUtY3VzdG9taXplci1sYXlvdXROYXZiYXJGaXhlZCcpXHJcblxyXG4gICAgICBpZiAoIXRoaXMuX2hhc0NvbnRyb2xzKCdsYXlvdXROYXZiYXJGaXhlZCcpKSB7XHJcbiAgICAgICAgdGhpcy5fY29udHJvbHMubGF5b3V0TmF2YmFyRml4ZWRXLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fY29udHJvbHMubGF5b3V0TmF2YmFyRml4ZWRXKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmxheW91dE5hdmJhckZpeGVkID0gdGhpcy5fY29udHJvbHMubGF5b3V0TmF2YmFyRml4ZWRXLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubGF5b3V0TmF2YmFyRml4ZWQpIHRoaXMuX2NvbnRyb2xzLmxheW91dE5hdmJhckZpeGVkLnNldEF0dHJpYnV0ZSgnY2hlY2tlZCcsICdjaGVja2VkJylcclxuXHJcbiAgICAgICAgY29uc3QgbGF5b3V0TmF2YmFyRml4ZWRDYiA9IGUgPT4gdGhpcy5zZXRMYXlvdXROYXZiYXJGaXhlZChlLnRhcmdldC5jaGVja2VkKVxyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmxheW91dE5hdmJhckZpeGVkLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxheW91dE5hdmJhckZpeGVkQ2IpXHJcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2goW3RoaXMuX2NvbnRyb2xzLmxheW91dE5hdmJhckZpeGVkLCAnY2hhbmdlJywgbGF5b3V0TmF2YmFyRml4ZWRDYl0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEZvb3RlclxyXG4gICAgICAvL1xyXG5cclxuICAgICAgdGhpcy5fY29udHJvbHMubGF5b3V0Rm9vdGVyRml4ZWRXID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcignLnRlbXBsYXRlLWN1c3RvbWl6ZXItbGF5b3V0Rm9vdGVyRml4ZWQnKVxyXG5cclxuICAgICAgaWYgKCF0aGlzLl9oYXNDb250cm9scygnbGF5b3V0Rm9vdGVyRml4ZWQnKSkge1xyXG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLmxheW91dEZvb3RlckZpeGVkVy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRyb2xzLmxheW91dEZvb3RlckZpeGVkVylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jb250cm9scy5sYXlvdXRGb290ZXJGaXhlZCA9IHRoaXMuX2NvbnRyb2xzLmxheW91dEZvb3RlckZpeGVkVy5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmxheW91dEZvb3RlckZpeGVkKSB0aGlzLl9jb250cm9scy5sYXlvdXRGb290ZXJGaXhlZC5zZXRBdHRyaWJ1dGUoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpXHJcblxyXG4gICAgICAgIGNvbnN0IGxheW91dEZvb3RlckZpeGVkQ2IgPSBlID0+IHRoaXMuc2V0TGF5b3V0Rm9vdGVyRml4ZWQoZS50YXJnZXQuY2hlY2tlZClcclxuICAgICAgICB0aGlzLl9jb250cm9scy5sYXlvdXRGb290ZXJGaXhlZC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsYXlvdXRGb290ZXJGaXhlZENiKVxyXG4gICAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKFt0aGlzLl9jb250cm9scy5sYXlvdXRGb290ZXJGaXhlZCwgJ2NoYW5nZScsIGxheW91dEZvb3RlckZpeGVkQ2JdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2V0IGxhbmd1YWdlXHJcbiAgICB0aGlzLnNldExhbmcodGhpcy5zZXR0aW5ncy5sYW5nLCB0cnVlKVxyXG5cclxuICAgIC8vIEFwcGVuZCBjb250YWluZXJcclxuICAgIGlmIChfY29udGFpbmVyID09PSBkb2N1bWVudCkge1xyXG4gICAgICBpZiAoX2NvbnRhaW5lci5ib2R5KSB7XHJcbiAgICAgICAgX2NvbnRhaW5lci5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4gX2NvbnRhaW5lci5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKSlcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9pbml0RGlyZWN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuX2hhc0NvbnRyb2xzKCdydGwnKSkgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGlyJywgdGhpcy5zZXR0aW5ncy5ydGwgPyAncnRsJyA6ICdsdHInKVxyXG4gIH1cclxuXHJcbiAgLy8gSW5pdCB0ZW1wbGF0ZSBzdHlsZXNcclxuICBfaW5pdFN0eWxlKCkge1xyXG4gICAgaWYgKCF0aGlzLl9oYXNDb250cm9scygnc3R5bGUnKSkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgeyBzdHlsZSB9ID0gdGhpcy5zZXR0aW5nc1xyXG5cclxuICAgIHRoaXMuX2luc2VydFN0eWxlc2hlZXQoXHJcbiAgICAgICd0ZW1wbGF0ZS1jdXN0b21pemVyLWNvcmUtY3NzJyxcclxuICAgICAgdGhpcy5wYXRoUmVzb2x2ZXIoXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5jc3NQYXRoICtcclxuICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY3NzRmlsZW5hbWVQYXR0ZXJuLnJlcGxhY2UoJyVuYW1lJScsIGBjb3JlJHtzdHlsZSAhPT0gJ2xpZ2h0JyA/IGAtJHtzdHlsZX1gIDogJyd9YClcclxuICAgICAgKVxyXG4gICAgKVxyXG4gICAgLy8gPyBVbmNvbW1lbnQgaWYgbmVlZGVkXHJcbiAgICAvKlxyXG4gICAgdGhpcy5faW5zZXJ0U3R5bGVzaGVldChcclxuICAgICAgJ3RlbXBsYXRlLWN1c3RvbWl6ZXItYm9vdHN0cmFwLWNzcycsXHJcbiAgICAgIHRoaXMucGF0aFJlc29sdmVyKFxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuY3NzUGF0aCArXHJcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmNzc0ZpbGVuYW1lUGF0dGVybi5yZXBsYWNlKCclbmFtZSUnLCBgYm9vdHN0cmFwJHtzdHlsZSAhPT0gJ2xpZ2h0JyA/IGAtJHtzdHlsZX1gIDogJyd9YClcclxuICAgICAgKVxyXG4gICAgKVxyXG4gICAgdGhpcy5faW5zZXJ0U3R5bGVzaGVldChcclxuICAgICAgJ3RlbXBsYXRlLWN1c3RvbWl6ZXItYnNleHRlbmRlZC1jc3MnLFxyXG4gICAgICB0aGlzLnBhdGhSZXNvbHZlcihcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmNzc1BhdGggK1xyXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5jc3NGaWxlbmFtZVBhdHRlcm4ucmVwbGFjZShcclxuICAgICAgICAgICAgJyVuYW1lJScsXHJcbiAgICAgICAgICAgIGBib290c3RyYXAtZXh0ZW5kZWQke3N0eWxlICE9PSAnbGlnaHQnID8gYC0ke3N0eWxlfWAgOiAnJ31gXHJcbiAgICAgICAgICApXHJcbiAgICAgIClcclxuICAgIClcclxuICAgIHRoaXMuX2luc2VydFN0eWxlc2hlZXQoXHJcbiAgICAgICd0ZW1wbGF0ZS1jdXN0b21pemVyLWNvbXBvbmVudHMtY3NzJyxcclxuICAgICAgdGhpcy5wYXRoUmVzb2x2ZXIoXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5jc3NQYXRoICtcclxuICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY3NzRmlsZW5hbWVQYXR0ZXJuLnJlcGxhY2UoJyVuYW1lJScsIGBjb21wb25lbnRzJHtzdHlsZSAhPT0gJ2xpZ2h0JyA/IGAtJHtzdHlsZX1gIDogJyd9YClcclxuICAgICAgKVxyXG4gICAgKVxyXG4gICAgdGhpcy5faW5zZXJ0U3R5bGVzaGVldChcclxuICAgICAgJ3RlbXBsYXRlLWN1c3RvbWl6ZXItY29sb3JzLWNzcycsXHJcbiAgICAgIHRoaXMucGF0aFJlc29sdmVyKFxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuY3NzUGF0aCArXHJcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmNzc0ZpbGVuYW1lUGF0dGVybi5yZXBsYWNlKCclbmFtZSUnLCBgY29sb3JzJHtzdHlsZSAhPT0gJ2xpZ2h0JyA/IGAtJHtzdHlsZX1gIDogJyd9YClcclxuICAgICAgKVxyXG4gICAgKVxyXG4gICAgKi9cclxuXHJcbiAgICBjb25zdCBjbGFzc2VzVG9SZW1vdmUgPSBzdHlsZSA9PT0gJ2xpZ2h0JyA/IFsnZGFyay1zdHlsZSddIDogWydsaWdodC1zdHlsZSddXHJcbiAgICBjbGFzc2VzVG9SZW1vdmUuZm9yRWFjaChjbHMgPT4ge1xyXG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbHMpXHJcbiAgICB9KVxyXG5cclxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKGAke3N0eWxlfS1zdHlsZWApXHJcbiAgfVxyXG5cclxuICAvLyBJbml0IHRoZW1lIHN0eWxlXHJcbiAgX2luaXRUaGVtZSgpIHtcclxuICAgIGlmICh0aGlzLl9oYXNDb250cm9scygndGhlbWVzJykpIHtcclxuICAgICAgdGhpcy5faW5zZXJ0U3R5bGVzaGVldChcclxuICAgICAgICAndGVtcGxhdGUtY3VzdG9taXplci10aGVtZS1jc3MnLFxyXG4gICAgICAgIHRoaXMucGF0aFJlc29sdmVyKFxyXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy50aGVtZXNQYXRoICtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5jc3NGaWxlbmFtZVBhdHRlcm4ucmVwbGFjZShcclxuICAgICAgICAgICAgICAnJW5hbWUlJyxcclxuICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLnRoZW1lLm5hbWUgKyAodGhpcy5zZXR0aW5ncy5zdHlsZSAhPT0gJ2xpZ2h0JyA/IGAtJHt0aGlzLnNldHRpbmdzLnN0eWxlfWAgOiAnJylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gSWYgdGhlbWUgY29udHJvbCBpcyBub3QgZW5hYmxlZCwgZ2V0IHRoZSBjdXJyZW50IHRoZW1lIGZyb20gbG9jYWxzdG9yYWdlIGVsc2UgZGlzcGxheSBkZWZhdWx0IHRoZW1lXHJcbiAgICAgIGNvbnN0IHRoZW1lID0gdGhpcy5fZ2V0U2V0dGluZygnVGhlbWUnKVxyXG4gICAgICB0aGlzLl9pbnNlcnRTdHlsZXNoZWV0KFxyXG4gICAgICAgICd0ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1lLWNzcycsXHJcbiAgICAgICAgdGhpcy5wYXRoUmVzb2x2ZXIoXHJcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnRoZW1lc1BhdGggK1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLmNzc0ZpbGVuYW1lUGF0dGVybi5yZXBsYWNlKFxyXG4gICAgICAgICAgICAgICclbmFtZSUnLFxyXG4gICAgICAgICAgICAgIHRoZW1lID8gdGhlbWUgOiAndGhlbWUtZGVmYXVsdCcgKyAodGhpcy5zZXR0aW5ncy5zdHlsZSAhPT0gJ2xpZ2h0JyA/IGAtJHt0aGlzLnNldHRpbmdzLnN0eWxlfWAgOiAnJylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2luc2VydFN0eWxlc2hlZXQoY2xhc3NOYW1lLCBocmVmKSB7XHJcbiAgICBjb25zdCBjdXJMaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7Y2xhc3NOYW1lfWApXHJcblxyXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5kb2N1bWVudE1vZGUgPT09ICdudW1iZXInICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDExKSB7XHJcbiAgICAgIGlmICghY3VyTGluaykgcmV0dXJuXHJcbiAgICAgIGlmIChocmVmID09PSBjdXJMaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpKSByZXR1cm5cclxuXHJcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJylcclxuXHJcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnc3R5bGVzaGVldCcpXHJcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJylcclxuICAgICAgbGluay5jbGFzc05hbWUgPSBjbGFzc05hbWVcclxuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKVxyXG5cclxuICAgICAgY3VyTGluay5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsaW5rLCBjdXJMaW5rLm5leHRTaWJsaW5nKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZG9jdW1lbnQud3JpdGUoYDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBocmVmPVwiJHtocmVmfVwiIGNsYXNzPVwiJHtjbGFzc05hbWV9XCI+YClcclxuICAgIH1cclxuXHJcbiAgICBjdXJMaW5rLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY3VyTGluaylcclxuICB9XHJcblxyXG4gIF9sb2FkU3R5bGVzaGVldHMoc3R5bGVzaGVldHMsIGNiKSB7XHJcbiAgICBjb25zdCBwYXRocyA9IE9iamVjdC5rZXlzKHN0eWxlc2hlZXRzKVxyXG4gICAgY29uc3QgY291bnQgPSBwYXRocy5sZW5ndGhcclxuICAgIGxldCBsb2FkZWQgPSAwXHJcblxyXG4gICAgZnVuY3Rpb24gbG9hZFN0eWxlc2hlZXQocGF0aCwgY3VyTGluaywgX2NiKSB7XHJcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJylcclxuXHJcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgcGF0aClcclxuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdzdHlsZXNoZWV0JylcclxuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKVxyXG4gICAgICBsaW5rLmNsYXNzTmFtZSA9IGN1ckxpbmsuY2xhc3NOYW1lXHJcblxyXG4gICAgICBjb25zdCBzaGVldCA9ICdzaGVldCcgaW4gbGluayA/ICdzaGVldCcgOiAnc3R5bGVTaGVldCdcclxuICAgICAgY29uc3QgY3NzUnVsZXMgPSAnc2hlZXQnIGluIGxpbmsgPyAnY3NzUnVsZXMnIDogJ3J1bGVzJ1xyXG5cclxuICAgICAgbGV0IGludGVydmFsSWRcclxuXHJcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZClcclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxyXG4gICAgICAgIGN1ckxpbmsucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsaW5rKVxyXG4gICAgICAgIF9jYihmYWxzZSwgcGF0aClcclxuICAgICAgfSwgMTUwMDApXHJcblxyXG4gICAgICBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAobGlua1tzaGVldF0gJiYgbGlua1tzaGVldF1bY3NzUnVsZXNdLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpXHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXHJcbiAgICAgICAgICAgIGN1ckxpbmsucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjdXJMaW5rKVxyXG4gICAgICAgICAgICBfY2IodHJ1ZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyBDYXRjaCBlcnJvclxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMTApXHJcblxyXG4gICAgICBjdXJMaW5rLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGxpbmssIGN1ckxpbmsubmV4dFNpYmxpbmcpXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc3R5bGVzaGVldENhbGxCYWNrKCkge1xyXG4gICAgICBpZiAoKGxvYWRlZCArPSAxKSA+PSBjb3VudCkge1xyXG4gICAgICAgIGNiKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsb2FkU3R5bGVzaGVldChwYXRoc1tpXSwgc3R5bGVzaGVldHNbcGF0aHNbaV1dLCBzdHlsZXNoZWV0Q2FsbEJhY2soKSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9sb2FkaW5nU3RhdGUoZW5hYmxlLCB0aGVtZXMpIHtcclxuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdFtlbmFibGUgPyAnYWRkJyA6ICdyZW1vdmUnXShgdGVtcGxhdGUtY3VzdG9taXplci1sb2FkaW5nJHt0aGVtZXMgPyAnLXRoZW1lJyA6ICcnfWApXHJcbiAgfVxyXG5cclxuICBfZ2V0RWxlbWVudEZyb21TdHJpbmcoc3RyKSB7XHJcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcclxuICAgIHdyYXBwZXIuaW5uZXJIVE1MID0gc3RyXHJcbiAgICByZXR1cm4gd3JhcHBlci5maXJzdENoaWxkXHJcbiAgfVxyXG5cclxuICAvLyBTZXQgc2V0dGluZ3MgaW4gTG9jYWxTdG9yYWdlIHdpdGggbGF5b3V0ICYga2V5XHJcbiAgX2dldFNldHRpbmcoa2V5KSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gbnVsbFxyXG4gICAgY29uc3QgbGF5b3V0TmFtZSA9IHRoaXMuX2dldExheW91dE5hbWUoKVxyXG4gICAgdHJ5IHtcclxuICAgICAgcmVzdWx0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYHRlbXBsYXRlQ3VzdG9taXplci0ke2xheW91dE5hbWV9LS0ke2tleX1gKVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyBDYXRjaCBlcnJvclxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQgfHwgJycpXHJcbiAgfVxyXG5cclxuICAvLyBTZXQgc2V0dGluZ3MgaW4gTG9jYWxTdG9yYWdlIHdpdGggbGF5b3V0ICYga2V5XHJcbiAgX3NldFNldHRpbmcoa2V5LCB2YWwpIHtcclxuICAgIGNvbnN0IGxheW91dE5hbWUgPSB0aGlzLl9nZXRMYXlvdXROYW1lKClcclxuICAgIHRyeSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGB0ZW1wbGF0ZUN1c3RvbWl6ZXItJHtsYXlvdXROYW1lfS0tJHtrZXl9YCwgU3RyaW5nKHZhbCkpXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIENhdGNoIEVycm9yXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgbGF5b3V0IG5hbWUgdG8gc2V0IHVuaXF1ZVxyXG4gIF9nZXRMYXlvdXROYW1lKCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdIVE1MJylbMF0uZ2V0QXR0cmlidXRlKCdkYXRhLXRlbXBsYXRlJylcclxuICB9XHJcblxyXG4gIF9yZW1vdmVMaXN0ZW5lcnMoKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuX2xpc3RlbmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgdGhpcy5fbGlzdGVuZXJzW2ldWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fbGlzdGVuZXJzW2ldWzFdLCB0aGlzLl9saXN0ZW5lcnNbaV1bMl0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfY2xlYW51cCgpIHtcclxuICAgIHRoaXMuX3JlbW92ZUxpc3RlbmVycygpXHJcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXVxyXG4gICAgdGhpcy5fY29udHJvbHMgPSB7fVxyXG5cclxuICAgIGlmICh0aGlzLl91cGRhdGVJbnRlcnZhbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX3VwZGF0ZUludGVydmFsKVxyXG4gICAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCA9IG51bGxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBfc3NyKCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnXHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBjb250cm9scyBhdmFpbGFiaWxpdHlcclxuICBfaGFzQ29udHJvbHMoY29udHJvbHMsIG9uZU9mID0gZmFsc2UpIHtcclxuICAgIHJldHVybiBjb250cm9scy5zcGxpdCgnICcpLnJlZHVjZSgocmVzdWx0LCBjb250cm9sKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNvbnRyb2xzLmluZGV4T2YoY29udHJvbCkgIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKG9uZU9mIHx8IHJlc3VsdCAhPT0gZmFsc2UpIHJlc3VsdCA9IHRydWVcclxuICAgICAgfSBlbHNlIGlmICghb25lT2YgfHwgcmVzdWx0ICE9PSB0cnVlKSByZXN1bHQgPSBmYWxzZVxyXG4gICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9LCBudWxsKVxyXG4gIH1cclxuXHJcbiAgLy8gR2V0IHRoZSBkZWZhdWx0IHRoZW1lXHJcbiAgX2dldERlZmF1bHRUaGVtZSh0aGVtZUlkKSB7XHJcbiAgICBsZXQgdGhlbWVcclxuICAgIGlmICh0eXBlb2YgdGhlbWVJZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhlbWUgPSB0aGlzLl9nZXRUaGVtZUJ5TmFtZSh0aGVtZUlkLCBmYWxzZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoZW1lID0gdGhpcy5zZXR0aW5ncy5hdmFpbGFibGVUaGVtZXNbdGhlbWVJZF1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoZW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlbWUgSUQgXCIke3RoZW1lSWR9XCIgbm90IGZvdW5kIWApXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoZW1lXHJcbiAgfVxyXG5cclxuICAvLyBHZXQgdGhlbWUgYnkgdGhlbWVJZC90aGVtZU5hbWVcclxuICBfZ2V0VGhlbWVCeU5hbWUodGhlbWVOYW1lLCByZXR1cm5EZWZhdWx0ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHRoZW1lcyA9IHRoaXMuc2V0dGluZ3MuYXZhaWxhYmxlVGhlbWVzXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGVtZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGVtZXNbaV0ubmFtZSA9PT0gdGhlbWVOYW1lKSByZXR1cm4gdGhlbWVzW2ldXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldHVybkRlZmF1bHQgPyB0aGlzLnNldHRpbmdzLmRlZmF1bHRUaGVtZSA6IG51bGxcclxuICB9XHJcbn1cclxuXHJcbi8vIFRoZW1lc1xyXG5UZW1wbGF0ZUN1c3RvbWl6ZXIuVEhFTUVTID0gW1xyXG4gIHtcclxuICAgIG5hbWU6ICd0aGVtZS1kZWZhdWx0JyxcclxuICAgIHRpdGxlOiAnRGVmYXVsdCdcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6ICd0aGVtZS1zZW1pLWRhcmsnLFxyXG4gICAgdGl0bGU6ICdTZW1pIERhcmsnXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiAndGhlbWUtYm9yZGVyZWQnLFxyXG4gICAgdGl0bGU6ICdCb3JkZXJlZCdcclxuICB9XHJcbl1cclxuXHJcbi8vIFRoZW1lIHNldHRpbmcgbGFuZ3VhZ2VcclxuVGVtcGxhdGVDdXN0b21pemVyLkxBTkdVQUdFUyA9IHtcclxuICBlbjoge1xyXG4gICAgcGFuZWxfaGVhZGVyOiAnVEVNUExBVEUgQ1VTVE9NSVpFUicsXHJcbiAgICBwYW5lbF9zdWJfaGVhZGVyOiAnQ3VzdG9taXplIGFuZCBwcmV2aWV3IGluIHJlYWwgdGltZScsXHJcbiAgICB0aGVtaW5nX2hlYWRlcjogJ1RIRU1JTkcnLFxyXG4gICAgdGhlbWVfaGVhZGVyOiAnVEhFTUUnLFxyXG4gICAgdGhlbWVfbGFiZWw6ICdUaGVtZXMnLFxyXG4gICAgc3R5bGVfbGFiZWw6ICdTdHlsZSAoTW9kZSknLFxyXG4gICAgc3R5bGVfc3dpdGNoX2xpZ2h0OiAnTGlnaHQnLFxyXG4gICAgc3R5bGVfc3dpdGNoX2Rhcms6ICdEYXJrJyxcclxuICAgIGxheW91dF9oZWFkZXI6ICdMQVlPVVQnLFxyXG4gICAgbGF5b3V0X2xhYmVsOiAnTGF5b3V0IChNZW51KScsXHJcbiAgICBsYXlvdXRfc3RhdGljOiAnU3RhdGljJyxcclxuICAgIGxheW91dF9vZmZjYW52YXM6ICdPZmZjYW52YXMnLFxyXG4gICAgbGF5b3V0X2ZpeGVkOiAnRml4ZWQnLFxyXG4gICAgbGF5b3V0X2ZpeGVkX29mZmNhbnZhczogJ0ZpeGVkIG9mZmNhbnZhcycsXHJcbiAgICBsYXlvdXRfZmxpcHBlZF9sYWJlbDogJ01lbnUgZmxpcHBlZCcsXHJcbiAgICBsYXlvdXRfZGRfb3Blbl9sYWJlbDogJ0Ryb3Bkb3duIG9uIGhvdmVyJyxcclxuICAgIGxheW91dF9uYXZiYXJfbGFiZWw6ICdGaXhlZCBuYXZiYXInLFxyXG4gICAgbGF5b3V0X2Zvb3Rlcl9sYWJlbDogJ0ZpeGVkIGZvb3RlcicsXHJcbiAgICBtaXNjX2hlYWRlcjogJ01JU0MnLFxyXG4gICAgcnRsX2xhYmVsOiAnUlRMIGRpcmVjdGlvbidcclxuICB9LFxyXG4gIGZyOiB7XHJcbiAgICBwYW5lbF9oZWFkZXI6ICdNT0TDiExFIERFIFBFUlNPTk5BTElTQVRJT04nLFxyXG4gICAgcGFuZWxfc3ViX2hlYWRlcjogJ1BlcnNvbm5hbGlzZXogZXQgcHLDqXZpc3VhbGlzZXogZW4gdGVtcHMgcsOpZWwnLFxyXG4gICAgdGhlbWluZ19oZWFkZXI6ICdUSMOJTUFUSVNBVElPTicsXHJcbiAgICB0aGVtZV9oZWFkZXI6ICdUSMOITUUnLFxyXG4gICAgdGhlbWVfbGFiZWw6ICdUaMOobWVzJyxcclxuICAgIHN0eWxlX2xhYmVsOiAnU3R5bGUgKE1vZGUpJyxcclxuICAgIHN0eWxlX3N3aXRjaF9saWdodDogJ0zDqWdlcicsXHJcbiAgICBzdHlsZV9zd2l0Y2hfZGFyazogJ1NvbWJyZScsXHJcbiAgICBsYXlvdXRfaGVhZGVyOiAnRElTUE9TSVRJT04nLFxyXG4gICAgbGF5b3V0X2xhYmVsOiAnTWlzZSBlbiBwYWdlIChNZW51KScsXHJcbiAgICBsYXlvdXRfc3RhdGljOiAnU3RhdGlxdWUnLFxyXG4gICAgbGF5b3V0X29mZmNhbnZhczogJ0hvcnMgdG9pbGUnLFxyXG4gICAgbGF5b3V0X2ZpeGVkOiAnRml4w6knLFxyXG4gICAgbGF5b3V0X2ZpeGVkX29mZmNhbnZhczogJ0ZpeGUgaG9ycyB0b2lsZScsXHJcbiAgICBsYXlvdXRfZmxpcHBlZF9sYWJlbDogJ01lbnUgaW52ZXJzw6knLFxyXG4gICAgbGF5b3V0X2RkX29wZW5fbGFiZWw6ICdMaXN0ZSBkw6lyb3VsYW50ZSBhdSBzdXJ2b2wnLFxyXG4gICAgbGF5b3V0X25hdmJhcl9sYWJlbDogJ0JhcnJlIGRlIG5hdmlnYXRpb24gZml4ZScsXHJcbiAgICBsYXlvdXRfZm9vdGVyX2xhYmVsOiAnUGllZCBkZSBwYWdlIGZpeGUnLFxyXG4gICAgbWlzY19oZWFkZXI6ICdESVZFUlMnLFxyXG4gICAgcnRsX2xhYmVsOiAnU2VucyBSVEwnXHJcbiAgfSxcclxuICBkZToge1xyXG4gICAgcGFuZWxfaGVhZGVyOiAnVk9STEFHRU4tQU5QQVNTRVInLFxyXG4gICAgcGFuZWxfc3ViX2hlYWRlcjogJ0FucGFzc2VuIHVuZCBWb3JzY2hhdSBpbiBFY2h0emVpdCcsXHJcbiAgICB0aGVtaW5nX2hlYWRlcjogJ1RIRU1FTicsXHJcbiAgICB0aGVtZV9oZWFkZXI6ICdUSEVNQScsXHJcbiAgICB0aGVtZV9sYWJlbDogJ1RoZW1lbicsXHJcbiAgICBzdHlsZV9sYWJlbDogJ1N0aWwgKE1vZHVzKScsXHJcbiAgICBzdHlsZV9zd2l0Y2hfbGlnaHQ6ICdIZWxsJyxcclxuICAgIHN0eWxlX3N3aXRjaF9kYXJrOiAnRHVua2VsJyxcclxuICAgIGxheW91dF9oZWFkZXI6ICdMQVlPVVQnLFxyXG4gICAgbGF5b3V0X2xhYmVsOiAnTGF5b3V0IChTcGVpc2VrYXJ0ZSknLFxyXG4gICAgbGF5b3V0X3N0YXRpYzogJ1N0YXRpc2NoJyxcclxuICAgIGxheW91dF9vZmZjYW52YXM6ICdMZWlud2FuZCcsXHJcbiAgICBsYXlvdXRfZml4ZWQ6ICdGZXN0JyxcclxuICAgIGxheW91dF9maXhlZF9vZmZjYW52YXM6ICdBdcOfZXJoYWxiIGRlciBMZWlud2FuZCBiZWhvYmVuJyxcclxuICAgIGxheW91dF9mbGlwcGVkX2xhYmVsOiAnTWVuw7wgdW1nZWRyZWh0JyxcclxuICAgIGxheW91dF9kZF9vcGVuX2xhYmVsOiAnRHJvcGRvd24gYmVpbSBIb3ZlcicsXHJcbiAgICBsYXlvdXRfbmF2YmFyX2xhYmVsOiAnTmF2aWdhdGlvbnNsZWlzdGUgYmVob2JlbicsXHJcbiAgICBsYXlvdXRfZm9vdGVyX2xhYmVsOiAnRmVzdGUgRnXDn3plaWxlJyxcclxuICAgIG1pc2NfaGVhZGVyOiAnVkVSU0NISUVERU5FUycsXHJcbiAgICBydGxfbGFiZWw6ICdSVEwtUmVnaWUnXHJcbiAgfSxcclxuICBwdDoge1xyXG4gICAgcGFuZWxfaGVhZGVyOiAnUEVSU09OQUxJWkFET1IgREUgTU9ERUxPJyxcclxuICAgIHBhbmVsX3N1Yl9oZWFkZXI6ICdQZXJzb25hbGl6ZSBlIHZpc3VhbGl6ZSBlbSB0ZW1wbyByZWFsJyxcclxuICAgIHRoZW1pbmdfaGVhZGVyOiAnVEVNQVMnLFxyXG4gICAgdGhlbWVfaGVhZGVyOiAnVEVNQScsXHJcbiAgICB0aGVtZV9sYWJlbDogJ1RlbWFzJyxcclxuICAgIHN0eWxlX2xhYmVsOiAnRXN0aWxvIChNb2RvKScsXHJcbiAgICBzdHlsZV9zd2l0Y2hfbGlnaHQ6ICdMdXonLFxyXG4gICAgc3R5bGVfc3dpdGNoX2Rhcms6ICdFc2N1cm8nLFxyXG4gICAgbGF5b3V0X2hlYWRlcjogJ0VTUVVFTUEnLFxyXG4gICAgbGF5b3V0X2xhYmVsOiAnRXNxdWVtYSAoQ2FyZMOhcGlvKScsXHJcbiAgICBsYXlvdXRfc3RhdGljOiAnRXN0w6F0aWNvJyxcclxuICAgIGxheW91dF9vZmZjYW52YXM6ICdPZmZjYW52YXMnLFxyXG4gICAgbGF5b3V0X2ZpeGVkOiAnRml4bycsXHJcbiAgICBsYXlvdXRfZml4ZWRfb2ZmY2FudmFzOiAnT2Zmc2NyZWVuIGZpeG8nLFxyXG4gICAgbGF5b3V0X2ZsaXBwZWRfbGFiZWw6ICdNZW51IGludmVydGlkbycsXHJcbiAgICBsYXlvdXRfZGRfb3Blbl9sYWJlbDogJ1N1c3BlbnPDo28gYW8gcGFzc2FyIG8gbW91c2UnLFxyXG4gICAgbGF5b3V0X25hdmJhcl9sYWJlbDogJ0JhcnJhIGRlIG5hdmVnYcOnw6NvIGZpeGEnLFxyXG4gICAgbGF5b3V0X2Zvb3Rlcl9sYWJlbDogJ1JvZGFww6kgZml4bycsXHJcbiAgICBtaXNjX2hlYWRlcjogJ0RJVkVSU09TJyxcclxuICAgIHJ0bF9sYWJlbDogJ0RpcmXDp8OjbyBSVEwnXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgeyBUZW1wbGF0ZUN1c3RvbWl6ZXIgfVxyXG4iXSwibmFtZXMiOlsiY3VzdG9taXplclN0eWxlIiwiY3VzdG9taXplck1hcmt1cCIsIkNTU19GSUxFTkFNRV9QQVRURVJOIiwiQ09OVFJPTFMiLCJTVFlMRVMiLCJjbCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xhc3NMaXN0IiwiRElTUExBWV9DVVNUT01JWkVSIiwiREVGQVVMVF9USEVNRSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0QXR0cmlidXRlIiwiREVGQVVMVF9TVFlMRSIsImNvbnRhaW5zIiwiREVGQVVMVF9URVhUX0RJUiIsIkRFRkFVTFRfTUVOVV9DT0xMQVBTRUQiLCJERUZBVUxUX01FTlVfRkxJUFBFRCIsIkRFRkFVTFRfU0hPV19EUk9QRE9XTl9PTl9IT1ZFUiIsInVuZGVmaW5lZCIsIkRFRkFVTFRfTkFWQkFSX0ZJWEVEIiwiREVGQVVMVF9GT09URVJfRklYRUQiLCJsYXlvdXRUeXBlIiwiREVGQVVMVF9MQVlPVVRfVFlQRSIsIlRlbXBsYXRlQ3VzdG9taXplciIsImNzc1BhdGgiLCJ0aGVtZXNQYXRoIiwiY3NzRmlsZW5hbWVQYXR0ZXJuIiwiZGlzcGxheUN1c3RvbWl6ZXIiLCJjb250cm9scyIsImRlZmF1bHRUZXh0RGlyIiwiZGVmYXVsdExheW91dFR5cGUiLCJkZWZhdWx0TWVudUNvbGxhcHNlZCIsImRlZmF1bHRNZW51RmxpcHBlZCIsImRlZmF1bHRTaG93RHJvcGRvd25PbkhvdmVyIiwiZGVmYXVsdE5hdmJhckZpeGVkIiwiZGVmYXVsdEZvb3RlckZpeGVkIiwic3R5bGVzIiwiZGVmYXVsdFN0eWxlIiwiYXZhaWxhYmxlVGhlbWVzIiwiZGVmYXVsdFRoZW1lIiwicGF0aFJlc29sdmVyIiwib25TZXR0aW5nc0NoYW5nZSIsImxhbmciLCJfc3NyIiwid2luZG93IiwiSGVscGVycyIsIkVycm9yIiwic2V0dGluZ3MiLCJUSEVNRVMiLCJfZ2V0RGVmYXVsdFRoZW1lIiwicCIsImxlbmd0aCIsImkiLCJpbmRleE9mIiwic2xpY2UiLCJjb25jYXQiLCJfbG9hZFNldHRpbmdzIiwiX2xpc3RlbmVycyIsIl9jb250cm9scyIsIl9pbml0RGlyZWN0aW9uIiwiX2luaXRTdHlsZSIsIl9pbml0VGhlbWUiLCJzZXRMYXlvdXRUeXBlIiwic2V0TGF5b3V0TWVudUZsaXBwZWQiLCJsYXlvdXRNZW51RmxpcHBlZCIsInNldERyb3Bkb3duT25Ib3ZlciIsInNob3dEcm9wZG93bk9uSG92ZXIiLCJzZXRMYXlvdXROYXZiYXJGaXhlZCIsImxheW91dE5hdmJhckZpeGVkIiwic2V0TGF5b3V0Rm9vdGVyRml4ZWQiLCJsYXlvdXRGb290ZXJGaXhlZCIsIl9zZXR1cCIsInJ0bCIsIl9oYXNDb250cm9scyIsIl9zZXRTZXR0aW5nIiwiU3RyaW5nIiwibG9jYXRpb24iLCJyZWxvYWQiLCJzdHlsZSIsInRoZW1lTmFtZSIsInVwZGF0ZVN0b3JhZ2UiLCJjYiIsInRoZW1lIiwiX2dldFRoZW1lQnlOYW1lIiwidGhlbWVVcmwiLCJyZXBsYWNlIiwiX2xvYWRTdHlsZXNoZWV0cyIsInF1ZXJ5U2VsZWN0b3IiLCJjYWxsIiwicG9zIiwic2V0UG9zaXRpb24iLCJtZW51U2Nyb2xsIiwibWVudVBzU2Nyb2xsIiwiUGVyZmVjdFNjcm9sbGJhckxpYiIsIlBlcmZlY3RTY3JvbGxiYXIiLCJkZXN0cm95Iiwic3VwcHJlc3NTY3JvbGxYIiwid2hlZWxQcm9wYWdhdGlvbiIsImZsaXBwZWQiLCJzZXRGbGlwcGVkIiwib3BlbiIsIm1haW5NZW51IiwiY29uZmlnIiwiTWVudSIsImdldEVsZW1lbnRCeUlkIiwib3JpZW50YXRpb24iLCJjbG9zZUNoaWxkcmVuIiwiZml4ZWQiLCJzZXROYXZiYXJGaXhlZCIsInNldEZvb3RlckZpeGVkIiwiZm9yY2UiLCJMQU5HVUFHRVMiLCJ0IiwiZm9yRWFjaCIsImtleSIsImVsIiwiY29udGFpbmVyIiwidGV4dENvbnRlbnQiLCJ0dCIsInRoZW1lcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsIiwidmFsdWUiLCJ0aXRsZSIsImhhc05hdmJhciIsImhhc01lbnUiLCJoYXNIb3Jpem9udGFsTWVudSIsImlzTGF5b3V0MSIsImhhc0Zvb3RlciIsInNldEF0dHJpYnV0ZSIsImFkZCIsInJlbW92ZUF0dHJpYnV0ZSIsInJlbW92ZSIsImxheW91dE5hdmJhckZpeGVkVyIsImxheW91dEZvb3RlckZpeGVkVyIsIl9jbGVhbnVwIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwiX2dldFNldHRpbmciLCJjb2xsYXBzZWRNZW51IiwiZmxpcHBlZE1lbnUiLCJkcm9wZG93bk9uSG92ZXIiLCJmaXhlZE5hdmJhciIsImZpeGVkRm9vdGVyIiwibFR5cGUiLCJ0eXBlIiwibGF5b3V0TWVudSIsIl9jb250YWluZXIiLCJfZ2V0RWxlbWVudEZyb21TdHJpbmciLCJjdXN0b21pemVyVyIsIm9wZW5CdG4iLCJvcGVuQnRuQ2IiLCJ1cGRhdGUiLCJfdXBkYXRlSW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJhZGRFdmVudExpc3RlbmVyIiwicHVzaCIsImNsb3NlQnRuIiwiY2xvc2VCdG5DYiIsInJ0bFciLCJydGxTdXBwb3J0IiwicnRsQ2IiLCJlIiwiX2xvYWRpbmdTdGF0ZSIsInNldFJ0bCIsInRhcmdldCIsImNoZWNrZWQiLCJzdHlsZVciLCJzdHlsZUNiIiwic2V0U3R5bGUiLCJ0aGVtZXNXIiwidGhlbWVzV0lubmVyIiwidGhlbWVFbCIsIm5hbWUiLCJhcHBlbmRDaGlsZCIsInRoZW1lQ2IiLCJfbG9hZGluZyIsInNldFRoZW1lIiwidGhlbWluZ1ciLCJsYXlvdXRXIiwibGF5b3V0VHlwZVciLCJsYXlvdXRUeXBlQ2IiLCJsYXlvdXROYXZiYXJGaXhlZENiIiwibGF5b3V0Rm9vdGVyRml4ZWRDYiIsInNldExhbmciLCJib2R5IiwiX2luc2VydFN0eWxlc2hlZXQiLCJjbGFzc2VzVG9SZW1vdmUiLCJjbHMiLCJjbGFzc05hbWUiLCJocmVmIiwiY3VyTGluayIsImRvY3VtZW50TW9kZSIsImxpbmsiLCJjcmVhdGVFbGVtZW50IiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJ3cml0ZSIsInN0eWxlc2hlZXRzIiwicGF0aHMiLCJPYmplY3QiLCJrZXlzIiwiY291bnQiLCJsb2FkZWQiLCJsb2FkU3R5bGVzaGVldCIsInBhdGgiLCJfY2IiLCJzaGVldCIsImNzc1J1bGVzIiwiaW50ZXJ2YWxJZCIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzdHlsZXNoZWV0Q2FsbEJhY2siLCJlbmFibGUiLCJzdHIiLCJ3cmFwcGVyIiwiaW5uZXJIVE1MIiwiZmlyc3RDaGlsZCIsInJlc3VsdCIsImxheW91dE5hbWUiLCJfZ2V0TGF5b3V0TmFtZSIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJ2YWwiLCJzZXRJdGVtIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9yZW1vdmVMaXN0ZW5lcnMiLCJvbmVPZiIsInNwbGl0IiwicmVkdWNlIiwiY29udHJvbCIsInRoZW1lSWQiLCJyZXR1cm5EZWZhdWx0IiwiZW4iLCJwYW5lbF9oZWFkZXIiLCJwYW5lbF9zdWJfaGVhZGVyIiwidGhlbWluZ19oZWFkZXIiLCJ0aGVtZV9oZWFkZXIiLCJ0aGVtZV9sYWJlbCIsInN0eWxlX2xhYmVsIiwic3R5bGVfc3dpdGNoX2xpZ2h0Iiwic3R5bGVfc3dpdGNoX2RhcmsiLCJsYXlvdXRfaGVhZGVyIiwibGF5b3V0X2xhYmVsIiwibGF5b3V0X3N0YXRpYyIsImxheW91dF9vZmZjYW52YXMiLCJsYXlvdXRfZml4ZWQiLCJsYXlvdXRfZml4ZWRfb2ZmY2FudmFzIiwibGF5b3V0X2ZsaXBwZWRfbGFiZWwiLCJsYXlvdXRfZGRfb3Blbl9sYWJlbCIsImxheW91dF9uYXZiYXJfbGFiZWwiLCJsYXlvdXRfZm9vdGVyX2xhYmVsIiwibWlzY19oZWFkZXIiLCJydGxfbGFiZWwiLCJmciIsImRlIiwicHQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./js/template-customizer.js\n"); - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./js/_template-customizer/_template-customizer.scss": -/*!****************************************************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./js/_template-customizer/_template-customizer.scss ***! - \****************************************************************************************************************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/sourceMaps.js */ \"./node_modules/css-loader/dist/runtime/sourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/getUrl.js */ \"./node_modules/css-loader/dist/runtime/getUrl.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);\n// Imports\n\n\n\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAABClJREFUaEPtmY1RFEEQhbsjUCIQIhAiUCNQIxAiECIQIxAiECIAIpAMhAiECIQI2vquZqnZvp6fhb3SK5mqq6Ju92b69bzXf6is+dI1t1+eAfztG5z1BsxsU0S+ici2iPB3vm5E5EpEDlSVv2dZswFIxv8UkZcNy+5EZGcuEHMCOBeR951uvVDVD53vVl+bE8DvDu8Pxtyo6ta/BsByg1R15Bwzqz5/LJgn34CZwfnPInI4BUB6/1hV0cSjVxcAM4PbcBZjL0XklIPN7Is3fLCkdQPpPYw/VNXj5IhPIvJWRIhSl6p60ULWBGBm30Vk123EwRxCuIzWkkjNrCZywith10ewE1Xdq4GoAjCz/RTXW44Ynt+LyBEfT43kYfbj86J3w5Q32DNcRQDpwF+dkQXDMey8xem0L3TEqB4g3PZWad8agBMRgZPeu96D1/C2Zbh3X0p80Op1xxloztN48bMQQNoc7+eLEuAoPSPiIDY4Ooo+E6ixeNXM+D3GERz2U3CIqMstLJUgJQDe+7eq6mub0NYEkLAKwEHkiBQDCZtddZCZ8d6r7JDwFkoARklHRPZUFVDVZWbwGuNrC4EfdOzFrRABh3Wnqhv+d70AEBLGFROPmeHlnM81G69UdSd6IUuM0GgUVn1uqWmg5EmMfBeEyB7Pe3txBkY+rGT8j0J+WXq/BgDkUCaqLgEAnwcRog0veMIqFAAwCy2wnw+bI2GaGboBgF9k5N0o0rUSGUb4eO0BeO9j/GYhkSHMHMTIqwGARX6p6a+nlPBl8kZuXMD9j6pKfF9aZuaFOdJCEL5D4eYb9wCYVCanrBmGyii/tIq+SLj/HQBCaM5bLzwfPqdQ6FpVHyra4IbuVbXaY7dETC2ESPNNWiIOi69CcdgSMXsh4tNSUiklMgwmC0aNd08Y5WAES6HHehM4gu97wyhBgWpgqXsrASglprDy7CwhehMZOSbK6JMSma+Fio1KltCmlBIj7gfZOGx8ppQSXrhzFnOhJ/31BDkjFHRvOd09x0mRBA9SFgxUgHpQg0q0t5ymPMlL+EnldFTfDA0NAmf+OTQ0X0sRouf7NNkYGhrOYNrxtIaGg83MNzVDSe3LXLhP7O/yrCsCz1zlWTpjWkuZAOBpX3yVnLqI1yLCOKU6qMrmP7SSrUEw54XF4WBIK5FxCMOr3lVsfGqNSmPzBXUnJTIX1jyVBq9wO6UObOpgC5GjO98vFKnTdQMZXxEsWZlDiCZMIxAbNxQOqlpVZtobejBaZNoBnRDzMFpkxvTQOD36BlrcySZuI6p1ACB6LU3wWuf5581+oHfD1vi89bz3nFUC8Nm7ZlP3nKkFbM4bWPt/MSFwklprYItwt6cmvpWJ2IVcQBCz6bLysSCv3SaANCiTsnaNRrNRqMXVVT1/BrAqz/buu/Y38Ad3KC5PARej0QAAAABJRU5ErkJggg== */ \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAABClJREFUaEPtmY1RFEEQhbsjUCIQIhAiUCNQIxAiECIQIxAiECIAIpAMhAiECIQI2vquZqnZvp6fhb3SK5mqq6Ju92b69bzXf6is+dI1t1+eAfztG5z1BsxsU0S+ici2iPB3vm5E5EpEDlSVv2dZswFIxv8UkZcNy+5EZGcuEHMCOBeR951uvVDVD53vVl+bE8DvDu8Pxtyo6ta/BsByg1R15Bwzqz5/LJgn34CZwfnPInI4BUB6/1hV0cSjVxcAM4PbcBZjL0XklIPN7Is3fLCkdQPpPYw/VNXj5IhPIvJWRIhSl6p60ULWBGBm30Vk123EwRxCuIzWkkjNrCZywith10ewE1Xdq4GoAjCz/RTXW44Ynt+LyBEfT43kYfbj86J3w5Q32DNcRQDpwF+dkQXDMey8xem0L3TEqB4g3PZWad8agBMRgZPeu96D1/C2Zbh3X0p80Op1xxloztN48bMQQNoc7+eLEuAoPSPiIDY4Ooo+E6ixeNXM+D3GERz2U3CIqMstLJUgJQDe+7eq6mub0NYEkLAKwEHkiBQDCZtddZCZ8d6r7JDwFkoARklHRPZUFVDVZWbwGuNrC4EfdOzFrRABh3Wnqhv+d70AEBLGFROPmeHlnM81G69UdSd6IUuM0GgUVn1uqWmg5EmMfBeEyB7Pe3txBkY+rGT8j0J+WXq/BgDkUCaqLgEAnwcRog0veMIqFAAwCy2wnw+bI2GaGboBgF9k5N0o0rUSGUb4eO0BeO9j/GYhkSHMHMTIqwGARX6p6a+nlPBl8kZuXMD9j6pKfF9aZuaFOdJCEL5D4eYb9wCYVCanrBmGyii/tIq+SLj/HQBCaM5bLzwfPqdQ6FpVHyra4IbuVbXaY7dETC2ESPNNWiIOi69CcdgSMXsh4tNSUiklMgwmC0aNd08Y5WAES6HHehM4gu97wyhBgWpgqXsrASglprDy7CwhehMZOSbK6JMSma+Fio1KltCmlBIj7gfZOGx8ppQSXrhzFnOhJ/31BDkjFHRvOd09x0mRBA9SFgxUgHpQg0q0t5ymPMlL+EnldFTfDA0NAmf+OTQ0X0sRouf7NNkYGhrOYNrxtIaGg83MNzVDSe3LXLhP7O/yrCsCz1zlWTpjWkuZAOBpX3yVnLqI1yLCOKU6qMrmP7SSrUEw54XF4WBIK5FxCMOr3lVsfGqNSmPzBXUnJTIX1jyVBq9wO6UObOpgC5GjO98vFKnTdQMZXxEsWZlDiCZMIxAbNxQOqlpVZtobejBaZNoBnRDzMFpkxvTQOD36BlrcySZuI6p1ACB6LU3wWuf5581+oHfD1vi89bz3nFUC8Nm7ZlP3nKkFbM4bWPt/MSFwklprYItwt6cmvpWJ2IVcQBCz6bLysSCv3SaANCiTsnaNRrNRqMXVVT1/BrAqz/buu/Y38Ad3KC5PARej0QAAAABJRU5ErkJggg==\"), __webpack_require__.b);\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*\\n* Template Customizer Style\\n**/\\n#template-customizer {\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\", Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\" !important;\\n font-size: inherit !important;\\n position: fixed;\\n top: 0;\\n right: 0;\\n height: 100%;\\n z-index: 99999999;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n display: flex;\\n -webkit-box-orient: vertical;\\n -webkit-box-direction: normal;\\n -ms-flex-direction: column;\\n flex-direction: column;\\n width: 360px;\\n background: #fff;\\n -webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2);\\n box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2);\\n -webkit-transition: all 0.2s ease-in;\\n -o-transition: all 0.2s ease-in;\\n transition: all 0.2s ease-in;\\n -webkit-transform: translateX(380px);\\n -ms-transform: translateX(380px);\\n transform: translateX(380px);\\n}\\n#template-customizer h5 {\\n position: relative;\\n font-size: 11px;\\n font-weight: 600;\\n}\\n#template-customizer > h5 {\\n flex: 0 0 auto;\\n}\\n#template-customizer .disabled {\\n color: #d1d2d3 !important;\\n}\\n#template-customizer.template-customizer-open {\\n -webkit-transition-delay: 0.1s;\\n -o-transition-delay: 0.1s;\\n transition-delay: 0.1s;\\n -webkit-transform: none !important;\\n -ms-transform: none !important;\\n transform: none !important;\\n}\\n#template-customizer .template-customizer-open-btn {\\n position: absolute;\\n top: 180px;\\n left: 0;\\n z-index: -1;\\n display: block;\\n width: 42px;\\n height: 42px;\\n border-top-left-radius: 15%;\\n border-bottom-left-radius: 15%;\\n background: #333;\\n color: #fff !important;\\n text-align: center;\\n font-size: 18px !important;\\n line-height: 42px;\\n opacity: 1;\\n -webkit-transition: all 0.1s linear 0.2s;\\n -o-transition: all 0.1s linear 0.2s;\\n transition: all 0.1s linear 0.2s;\\n -webkit-transform: translateX(-62px);\\n -ms-transform: translateX(-62px);\\n transform: translateX(-62px);\\n}\\n@media (max-width: 991.98px) {\\n #template-customizer .template-customizer-open-btn {\\n top: 145px;\\n }\\n}\\n.dark-style #template-customizer .template-customizer-open-btn {\\n background: #555;\\n}\\n#template-customizer .template-customizer-open-btn::before {\\n content: \\\"\\\";\\n width: 22px;\\n height: 22px;\\n display: block;\\n background-size: 100% 100%;\\n position: absolute;\\n background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\n margin: 10px;\\n}\\n.customizer-hide #template-customizer .template-customizer-open-btn {\\n display: none;\\n}\\n[dir=rtl] #template-customizer .template-customizer-open-btn {\\n border-radius: 0;\\n border-top-right-radius: 15%;\\n border-bottom-right-radius: 15%;\\n}\\n[dir=rtl] #template-customizer .template-customizer-open-btn::before {\\n margin-left: -2px;\\n}\\n#template-customizer.template-customizer-open .template-customizer-open-btn {\\n opacity: 0;\\n -webkit-transition-delay: 0s;\\n -o-transition-delay: 0s;\\n transition-delay: 0s;\\n -webkit-transform: none !important;\\n -ms-transform: none !important;\\n transform: none !important;\\n}\\n#template-customizer .template-customizer-close-btn {\\n position: absolute;\\n top: 32px;\\n right: 0;\\n display: block;\\n font-size: 20px;\\n -webkit-transform: translateY(-50%);\\n -ms-transform: translateY(-50%);\\n transform: translateY(-50%);\\n}\\n#template-customizer .template-customizer-inner {\\n position: relative;\\n overflow: auto;\\n -webkit-box-flex: 0;\\n -ms-flex: 0 1 auto;\\n flex: 0 1 auto;\\n opacity: 1;\\n -webkit-transition: opacity 0.2s;\\n -o-transition: opacity 0.2s;\\n transition: opacity 0.2s;\\n}\\n#template-customizer .template-customizer-inner > div:first-child > hr:first-of-type {\\n display: none !important;\\n}\\n#template-customizer .template-customizer-inner > div:first-child > h5:first-of-type {\\n padding-top: 0 !important;\\n}\\n#template-customizer .template-customizer-themes-inner {\\n position: relative;\\n opacity: 1;\\n -webkit-transition: opacity 0.2s;\\n -o-transition: opacity 0.2s;\\n transition: opacity 0.2s;\\n}\\n#template-customizer .template-customizer-theme-item {\\n display: -webkit-box;\\n display: -ms-flexbox;\\n display: flex;\\n -webkit-box-align: center;\\n align-items: center;\\n -ms-flex-align: center;\\n -webkit-box-flex: 1;\\n -ms-flex: 1 1 100%;\\n flex: 1 1 100%;\\n -webkit-box-pack: justify;\\n -ms-flex-pack: justify;\\n justify-content: space-between;\\n margin-bottom: 10px;\\n padding: 0 24px;\\n width: 100%;\\n cursor: pointer;\\n}\\n#template-customizer .template-customizer-theme-item input {\\n position: absolute;\\n z-index: -1;\\n opacity: 0;\\n}\\n#template-customizer .template-customizer-theme-item input ~ span {\\n opacity: 0.25;\\n -webkit-transition: all 0.2s;\\n -o-transition: all 0.2s;\\n transition: all 0.2s;\\n}\\n#template-customizer .template-customizer-theme-item .template-customizer-theme-checkmark {\\n display: inline-block;\\n width: 6px;\\n height: 12px;\\n border-right: 1px solid;\\n border-bottom: 1px solid;\\n opacity: 0;\\n -webkit-transition: all 0.2s;\\n -o-transition: all 0.2s;\\n transition: all 0.2s;\\n -webkit-transform: rotate(45deg);\\n -ms-transform: rotate(45deg);\\n transform: rotate(45deg);\\n}\\n[dir=rtl] #template-customizer .template-customizer-theme-item .template-customizer-theme-checkmark {\\n border-right: none;\\n border-left: 1px solid;\\n -webkit-transform: rotate(-45deg);\\n -ms-transform: rotate(-45deg);\\n transform: rotate(-45deg);\\n}\\n#template-customizer .template-customizer-theme-item input:checked:not([disabled]) ~ span, #template-customizer .template-customizer-theme-item:hover input:not([disabled]) ~ span {\\n opacity: 1;\\n}\\n#template-customizer .template-customizer-theme-item input:checked:not([disabled]) ~ span .template-customizer-theme-checkmark {\\n opacity: 1;\\n}\\n#template-customizer .template-customizer-theme-colors span {\\n display: block;\\n margin: 0 1px;\\n width: 10px;\\n height: 10px;\\n border-radius: 50%;\\n -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1) inset;\\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1) inset;\\n}\\n#template-customizer.template-customizer-loading .template-customizer-inner, #template-customizer.template-customizer-loading-theme .template-customizer-themes-inner {\\n opacity: 0.2;\\n}\\n#template-customizer.template-customizer-loading .template-customizer-inner::after, #template-customizer.template-customizer-loading-theme .template-customizer-themes-inner::after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n z-index: 999;\\n display: block;\\n}\\n\\n.layout-menu-100vh #template-customizer {\\n height: 100vh;\\n}\\n\\n[dir=rtl] #template-customizer {\\n right: auto;\\n left: 0;\\n -webkit-transform: translateX(-380px);\\n -ms-transform: translateX(-380px);\\n transform: translateX(-380px);\\n}\\n[dir=rtl] #template-customizer .template-customizer-open-btn {\\n right: 0;\\n left: auto;\\n -webkit-transform: translateX(62px);\\n -ms-transform: translateX(62px);\\n transform: translateX(62px);\\n}\\n[dir=rtl] #template-customizer .template-customizer-close-btn {\\n right: auto;\\n left: 0;\\n}\\n\\n#template-customizer .template-customizer-layouts-options[disabled] {\\n opacity: 0.5;\\n pointer-events: none;\\n}\\n\\n[dir=rtl] .template-customizer-t-style_switch_light {\\n padding-right: 0 !important;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./js/_template-customizer/_template-customizer.scss\"],\"names\":[],\"mappings\":\"AAAA;;EAAA;AAmBA;EACE,4KAAA;EAEA,6BAAA;EACA,eAAA;EACA,MAAA;EACA,QAAA;EACA,YAAA;EACA,iBAAA;EACA,oBAAA;EACA,oBAAA;EACA,aAAA;EACA,4BAAA;EACA,6BAAA;EACA,0BAAA;EACA,sBAAA;EACA,YA/BiB;EAgCjB,gBAAA;EACA,iDAAA;EACA,yCAAA;EACA,oCAAA;EACA,+BAAA;EACA,4BAAA;EACA,oCAAA;EACA,gCAAA;EACA,4BAAA;AAhBF;AAkBE;EACE,kBAAA;EACA,eAAA;EACA,gBAAA;AAhBJ;AAmBE;EACE,cAAA;AAjBJ;AAoBE;EACE,yBAAA;AAlBJ;AAqBE;EACE,8BAAA;EACA,yBAAA;EACA,sBAAA;EACA,kCAAA;EACA,8BAAA;EACA,0BAAA;AAnBJ;AAwBE;EACE,kBAAA;EACA,UA9DW;EAmEX,OAAA;EACA,WAAA;EACA,cAAA;EACA,WAzEY;EA0EZ,YA1EY;EA2EZ,2BAlEqB;EAmErB,8BAnEqB;EAoErB,gBAvEU;EAwEV,sBAAA;EACA,kBAAA;EACA,0BAAA;EACA,iBAjFY;EAkFZ,UAAA;EACA,wCAAA;EACA,mCAAA;EACA,gCAAA;EACA,oCAAA;EACA,gCAAA;EACA,4BAAA;AA1BJ;AAKI;EAJF;IAKI,UAhEY;EA8DhB;AACF;AAuBI;EACE,gBApFa;AA+DnB;AAuBI;EACE,WAAA;EACA,WAAA;EACA,YAAA;EACA,cAAA;EACA,0BAAA;EACA,kBAAA;EACA,yDAAA;EACA,YAAA;AArBN;AAyBI;EACE,aAAA;AAvBN;AA0BI;EACE,gBAAA;EACA,4BAtGmB;EAuGnB,+BAvGmB;AA+EzB;AA0BM;EACE,iBAAA;AAxBR;AA6BE;EACE,UAAA;EACA,4BAAA;EACA,uBAAA;EACA,oBAAA;EACA,kCAAA;EACA,8BAAA;EACA,0BAAA;AA3BJ;AA8BE;EACE,kBAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;EACA,eAAA;EACA,mCAAA;EACA,+BAAA;EACA,2BAAA;AA5BJ;AAgCE;EACE,kBAAA;EACA,cAAA;EACA,mBAAA;EACA,kBAAA;EACA,cAAA;EACA,UAAA;EACA,gCAAA;EACA,2BAAA;EACA,wBAAA;AA9BJ;AAiCM;EACE,wBAAA;AA/BR;AAiCM;EACE,yBAAA;AA/BR;AAqCE;EACE,kBAAA;EACA,UAAA;EACA,gCAAA;EACA,2BAAA;EACA,wBAAA;AAnCJ;AAsCE;EACE,oBAAA;EACA,oBAAA;EACA,aAAA;EACA,yBAAA;EACA,mBAAA;EACA,sBAAA;EACA,mBAAA;EACA,kBAAA;EACA,cAAA;EACA,yBAAA;EACA,sBAAA;EACA,8BAAA;EACA,mBAAA;EACA,eAAA;EACA,WAAA;EACA,eAAA;AApCJ;AAsCI;EACE,kBAAA;EACA,WAAA;EACA,UAAA;AApCN;AAuCI;EACE,aAAA;EACA,4BAAA;EACA,uBAAA;EACA,oBAAA;AArCN;AAwCI;EACE,qBAAA;EACA,UAAA;EACA,YAAA;EACA,uBAAA;EACA,wBAAA;EACA,UAAA;EACA,4BAAA;EACA,uBAAA;EACA,oBAAA;EACA,gCAAA;EACA,4BAAA;EACA,wBAAA;AAtCN;AAwCM;EACE,kBAAA;EACA,sBAAA;EACA,iCAAA;EACA,6BAAA;EACA,yBAAA;AAtCR;AA0CI;EAEE,UAAA;AAzCN;AA4CI;EACE,UAAA;AA1CN;AA+CI;EACE,cAAA;EACA,aAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;EACA,sDAAA;EACA,8CAAA;AA7CN;AAiDE;EAEE,YAAA;AAhDJ;AAkDI;EACE,WAAA;EACA,kBAAA;EACA,MAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;EACA,YAAA;EACA,cAAA;AAhDN;;AAqDA;EACE,aAAA;AAlDF;;AAyDE;EACE,WAAA;EACA,OAAA;EACA,qCAAA;EACA,iCAAA;EACA,6BAAA;AAtDJ;AAyDE;EACE,QAAA;EACA,UAAA;EACA,mCAAA;EACA,+BAAA;EACA,2BAAA;AAvDJ;AA0DE;EACE,WAAA;EACA,OAAA;AAxDJ;;AA4DA;EACE,YAAA;EACA,oBAAA;AAzDF;;AA8DE;EACE,2BAAA;AA3DJ\",\"sourcesContent\":[\"/*\\r\\n* Template Customizer Style\\r\\n**/\\r\\n\\r\\n$customizer-width: 360px;\\r\\n$customizer-spacer: 20px;\\r\\n$customizer-font-size: inherit;\\r\\n\\r\\n$open-btn-size: 42px;\\r\\n$open-btn-spacer: 0;\\r\\n$open-btn-font-size: 18px;\\r\\n$open-btn-top: 180px;\\r\\n$open-btn-top-md: 145px;\\r\\n\\r\\n$open-btn-bg: #333;\\r\\n$open-btn-bg-dark: #555;\\r\\n$open-btn-color: #fff;\\r\\n$open-btn-border-radius: 15%;\\r\\n\\r\\n#template-customizer {\\r\\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif,\\r\\n 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol' !important;\\r\\n font-size: $customizer-font-size !important;\\r\\n position: fixed;\\r\\n top: 0;\\r\\n right: 0;\\r\\n height: 100%;\\r\\n z-index: 99999999;\\r\\n display: -webkit-box;\\r\\n display: -ms-flexbox;\\r\\n display: flex;\\r\\n -webkit-box-orient: vertical;\\r\\n -webkit-box-direction: normal;\\r\\n -ms-flex-direction: column;\\r\\n flex-direction: column;\\r\\n width: $customizer-width;\\r\\n background: #fff;\\r\\n -webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2);\\r\\n box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2);\\r\\n -webkit-transition: all 0.2s ease-in;\\r\\n -o-transition: all 0.2s ease-in;\\r\\n transition: all 0.2s ease-in;\\r\\n -webkit-transform: translateX($customizer-width + $customizer-spacer);\\r\\n -ms-transform: translateX($customizer-width + $customizer-spacer);\\r\\n transform: translateX($customizer-width + $customizer-spacer);\\r\\n\\r\\n h5 {\\r\\n position: relative;\\r\\n font-size: 11px;\\r\\n font-weight: 600;\\r\\n }\\r\\n\\r\\n > h5 {\\r\\n flex: 0 0 auto;\\r\\n }\\r\\n\\r\\n .disabled {\\r\\n color: #d1d2d3 !important;\\r\\n }\\r\\n\\r\\n &.template-customizer-open {\\r\\n -webkit-transition-delay: 0.1s;\\r\\n -o-transition-delay: 0.1s;\\r\\n transition-delay: 0.1s;\\r\\n -webkit-transform: none !important;\\r\\n -ms-transform: none !important;\\r\\n transform: none !important;\\r\\n }\\r\\n\\r\\n // Customizer button\\r\\n\\r\\n .template-customizer-open-btn {\\r\\n position: absolute;\\r\\n top: $open-btn-top;\\r\\n\\r\\n @media (max-width: 991.98px) {\\r\\n top: $open-btn-top-md;\\r\\n }\\r\\n left: 0;\\r\\n z-index: -1;\\r\\n display: block;\\r\\n width: $open-btn-size;\\r\\n height: $open-btn-size;\\r\\n border-top-left-radius: $open-btn-border-radius;\\r\\n border-bottom-left-radius: $open-btn-border-radius;\\r\\n background: $open-btn-bg;\\r\\n color: $open-btn-color !important;\\r\\n text-align: center;\\r\\n font-size: $open-btn-font-size !important;\\r\\n line-height: $open-btn-size;\\r\\n opacity: 1;\\r\\n -webkit-transition: all 0.1s linear 0.2s;\\r\\n -o-transition: all 0.1s linear 0.2s;\\r\\n transition: all 0.1s linear 0.2s;\\r\\n -webkit-transform: translateX(-($open-btn-size + $customizer-spacer + $open-btn-spacer));\\r\\n -ms-transform: translateX(-($open-btn-size + $customizer-spacer + $open-btn-spacer));\\r\\n transform: translateX(-($open-btn-size + $customizer-spacer + $open-btn-spacer));\\r\\n\\r\\n .dark-style & {\\r\\n background: $open-btn-bg-dark;\\r\\n }\\r\\n &::before {\\r\\n content: '';\\r\\n width: 22px;\\r\\n height: 22px;\\r\\n display: block;\\r\\n background-size: 100% 100%;\\r\\n position: absolute;\\r\\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAABClJREFUaEPtmY1RFEEQhbsjUCIQIhAiUCNQIxAiECIQIxAiECIAIpAMhAiECIQI2vquZqnZvp6fhb3SK5mqq6Ju92b69bzXf6is+dI1t1+eAfztG5z1BsxsU0S+ici2iPB3vm5E5EpEDlSVv2dZswFIxv8UkZcNy+5EZGcuEHMCOBeR951uvVDVD53vVl+bE8DvDu8Pxtyo6ta/BsByg1R15Bwzqz5/LJgn34CZwfnPInI4BUB6/1hV0cSjVxcAM4PbcBZjL0XklIPN7Is3fLCkdQPpPYw/VNXj5IhPIvJWRIhSl6p60ULWBGBm30Vk123EwRxCuIzWkkjNrCZywith10ewE1Xdq4GoAjCz/RTXW44Ynt+LyBEfT43kYfbj86J3w5Q32DNcRQDpwF+dkQXDMey8xem0L3TEqB4g3PZWad8agBMRgZPeu96D1/C2Zbh3X0p80Op1xxloztN48bMQQNoc7+eLEuAoPSPiIDY4Ooo+E6ixeNXM+D3GERz2U3CIqMstLJUgJQDe+7eq6mub0NYEkLAKwEHkiBQDCZtddZCZ8d6r7JDwFkoARklHRPZUFVDVZWbwGuNrC4EfdOzFrRABh3Wnqhv+d70AEBLGFROPmeHlnM81G69UdSd6IUuM0GgUVn1uqWmg5EmMfBeEyB7Pe3txBkY+rGT8j0J+WXq/BgDkUCaqLgEAnwcRog0veMIqFAAwCy2wnw+bI2GaGboBgF9k5N0o0rUSGUb4eO0BeO9j/GYhkSHMHMTIqwGARX6p6a+nlPBl8kZuXMD9j6pKfF9aZuaFOdJCEL5D4eYb9wCYVCanrBmGyii/tIq+SLj/HQBCaM5bLzwfPqdQ6FpVHyra4IbuVbXaY7dETC2ESPNNWiIOi69CcdgSMXsh4tNSUiklMgwmC0aNd08Y5WAES6HHehM4gu97wyhBgWpgqXsrASglprDy7CwhehMZOSbK6JMSma+Fio1KltCmlBIj7gfZOGx8ppQSXrhzFnOhJ/31BDkjFHRvOd09x0mRBA9SFgxUgHpQg0q0t5ymPMlL+EnldFTfDA0NAmf+OTQ0X0sRouf7NNkYGhrOYNrxtIaGg83MNzVDSe3LXLhP7O/yrCsCz1zlWTpjWkuZAOBpX3yVnLqI1yLCOKU6qMrmP7SSrUEw54XF4WBIK5FxCMOr3lVsfGqNSmPzBXUnJTIX1jyVBq9wO6UObOpgC5GjO98vFKnTdQMZXxEsWZlDiCZMIxAbNxQOqlpVZtobejBaZNoBnRDzMFpkxvTQOD36BlrcySZuI6p1ACB6LU3wWuf5581+oHfD1vi89bz3nFUC8Nm7ZlP3nKkFbM4bWPt/MSFwklprYItwt6cmvpWJ2IVcQBCz6bLysSCv3SaANCiTsnaNRrNRqMXVVT1/BrAqz/buu/Y38Ad3KC5PARej0QAAAABJRU5ErkJggg==');\\r\\n margin: 10px;\\r\\n }\\r\\n\\r\\n // Customizer Hidden\\r\\n .customizer-hide & {\\r\\n display: none;\\r\\n }\\r\\n\\r\\n [dir='rtl'] & {\\r\\n border-radius: 0;\\r\\n border-top-right-radius: $open-btn-border-radius;\\r\\n border-bottom-right-radius: $open-btn-border-radius;\\r\\n\\r\\n &::before {\\r\\n margin-left: -2px;\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n &.template-customizer-open .template-customizer-open-btn {\\r\\n opacity: 0;\\r\\n -webkit-transition-delay: 0s;\\r\\n -o-transition-delay: 0s;\\r\\n transition-delay: 0s;\\r\\n -webkit-transform: none !important;\\r\\n -ms-transform: none !important;\\r\\n transform: none !important;\\r\\n }\\r\\n\\r\\n .template-customizer-close-btn {\\r\\n position: absolute;\\r\\n top: 32px;\\r\\n right: 0;\\r\\n display: block;\\r\\n font-size: 20px;\\r\\n -webkit-transform: translateY(-50%);\\r\\n -ms-transform: translateY(-50%);\\r\\n transform: translateY(-50%);\\r\\n }\\r\\n\\r\\n // Customizer inner\\r\\n .template-customizer-inner {\\r\\n position: relative;\\r\\n overflow: auto;\\r\\n -webkit-box-flex: 0;\\r\\n -ms-flex: 0 1 auto;\\r\\n flex: 0 1 auto;\\r\\n opacity: 1;\\r\\n -webkit-transition: opacity 0.2s;\\r\\n -o-transition: opacity 0.2s;\\r\\n transition: opacity 0.2s;\\r\\n\\r\\n > div:first-child {\\r\\n > hr:first-of-type {\\r\\n display: none !important;\\r\\n }\\r\\n > h5:first-of-type {\\r\\n padding-top: 0 !important;\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n // Theme\\r\\n .template-customizer-themes-inner {\\r\\n position: relative;\\r\\n opacity: 1;\\r\\n -webkit-transition: opacity 0.2s;\\r\\n -o-transition: opacity 0.2s;\\r\\n transition: opacity 0.2s;\\r\\n }\\r\\n\\r\\n .template-customizer-theme-item {\\r\\n display: -webkit-box;\\r\\n display: -ms-flexbox;\\r\\n display: flex;\\r\\n -webkit-box-align: center;\\r\\n align-items: center;\\r\\n -ms-flex-align: center;\\r\\n -webkit-box-flex: 1;\\r\\n -ms-flex: 1 1 100%;\\r\\n flex: 1 1 100%;\\r\\n -webkit-box-pack: justify;\\r\\n -ms-flex-pack: justify;\\r\\n justify-content: space-between;\\r\\n margin-bottom: 10px;\\r\\n padding: 0 24px;\\r\\n width: 100%;\\r\\n cursor: pointer;\\r\\n\\r\\n input {\\r\\n position: absolute;\\r\\n z-index: -1; // Put the input behind the label so it doesn't overlay text\\r\\n opacity: 0;\\r\\n }\\r\\n\\r\\n input ~ span {\\r\\n opacity: 0.25;\\r\\n -webkit-transition: all 0.2s;\\r\\n -o-transition: all 0.2s;\\r\\n transition: all 0.2s;\\r\\n }\\r\\n\\r\\n .template-customizer-theme-checkmark {\\r\\n display: inline-block;\\r\\n width: 6px;\\r\\n height: 12px;\\r\\n border-right: 1px solid;\\r\\n border-bottom: 1px solid;\\r\\n opacity: 0;\\r\\n -webkit-transition: all 0.2s;\\r\\n -o-transition: all 0.2s;\\r\\n transition: all 0.2s;\\r\\n -webkit-transform: rotate(45deg);\\r\\n -ms-transform: rotate(45deg);\\r\\n transform: rotate(45deg);\\r\\n\\r\\n [dir='rtl'] & {\\r\\n border-right: none;\\r\\n border-left: 1px solid;\\r\\n -webkit-transform: rotate(-45deg);\\r\\n -ms-transform: rotate(-45deg);\\r\\n transform: rotate(-45deg);\\r\\n }\\r\\n }\\r\\n\\r\\n input:checked:not([disabled]) ~ span,\\r\\n &:hover input:not([disabled]) ~ span {\\r\\n opacity: 1;\\r\\n }\\r\\n\\r\\n input:checked:not([disabled]) ~ span .template-customizer-theme-checkmark {\\r\\n opacity: 1;\\r\\n }\\r\\n }\\r\\n\\r\\n .template-customizer-theme-colors {\\r\\n span {\\r\\n display: block;\\r\\n margin: 0 1px;\\r\\n width: 10px;\\r\\n height: 10px;\\r\\n border-radius: 50%;\\r\\n -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1) inset;\\r\\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1) inset;\\r\\n }\\r\\n }\\r\\n\\r\\n &.template-customizer-loading .template-customizer-inner,\\r\\n &.template-customizer-loading-theme .template-customizer-themes-inner {\\r\\n opacity: 0.2;\\r\\n\\r\\n &::after {\\r\\n content: '';\\r\\n position: absolute;\\r\\n top: 0;\\r\\n right: 0;\\r\\n bottom: 0;\\r\\n left: 0;\\r\\n z-index: 999;\\r\\n display: block;\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\n.layout-menu-100vh #template-customizer {\\r\\n height: 100vh;\\r\\n}\\r\\n\\r\\n// RTL\\r\\n//\\r\\n\\r\\n[dir='rtl'] {\\r\\n #template-customizer {\\r\\n right: auto;\\r\\n left: 0;\\r\\n -webkit-transform: translateX(-($customizer-width + $customizer-spacer));\\r\\n -ms-transform: translateX(-($customizer-width + $customizer-spacer));\\r\\n transform: translateX(-($customizer-width + $customizer-spacer));\\r\\n }\\r\\n\\r\\n #template-customizer .template-customizer-open-btn {\\r\\n right: 0;\\r\\n left: auto;\\r\\n -webkit-transform: translateX($open-btn-size + $customizer-spacer + $open-btn-spacer);\\r\\n -ms-transform: translateX($open-btn-size + $customizer-spacer + $open-btn-spacer);\\r\\n transform: translateX($open-btn-size + $customizer-spacer + $open-btn-spacer);\\r\\n }\\r\\n\\r\\n #template-customizer .template-customizer-close-btn {\\r\\n right: auto;\\r\\n left: 0;\\r\\n }\\r\\n}\\r\\n\\r\\n#template-customizer .template-customizer-layouts-options[disabled] {\\r\\n opacity: 0.5;\\r\\n pointer-events: none;\\r\\n}\\r\\n\\r\\n// ! FIX: mode switch position in RTL\\r\\n[dir='rtl'] {\\r\\n .template-customizer-t-style_switch_light {\\r\\n padding-right: 0 !important;\\r\\n }\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2pzL190ZW1wbGF0ZS1jdXN0b21pemVyL190ZW1wbGF0ZS1jdXN0b21pemVyLnNjc3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQzZHO0FBQ2pCO0FBQ087QUFDbkcsNENBQTRDLDZrR0FBcWhEO0FBQ2prRCw4QkFBOEIsbUZBQTJCLENBQUMsNEZBQXFDO0FBQy9GLHlDQUF5QyxzRkFBK0I7QUFDeEU7QUFDQSxzR0FBc0csMkxBQTJMLGtDQUFrQyxvQkFBb0IsV0FBVyxhQUFhLGlCQUFpQixzQkFBc0IseUJBQXlCLHlCQUF5QixrQkFBa0IsaUNBQWlDLGtDQUFrQywrQkFBK0IsMkJBQTJCLGlCQUFpQixxQkFBcUIsc0RBQXNELDhDQUE4Qyx5Q0FBeUMsb0NBQW9DLGlDQUFpQyx5Q0FBeUMscUNBQXFDLGlDQUFpQyxHQUFHLDJCQUEyQix1QkFBdUIsb0JBQW9CLHFCQUFxQixHQUFHLDZCQUE2QixtQkFBbUIsR0FBRyxrQ0FBa0MsOEJBQThCLEdBQUcsaURBQWlELG1DQUFtQyw4QkFBOEIsMkJBQTJCLHVDQUF1QyxtQ0FBbUMsK0JBQStCLEdBQUcsc0RBQXNELHVCQUF1QixlQUFlLFlBQVksZ0JBQWdCLG1CQUFtQixnQkFBZ0IsaUJBQWlCLGdDQUFnQyxtQ0FBbUMscUJBQXFCLDJCQUEyQix1QkFBdUIsK0JBQStCLHNCQUFzQixlQUFlLDZDQUE2Qyx3Q0FBd0MscUNBQXFDLHlDQUF5QyxxQ0FBcUMsaUNBQWlDLEdBQUcsZ0NBQWdDLHdEQUF3RCxpQkFBaUIsS0FBSyxHQUFHLGtFQUFrRSxxQkFBcUIsR0FBRyw4REFBOEQsa0JBQWtCLGdCQUFnQixpQkFBaUIsbUJBQW1CLCtCQUErQix1QkFBdUIsc0VBQXNFLGlCQUFpQixHQUFHLHVFQUF1RSxrQkFBa0IsR0FBRyxnRUFBZ0UscUJBQXFCLGlDQUFpQyxvQ0FBb0MsR0FBRyx3RUFBd0Usc0JBQXNCLEdBQUcsK0VBQStFLGVBQWUsaUNBQWlDLDRCQUE0Qix5QkFBeUIsdUNBQXVDLG1DQUFtQywrQkFBK0IsR0FBRyx1REFBdUQsdUJBQXVCLGNBQWMsYUFBYSxtQkFBbUIsb0JBQW9CLHdDQUF3QyxvQ0FBb0MsZ0NBQWdDLEdBQUcsbURBQW1ELHVCQUF1QixtQkFBbUIsd0JBQXdCLHVCQUF1QixtQkFBbUIsZUFBZSxxQ0FBcUMsZ0NBQWdDLDZCQUE2QixHQUFHLHdGQUF3Riw2QkFBNkIsR0FBRyx3RkFBd0YsOEJBQThCLEdBQUcsMERBQTBELHVCQUF1QixlQUFlLHFDQUFxQyxnQ0FBZ0MsNkJBQTZCLEdBQUcsd0RBQXdELHlCQUF5Qix5QkFBeUIsa0JBQWtCLDhCQUE4Qix3QkFBd0IsMkJBQTJCLHdCQUF3Qix1QkFBdUIsbUJBQW1CLDhCQUE4QiwyQkFBMkIsbUNBQW1DLHdCQUF3QixvQkFBb0IsZ0JBQWdCLG9CQUFvQixHQUFHLDhEQUE4RCx1QkFBdUIsZ0JBQWdCLGVBQWUsR0FBRyxxRUFBcUUsa0JBQWtCLGlDQUFpQyw0QkFBNEIseUJBQXlCLEdBQUcsNkZBQTZGLDBCQUEwQixlQUFlLGlCQUFpQiw0QkFBNEIsNkJBQTZCLGVBQWUsaUNBQWlDLDRCQUE0Qix5QkFBeUIscUNBQXFDLGlDQUFpQyw2QkFBNkIsR0FBRyx1R0FBdUcsdUJBQXVCLDJCQUEyQixzQ0FBc0Msa0NBQWtDLDhCQUE4QixHQUFHLHNMQUFzTCxlQUFlLEdBQUcsa0lBQWtJLGVBQWUsR0FBRywrREFBK0QsbUJBQW1CLGtCQUFrQixnQkFBZ0IsaUJBQWlCLHVCQUF1QiwyREFBMkQsbURBQW1ELEdBQUcseUtBQXlLLGlCQUFpQixHQUFHLHVMQUF1TCxrQkFBa0IsdUJBQXVCLFdBQVcsYUFBYSxjQUFjLFlBQVksaUJBQWlCLG1CQUFtQixHQUFHLDZDQUE2QyxrQkFBa0IsR0FBRyxvQ0FBb0MsZ0JBQWdCLFlBQVksMENBQTBDLHNDQUFzQyxrQ0FBa0MsR0FBRyxnRUFBZ0UsYUFBYSxlQUFlLHdDQUF3QyxvQ0FBb0MsZ0NBQWdDLEdBQUcsaUVBQWlFLGdCQUFnQixZQUFZLEdBQUcseUVBQXlFLGlCQUFpQix5QkFBeUIsR0FBRyx5REFBeUQsZ0NBQWdDLEdBQUcsT0FBTyxxSEFBcUgsS0FBSyxNQUFNLFdBQVcsV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxZQUFZLGFBQWEsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLE1BQU0sTUFBTSxXQUFXLFVBQVUsV0FBVyxNQUFNLE1BQU0sVUFBVSxNQUFNLE1BQU0sV0FBVyxNQUFNLE1BQU0sV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsTUFBTSxNQUFNLFdBQVcsV0FBVyxXQUFXLFVBQVUsVUFBVSxXQUFXLFlBQVksY0FBYyxlQUFlLGNBQWMsWUFBWSxXQUFXLFdBQVcsWUFBWSxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLE1BQU0sS0FBSyxLQUFLLFdBQVcsT0FBTyxLQUFLLE1BQU0sWUFBWSxPQUFPLE1BQU0sVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFdBQVcsV0FBVyxVQUFVLE1BQU0sTUFBTSxVQUFVLE1BQU0sTUFBTSxXQUFXLGFBQWEsZUFBZSxPQUFPLE1BQU0sV0FBVyxNQUFNLE1BQU0sVUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxNQUFNLE1BQU0sV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxXQUFXLE1BQU0sTUFBTSxXQUFXLFVBQVUsV0FBVyxXQUFXLFVBQVUsVUFBVSxXQUFXLFdBQVcsV0FBVyxNQUFNLE1BQU0sV0FBVyxNQUFNLE1BQU0sV0FBVyxNQUFNLE1BQU0sV0FBVyxVQUFVLFdBQVcsV0FBVyxXQUFXLE1BQU0sTUFBTSxXQUFXLFdBQVcsVUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsVUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFVBQVUsVUFBVSxVQUFVLE1BQU0sTUFBTSxX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QixTQUFTLHVGQUF1RixxQkFBcUIsU0FBUyxPQUFPLDZDQUE2QyxjQUFjLHlCQUF5Qix3QkFBd0Isc0JBQXNCLHVCQUF1Qiw2QkFBNkIsaUVBQWlFLHlEQUF5RCxTQUFTLE9BQU8sZ0pBQWdKLHFCQUFxQixzQkFBc0Isc0JBQXNCLDZCQUE2QixpQkFBaUIsbUJBQW1CLG9CQUFvQixrQkFBa0IsdUJBQXVCLHlCQUF5QixTQUFTLE9BQU8sS0FBSyxpREFBaUQsb0JBQW9CLEtBQUsseUNBQXlDLDRCQUE0QixvQkFBb0IsZ0JBQWdCLGlGQUFpRiw2RUFBNkUseUVBQXlFLE9BQU8sOERBQThELGlCQUFpQixtQkFBbUIsOEZBQThGLDBGQUEwRixzRkFBc0YsT0FBTywrREFBK0Qsb0JBQW9CLGdCQUFnQixPQUFPLEtBQUssNkVBQTZFLG1CQUFtQiwyQkFBMkIsS0FBSyw4REFBOEQsaURBQWlELG9DQUFvQyxPQUFPLEtBQUssdUJBQXVCO0FBQ3ZsbkI7QUFDQSwrREFBZSx1QkFBdUIsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL1NuZWF0Ly4vanMvX3RlbXBsYXRlLWN1c3RvbWl6ZXIvX3RlbXBsYXRlLWN1c3RvbWl6ZXIuc2Nzcz9iMjQ1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyA9IG5ldyBVUkwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQVlBQUFCWEF2bUhBQUFBQVhOU1IwSUFyczRjNlFBQUJDbEpSRUZVYUVQdG1ZMVJGRUVRaGJzalVDSVFJaEFpVUNOUUl4QWlFQ0lRSXhBaUVDSUFJcEFNaEFpRUNJUUkydnF1WnFuWnZwNmZoYjNTSzVtcXE2SnU5MmI2OWJ6WGY2aXMrZEkxdDErZUFmenRHNXoxQnN4c1UwUytpY2kyaVBCM3ZtNUU1RXBFRGxTVnYyZFpzd0ZJeHY4VWtaY055KzVFWkdjdUVITUNPQmVSOTUxdXZWRFZENTN2VmwrYkU4RHZEdThQeHR5bzZ0YS9Cc0J5ZzFSMTVCd3pxejUvTEpnbjM0Q1p3Zm5QSW5JNEJVQjYvMWhWMGNTalZ4Y0FNNFBiY0JaakwwWGtsSVBON0lzM2ZMQ2tkUVBwUFl3L1ZOWGo1SWhQSXZKV1JJaFNsNnA2MFVMV0JHQm0zMFZrMTIzRXdSeEN1SXpXa2tqTnJDWnl3aXRoMTBld0UxWGRxNEdvQWpDei9SVFhXNDRZbnQrTHlCRWZUNDNrWWZiajg2SjN3NVEzMkROY1JRRHB3Ritka1FYRE1leTh4ZW0wTDNURXFCNGczUFpXYWQ4YWdCTVJnWlBldTk2RDEvQzJaYmgzWDBwODBPcDF4eGxvenRONDhiTVFRTm9jNytlTEV1QW9QU1BpSURZNE9vbytFNml4ZU5YTStEM0dFUnoyVTNDSXFNc3RMSlVnSlFEZSs3ZXE2bXViME5ZRWtMQUt3RUhraUJRRENadGRkWkNaOGQ2cjdKRHdGa29BUmtsSFJQWlVGVkRWWldid0d1TnJDNEVmZE96RnJSQUJoM1ducWh2K2Q3MEFFQkxHRlJPUG1lSGxuTTgxRzY5VWRTZDZJVXVNMEdnVVZuMXVxV21nNUVtTWZCZUV5QjdQZTN0eEJrWStyR1Q4ajBKK1dYcS9CZ0RrVUNhcUxnRUFud2NSb2cwdmVNSXFGQUF3Q3kyd253K2JJMkdhR2JvQmdGOWs1TjBvMHJVU0dVYjRlTzBCZU85ai9HWWhrU0hNSE1USXF3R0FSWDZwNmErbmxQQmw4a1p1WE1EOWo2cEtmRjlhWnVhRk9kSkNFTDVENGVZYjl3Q1lWQ2FuckJtR3lpaS90SXErU0xqL0hRQkNhTTViTHp3ZlBxZFE2RnBWSHlyYTRJYnVWYlhhWTdkRVRDMkVTUE5OV2lJT2k2OUNjZGdTTVhzaDR0TlNVaWtsTWd3bUMwYU5kMDhZNVdBRVM2SEhlaE00Z3U5N3d5aEJnV3BncVhzckFTZ2xwckR5N0N3aGVoTVpPU2JLNkpNU21hK0ZpbzFLbHRDbWxCSWo3Z2ZaT0d4OHBwUVNYcmh6Rm5PaEovMzFCRGtqRkhSdk9kMDl4MG1SQkE5U0ZneFVnSHBRZzBxMHQ1eW1QTWxMK0VubGRGVGZEQTBOQW1mK09UUTBYMHNSb3VmN05Oa1lHaHJPWU5yeHRJYUdnODNNTnpWRFNlM0xYTGhQN08veXJDc0N6MXpsV1RwaldrdVpBT0JwWDN5Vm5McUkxeUxDT0tVNnFNcm1QN1NTclVFdzU0WEY0V0JJSzVGeENNT3IzbFZzZkdxTlNtUHpCWFVuSlRJWDFqeVZCcTl3TzZVT2JPcGdDNUdqTzk4dkZLblRkUU1aWHhFc1dabERpQ1pNSXhBYk54UU9xbHBWWnRvYmVqQmFaTm9CblJEek1GcGt4dlRRT0QzNkJscmN5U1p1STZwMUFDQjZMVTN3V3VmNTU4MStvSGZEMXZpODliejNuRlVDOE5tN1psUDNuS2tGYk00YldQdC9NU0Z3a2xwcllJdHd0NmNtdnBXSjJJVmNRQkN6NmJMeXNTQ3YzU2FBTkNpVHNuYU5Sck5ScU1YVlZUMS9CckFxei9idXUvWTM4QWQzS0M1UEFSZWowUUFBQUFCSlJVNUVya0pnZ2c9PVwiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi8qXFxuKiBUZW1wbGF0ZSBDdXN0b21pemVyIFN0eWxlXFxuKiovXFxuI3RlbXBsYXRlLWN1c3RvbWl6ZXIge1xcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXFxcIlNlZ29lIFVJXFxcIiwgUm9ib3RvLCBcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLCBBcmlhbCwgc2Fucy1zZXJpZiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCIgIWltcG9ydGFudDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdCAhaW1wb3J0YW50O1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB6LWluZGV4OiA5OTk5OTk5OTtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcXG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgd2lkdGg6IDM2MHB4O1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDIwcHggMCByZ2JhKDAsIDAsIDAsIDAuMik7XFxuICBib3gtc2hhZG93OiAwIDAgMjBweCAwIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbjtcXG4gIC1vLXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW47XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMzgwcHgpO1xcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWCgzODBweCk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMzgwcHgpO1xcbn1cXG4jdGVtcGxhdGUtY3VzdG9taXplciBoNSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBmb250LXdlaWdodDogNjAwO1xcbn1cXG4jdGVtcGxhdGUtY3VzdG9taXplciA+IGg1IHtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbn1cXG4jdGVtcGxhdGUtY3VzdG9taXplciAuZGlzYWJsZWQge1xcbiAgY29sb3I6ICNkMWQyZDMgIWltcG9ydGFudDtcXG59XFxuI3RlbXBsYXRlLWN1c3RvbWl6ZXIudGVtcGxhdGUtY3VzdG9taXplci1vcGVuIHtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogMC4xcztcXG4gIC1vLXRyYW5zaXRpb24tZGVsYXk6IDAuMXM7XFxuICB0cmFuc2l0aW9uLWRlbGF5OiAwLjFzO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcXG4gIC1tcy10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcXG4gIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4jdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci1vcGVuLWJ0biB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDE4MHB4O1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6IC0xO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogNDJweDtcXG4gIGhlaWdodDogNDJweDtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDE1JTtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDE1JTtcXG4gIGJhY2tncm91bmQ6ICMzMzM7XFxuICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XFxuICBsaW5lLWhlaWdodDogNDJweDtcXG4gIG9wYWNpdHk6IDE7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjFzIGxpbmVhciAwLjJzO1xcbiAgLW8tdHJhbnNpdGlvbjogYWxsIDAuMXMgbGluZWFyIDAuMnM7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBsaW5lYXIgMC4ycztcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC02MnB4KTtcXG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTYycHgpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC02MnB4KTtcXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MS45OHB4KSB7XFxuICAjdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci1vcGVuLWJ0biB7XFxuICAgIHRvcDogMTQ1cHg7XFxuICB9XFxufVxcbi5kYXJrLXN0eWxlICN0ZW1wbGF0ZS1jdXN0b21pemVyIC50ZW1wbGF0ZS1jdXN0b21pemVyLW9wZW4tYnRuIHtcXG4gIGJhY2tncm91bmQ6ICM1NTU7XFxufVxcbiN0ZW1wbGF0ZS1jdXN0b21pemVyIC50ZW1wbGF0ZS1jdXN0b21pemVyLW9wZW4tYnRuOjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB3aWR0aDogMjJweDtcXG4gIGhlaWdodDogMjJweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpO1xcbiAgbWFyZ2luOiAxMHB4O1xcbn1cXG4uY3VzdG9taXplci1oaWRlICN0ZW1wbGF0ZS1jdXN0b21pemVyIC50ZW1wbGF0ZS1jdXN0b21pemVyLW9wZW4tYnRuIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbltkaXI9cnRsXSAjdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci1vcGVuLWJ0biB7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDE1JTtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxNSU7XFxufVxcbltkaXI9cnRsXSAjdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci1vcGVuLWJ0bjo6YmVmb3JlIHtcXG4gIG1hcmdpbi1sZWZ0OiAtMnB4O1xcbn1cXG4jdGVtcGxhdGUtY3VzdG9taXplci50ZW1wbGF0ZS1jdXN0b21pemVyLW9wZW4gLnRlbXBsYXRlLWN1c3RvbWl6ZXItb3Blbi1idG4ge1xcbiAgb3BhY2l0eTogMDtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogMHM7XFxuICAtby10cmFuc2l0aW9uLWRlbGF5OiAwcztcXG4gIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcXG4gIC1tcy10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcXG4gIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4jdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci1jbG9zZS1idG4ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAzMnB4O1xcbiAgcmlnaHQ6IDA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZvbnQtc2l6ZTogMjBweDtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG59XFxuI3RlbXBsYXRlLWN1c3RvbWl6ZXIgLnRlbXBsYXRlLWN1c3RvbWl6ZXItaW5uZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICAtd2Via2l0LWJveC1mbGV4OiAwO1xcbiAgLW1zLWZsZXg6IDAgMSBhdXRvO1xcbiAgZmxleDogMCAxIGF1dG87XFxuICBvcGFjaXR5OiAxO1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7XFxuICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7XFxufVxcbiN0ZW1wbGF0ZS1jdXN0b21pemVyIC50ZW1wbGF0ZS1jdXN0b21pemVyLWlubmVyID4gZGl2OmZpcnN0LWNoaWxkID4gaHI6Zmlyc3Qtb2YtdHlwZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbiN0ZW1wbGF0ZS1jdXN0b21pemVyIC50ZW1wbGF0ZS1jdXN0b21pemVyLWlubmVyID4gZGl2OmZpcnN0LWNoaWxkID4gaDU6Zmlyc3Qtb2YtdHlwZSB7XFxuICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xcbn1cXG4jdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci10aGVtZXMtaW5uZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgb3BhY2l0eTogMTtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzO1xcbiAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzO1xcbn1cXG4jdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci10aGVtZS1pdGVtIHtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC1tcy1mbGV4OiAxIDEgMTAwJTtcXG4gIGZsZXg6IDEgMSAxMDAlO1xcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcXG4gIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcbiAgcGFkZGluZzogMCAyNHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbiN0ZW1wbGF0ZS1jdXN0b21pemVyIC50ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1lLWl0ZW0gaW5wdXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgei1pbmRleDogLTE7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4jdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci10aGVtZS1pdGVtIGlucHV0IH4gc3BhbiB7XFxuICBvcGFjaXR5OiAwLjI1O1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4ycztcXG4gIC1vLXRyYW5zaXRpb246IGFsbCAwLjJzO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XFxufVxcbiN0ZW1wbGF0ZS1jdXN0b21pemVyIC50ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1lLWl0ZW0gLnRlbXBsYXRlLWN1c3RvbWl6ZXItdGhlbWUtY2hlY2ttYXJrIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiA2cHg7XFxuICBoZWlnaHQ6IDEycHg7XFxuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZDtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDtcXG4gIG9wYWNpdHk6IDA7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjJzO1xcbiAgLW8tdHJhbnNpdGlvbjogYWxsIDAuMnM7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xcbiAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXG59XFxuW2Rpcj1ydGxdICN0ZW1wbGF0ZS1jdXN0b21pemVyIC50ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1lLWl0ZW0gLnRlbXBsYXRlLWN1c3RvbWl6ZXItdGhlbWUtY2hlY2ttYXJrIHtcXG4gIGJvcmRlci1yaWdodDogbm9uZTtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQ7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxufVxcbiN0ZW1wbGF0ZS1jdXN0b21pemVyIC50ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1lLWl0ZW0gaW5wdXQ6Y2hlY2tlZDpub3QoW2Rpc2FibGVkXSkgfiBzcGFuLCAjdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci10aGVtZS1pdGVtOmhvdmVyIGlucHV0Om5vdChbZGlzYWJsZWRdKSB+IHNwYW4ge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuI3RlbXBsYXRlLWN1c3RvbWl6ZXIgLnRlbXBsYXRlLWN1c3RvbWl6ZXItdGhlbWUtaXRlbSBpbnB1dDpjaGVja2VkOm5vdChbZGlzYWJsZWRdKSB+IHNwYW4gLnRlbXBsYXRlLWN1c3RvbWl6ZXItdGhlbWUtY2hlY2ttYXJrIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbiN0ZW1wbGF0ZS1jdXN0b21pemVyIC50ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1lLWNvbG9ycyBzcGFuIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbWFyZ2luOiAwIDFweDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjEpIGluc2V0O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMCwgMCwgMCwgMC4xKSBpbnNldDtcXG59XFxuI3RlbXBsYXRlLWN1c3RvbWl6ZXIudGVtcGxhdGUtY3VzdG9taXplci1sb2FkaW5nIC50ZW1wbGF0ZS1jdXN0b21pemVyLWlubmVyLCAjdGVtcGxhdGUtY3VzdG9taXplci50ZW1wbGF0ZS1jdXN0b21pemVyLWxvYWRpbmctdGhlbWUgLnRlbXBsYXRlLWN1c3RvbWl6ZXItdGhlbWVzLWlubmVyIHtcXG4gIG9wYWNpdHk6IDAuMjtcXG59XFxuI3RlbXBsYXRlLWN1c3RvbWl6ZXIudGVtcGxhdGUtY3VzdG9taXplci1sb2FkaW5nIC50ZW1wbGF0ZS1jdXN0b21pemVyLWlubmVyOjphZnRlciwgI3RlbXBsYXRlLWN1c3RvbWl6ZXIudGVtcGxhdGUtY3VzdG9taXplci1sb2FkaW5nLXRoZW1lIC50ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1lcy1pbm5lcjo6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiA5OTk7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLmxheW91dC1tZW51LTEwMHZoICN0ZW1wbGF0ZS1jdXN0b21pemVyIHtcXG4gIGhlaWdodDogMTAwdmg7XFxufVxcblxcbltkaXI9cnRsXSAjdGVtcGxhdGUtY3VzdG9taXplciB7XFxuICByaWdodDogYXV0bztcXG4gIGxlZnQ6IDA7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzgwcHgpO1xcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzgwcHgpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zODBweCk7XFxufVxcbltkaXI9cnRsXSAjdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci1vcGVuLWJ0biB7XFxuICByaWdodDogMDtcXG4gIGxlZnQ6IGF1dG87XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCg2MnB4KTtcXG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNjJweCk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNjJweCk7XFxufVxcbltkaXI9cnRsXSAjdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci1jbG9zZS1idG4ge1xcbiAgcmlnaHQ6IGF1dG87XFxuICBsZWZ0OiAwO1xcbn1cXG5cXG4jdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci1sYXlvdXRzLW9wdGlvbnNbZGlzYWJsZWRdIHtcXG4gIG9wYWNpdHk6IDAuNTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG5bZGlyPXJ0bF0gLnRlbXBsYXRlLWN1c3RvbWl6ZXItdC1zdHlsZV9zd2l0Y2hfbGlnaHQge1xcbiAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50O1xcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9qcy9fdGVtcGxhdGUtY3VzdG9taXplci9fdGVtcGxhdGUtY3VzdG9taXplci5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBOztFQUFBO0FBbUJBO0VBQ0UsNEtBQUE7RUFFQSw2QkFBQTtFQUNBLGVBQUE7RUFDQSxNQUFBO0VBQ0EsUUFBQTtFQUNBLFlBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0Esb0JBQUE7RUFDQSxhQUFBO0VBQ0EsNEJBQUE7RUFDQSw2QkFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7RUFDQSxZQS9CaUI7RUFnQ2pCLGdCQUFBO0VBQ0EsaURBQUE7RUFDQSx5Q0FBQTtFQUNBLG9DQUFBO0VBQ0EsK0JBQUE7RUFDQSw0QkFBQTtFQUNBLG9DQUFBO0VBQ0EsZ0NBQUE7RUFDQSw0QkFBQTtBQWhCRjtBQWtC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aEROOztBQXFEQTtFQUNFLGFBQUE7QUFsREY7O0FBeURFO0VBQ0UsV0FBQTtFQUNBLE9BQUE7RUFDQSxxQ0FBQTtFQUNBLGlDQUFBO0VBQ0EsNkJBQUE7QUF0REo7QUF5REU7RUFDRSxRQUFBO0VBQ0EsVUFBQTtFQUNBLG1DQUFBO0VBQ0EsK0JBQUE7RUFDQSwyQkFBQTtBQXZESjtBQTBERTtFQUNFLFdBQUE7RUFDQSxPQUFBO0FBeERKOztBQTREQTtFQUNFLFlBQUE7RUFDQSxvQkFBQTtBQXpERjs7QUE4REU7RUFDRSwyQkFBQTtBQTNESlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIvKlxcclxcbiogVGVtcGxhdGUgQ3VzdG9taXplciBTdHlsZVxcclxcbioqL1xcclxcblxcclxcbiRjdXN0b21pemVyLXdpZHRoOiAzNjBweDtcXHJcXG4kY3VzdG9taXplci1zcGFjZXI6IDIwcHg7XFxyXFxuJGN1c3RvbWl6ZXItZm9udC1zaXplOiBpbmhlcml0O1xcclxcblxcclxcbiRvcGVuLWJ0bi1zaXplOiA0MnB4O1xcclxcbiRvcGVuLWJ0bi1zcGFjZXI6IDA7XFxyXFxuJG9wZW4tYnRuLWZvbnQtc2l6ZTogMThweDtcXHJcXG4kb3Blbi1idG4tdG9wOiAxODBweDtcXHJcXG4kb3Blbi1idG4tdG9wLW1kOiAxNDVweDtcXHJcXG5cXHJcXG4kb3Blbi1idG4tYmc6ICMzMzM7XFxyXFxuJG9wZW4tYnRuLWJnLWRhcms6ICM1NTU7XFxyXFxuJG9wZW4tYnRuLWNvbG9yOiAjZmZmO1xcclxcbiRvcGVuLWJ0bi1ib3JkZXItcmFkaXVzOiAxNSU7XFxyXFxuXFxyXFxuI3RlbXBsYXRlLWN1c3RvbWl6ZXIge1xcclxcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCAnSGVsdmV0aWNhIE5ldWUnLCBBcmlhbCwgc2Fucy1zZXJpZixcXHJcXG4gICAgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCcgIWltcG9ydGFudDtcXHJcXG4gIGZvbnQtc2l6ZTogJGN1c3RvbWl6ZXItZm9udC1zaXplICFpbXBvcnRhbnQ7XFxyXFxuICBwb3NpdGlvbjogZml4ZWQ7XFxyXFxuICB0b3A6IDA7XFxyXFxuICByaWdodDogMDtcXHJcXG4gIGhlaWdodDogMTAwJTtcXHJcXG4gIHotaW5kZXg6IDk5OTk5OTk5O1xcclxcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxyXFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xcclxcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XFxyXFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxuICB3aWR0aDogJGN1c3RvbWl6ZXItd2lkdGg7XFxyXFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcclxcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMjBweCAwIHJnYmEoMCwgMCwgMCwgMC4yKTtcXHJcXG4gIGJveC1zaGFkb3c6IDAgMCAyMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpO1xcclxcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluO1xcclxcbiAgLW8tdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbjtcXHJcXG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW47XFxyXFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgkY3VzdG9taXplci13aWR0aCArICRjdXN0b21pemVyLXNwYWNlcik7XFxyXFxuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKCRjdXN0b21pemVyLXdpZHRoICsgJGN1c3RvbWl6ZXItc3BhY2VyKTtcXHJcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgkY3VzdG9taXplci13aWR0aCArICRjdXN0b21pemVyLXNwYWNlcik7XFxyXFxuXFxyXFxuICBoNSB7XFxyXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gICAgZm9udC1zaXplOiAxMXB4O1xcclxcbiAgICBmb250LXdlaWdodDogNjAwO1xcclxcbiAgfVxcclxcblxcclxcbiAgPiBoNSB7XFxyXFxuICAgIGZsZXg6IDAgMCBhdXRvO1xcclxcbiAgfVxcclxcblxcclxcbiAgLmRpc2FibGVkIHtcXHJcXG4gICAgY29sb3I6ICNkMWQyZDMgIWltcG9ydGFudDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICYudGVtcGxhdGUtY3VzdG9taXplci1vcGVuIHtcXHJcXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiAwLjFzO1xcclxcbiAgICAtby10cmFuc2l0aW9uLWRlbGF5OiAwLjFzO1xcclxcbiAgICB0cmFuc2l0aW9uLWRlbGF5OiAwLjFzO1xcclxcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xcclxcbiAgICAtbXMtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XFxyXFxuICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xcclxcbiAgfVxcclxcblxcclxcbiAgLy8gQ3VzdG9taXplciBidXR0b25cXHJcXG5cXHJcXG4gIC50ZW1wbGF0ZS1jdXN0b21pemVyLW9wZW4tYnRuIHtcXHJcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICB0b3A6ICRvcGVuLWJ0bi10b3A7XFxyXFxuXFxyXFxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTEuOThweCkge1xcclxcbiAgICAgIHRvcDogJG9wZW4tYnRuLXRvcC1tZDtcXHJcXG4gICAgfVxcclxcbiAgICBsZWZ0OiAwO1xcclxcbiAgICB6LWluZGV4OiAtMTtcXHJcXG4gICAgZGlzcGxheTogYmxvY2s7XFxyXFxuICAgIHdpZHRoOiAkb3Blbi1idG4tc2l6ZTtcXHJcXG4gICAgaGVpZ2h0OiAkb3Blbi1idG4tc2l6ZTtcXHJcXG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJG9wZW4tYnRuLWJvcmRlci1yYWRpdXM7XFxyXFxuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRvcGVuLWJ0bi1ib3JkZXItcmFkaXVzO1xcclxcbiAgICBiYWNrZ3JvdW5kOiAkb3Blbi1idG4tYmc7XFxyXFxuICAgIGNvbG9yOiAkb3Blbi1idG4tY29sb3IgIWltcG9ydGFudDtcXHJcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgICBmb250LXNpemU6ICRvcGVuLWJ0bi1mb250LXNpemUgIWltcG9ydGFudDtcXHJcXG4gICAgbGluZS1oZWlnaHQ6ICRvcGVuLWJ0bi1zaXplO1xcclxcbiAgICBvcGFjaXR5OiAxO1xcclxcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjFzIGxpbmVhciAwLjJzO1xcclxcbiAgICAtby10cmFuc2l0aW9uOiBhbGwgMC4xcyBsaW5lYXIgMC4ycztcXHJcXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMXMgbGluZWFyIDAuMnM7XFxyXFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0oJG9wZW4tYnRuLXNpemUgKyAkY3VzdG9taXplci1zcGFjZXIgKyAkb3Blbi1idG4tc3BhY2VyKSk7XFxyXFxuICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSgkb3Blbi1idG4tc2l6ZSArICRjdXN0b21pemVyLXNwYWNlciArICRvcGVuLWJ0bi1zcGFjZXIpKTtcXHJcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0oJG9wZW4tYnRuLXNpemUgKyAkY3VzdG9taXplci1zcGFjZXIgKyAkb3Blbi1idG4tc3BhY2VyKSk7XFxyXFxuXFxyXFxuICAgIC5kYXJrLXN0eWxlICYge1xcclxcbiAgICAgIGJhY2tncm91bmQ6ICRvcGVuLWJ0bi1iZy1kYXJrO1xcclxcbiAgICB9XFxyXFxuICAgICY6OmJlZm9yZSB7XFxyXFxuICAgICAgY29udGVudDogJyc7XFxyXFxuICAgICAgd2lkdGg6IDIycHg7XFxyXFxuICAgICAgaGVpZ2h0OiAyMnB4O1xcclxcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlO1xcclxcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBWUFBQUJYQXZtSEFBQUFBWE5TUjBJQXJzNGM2UUFBQkNsSlJFRlVhRVB0bVkxUkZFRVFoYnNqVUNJUUloQWlVQ05RSXhBaUVDSVFJeEFpRUNJQUlwQU1oQWlFQ0lRSTJ2cXVacW5adnA2ZmhiM1NLNW1xcTZKdTkyYjY5YnpYZjZpcytkSTF0MStlQWZ6dEc1ejFCc3hzVTBTK2ljaTJpUEIzdm01RTVFcEVEbFNWdjJkWnN3Rkl4djhVa1pjTnkrNUVaR2N1RUhNQ09CZVI5NTF1dlZEVkQ1M3ZWbCtiRThEdkR1OFB4dHlvNnRhL0JzQnlnMVIxNUJ3enF6NS9MSmduMzRDWndmblBJbkk0QlVCNi8xaFYwY1NqVnhjQU00UGJjQlpqTDBYa2xJUE43SXMzZkxDa2RRUHBQWXcvVk5YajVJaFBJdkpXUkloU2w2cDYwVUxXQkdCbTMwVmsxMjNFd1J4Q3VJeldra2pOckNaeXdpdGgxMGV3RTFYZHE0R29BakN6L1JUWFc0NFludCtMeUJFZlQ0M2tZZmJqODZKM3c1UTMyRE5jUlFEcHdGK2RrUVhETWV5OHhlbTBMM1RFcUI0ZzNQWldhZDhhZ0JNUmdaUGV1OTZEMS9DMlpiaDNYMHA4ME9wMXh4bG96dE40OGJNUVFOb2M3K2VMRXVBb1BTUGlJRFk0T29vK0U2aXhlTlhNK0QzR0VSejJVM0NJcU1zdExKVWdKUURlKzdlcTZtdWIwTllFa0xBS3dFSGtpQlFEQ1p0ZGRaQ1o4ZDZyN0pEd0Zrb0FSa2xIUlBaVUZWRFZaV2J3R3VOckM0RWZkT3pGclJBQmgzV25xaHYrZDcwQUVCTEdGUk9QbWVIbG5NODFHNjlVZFNkNklVdU0wR2dVVm4xdXFXbWc1RW1NZkJlRXlCN1BlM3R4QmtZK3JHVDhqMEorV1hxL0JnRGtVQ2FxTGdFQW53Y1JvZzB2ZU1JcUZBQXdDeTJ3bncrYkkyR2FHYm9CZ0Y5azVOMG8wclVTR1ViNGVPMEJlTzlqL0dZaGtTSE1ITVRJcXdHQVJYNnA2YStubFBCbDhrWnVYTUQ5ajZwS2ZGOWFadWFGT2RKQ0VMNUQ0ZVliOXdDWVZDYW5yQm1HeWlpL3RJcStTTGovSFFCQ2FNNWJMendmUHFkUTZGcFZIeXJhNElidVZiWGFZN2RFVEMyRVNQTk5XaUlPaTY5Q2NkZ1NNWHNoNHROU1Vpa2xNZ3dtQzBhTmQwOFk1V0FFUzZISGVoTTRndTk3d3loQmdXcGdxWHNyQVNnbHByRHk3Q3doZWhNWk9TYks2Sk1TbWErRmlvMUtsdENtbEJJajdnZlpPR3g4cHBRU1hyaHpGbk9oSi8zMUJEa2pGSFJ2T2QwOXgwbVJCQTlTRmd4VWdIcFFnMHEwdDV5bVBNbEwrRW5sZEZUZkRBME5BbWYrT1RRMFgwc1JvdWY3Tk5rWUdock9ZTnJ4dElhR2c4M01OelZEU2UzTFhMaFA3Ty95ckNzQ3oxemxXVHBqV2t1WkFPQnBYM3lWbkxxSTF5TENPS1U2cU1ybVA3U1NyVUV3NTRYRjRXQklLNUZ4Q01PcjNsVnNmR3FOU21QekJYVW5KVElYMWp5VkJxOXdPNlVPYk9wZ0M1R2pPOTh2RktuVGRRTVpYeEVzV1psRGlDWk1JeEFiTnhRT3FscFZadG9iZWpCYVpOb0JuUkR6TUZwa3h2VFFPRDM2QmxyY3lTWnVJNnAxQUNCNkxVM3dXdWY1NTgxK29IZkQxdmk4OWJ6M25GVUM4Tm03WmxQM25La0ZiTTRiV1B0L01TRndrbHByWUl0d3Q2Y212cFdKMklWY1FCQ3o2Ykx5c1NDdjNTYUFOQ2lUc25hTlJyTlJxTVhWVlQxL0JyQXF6L2J1dS9ZMzhBZDNLQzVQQVJlajBRQUFBQUJKUlU1RXJrSmdnZz09Jyk7XFxyXFxuICAgICAgbWFyZ2luOiAxMHB4O1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIC8vIEN1c3RvbWl6ZXIgSGlkZGVuXFxyXFxuICAgIC5jdXN0b21pemVyLWhpZGUgJiB7XFxyXFxuICAgICAgZGlzcGxheTogbm9uZTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBbZGlyPSdydGwnXSAmIHtcXHJcXG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xcclxcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkb3Blbi1idG4tYm9yZGVyLXJhZGl1cztcXHJcXG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJG9wZW4tYnRuLWJvcmRlci1yYWRpdXM7XFxyXFxuXFxyXFxuICAgICAgJjo6YmVmb3JlIHtcXHJcXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMnB4O1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgJi50ZW1wbGF0ZS1jdXN0b21pemVyLW9wZW4gLnRlbXBsYXRlLWN1c3RvbWl6ZXItb3Blbi1idG4ge1xcclxcbiAgICBvcGFjaXR5OiAwO1xcclxcbiAgICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IDBzO1xcclxcbiAgICAtby10cmFuc2l0aW9uLWRlbGF5OiAwcztcXHJcXG4gICAgdHJhbnNpdGlvbi1kZWxheTogMHM7XFxyXFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XFxyXFxuICAgIC1tcy10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcXHJcXG4gICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAudGVtcGxhdGUtY3VzdG9taXplci1jbG9zZS1idG4ge1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIHRvcDogMzJweDtcXHJcXG4gICAgcmlnaHQ6IDA7XFxyXFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgICBmb250LXNpemU6IDIwcHg7XFxyXFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcclxcbiAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcclxcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvLyBDdXN0b21pemVyIGlubmVyXFxyXFxuICAudGVtcGxhdGUtY3VzdG9taXplci1pbm5lciB7XFxyXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gICAgb3ZlcmZsb3c6IGF1dG87XFxyXFxuICAgIC13ZWJraXQtYm94LWZsZXg6IDA7XFxyXFxuICAgIC1tcy1mbGV4OiAwIDEgYXV0bztcXHJcXG4gICAgZmxleDogMCAxIGF1dG87XFxyXFxuICAgIG9wYWNpdHk6IDE7XFxyXFxuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzO1xcclxcbiAgICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7XFxyXFxuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycztcXHJcXG5cXHJcXG4gICAgPiBkaXY6Zmlyc3QtY2hpbGQge1xcclxcbiAgICAgID4gaHI6Zmlyc3Qtb2YtdHlwZSB7XFxyXFxuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxyXFxuICAgICAgfVxcclxcbiAgICAgID4gaDU6Zmlyc3Qtb2YtdHlwZSB7XFxyXFxuICAgICAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLy8gVGhlbWVcXHJcXG4gIC50ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1lcy1pbm5lciB7XFxyXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gICAgb3BhY2l0eTogMTtcXHJcXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7XFxyXFxuICAgIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC4ycztcXHJcXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzO1xcclxcbiAgfVxcclxcblxcclxcbiAgLnRlbXBsYXRlLWN1c3RvbWl6ZXItdGhlbWUtaXRlbSB7XFxyXFxuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcclxcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXHJcXG4gICAgZGlzcGxheTogZmxleDtcXHJcXG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcXHJcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXHJcXG4gICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXHJcXG4gICAgLXdlYmtpdC1ib3gtZmxleDogMTtcXHJcXG4gICAgLW1zLWZsZXg6IDEgMSAxMDAlO1xcclxcbiAgICBmbGV4OiAxIDEgMTAwJTtcXHJcXG4gICAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcXHJcXG4gICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcXHJcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcclxcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcclxcbiAgICBwYWRkaW5nOiAwIDI0cHg7XFxyXFxuICAgIHdpZHRoOiAxMDAlO1xcclxcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuXFxyXFxuICAgIGlucHV0IHtcXHJcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgICAgei1pbmRleDogLTE7IC8vIFB1dCB0aGUgaW5wdXQgYmVoaW5kIHRoZSBsYWJlbCBzbyBpdCBkb2Vzbid0IG92ZXJsYXkgdGV4dFxcclxcbiAgICAgIG9wYWNpdHk6IDA7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgaW5wdXQgfiBzcGFuIHtcXHJcXG4gICAgICBvcGFjaXR5OiAwLjI1O1xcclxcbiAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMnM7XFxyXFxuICAgICAgLW8tdHJhbnNpdGlvbjogYWxsIDAuMnM7XFxyXFxuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgLnRlbXBsYXRlLWN1c3RvbWl6ZXItdGhlbWUtY2hlY2ttYXJrIHtcXHJcXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICAgICAgd2lkdGg6IDZweDtcXHJcXG4gICAgICBoZWlnaHQ6IDEycHg7XFxyXFxuICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQ7XFxyXFxuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkO1xcclxcbiAgICAgIG9wYWNpdHk6IDA7XFxyXFxuICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4ycztcXHJcXG4gICAgICAtby10cmFuc2l0aW9uOiBhbGwgMC4ycztcXHJcXG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcXHJcXG4gICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXHJcXG4gICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xcclxcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXHJcXG5cXHJcXG4gICAgICBbZGlyPSdydGwnXSAmIHtcXHJcXG4gICAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcXHJcXG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQ7XFxyXFxuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxyXFxuICAgICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTtcXHJcXG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGlucHV0OmNoZWNrZWQ6bm90KFtkaXNhYmxlZF0pIH4gc3BhbixcXHJcXG4gICAgJjpob3ZlciBpbnB1dDpub3QoW2Rpc2FibGVkXSkgfiBzcGFuIHtcXHJcXG4gICAgICBvcGFjaXR5OiAxO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGlucHV0OmNoZWNrZWQ6bm90KFtkaXNhYmxlZF0pIH4gc3BhbiAudGVtcGxhdGUtY3VzdG9taXplci10aGVtZS1jaGVja21hcmsge1xcclxcbiAgICAgIG9wYWNpdHk6IDE7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC50ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1lLWNvbG9ycyB7XFxyXFxuICAgIHNwYW4ge1xcclxcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgICAgIG1hcmdpbjogMCAxcHg7XFxyXFxuICAgICAgd2lkdGg6IDEwcHg7XFxyXFxuICAgICAgaGVpZ2h0OiAxMHB4O1xcclxcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXHJcXG4gICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMSkgaW5zZXQ7XFxyXFxuICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMCwgMCwgMCwgMC4xKSBpbnNldDtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgJi50ZW1wbGF0ZS1jdXN0b21pemVyLWxvYWRpbmcgLnRlbXBsYXRlLWN1c3RvbWl6ZXItaW5uZXIsXFxyXFxuICAmLnRlbXBsYXRlLWN1c3RvbWl6ZXItbG9hZGluZy10aGVtZSAudGVtcGxhdGUtY3VzdG9taXplci10aGVtZXMtaW5uZXIge1xcclxcbiAgICBvcGFjaXR5OiAwLjI7XFxyXFxuXFxyXFxuICAgICY6OmFmdGVyIHtcXHJcXG4gICAgICBjb250ZW50OiAnJztcXHJcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgICAgdG9wOiAwO1xcclxcbiAgICAgIHJpZ2h0OiAwO1xcclxcbiAgICAgIGJvdHRvbTogMDtcXHJcXG4gICAgICBsZWZ0OiAwO1xcclxcbiAgICAgIHotaW5kZXg6IDk5OTtcXHJcXG4gICAgICBkaXNwbGF5OiBibG9jaztcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4ubGF5b3V0LW1lbnUtMTAwdmggI3RlbXBsYXRlLWN1c3RvbWl6ZXIge1xcclxcbiAgaGVpZ2h0OiAxMDB2aDtcXHJcXG59XFxyXFxuXFxyXFxuLy8gUlRMXFxyXFxuLy9cXHJcXG5cXHJcXG5bZGlyPSdydGwnXSB7XFxyXFxuICAjdGVtcGxhdGUtY3VzdG9taXplciB7XFxyXFxuICAgIHJpZ2h0OiBhdXRvO1xcclxcbiAgICBsZWZ0OiAwO1xcclxcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtKCRjdXN0b21pemVyLXdpZHRoICsgJGN1c3RvbWl6ZXItc3BhY2VyKSk7XFxyXFxuICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSgkY3VzdG9taXplci13aWR0aCArICRjdXN0b21pemVyLXNwYWNlcikpO1xcclxcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSgkY3VzdG9taXplci13aWR0aCArICRjdXN0b21pemVyLXNwYWNlcikpO1xcclxcbiAgfVxcclxcblxcclxcbiAgI3RlbXBsYXRlLWN1c3RvbWl6ZXIgLnRlbXBsYXRlLWN1c3RvbWl6ZXItb3Blbi1idG4ge1xcclxcbiAgICByaWdodDogMDtcXHJcXG4gICAgbGVmdDogYXV0bztcXHJcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoJG9wZW4tYnRuLXNpemUgKyAkY3VzdG9taXplci1zcGFjZXIgKyAkb3Blbi1idG4tc3BhY2VyKTtcXHJcXG4gICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWCgkb3Blbi1idG4tc2l6ZSArICRjdXN0b21pemVyLXNwYWNlciArICRvcGVuLWJ0bi1zcGFjZXIpO1xcclxcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoJG9wZW4tYnRuLXNpemUgKyAkY3VzdG9taXplci1zcGFjZXIgKyAkb3Blbi1idG4tc3BhY2VyKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICN0ZW1wbGF0ZS1jdXN0b21pemVyIC50ZW1wbGF0ZS1jdXN0b21pemVyLWNsb3NlLWJ0biB7XFxyXFxuICAgIHJpZ2h0OiBhdXRvO1xcclxcbiAgICBsZWZ0OiAwO1xcclxcbiAgfVxcclxcbn1cXHJcXG5cXHJcXG4jdGVtcGxhdGUtY3VzdG9taXplciAudGVtcGxhdGUtY3VzdG9taXplci1sYXlvdXRzLW9wdGlvbnNbZGlzYWJsZWRdIHtcXHJcXG4gIG9wYWNpdHk6IDAuNTtcXHJcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG4vLyAhIEZJWDogbW9kZSBzd2l0Y2ggcG9zaXRpb24gaW4gUlRMXFxyXFxuW2Rpcj0ncnRsJ10ge1xcclxcbiAgLnRlbXBsYXRlLWN1c3RvbWl6ZXItdC1zdHlsZV9zd2l0Y2hfbGlnaHQge1xcclxcbiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XFxyXFxuICB9XFxyXFxufVxcclxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./js/_template-customizer/_template-customizer.scss\n"); - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/api.js": -/*!*****************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/api.js ***! - \*****************************************************/ -/***/ (function(module) { - -eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0EscUZBQXFGO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHFCQUFxQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixzRkFBc0YscUJBQXFCO0FBQzNHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixpREFBaUQscUJBQXFCO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixzREFBc0QscUJBQXFCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TbmVhdC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanM/MjRmYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/api.js\n"); - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/getUrl.js": -/*!********************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/getUrl.js ***! - \********************************************************/ -/***/ (function(module) { - -eval("\n\nmodule.exports = function (url, options) {\n if (!options) {\n options = {};\n }\n if (!url) {\n return url;\n }\n url = String(url.__esModule ? url.default : url);\n\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n if (options.hash) {\n url += options.hash;\n }\n\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n }\n return url;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TbmVhdC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanM/MWRlNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBpZiAoIXVybCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgdXJsID0gU3RyaW5nKHVybC5fX2VzTW9kdWxlID8gdXJsLmRlZmF1bHQgOiB1cmwpO1xuXG4gIC8vIElmIHVybCBpcyBhbHJlYWR5IHdyYXBwZWQgaW4gcXVvdGVzLCByZW1vdmUgdGhlbVxuICBpZiAoL15bJ1wiXS4qWydcIl0kLy50ZXN0KHVybCkpIHtcbiAgICB1cmwgPSB1cmwuc2xpY2UoMSwgLTEpO1xuICB9XG4gIGlmIChvcHRpb25zLmhhc2gpIHtcbiAgICB1cmwgKz0gb3B0aW9ucy5oYXNoO1xuICB9XG5cbiAgLy8gU2hvdWxkIHVybCBiZSB3cmFwcGVkP1xuICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtMy8jdXJsc1xuICBpZiAoL1tcIicoKSBcXHRcXG5dfCglMjApLy50ZXN0KHVybCkgfHwgb3B0aW9ucy5uZWVkUXVvdGVzKSB7XG4gICAgcmV0dXJuIFwiXFxcIlwiLmNvbmNhdCh1cmwucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpLCBcIlxcXCJcIik7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/getUrl.js\n"); - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js": -/*!************************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***! - \************************************************************/ -/***/ (function(module) { - -eval("\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELGNBQWM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL1NuZWF0Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanM/YWYxMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/sourceMaps.js\n"); - -/***/ }), - -/***/ "./js/_template-customizer/_template-customizer.html": -/*!***********************************************************!*\ - !*** ./js/_template-customizer/_template-customizer.html ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -eval("__webpack_require__.r(__webpack_exports__);\n// Module\nvar code = \"



\";\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (code);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9qcy9fdGVtcGxhdGUtY3VzdG9taXplci9fdGVtcGxhdGUtY3VzdG9taXplci5odG1sLmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQSwrREFBZSxJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vU25lYXQvLi9qcy9fdGVtcGxhdGUtY3VzdG9taXplci9fdGVtcGxhdGUtY3VzdG9taXplci5odG1sP2VmZDUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gTW9kdWxlXG52YXIgY29kZSA9IFwiPGRpdiBpZD1cXFwidGVtcGxhdGUtY3VzdG9taXplclxcXCIgY2xhc3M9XFxcImludmVydC1iZy13aGl0ZVxcXCI+IDxhIGhyZWY9XFxcImphdmFzY3JpcHQ6dm9pZCgwKVxcXCIgY2xhc3M9XFxcInRlbXBsYXRlLWN1c3RvbWl6ZXItb3Blbi1idG5cXFwiIHRhYmluZGV4PVxcXCItMVxcXCI+PC9hPiA8ZGl2IGNsYXNzPVxcXCJwLTQgbS0wIGxoLTEgYm9yZGVyLWJvdHRvbSB0ZW1wbGF0ZS1jdXN0b21pemVyLWhlYWRlclxcXCI+IDxoNCBjbGFzcz1cXFwidGVtcGxhdGUtY3VzdG9taXplci10LXBhbmVsX2hlYWRlciBtYi0yXFxcIj48L2g0PiA8cCBjbGFzcz1cXFwidGVtcGxhdGUtY3VzdG9taXplci10LXBhbmVsX3N1Yl9oZWFkZXIgbWItMFxcXCI+PC9wPiA8YSBocmVmPVxcXCJqYXZhc2NyaXB0OnZvaWQoMClcXFwiIGNsYXNzPVxcXCJidG4tY2xvc2UgdGVtcGxhdGUtY3VzdG9taXplci1jbG9zZS1idG4gZnctbGlnaHQgcHgtNCBweS0yIHRleHQtYm9keVxcXCIgdGFiaW5kZXg9XFxcIi0xXFxcIj48L2E+IDwvZGl2PiA8ZGl2IGNsYXNzPVxcXCJ0ZW1wbGF0ZS1jdXN0b21pemVyLWlubmVyIHB0LTRcXFwiPiA8ZGl2IGNsYXNzPVxcXCJ0ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1pbmdcXFwiPiA8aDUgY2xhc3M9XFxcIm0tMCBweC00IHB5LTQgbGgtMSB0ZXh0LWxpZ2h0IGQtYmxvY2tcXFwiPiA8c3BhbiBjbGFzcz1cXFwidGVtcGxhdGUtY3VzdG9taXplci10LXRoZW1pbmdfaGVhZGVyXFxcIj48L3NwYW4+IDwvaDU+IDxkaXYgY2xhc3M9XFxcIm0tMCBweC00IHBiLTMgdGVtcGxhdGUtY3VzdG9taXplci10aGVtZXMgdy0xMDBcXFwiPiA8bGFiZWwgZm9yPVxcXCJjdXN0b21pemVyVGhlbWVcXFwiIGNsYXNzPVxcXCJmb3JtLWxhYmVsIHRlbXBsYXRlLWN1c3RvbWl6ZXItdC10aGVtZV9sYWJlbFxcXCI+PC9sYWJlbD4gPGRpdiBjbGFzcz1cXFwicm93IHJvdy1jb2xzLWxnLWF1dG8gZy0zIGFsaWduLWl0ZW1zLWNlbnRlciB0ZW1wbGF0ZS1jdXN0b21pemVyLXRoZW1lcy1vcHRpb25zXFxcIj48L2Rpdj4gPC9kaXY+IDxkaXYgY2xhc3M9XFxcIm0tMCBweC00IHBiLTMgcHQtMSB0ZW1wbGF0ZS1jdXN0b21pemVyLXN0eWxlIHctMTAwXFxcIj4gPGxhYmVsIGZvcj1cXFwiY3VzdG9taXplclN0eWxlXFxcIiBjbGFzcz1cXFwiZm9ybS1sYWJlbCBkLWJsb2NrIHRlbXBsYXRlLWN1c3RvbWl6ZXItdC1zdHlsZV9sYWJlbFxcXCI+PC9sYWJlbD4gPGxhYmVsIGNsYXNzPVxcXCJzd2l0Y2ggc3dpdGNoLXNtXFxcIj4gPHNwYW4gY2xhc3M9XFxcInN3aXRjaC1sYWJlbCB0ZW1wbGF0ZS1jdXN0b21pemVyLXQtc3R5bGVfc3dpdGNoX2xpZ2h0XFxcIj48L3NwYW4+IDxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgY2xhc3M9XFxcInN3aXRjaC1pbnB1dFxcXCIvPiA8c3BhbiBjbGFzcz1cXFwic3dpdGNoLXRvZ2dsZS1zbGlkZXJcXFwiPiA8c3BhbiBjbGFzcz1cXFwic3dpdGNoLW9uXFxcIj48L3NwYW4+IDxzcGFuIGNsYXNzPVxcXCJzd2l0Y2gtb2ZmXFxcIj48L3NwYW4+IDwvc3Bhbj4gPHNwYW4gY2xhc3M9XFxcInN3aXRjaC1sYWJlbCB0ZW1wbGF0ZS1jdXN0b21pemVyLXQtc3R5bGVfc3dpdGNoX2RhcmtcXFwiPjwvc3Bhbj4gPC9sYWJlbD4gPC9kaXY+IDwvZGl2PiA8ZGl2IGNsYXNzPVxcXCJ0ZW1wbGF0ZS1jdXN0b21pemVyLWxheW91dFxcXCI+IDxociBjbGFzcz1cXFwibS0wXFxcIj4gPGg1IGNsYXNzPVxcXCJtLTAgcHgtNCBweS00IGxoLTEgdGV4dC1saWdodCBkLWJsb2NrXFxcIj4gPHNwYW4gY2xhc3M9XFxcInRlbXBsYXRlLWN1c3RvbWl6ZXItdC1sYXlvdXRfaGVhZGVyXFxcIj48L3NwYW4+IDwvaDU+IDxkaXYgY2xhc3M9XFxcIm0tMCBweC00IHBiLTMgZC1ibG9jayB0ZW1wbGF0ZS1jdXN0b21pemVyLWxheW91dFR5cGVcXFwiPiA8bGFiZWwgZm9yPVxcXCJjdXN0b21pemVyU3R5bGVcXFwiIGNsYXNzPVxcXCJmb3JtLWxhYmVsIGQtYmxvY2sgdGVtcGxhdGUtY3VzdG9taXplci10LWxheW91dF9sYWJlbFxcXCI+PC9sYWJlbD4gPGRpdiBjbGFzcz1cXFwicm93IHJvdy1jb2xzLWxnLWF1dG8gZy0zIGFsaWduLWl0ZW1zLWNlbnRlciB0ZW1wbGF0ZS1jdXN0b21pemVyLWxheW91dHMtb3B0aW9uc1xcXCI+IDxkaXYgY2xhc3M9XFxcImNvbC0xMlxcXCI+IDxkaXYgY2xhc3M9XFxcImZvcm0tY2hlY2tcXFwiPiA8aW5wdXQgY2xhc3M9XFxcImZvcm0tY2hlY2staW5wdXRcXFwiIHR5cGU9XFxcInJhZGlvXFxcIiBuYW1lPVxcXCJsYXlvdXRSYWRpb3NcXFwiIGlkPVxcXCJsYXlvdXRSYWRpb3Mtc3RhdGljXFxcIiB2YWx1ZT1cXFwic3RhdGljXFxcIj4gPGxhYmVsIGNsYXNzPVxcXCJmb3JtLWNoZWNrLWxhYmVsIHRlbXBsYXRlLWN1c3RvbWl6ZXItdC1sYXlvdXRfc3RhdGljXFxcIiBmb3I9XFxcImxheW91dFJhZGlvcy1zdGF0aWNcXFwiPjwvbGFiZWw+IDwvZGl2PiA8L2Rpdj4gPGRpdiBjbGFzcz1cXFwiY29sLTEyXFxcIj4gPGRpdiBjbGFzcz1cXFwiZm9ybS1jaGVja1xcXCI+IDxpbnB1dCBjbGFzcz1cXFwiZm9ybS1jaGVjay1pbnB1dFxcXCIgdHlwZT1cXFwicmFkaW9cXFwiIG5hbWU9XFxcImxheW91dFJhZGlvc1xcXCIgaWQ9XFxcImxheW91dFJhZGlvcy1maXhlZFxcXCIgdmFsdWU9XFxcImZpeGVkXFxcIj4gPGxhYmVsIGNsYXNzPVxcXCJmb3JtLWNoZWNrLWxhYmVsIHRlbXBsYXRlLWN1c3RvbWl6ZXItdC1sYXlvdXRfZml4ZWRcXFwiIGZvcj1cXFwibGF5b3V0UmFkaW9zLWZpeGVkXFxcIj48L2xhYmVsPiA8L2Rpdj4gPC9kaXY+IDwvZGl2PiA8L2Rpdj4gPGxhYmVsIGNsYXNzPVxcXCJtLTAgcHgtNCBwYi0zIGQtZmxleCBtZWRpYSBhbGlnbi1pdGVtcy1taWRkbGUganVzdGlmeS1jb250ZW50LWJldHdlZW4gdGVtcGxhdGUtY3VzdG9taXplci1sYXlvdXROYXZiYXJGaXhlZFxcXCI+IDxzcGFuIGNsYXNzPVxcXCJ0ZW1wbGF0ZS1jdXN0b21pemVyLXQtbGF5b3V0X25hdmJhcl9sYWJlbFxcXCI+PC9zcGFuPiA8bGFiZWwgY2xhc3M9XFxcInN3aXRjaCBzd2l0Y2gtc20gcGUtNFxcXCI+IDxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgY2xhc3M9XFxcInN3aXRjaC1pbnB1dFxcXCIvPiA8c3BhbiBjbGFzcz1cXFwic3dpdGNoLXRvZ2dsZS1zbGlkZXJcXFwiPiA8c3BhbiBjbGFzcz1cXFwic3dpdGNoLW9uXFxcIj48L3NwYW4+IDxzcGFuIGNsYXNzPVxcXCJzd2l0Y2gtb2ZmXFxcIj48L3NwYW4+IDwvc3Bhbj4gPC9sYWJlbD4gPC9sYWJlbD4gPGxhYmVsIGNsYXNzPVxcXCJtLTAgcHgtNCBwYi0zIGQtZmxleCBtZWRpYSBhbGlnbi1pdGVtcy1taWRkbGUganVzdGlmeS1jb250ZW50LWJldHdlZW4gdGVtcGxhdGUtY3VzdG9taXplci1sYXlvdXRGb290ZXJGaXhlZFxcXCI+IDxzcGFuIGNsYXNzPVxcXCJ0ZW1wbGF0ZS1jdXN0b21pemVyLXQtbGF5b3V0X2Zvb3Rlcl9sYWJlbFxcXCI+PC9zcGFuPiA8bGFiZWwgY2xhc3M9XFxcInN3aXRjaCBzd2l0Y2gtc20gcGUtNFxcXCI+IDxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgY2xhc3M9XFxcInN3aXRjaC1pbnB1dFxcXCIvPiA8c3BhbiBjbGFzcz1cXFwic3dpdGNoLXRvZ2dsZS1zbGlkZXJcXFwiPiA8c3BhbiBjbGFzcz1cXFwic3dpdGNoLW9uXFxcIj48L3NwYW4+IDxzcGFuIGNsYXNzPVxcXCJzd2l0Y2gtb2ZmXFxcIj48L3NwYW4+IDwvc3Bhbj4gPC9sYWJlbD4gPC9sYWJlbD4gPGxhYmVsIGNsYXNzPVxcXCJtLTAgcHgtNCBwYi0zIGQtZmxleCBtZWRpYSBhbGlnbi1pdGVtcy1taWRkbGUganVzdGlmeS1jb250ZW50LWJldHdlZW4gdGVtcGxhdGUtY3VzdG9taXplci1zaG93RHJvcGRvd25PbkhvdmVyXFxcIj4gPHNwYW4gY2xhc3M9XFxcInRlbXBsYXRlLWN1c3RvbWl6ZXItdC1sYXlvdXRfZGRfb3Blbl9sYWJlbFxcXCI+PC9zcGFuPiA8bGFiZWwgY2xhc3M9XFxcInN3aXRjaCBzd2l0Y2gtc20gcGUtNFxcXCI+IDxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgY2xhc3M9XFxcInN3aXRjaC1pbnB1dFxcXCIvPiA8c3BhbiBjbGFzcz1cXFwic3dpdGNoLXRvZ2dsZS1zbGlkZXJcXFwiPiA8c3BhbiBjbGFzcz1cXFwic3dpdGNoLW9uXFxcIj48L3NwYW4+IDxzcGFuIGNsYXNzPVxcXCJzd2l0Y2gtb2ZmXFxcIj48L3NwYW4+IDwvc3Bhbj4gPC9sYWJlbD4gPC9sYWJlbD4gPC9kaXY+IDxkaXYgY2xhc3M9XFxcInRlbXBsYXRlLWN1c3RvbWl6ZXItbWlzY1xcXCI+IDxociBjbGFzcz1cXFwibS0wXFxcIj4gPGg1IGNsYXNzPVxcXCJtLTAgcHgtNCBweS00IGxoLTEgdGV4dC1saWdodCBkLWJsb2NrXFxcIj4gPHNwYW4gY2xhc3M9XFxcInRlbXBsYXRlLWN1c3RvbWl6ZXItdC1taXNjX2hlYWRlclxcXCI+PC9zcGFuPiA8L2g1PiA8bGFiZWwgY2xhc3M9XFxcIm0tMCBweC00IHBiLTMgZC1mbGV4IG1lZGlhIGFsaWduLWl0ZW1zLW1pZGRsZSBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB0ZW1wbGF0ZS1jdXN0b21pemVyLXJ0bFxcXCI+IDxzcGFuIGNsYXNzPVxcXCJ0ZW1wbGF0ZS1jdXN0b21pemVyLXQtcnRsX2xhYmVsXFxcIj48L3NwYW4+IDxsYWJlbCBjbGFzcz1cXFwic3dpdGNoIHN3aXRjaC1zbSBwZS00XFxcIj4gPGlucHV0IHR5cGU9XFxcImNoZWNrYm94XFxcIiBjbGFzcz1cXFwic3dpdGNoLWlucHV0XFxcIi8+IDxzcGFuIGNsYXNzPVxcXCJzd2l0Y2gtdG9nZ2xlLXNsaWRlclxcXCI+IDxzcGFuIGNsYXNzPVxcXCJzd2l0Y2gtb25cXFwiPjwvc3Bhbj4gPHNwYW4gY2xhc3M9XFxcInN3aXRjaC1vZmZcXFwiPjwvc3Bhbj4gPC9zcGFuPiA8L2xhYmVsPiA8L2xhYmVsPiA8L2Rpdj4gPC9kaXY+IDwvZGl2PlwiO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgY29kZTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./js/_template-customizer/_template-customizer.html\n"); - -/***/ }), - -/***/ "./js/_template-customizer/_template-customizer.scss": -/*!***********************************************************!*\ - !*** ./js/_template-customizer/_template-customizer.scss ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ \"./node_modules/style-loader/dist/runtime/styleDomAPI.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertBySelector.js */ \"./node_modules/style-loader/dist/runtime/insertBySelector.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ \"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ \"./node_modules/style-loader/dist/runtime/insertStyleElement.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ \"./node_modules/style-loader/dist/runtime/styleTagTransform.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_template_customizer_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./_template-customizer.scss */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./js/_template-customizer/_template-customizer.scss\");\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\noptions.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\n\n options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, \"head\");\n \noptions.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\noptions.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_template_customizer_scss__WEBPACK_IMPORTED_MODULE_6__[\"default\"], options);\n\n\n\n\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_template_customizer_scss__WEBPACK_IMPORTED_MODULE_6__[\"default\"] && _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_template_customizer_scss__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_template_customizer_scss__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals : undefined);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9qcy9fdGVtcGxhdGUtY3VzdG9taXplci9fdGVtcGxhdGUtY3VzdG9taXplci5zY3NzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUNBLE1BQWtHO0FBQ2xHLE1BQXdGO0FBQ3hGLE1BQStGO0FBQy9GLE1BQWtIO0FBQ2xILE1BQTJHO0FBQzNHLE1BQTJHO0FBQzNHLE1BQWlLO0FBQ2pLO0FBQ0E7O0FBRUE7O0FBRUEsNEJBQTRCLHFHQUFtQjtBQUMvQyx3QkFBd0Isa0hBQWE7O0FBRXJDLHVCQUF1Qix1R0FBYTtBQUNwQztBQUNBLGlCQUFpQiwrRkFBTTtBQUN2Qiw2QkFBNkIsc0dBQWtCOztBQUUvQyxhQUFhLDBHQUFHLENBQUMsMElBQU87Ozs7QUFJMkc7QUFDbkksT0FBTywrREFBZSwwSUFBTyxJQUFJLGlKQUFjLEdBQUcsaUpBQWMsWUFBWSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vU25lYXQvLi9qcy9fdGVtcGxhdGUtY3VzdG9taXplci9fdGVtcGxhdGUtY3VzdG9taXplci5zY3NzPzNmYzkiXSwic291cmNlc0NvbnRlbnQiOlsiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9fdGVtcGxhdGUtY3VzdG9taXplci5zY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vX3RlbXBsYXRlLWN1c3RvbWl6ZXIuc2Nzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./js/_template-customizer/_template-customizer.scss\n"); - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": -/*!****************************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! - \****************************************************************************/ -/***/ (function(module) { - -eval("\n\nvar stylesInDOM = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n\n return updater;\n}\n\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n\n stylesInDOM.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0Isd0JBQXdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLGlCQUFpQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDRCQUE0QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxxQkFBcUIsNkJBQTZCO0FBQ2xEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL1NuZWF0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzPzJkYmEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuXG5mdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHZhciByZXN1bHQgPSAtMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRE9NLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRE9NW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucykge1xuICB2YXIgaWRDb3VudE1hcCA9IHt9O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXhCeUlkZW50aWZpZXIgPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM10sXG4gICAgICBzdXBwb3J0czogaXRlbVs0XSxcbiAgICAgIGxheWVyOiBpdGVtWzVdXG4gICAgfTtcblxuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG5cbiAgdmFyIHVwZGF0ZXIgPSBmdW5jdGlvbiB1cGRhdGVyKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXAgJiYgbmV3T2JqLnN1cHBvcnRzID09PSBvYmouc3VwcG9ydHMgJiYgbmV3T2JqLmxheWVyID09PSBvYmoubGF5ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhcGkudXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGxpc3QsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG5cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tfaV07XG5cbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG5cbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG5cbiAgICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKF9pbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\n"); - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js": -/*!********************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***! - \********************************************************************/ -/***/ (function(module) { - -eval("\n\nvar memo = {};\n/* istanbul ignore next */\n\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n}\n/* istanbul ignore next */\n\n\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n}\n\nmodule.exports = insertBySelector;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL1NuZWF0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcz9iMjE0Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cblxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/insertBySelector.js\n"); - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js": -/*!**********************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***! - \**********************************************************************/ -/***/ (function(module) { - -eval("\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\n\nmodule.exports = insertStyleElement;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TbmVhdC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcz9kZTZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBvcHRpb25zLnNldEF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgb3B0aW9ucy5pbnNlcnQoZWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0U3R5bGVFbGVtZW50OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/insertStyleElement.js\n"); - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js": -/*!**********************************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***! - \**********************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -eval("\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = true ? __webpack_require__.nc : 0;\n\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\n\nmodule.exports = setAttributesWithoutAttributes;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBLGNBQWMsS0FBd0MsR0FBRyxzQkFBaUIsR0FBRyxDQUFJOztBQUVqRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL1NuZWF0Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzP2RkY2UiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG5cbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\n"); - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js": -/*!***************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***! - \***************************************************************/ -/***/ (function(module) { - -eval("\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n\n var needLayer = typeof obj.layer !== \"undefined\";\n\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n\n css += obj.css;\n\n if (needLayer) {\n css += \"}\";\n }\n\n if (obj.media) {\n css += \"}\";\n }\n\n if (obj.supports) {\n css += \"}\";\n }\n\n var sourceMap = obj.sourceMap;\n\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n options.styleTagTransform(css, styleElement, options.options);\n}\n\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n\n styleElement.parentNode.removeChild(styleElement);\n}\n/* istanbul ignore next */\n\n\nfunction domAPI(options) {\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\n\nmodule.exports = domAPI;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrREFBa0Q7QUFDbEQ7O0FBRUE7QUFDQSwwQ0FBMEM7QUFDMUM7O0FBRUE7O0FBRUE7QUFDQSxpRkFBaUY7QUFDakY7O0FBRUE7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7O0FBRUE7QUFDQSx5REFBeUQ7QUFDekQsSUFBSTs7QUFFSjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vU25lYXQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qcz9lNDc5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG5cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuXG4gIGNzcyArPSBvYmouY3NzO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/styleDomAPI.js\n"); - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js": -/*!*********************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***! - \*********************************************************************/ -/***/ (function(module) { - -eval("\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n\n styleElement.appendChild(document.createTextNode(css));\n }\n}\n\nmodule.exports = styleTagTransform;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vU25lYXQvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcz8xZGRlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50KSB7XG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlVGFnVHJhbnNmb3JtOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/styleTagTransform.js\n"); - -/***/ }), - -/***/ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAABClJREFUaEPtmY1RFEEQhbsjUCIQIhAiUCNQIxAiECIQIxAiECIAIpAMhAiECIQI2vquZqnZvp6fhb3SK5mqq6Ju92b69bzXf6is+dI1t1+eAfztG5z1BsxsU0S+ici2iPB3vm5E5EpEDlSVv2dZswFIxv8UkZcNy+5EZGcuEHMCOBeR951uvVDVD53vVl+bE8DvDu8Pxtyo6ta/BsByg1R15Bwzqz5/LJgn34CZwfnPInI4BUB6/1hV0cSjVxcAM4PbcBZjL0XklIPN7Is3fLCkdQPpPYw/VNXj5IhPIvJWRIhSl6p60ULWBGBm30Vk123EwRxCuIzWkkjNrCZywith10ewE1Xdq4GoAjCz/RTXW44Ynt+LyBEfT43kYfbj86J3w5Q32DNcRQDpwF+dkQXDMey8xem0L3TEqB4g3PZWad8agBMRgZPeu96D1/C2Zbh3X0p80Op1xxloztN48bMQQNoc7+eLEuAoPSPiIDY4Ooo+E6ixeNXM+D3GERz2U3CIqMstLJUgJQDe+7eq6mub0NYEkLAKwEHkiBQDCZtddZCZ8d6r7JDwFkoARklHRPZUFVDVZWbwGuNrC4EfdOzFrRABh3Wnqhv+d70AEBLGFROPmeHlnM81G69UdSd6IUuM0GgUVn1uqWmg5EmMfBeEyB7Pe3txBkY+rGT8j0J+WXq/BgDkUCaqLgEAnwcRog0veMIqFAAwCy2wnw+bI2GaGboBgF9k5N0o0rUSGUb4eO0BeO9j/GYhkSHMHMTIqwGARX6p6a+nlPBl8kZuXMD9j6pKfF9aZuaFOdJCEL5D4eYb9wCYVCanrBmGyii/tIq+SLj/HQBCaM5bLzwfPqdQ6FpVHyra4IbuVbXaY7dETC2ESPNNWiIOi69CcdgSMXsh4tNSUiklMgwmC0aNd08Y5WAES6HHehM4gu97wyhBgWpgqXsrASglprDy7CwhehMZOSbK6JMSma+Fio1KltCmlBIj7gfZOGx8ppQSXrhzFnOhJ/31BDkjFHRvOd09x0mRBA9SFgxUgHpQg0q0t5ymPMlL+EnldFTfDA0NAmf+OTQ0X0sRouf7NNkYGhrOYNrxtIaGg83MNzVDSe3LXLhP7O/yrCsCz1zlWTpjWkuZAOBpX3yVnLqI1yLCOKU6qMrmP7SSrUEw54XF4WBIK5FxCMOr3lVsfGqNSmPzBXUnJTIX1jyVBq9wO6UObOpgC5GjO98vFKnTdQMZXxEsWZlDiCZMIxAbNxQOqlpVZtobejBaZNoBnRDzMFpkxvTQOD36BlrcySZuI6p1ACB6LU3wWuf5581+oHfD1vi89bz3nFUC8Nm7ZlP3nKkFbM4bWPt/MSFwklprYItwt6cmvpWJ2IVcQBCz6bLysSCv3SaANCiTsnaNRrNRqMXVVT1/BrAqz/buu/Y38Ad3KC5PARej0QAAAABJRU5ErkJggg==": -/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAABClJREFUaEPtmY1RFEEQhbsjUCIQIhAiUCNQIxAiECIQIxAiECIAIpAMhAiECIQI2vquZqnZvp6fhb3SK5mqq6Ju92b69bzXf6is+dI1t1+eAfztG5z1BsxsU0S+ici2iPB3vm5E5EpEDlSVv2dZswFIxv8UkZcNy+5EZGcuEHMCOBeR951uvVDVD53vVl+bE8DvDu8Pxtyo6ta/BsByg1R15Bwzqz5/LJgn34CZwfnPInI4BUB6/1hV0cSjVxcAM4PbcBZjL0XklIPN7Is3fLCkdQPpPYw/VNXj5IhPIvJWRIhSl6p60ULWBGBm30Vk123EwRxCuIzWkkjNrCZywith10ewE1Xdq4GoAjCz/RTXW44Ynt+LyBEfT43kYfbj86J3w5Q32DNcRQDpwF+dkQXDMey8xem0L3TEqB4g3PZWad8agBMRgZPeu96D1/C2Zbh3X0p80Op1xxloztN48bMQQNoc7+eLEuAoPSPiIDY4Ooo+E6ixeNXM+D3GERz2U3CIqMstLJUgJQDe+7eq6mub0NYEkLAKwEHkiBQDCZtddZCZ8d6r7JDwFkoARklHRPZUFVDVZWbwGuNrC4EfdOzFrRABh3Wnqhv+d70AEBLGFROPmeHlnM81G69UdSd6IUuM0GgUVn1uqWmg5EmMfBeEyB7Pe3txBkY+rGT8j0J+WXq/BgDkUCaqLgEAnwcRog0veMIqFAAwCy2wnw+bI2GaGboBgF9k5N0o0rUSGUb4eO0BeO9j/GYhkSHMHMTIqwGARX6p6a+nlPBl8kZuXMD9j6pKfF9aZuaFOdJCEL5D4eYb9wCYVCanrBmGyii/tIq+SLj/HQBCaM5bLzwfPqdQ6FpVHyra4IbuVbXaY7dETC2ESPNNWiIOi69CcdgSMXsh4tNSUiklMgwmC0aNd08Y5WAES6HHehM4gu97wyhBgWpgqXsrASglprDy7CwhehMZOSbK6JMSma+Fio1KltCmlBIj7gfZOGx8ppQSXrhzFnOhJ/31BDkjFHRvOd09x0mRBA9SFgxUgHpQg0q0t5ymPMlL+EnldFTfDA0NAmf+OTQ0X0sRouf7NNkYGhrOYNrxtIaGg83MNzVDSe3LXLhP7O/yrCsCz1zlWTpjWkuZAOBpX3yVnLqI1yLCOKU6qMrmP7SSrUEw54XF4WBIK5FxCMOr3lVsfGqNSmPzBXUnJTIX1jyVBq9wO6UObOpgC5GjO98vFKnTdQMZXxEsWZlDiCZMIxAbNxQOqlpVZtobejBaZNoBnRDzMFpkxvTQOD36BlrcySZuI6p1ACB6LU3wWuf5581+oHfD1vi89bz3nFUC8Nm7ZlP3nKkFbM4bWPt/MSFwklprYItwt6cmvpWJ2IVcQBCz6bLysSCv3SaANCiTsnaNRrNRqMXVVT1/BrAqz/buu/Y38Ad3KC5PARej0QAAAABJRU5ErkJggg== ***! - \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ (function(module) { - -module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAABClJREFUaEPtmY1RFEEQhbsjUCIQIhAiUCNQIxAiECIQIxAiECIAIpAMhAiECIQI2vquZqnZvp6fhb3SK5mqq6Ju92b69bzXf6is+dI1t1+eAfztG5z1BsxsU0S+ici2iPB3vm5E5EpEDlSVv2dZswFIxv8UkZcNy+5EZGcuEHMCOBeR951uvVDVD53vVl+bE8DvDu8Pxtyo6ta/BsByg1R15Bwzqz5/LJgn34CZwfnPInI4BUB6/1hV0cSjVxcAM4PbcBZjL0XklIPN7Is3fLCkdQPpPYw/VNXj5IhPIvJWRIhSl6p60ULWBGBm30Vk123EwRxCuIzWkkjNrCZywith10ewE1Xdq4GoAjCz/RTXW44Ynt+LyBEfT43kYfbj86J3w5Q32DNcRQDpwF+dkQXDMey8xem0L3TEqB4g3PZWad8agBMRgZPeu96D1/C2Zbh3X0p80Op1xxloztN48bMQQNoc7+eLEuAoPSPiIDY4Ooo+E6ixeNXM+D3GERz2U3CIqMstLJUgJQDe+7eq6mub0NYEkLAKwEHkiBQDCZtddZCZ8d6r7JDwFkoARklHRPZUFVDVZWbwGuNrC4EfdOzFrRABh3Wnqhv+d70AEBLGFROPmeHlnM81G69UdSd6IUuM0GgUVn1uqWmg5EmMfBeEyB7Pe3txBkY+rGT8j0J+WXq/BgDkUCaqLgEAnwcRog0veMIqFAAwCy2wnw+bI2GaGboBgF9k5N0o0rUSGUb4eO0BeO9j/GYhkSHMHMTIqwGARX6p6a+nlPBl8kZuXMD9j6pKfF9aZuaFOdJCEL5D4eYb9wCYVCanrBmGyii/tIq+SLj/HQBCaM5bLzwfPqdQ6FpVHyra4IbuVbXaY7dETC2ESPNNWiIOi69CcdgSMXsh4tNSUiklMgwmC0aNd08Y5WAES6HHehM4gu97wyhBgWpgqXsrASglprDy7CwhehMZOSbK6JMSma+Fio1KltCmlBIj7gfZOGx8ppQSXrhzFnOhJ/31BDkjFHRvOd09x0mRBA9SFgxUgHpQg0q0t5ymPMlL+EnldFTfDA0NAmf+OTQ0X0sRouf7NNkYGhrOYNrxtIaGg83MNzVDSe3LXLhP7O/yrCsCz1zlWTpjWkuZAOBpX3yVnLqI1yLCOKU6qMrmP7SSrUEw54XF4WBIK5FxCMOr3lVsfGqNSmPzBXUnJTIX1jyVBq9wO6UObOpgC5GjO98vFKnTdQMZXxEsWZlDiCZMIxAbNxQOqlpVZtobejBaZNoBnRDzMFpkxvTQOD36BlrcySZuI6p1ACB6LU3wWuf5581+oHfD1vi89bz3nFUC8Nm7ZlP3nKkFbM4bWPt/MSFwklprYItwt6cmvpWJ2IVcQBCz6bLysSCv3SaANCiTsnaNRrNRqMXVVT1/BrAqz/buu/Y38Ad3KC5PARej0QAAAABJRU5ErkJggg=="; - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ id: moduleId, -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = __webpack_modules__; -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/compat get default export */ -/******/ !function() { -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function() { return module['default']; } : -/******/ function() { return module; }; -/******/ __webpack_require__.d(getter, { a: getter }); -/******/ return getter; -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/define property getters */ -/******/ !function() { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = function(exports, definition) { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ !function() { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/jsonp chunk loading */ -/******/ !function() { -/******/ __webpack_require__.b = document.baseURI || self.location.href; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ "js/template-customizer": 0 -/******/ }; -/******/ -/******/ // no chunk on demand loading -/******/ -/******/ // no prefetching -/******/ -/******/ // no preloaded -/******/ -/******/ // no HMR -/******/ -/******/ // no HMR manifest -/******/ -/******/ // no on chunks loaded -/******/ -/******/ // no jsonp function -/******/ }(); -/******/ -/******/ /* webpack/runtime/nonce */ -/******/ !function() { -/******/ __webpack_require__.nc = undefined; -/******/ }(); -/******/ -/************************************************************************/ -/******/ -/******/ // 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_require__("./js/template-customizer.js"); -/******/ -/******/ return __webpack_exports__; -/******/ })() -; -}); \ No newline at end of file