https://www.levis4floors.com/cdn/shop/t/10/assets/superstore.min.js?v=170957236292613167301724240453
1!function (t) { var n = {}; function e(c) { if (n[c]) return n[c].exports; var l = n[c] = { i: c, l: !1, exports: {} }; return t[c].call(l.exports, l, l.exports, e), l.l = !0, l.exports } e.m = t, e.c = n, e.d = function (t, n, c) { e.o(t, n) || Object.defineProperty(t, n, { enumerable: !0, get: c }) }, e.r = function (t) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t, "__esModule", { value: !0 }) }, e.t = function (t, n) { if (1 & n && (t = e(t)), 8 & n) return t; if (4 & n && "object" == typeof t && t && t.__esModule) return t; var c = Object.create(null); if (e.r(c), Object.defineProperty(c, "default", { enumerable: !0, value: t }), 2 & n && "string" != typeof t) for (var l in t) e.d(c, l, function (n) { return t[n] }.bind(null, l)); return c }, e.n = function (t) { var n = t && t.__esModule ? function () { return t.default } : function () { return t }; return e.d(n, "a", n), n }, e.o = function (t, n) { return Object.prototype.hasOwnProperty.call(t, n) }, e.p = "", e(e.s = "./source/scripts/Superstore.js") }({
vendor: 24,535 bytes, line 1
1"./node_modules/@shopify/theme-a11y/theme-a11y.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"forceFocus\", function() { return forceFocus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"focusHash\", function() { return focusHash; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bindInPageLinks\", function() { return bindInPageLinks; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"focusable\", function() { return focusable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"trapFocus\", function() { return trapFocus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeTrapFocus\", function() { return removeTrapFocus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"accessibleLinks\", function() { return accessibleLinks; });\n/**\n * A11y Helpers\n * -----------------------------------------------------------------------------\n * A collection of useful functions that help make your theme more accessible\n */\n\n/**\n * Moves focus to an HTML element\n * eg for In-page links, after scroll, focus shifts to content area so that\n * next `tab` is where user expects. Used in bindInPageLinks()\n * eg move focus to a modal that is opened. Used in trapFocus()\n *\n * @param {Element} container - Container DOM element to trap focus inside of\n * @param {Object} options - Settings unique to your theme\n * @param {string} options.className - Class name to apply to element on focus.\n */\nfunction forceFocus(element, options) {\n options = options || {};\n\n var savedTabIndex = element.tabIndex;\n\n element.tabIndex = -1;\n element.dataset.tabIndex = savedTabIndex;\n element.focus();\n if (typeof options.className !== 'undefined') {\n element.classList.add(options.className);\n }\n element.addEventListener('blur', callback);\n\n function callback(event) {\n event.target.removeEventListener(event.type, callback);\n\n element.tabIndex = savedTabIndex;\n delete element.dataset.tabIndex;\n if (typeof options.className !== 'undefined') {\n element.classList.remove(options.className);\n }\n }\n}\n\n/**\n * If there's a hash in the url, focus the appropriate element\n * This compensates for older browsers that do not move keyboard focus to anchor links.\n * Recommendation: To be called once the page in loaded.\n *\n * @param {Object} options - Settings unique to your theme\n * @param {string} options.className - Class name to apply to element on focus.\n * @param {string} options.ignore - Selector for elements to not include.\n */\n\nfunction focusHash(options) {\n options = options || {};\n var hash = window.location.hash;\n var element = document.getElementById(hash.slice(1));\n\n // if we are to ignore this element, early return\n if (element && options.ignore && element.matches(options.ignore)) {\n return false;\n }\n\n if (hash && element) {\n forceFocus(element, options);\n }\n}\n\n/**\n * When an in-page (url w/hash) link is clicked, focus the appropriate element\n * This compensates for older browsers that do not move keyboard focus to anchor links.\n * Recommendation: To be called once the page in loaded.\n *\n * @param {Object} options - Settings unique to your theme\n * @param {string} options.className - Class name to apply to element on focus.\n * @param {string} options.ignore - CSS selector for elements to not include.\n */\n\nfunction bindInPageLinks(options) {\n options = options || {};\n var links = Array.prototype.slice.call(\n document.querySelectorAll('a[href^=\"#\"]')\n );\n\n return links.filter(function(link) {\n if (link.hash === '#' || link.hash === '') {\n return false;\n }\n\n if (options.ignore && link.matches(options.ignore)) {\n return false;\n }\n\n var element = document.querySelector(link.hash);\n\n if (!element) {\n return false;\n }\n\n link.addEventListener('click', function() {\n forceFocus(element, options);\n });\n\n return true;\n });\n}\n\nfunction focusable(container) {\n var elements = Array.prototype.slice.call(\n container.querySelectorAll(\n '[tabindex],' +\n '[draggable],' +\n 'a[href],' +\n 'area,' +\n 'button:enabled,' +\n 'input:not([type=hidden]):enabled,' +\n 'object,' +\n 'select:enabled,' +\n 'textarea:enabled'\n )\n );\n\n // Filter out elements that are not visible.\n // Copied from jQuery https://github.com/jquery/jquery/blob/2d4f53416e5f74fa98e0c1d66b6f3c285a12f0ce/src/css/hiddenVisibleSelectors.js\n return elements.filter(function(element) {\n return !!(\n element.offsetWidth ||\n element.offsetHeight ||\n element.getClientRects().length\n );\n });\n}\n\n/**\n * Traps the focus in a particular container\n *\n * @param {Element} container - Container DOM element to trap focus inside of\n * @param {Element} elementToFocus - Element to be focused on first\n * @param {Object} options - Settings unique to your theme\n * @param {string} options.className - Class name to apply to element on focus.\n */\n\nvar trapFocusHandlers = {};\n\nfunction trapFocus(container, options) {\n options = options || {};\n var elements = focusable(container);\n var elementToFocus = options.elementToFocus || container;\n var first = elements[0];\n var last = elements[elements.length - 1];\n\n removeTrapFocus();\n\n trapFocusHandlers.focusin = function(event) {\n if (container !== event.target && !container.contains(event.target)) {\n first.focus();\n }\n\n if (\n event.target !== container &&\n event.target !== last &&\n event.target !== first\n )\n return;\n document.addEventListener('keydown', trapFocusHandlers.keydown);\n };\n\n trapFocusHandlers.focusout = function() {\n document.removeEventListener('keydown', trapFocusHandlers.keydown);\n };\n\n trapFocusHandlers.keydown = function(event) {\n if (event.keyCode !== 9) return; // If not TAB key\n\n // On the last focusable element and tab forward, focus the first element.\n if (event.target === last && !event.shiftKey) {\n event.preventDefault();\n first.focus();\n }\n\n // On the first focusable element and tab backward, focus the last element.\n if (\n (event.target === container || event.target === first) &&\n event.shiftKey\n ) {\n event.preventDefault();\n last.focus();\n }\n };\n\n document.addEventListener('focusout', trapFocusHandlers.focusout);\n document.addEventListener('focusin', trapFocusHandlers.focusin);\n\n forceFocus(elementToFocus, options);\n}\n\n/**\n * Removes the trap of focus from the page\n */\nfunction removeTrapFocus() {\n document.removeEventListener('focusin', trapFocusHandlers.focusin);\n document.removeEventListener('focusout', trapFocusHandlers.focusout);\n document.removeEventListener('keydown', trapFocusHandlers.keydown);\n}\n\n/**\n * Add a preventive message to external links and links that open to a new window.\n * @param {string} elements - Specific elements to be targeted\n * @param {object} options.messages - Custom messages to overwrite with keys: newWindow, external, newWindowExternal\n * @param {string} options.messages.newWindow - When the link opens in a new window (e.g. target=\"_blank\")\n * @param {string} options.messages.external - When the link is to a different host domain.\n * @param {string} options.messages.newWindowExternal - When the link is to a different host domain and opens in a new window.\n * @param {object} options.prefix - Prefix to namespace \"id\" of the messages\n */\nfunction accessibleLinks(elements, options) {\n if (typeof elements !== 'string') {\n throw new TypeError(elements + ' is not a String.');\n }\n\n elements = document.querySelectorAll(elements);\n\n if (elements.length === 0) {\n return;\n }\n\n options = options || {};\n options.messages = options.messages || {};\n\n var messages = {\n newWindow: options.messages.newWindow || 'Opens in a new window.',\n external: options.messages.external || 'Opens external website.',\n newWindowExternal:\n options.messages.newWindowExternal ||\n 'Opens external website in a new window.'\n };\n\n var prefix = options.prefix || 'a11y';\n\n var messageSelectors = {\n newWindow: prefix + '-new-window-message',\n external: prefix + '-external-message',\n newWindowExternal: prefix + '-new-window-external-message'\n };\n\n function generateHTML(messages) {\n var container = document.createElement('ul');\n var htmlMessages = Object.keys(messages).reduce(function(html, key) {\n return (html +=\n '<li id=' + messageSelectors[key] + '>' + messages[key] + '</li>');\n }, '');\n\n container.setAttribute('hidden', true);\n container.innerHTML = htmlMessages;\n\n document.body.appendChild(container);\n }\n\n function externalSite(link) {\n return link.hostname !== window.location.hostname;\n }\n\n elements.forEach(function(link) {\n var target = link.getAttribute('target');\n var rel = link.getAttribute('rel');\n var isExternal = externalSite(link);\n var isTargetBlank = target === '_blank';\n var isRelNoopenerEmpty = rel === null || rel.indexOf('noopener') === -1;\n\n if (isTargetBlank && isRelNoopenerEmpty) {\n link.setAttribute('rel', 'noopener');\n }\n\n if (isExternal && isTargetBlank) {\n link.setAttribute('aria-describedby', messageSelectors.newWindowExternal);\n } else if (isExternal) {\n link.setAttribute('aria-describedby', messageSelectors.external);\n } else if (isTargetBlank) {\n link.setAttribute('aria-describedby', messageSelectors.newWindow);\n }\n });\n\n generateHTML(messages);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNob3BpZnkvdGhlbWUtYTExeS90aGVtZS1hMTF5LmpzP2ZlODQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDTztBQUNQOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjs7QUFFQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9Ac2hvcGlmeS90aGVtZS1hMTF5L3RoZW1lLWExMXkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEExMXkgSGVscGVyc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgZnVuY3Rpb25zIHRoYXQgaGVscCBtYWtlIHlvdXIgdGhlbWUgbW9yZSBhY2Nlc3NpYmxlXG4gKi9cblxuLyoqXG4gKiBNb3ZlcyBmb2N1cyB0byBhbiBIVE1MIGVsZW1lbnRcbiAqIGVnIGZvciBJbi1wYWdlIGxpbmtzLCBhZnRlciBzY3JvbGwsIGZvY3VzIHNoaWZ0cyB0byBjb250ZW50IGFyZWEgc28gdGhhdFxuICogbmV4dCBgdGFiYCBpcyB3aGVyZSB1c2VyIGV4cGVjdHMuIFVzZWQgaW4gYmluZEluUGFnZUxpbmtzKClcbiAqIGVnIG1vdmUgZm9jdXMgdG8gYSBtb2RhbCB0aGF0IGlzIG9wZW5lZC4gVXNlZCBpbiB0cmFwRm9jdXMoKVxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyIC0gQ29udGFpbmVyIERPTSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFNldHRpbmdzIHVuaXF1ZSB0byB5b3VyIHRoZW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5jbGFzc05hbWUgLSBDbGFzcyBuYW1lIHRvIGFwcGx5IHRvIGVsZW1lbnQgb24gZm9jdXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JjZUZvY3VzKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHNhdmVkVGFiSW5kZXggPSBlbGVtZW50LnRhYkluZGV4O1xuXG4gIGVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgZWxlbWVudC5kYXRhc2V0LnRhYkluZGV4ID0gc2F2ZWRUYWJJbmRleDtcbiAgZWxlbWVudC5mb2N1cygpO1xuICBpZiAodHlwZW9mIG9wdGlvbnMuY2xhc3NOYW1lICE9PSAndW5kZWZpbmVkJykge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChvcHRpb25zLmNsYXNzTmFtZSk7XG4gIH1cbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgY2FsbGJhY2spO1xuXG4gIGZ1bmN0aW9uIGNhbGxiYWNrKGV2ZW50KSB7XG4gICAgZXZlbnQudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQudHlwZSwgY2FsbGJhY2spO1xuXG4gICAgZWxlbWVudC50YWJJbmRleCA9IHNhdmVkVGFiSW5kZXg7XG4gICAgZGVsZXRlIGVsZW1lbnQuZGF0YXNldC50YWJJbmRleDtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY2xhc3NOYW1lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKG9wdGlvbnMuY2xhc3NOYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJZiB0aGVyZSdzIGEgaGFzaCBpbiB0aGUgdXJsLCBmb2N1cyB0aGUgYXBwcm9wcmlhdGUgZWxlbWVudFxuICogVGhpcyBjb21wZW5zYXRlcyBmb3Igb2xkZXIgYnJvd3NlcnMgdGhhdCBkbyBub3QgbW92ZSBrZXlib2FyZCBmb2N1cyB0byBhbmNob3IgbGlua3MuXG4gKiBSZWNvbW1lbmRhdGlvbjogVG8gYmUgY2FsbGVkIG9uY2UgdGhlIHBhZ2UgaW4gbG9hZGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gU2V0dGluZ3MgdW5pcXVlIHRvIHlvdXIgdGhlbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmNsYXNzTmFtZSAtIENsYXNzIG5hbWUgdG8gYXBwbHkgdG8gZWxlbWVudCBvbiBmb2N1cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmlnbm9yZSAtIFNlbGVjdG9yIGZvciBlbGVtZW50cyB0byBub3QgaW5jbHVkZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNIYXNoKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaC5zbGljZSgxKSk7XG5cbiAgLy8gaWYgd2UgYXJlIHRvIGlnbm9yZSB0aGlzIGVsZW1lbnQsIGVhcmx5IHJldHVyblxuICBpZiAoZWxlbWVudCAmJiBvcHRpb25zLmlnbm9yZSAmJiBlbGVtZW50Lm1hdGNoZXMob3B0aW9ucy5pZ25vcmUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgZWxlbWVudCkge1xuICAgIGZvcmNlRm9jdXMoZWxlbWVudCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGVuIGFuIGluLXBhZ2UgKHVybCB3L2hhc2gpIGxpbmsgaXMgY2xpY2tlZCwgZm9jdXMgdGhlIGFwcHJvcHJpYXRlIGVsZW1lbnRcbiAqIFRoaXMgY29tcGVuc2F0ZXMgZm9yIG9sZGVyIGJyb3dzZXJzIHRoYXQgZG8gbm90IG1vdmUga2V5Ym9hcmQgZm9jdXMgdG8gYW5jaG9yIGxpbmtzLlxuICogUmVjb21tZW5kYXRpb246IFRvIGJlIGNhbGxlZCBvbmNlIHRoZSBwYWdlIGluIGxvYWRlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFNldHRpbmdzIHVuaXF1ZSB0byB5b3VyIHRoZW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5jbGFzc05hbWUgLSBDbGFzcyBuYW1lIHRvIGFwcGx5IHRvIGVsZW1lbnQgb24gZm9jdXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5pZ25vcmUgLSBDU1Mgc2VsZWN0b3IgZm9yIGVsZW1lbnRzIHRvIG5vdCBpbmNsdWRlLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kSW5QYWdlTGlua3Mob3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIGxpbmtzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYVtocmVmXj1cIiNcIl0nKVxuICApO1xuXG4gIHJldHVybiBsaW5rcy5maWx0ZXIoZnVuY3Rpb24obGluaykge1xuICAgIGlmIChsaW5rLmhhc2ggPT09ICcjJyB8fCBsaW5rLmhhc2ggPT09ICcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaWdub3JlICYmIGxpbmsubWF0Y2hlcyhvcHRpb25zLmlnbm9yZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobGluay5oYXNoKTtcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgIGZvcmNlRm9jdXMoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c2FibGUoY29udGFpbmVyKSB7XG4gIHZhciBlbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFxuICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgJ1t0YWJpbmRleF0sJyArXG4gICAgICAgICdbZHJhZ2dhYmxlXSwnICtcbiAgICAgICAgJ2FbaHJlZl0sJyArXG4gICAgICAgICdhcmVhLCcgK1xuICAgICAgICAnYnV0dG9uOmVuYWJsZWQsJyArXG4gICAgICAgICdpbnB1dDpub3QoW3R5cGU9aGlkZGVuXSk6ZW5hYmxlZCwnICtcbiAgICAgICAgJ29iamVjdCwnICtcbiAgICAgICAgJ3NlbGVjdDplbmFibGVkLCcgK1xuICAgICAgICAndGV4dGFyZWE6ZW5hYmxlZCdcbiAgICApXG4gICk7XG5cbiAgLy8gRmlsdGVyIG91dCBlbGVtZW50cyB0aGF0IGFyZSBub3QgdmlzaWJsZS5cbiAgLy8gQ29waWVkIGZyb20galF1ZXJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvMmQ0ZjUzNDE2ZTVmNzRmYTk4ZTBjMWQ2NmI2ZjNjMjg1YTEyZjBjZS9zcmMvY3NzL2hpZGRlblZpc2libGVTZWxlY3RvcnMuanNcbiAgcmV0dXJuIGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuICEhKFxuICAgICAgZWxlbWVudC5vZmZzZXRXaWR0aCB8fFxuICAgICAgZWxlbWVudC5vZmZzZXRIZWlnaHQgfHxcbiAgICAgIGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGhcbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUcmFwcyB0aGUgZm9jdXMgaW4gYSBwYXJ0aWN1bGFyIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyIC0gQ29udGFpbmVyIERPTSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRUb0ZvY3VzIC0gRWxlbWVudCB0byBiZSBmb2N1c2VkIG9uIGZpcnN0XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFNldHRpbmdzIHVuaXF1ZSB0byB5b3VyIHRoZW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5jbGFzc05hbWUgLSBDbGFzcyBuYW1lIHRvIGFwcGx5IHRvIGVsZW1lbnQgb24gZm9jdXMuXG4gKi9cblxudmFyIHRyYXBGb2N1c0hhbmRsZXJzID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFwRm9jdXMoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgZWxlbWVudHMgPSBmb2N1c2FibGUoY29udGFpbmVyKTtcbiAgdmFyIGVsZW1lbnRUb0ZvY3VzID0gb3B0aW9ucy5lbGVtZW50VG9Gb2N1cyB8fCBjb250YWluZXI7XG4gIHZhciBmaXJzdCA9IGVsZW1lbnRzWzBdO1xuICB2YXIgbGFzdCA9IGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gIHJlbW92ZVRyYXBGb2N1cygpO1xuXG4gIHRyYXBGb2N1c0hhbmRsZXJzLmZvY3VzaW4gPSBmdW5jdGlvbihldmVudCkge1xuICAgIGlmIChjb250YWluZXIgIT09IGV2ZW50LnRhcmdldCAmJiAhY29udGFpbmVyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIGZpcnN0LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZXZlbnQudGFyZ2V0ICE9PSBjb250YWluZXIgJiZcbiAgICAgIGV2ZW50LnRhcmdldCAhPT0gbGFzdCAmJlxuICAgICAgZXZlbnQudGFyZ2V0ICE9PSBmaXJzdFxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdHJhcEZvY3VzSGFuZGxlcnMua2V5ZG93bik7XG4gIH07XG5cbiAgdHJhcEZvY3VzSGFuZGxlcnMuZm9jdXNvdXQgPSBmdW5jdGlvbigpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdHJhcEZvY3VzSGFuZGxlcnMua2V5ZG93bik7XG4gIH07XG5cbiAgdHJhcEZvY3VzSGFuZGxlcnMua2V5ZG93biA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgIT09IDkpIHJldHVybjsgLy8gSWYgbm90IFRBQiBrZXlcblxuICAgIC8vIE9uIHRoZSBsYXN0IGZvY3VzYWJsZSBlbGVtZW50IGFuZCB0YWIgZm9yd2FyZCwgZm9jdXMgdGhlIGZpcnN0IGVsZW1lbnQuXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gbGFzdCAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBmaXJzdC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vICBPbiB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgYW5kIHRhYiBiYWNrd2FyZCwgZm9jdXMgdGhlIGxhc3QgZWxlbWVudC5cbiAgICBpZiAoXG4gICAgICAoZXZlbnQudGFyZ2V0ID09PSBjb250YWluZXIgfHwgZXZlbnQudGFyZ2V0ID09PSBmaXJzdCkgJiZcbiAgICAgIGV2ZW50LnNoaWZ0S2V5XG4gICAgKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbGFzdC5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRyYXBGb2N1c0hhbmRsZXJzLmZvY3Vzb3V0KTtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRyYXBGb2N1c0hhbmRsZXJzLmZvY3VzaW4pO1xuXG4gIGZvcmNlRm9jdXMoZWxlbWVudFRvRm9jdXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIHRyYXAgb2YgZm9jdXMgZnJvbSB0aGUgcGFnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVHJhcEZvY3VzKCkge1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdHJhcEZvY3VzSGFuZGxlcnMuZm9jdXNpbik7XG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdHJhcEZvY3VzSGFuZGxlcnMuZm9jdXNvdXQpO1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdHJhcEZvY3VzSGFuZGxlcnMua2V5ZG93bik7XG59XG5cbi8qKlxuICogQWRkIGEgcHJldmVudGl2ZSBtZXNzYWdlIHRvIGV4dGVybmFsIGxpbmtzIGFuZCBsaW5rcyB0aGF0IG9wZW4gdG8gYSBuZXcgd2luZG93LlxuICogQHBhcmFtIHtzdHJpbmd9IGVsZW1lbnRzIC0gU3BlY2lmaWMgZWxlbWVudHMgdG8gYmUgdGFyZ2V0ZWRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLm1lc3NhZ2VzIC0gQ3VzdG9tIG1lc3NhZ2VzIHRvIG92ZXJ3cml0ZSB3aXRoIGtleXM6IG5ld1dpbmRvdywgZXh0ZXJuYWwsIG5ld1dpbmRvd0V4dGVybmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5tZXNzYWdlcy5uZXdXaW5kb3cgLSBXaGVuIHRoZSBsaW5rIG9wZW5zIGluIGEgbmV3IHdpbmRvdyAoZS5nLiB0YXJnZXQ9XCJfYmxhbmtcIilcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm1lc3NhZ2VzLmV4dGVybmFsIC0gV2hlbiB0aGUgbGluayBpcyB0byBhIGRpZmZlcmVudCBob3N0IGRvbWFpbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm1lc3NhZ2VzLm5ld1dpbmRvd0V4dGVybmFsIC0gV2hlbiB0aGUgbGluayBpcyB0byBhIGRpZmZlcmVudCBob3N0IGRvbWFpbiBhbmQgb3BlbnMgaW4gYSBuZXcgd2luZG93LlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMucHJlZml4IC0gUHJlZml4IHRvIG5hbWVzcGFjZSBcImlkXCIgb2YgdGhlIG1lc3NhZ2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY2Nlc3NpYmxlTGlua3MoZWxlbWVudHMsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBlbGVtZW50cyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGVsZW1lbnRzICsgJyBpcyBub3QgYSBTdHJpbmcuJyk7XG4gIH1cblxuICBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZWxlbWVudHMpO1xuXG4gIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgb3B0aW9ucy5tZXNzYWdlcyA9IG9wdGlvbnMubWVzc2FnZXMgfHwge307XG5cbiAgdmFyIG1lc3NhZ2VzID0ge1xuICAgIG5ld1dpbmRvdzogb3B0aW9ucy5tZXNzYWdlcy5uZXdXaW5kb3cgfHwgJ09wZW5zIGluIGEgbmV3IHdpbmRvdy4nLFxuICAgIGV4dGVybmFsOiBvcHRpb25zLm1lc3NhZ2VzLmV4dGVybmFsIHx8ICdPcGVucyBleHRlcm5hbCB3ZWJzaXRlLicsXG4gICAgbmV3V2luZG93RXh0ZXJuYWw6XG4gICAgICBvcHRpb25zLm1lc3NhZ2VzLm5ld1dpbmRvd0V4dGVybmFsIHx8XG4gICAgICAnT3BlbnMgZXh0ZXJuYWwgd2Vic2l0ZSBpbiBhIG5ldyB3aW5kb3cuJ1xuICB9O1xuXG4gIHZhciBwcmVmaXggPSBvcHRpb25zLnByZWZpeCB8fCAnYTExeSc7XG5cbiAgdmFyIG1lc3NhZ2VTZWxlY3RvcnMgPSB7XG4gICAgbmV3V2luZG93OiBwcmVmaXggKyAnLW5ldy13aW5kb3ctbWVzc2FnZScsXG4gICAgZXh0ZXJuYWw6IHByZWZpeCArICctZXh0ZXJuYWwtbWVzc2FnZScsXG4gICAgbmV3V2luZG93RXh0ZXJuYWw6IHByZWZpeCArICctbmV3LXdpbmRvdy1leHRlcm5hbC1tZXNzYWdlJ1xuICB9O1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRNTChtZXNzYWdlcykge1xuICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xuICAgIHZhciBodG1sTWVzc2FnZXMgPSBPYmplY3Qua2V5cyhtZXNzYWdlcykucmVkdWNlKGZ1bmN0aW9uKGh0bWwsIGtleSkge1xuICAgICAgcmV0dXJuIChodG1sICs9XG4gICAgICAgICc8bGkgaWQ9JyArIG1lc3NhZ2VTZWxlY3RvcnNba2V5XSArICc+JyArIG1lc3NhZ2VzW2tleV0gKyAnPC9saT4nKTtcbiAgICB9LCAnJyk7XG5cbiAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCB0cnVlKTtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbE1lc3NhZ2VzO1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXh0ZXJuYWxTaXRlKGxpbmspIHtcbiAgICByZXR1cm4gbGluay5ob3N0bmFtZSAhPT0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuICB9XG5cbiAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihsaW5rKSB7XG4gICAgdmFyIHRhcmdldCA9IGxpbmsuZ2V0QXR0cmlidXRlKCd0YXJnZXQnKTtcbiAgICB2YXIgcmVsID0gbGluay5nZXRBdHRyaWJ1dGUoJ3JlbCcpO1xuICAgIHZhciBpc0V4dGVybmFsID0gZXh0ZXJuYWxTaXRlKGxpbmspO1xuICAgIHZhciBpc1RhcmdldEJsYW5rID0gdGFyZ2V0ID09PSAnX2JsYW5rJztcbiAgICB2YXIgaXNSZWxOb29wZW5lckVtcHR5ID0gcmVsID09PSBudWxsIHx8IHJlbC5pbmRleE9mKCdub29wZW5lcicpID09PSAtMTtcblxuICAgIGlmIChpc1RhcmdldEJsYW5rICYmIGlzUmVsTm9vcGVuZXJFbXB0eSkge1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdub29wZW5lcicpO1xuICAgIH1cblxuICAgIGlmIChpc0V4dGVybmFsICYmIGlzVGFyZ2V0QmxhbmspIHtcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgbWVzc2FnZVNlbGVjdG9ycy5uZXdXaW5kb3dFeHRlcm5hbCk7XG4gICAgfSBlbHNlIGlmIChpc0V4dGVybmFsKSB7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIG1lc3NhZ2VTZWxlY3RvcnMuZXh0ZXJuYWwpO1xuICAgIH0gZWxzZSBpZiAoaXNUYXJnZXRCbGFuaykge1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBtZXNzYWdlU2VsZWN0b3JzLm5ld1dpbmRvdyk7XG4gICAgfVxuICB9KTtcblxuICBnZW5lcmF0ZUhUTUwobWVzc2FnZXMpO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@shopify/theme-a11y/theme-a11y.js\n") },
vendor: 10,940 bytes, line 1
1"./node_modules/@shopify/theme-addresses/theme-addresses.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CountryProvinceSelector\", function() { return CountryProvinceSelector; });\n/**\n * CountryProvinceSelector Constructor\n * @param {String} countryOptions the country options in html string\n */\nfunction CountryProvinceSelector(countryOptions) {\n if (typeof countryOptions !== 'string') {\n throw new TypeError(countryOptions + ' is not a string.');\n }\n this.countryOptions = countryOptions;\n}\n\n/**\n * Builds the country and province selector with the given node element\n * @param {Node} countryNodeElement The <select> element for country\n * @param {Node} provinceNodeElement The <select> element for province\n * @param {Object} options Additional settings available\n * @param {CountryProvinceSelector~onCountryChange} options.onCountryChange callback after a country `change` event\n * @param {CountryProvinceSelector~onProvinceChange} options.onProvinceChange callback after a province `change` event\n */\nCountryProvinceSelector.prototype.build = function (countryNodeElement, provinceNodeElement, options) {\n if (typeof countryNodeElement !== 'object') {\n throw new TypeError(countryNodeElement + ' is not a object.');\n }\n\n if (typeof provinceNodeElement !== 'object') {\n throw new TypeError(provinceNodeElement + ' is not a object.');\n }\n\n var defaultValue = countryNodeElement.getAttribute('data-default');\n options = options || {}\n\n countryNodeElement.innerHTML = this.countryOptions;\n countryNodeElement.value = defaultValue;\n\n if (defaultValue && getOption(countryNodeElement, defaultValue)) {\n var provinces = buildProvince(countryNodeElement, provinceNodeElement, defaultValue);\n options.onCountryChange && options.onCountryChange(provinces, provinceNodeElement, countryNodeElement);\n }\n\n // Listen for value change on the country select\n countryNodeElement.addEventListener('change', function (event) {\n var target = event.target;\n var selectedValue = target.value;\n \n var provinces = buildProvince(target, provinceNodeElement, selectedValue);\n options.onCountryChange && options.onCountryChange(provinces, provinceNodeElement, countryNodeElement);\n });\n\n options.onProvinceChange && provinceNodeElement.addEventListener('change', options.onProvinceChange);\n}\n\n/**\n * This callback is called after a user interacted with a country `<select>`\n * @callback CountryProvinceSelector~onCountryChange\n * @param {array} provinces the parsed provinces\n * @param {Node} provinceNodeElement province `<select>` element\n * @param {Node} countryNodeElement country `<select>` element\n */\n\n /**\n * This callback is called after a user interacted with a province `<select>`\n * @callback CountryProvinceSelector~onProvinceChange\n * @param {Event} event the province selector `change` event object\n */\n\n/**\n * Returns the <option> with the specified value from the\n * given node element\n * A null is returned if no such <option> is found\n */\nfunction getOption(nodeElement, value) {\n return nodeElement.querySelector('option[value=\"' + value +'\"]')\n}\n\n/**\n * Builds the options for province selector\n */\nfunction buildOptions (provinceNodeElement, provinces) {\n var defaultValue = provinceNodeElement.getAttribute('data-default');\n\n provinces.forEach(function (option) {\n var optionElement = document.createElement('option');\n optionElement.value = option[0];\n optionElement.textContent = option[1];\n\n provinceNodeElement.appendChild(optionElement);\n })\n\n if (defaultValue && getOption(provinceNodeElement, defaultValue)) {\n provinceNodeElement.value = defaultValue;\n }\n}\n\n/**\n * Builds the province selector\n */\nfunction buildProvince (countryNodeElement, provinceNodeElement, selectedValue) {\n var selectedOption = getOption(countryNodeElement, selectedValue);\n var provinces = JSON.parse(selectedOption.getAttribute('data-provinces'));\n\n provinceNodeElement.options.length = 0;\n\n if (provinces.length) {\n buildOptions(provinceNodeElement, provinces)\n }\n\n return provinces;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNob3BpZnkvdGhlbWUtYWRkcmVzc2VzL3RoZW1lLWFkZHJlc3Nlcy5qcz8xOWI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsT0FBTztBQUNsQixXQUFXLHdDQUF3QztBQUNuRCxXQUFXLHlDQUF5QztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsS0FBSztBQUNoQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHNob3BpZnkvdGhlbWUtYWRkcmVzc2VzL3RoZW1lLWFkZHJlc3Nlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ291bnRyeVByb3ZpbmNlU2VsZWN0b3IgQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb3VudHJ5T3B0aW9ucyB0aGUgY291bnRyeSBvcHRpb25zIGluIGh0bWwgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb3VudHJ5UHJvdmluY2VTZWxlY3Rvcihjb3VudHJ5T3B0aW9ucykge1xuICBpZiAodHlwZW9mIGNvdW50cnlPcHRpb25zICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY291bnRyeU9wdGlvbnMgKyAnIGlzIG5vdCBhIHN0cmluZy4nKTtcbiAgfVxuICB0aGlzLmNvdW50cnlPcHRpb25zID0gY291bnRyeU9wdGlvbnM7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjb3VudHJ5IGFuZCBwcm92aW5jZSBzZWxlY3RvciB3aXRoIHRoZSBnaXZlbiBub2RlIGVsZW1lbnRcbiAqIEBwYXJhbSB7Tm9kZX0gY291bnRyeU5vZGVFbGVtZW50IFRoZSA8c2VsZWN0PiBlbGVtZW50IGZvciBjb3VudHJ5XG4gKiBAcGFyYW0ge05vZGV9IHByb3ZpbmNlTm9kZUVsZW1lbnQgVGhlIDxzZWxlY3Q+IGVsZW1lbnQgZm9yIHByb3ZpbmNlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBZGRpdGlvbmFsIHNldHRpbmdzIGF2YWlsYWJsZVxuICogQHBhcmFtIHtDb3VudHJ5UHJvdmluY2VTZWxlY3Rvcn5vbkNvdW50cnlDaGFuZ2V9IG9wdGlvbnMub25Db3VudHJ5Q2hhbmdlIGNhbGxiYWNrIGFmdGVyIGEgY291bnRyeSBgY2hhbmdlYCBldmVudFxuICogQHBhcmFtIHtDb3VudHJ5UHJvdmluY2VTZWxlY3Rvcn5vblByb3ZpbmNlQ2hhbmdlfSBvcHRpb25zLm9uUHJvdmluY2VDaGFuZ2UgY2FsbGJhY2sgYWZ0ZXIgYSBwcm92aW5jZSBgY2hhbmdlYCBldmVudFxuICovXG5Db3VudHJ5UHJvdmluY2VTZWxlY3Rvci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbiAoY291bnRyeU5vZGVFbGVtZW50LCBwcm92aW5jZU5vZGVFbGVtZW50LCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgY291bnRyeU5vZGVFbGVtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY291bnRyeU5vZGVFbGVtZW50ICsgJyBpcyBub3QgYSBvYmplY3QuJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHByb3ZpbmNlTm9kZUVsZW1lbnQgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwcm92aW5jZU5vZGVFbGVtZW50ICsgJyBpcyBub3QgYSBvYmplY3QuJyk7XG4gIH1cblxuICB2YXIgZGVmYXVsdFZhbHVlID0gY291bnRyeU5vZGVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1kZWZhdWx0Jyk7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgY291bnRyeU5vZGVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuY291bnRyeU9wdGlvbnM7XG4gIGNvdW50cnlOb2RlRWxlbWVudC52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcblxuICBpZiAoZGVmYXVsdFZhbHVlICYmIGdldE9wdGlvbihjb3VudHJ5Tm9kZUVsZW1lbnQsIGRlZmF1bHRWYWx1ZSkpIHtcbiAgICB2YXIgcHJvdmluY2VzID0gYnVpbGRQcm92aW5jZShjb3VudHJ5Tm9kZUVsZW1lbnQsIHByb3ZpbmNlTm9kZUVsZW1lbnQsIGRlZmF1bHRWYWx1ZSk7XG4gICAgb3B0aW9ucy5vbkNvdW50cnlDaGFuZ2UgJiYgb3B0aW9ucy5vbkNvdW50cnlDaGFuZ2UocHJvdmluY2VzLCBwcm92aW5jZU5vZGVFbGVtZW50LCBjb3VudHJ5Tm9kZUVsZW1lbnQpO1xuICB9XG5cbiAgLy8gTGlzdGVuIGZvciB2YWx1ZSBjaGFuZ2Ugb24gdGhlIGNvdW50cnkgc2VsZWN0XG4gIGNvdW50cnlOb2RlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHZhciBzZWxlY3RlZFZhbHVlID0gdGFyZ2V0LnZhbHVlO1xuICAgIFxuICAgIHZhciBwcm92aW5jZXMgPSBidWlsZFByb3ZpbmNlKHRhcmdldCwgcHJvdmluY2VOb2RlRWxlbWVudCwgc2VsZWN0ZWRWYWx1ZSk7XG4gICAgb3B0aW9ucy5vbkNvdW50cnlDaGFuZ2UgJiYgb3B0aW9ucy5vbkNvdW50cnlDaGFuZ2UocHJvdmluY2VzLCBwcm92aW5jZU5vZGVFbGVtZW50LCBjb3VudHJ5Tm9kZUVsZW1lbnQpO1xuICB9KTtcblxuICBvcHRpb25zLm9uUHJvdmluY2VDaGFuZ2UgJiYgcHJvdmluY2VOb2RlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvcHRpb25zLm9uUHJvdmluY2VDaGFuZ2UpO1xufVxuXG4vKipcbiAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGFmdGVyIGEgdXNlciBpbnRlcmFjdGVkIHdpdGggYSBjb3VudHJ5IGA8c2VsZWN0PmBcbiAqIEBjYWxsYmFjayBDb3VudHJ5UHJvdmluY2VTZWxlY3Rvcn5vbkNvdW50cnlDaGFuZ2VcbiAqIEBwYXJhbSB7YXJyYXl9IHByb3ZpbmNlcyB0aGUgcGFyc2VkIHByb3ZpbmNlc1xuICogQHBhcmFtIHtOb2RlfSBwcm92aW5jZU5vZGVFbGVtZW50IHByb3ZpbmNlIGA8c2VsZWN0PmAgZWxlbWVudFxuICogQHBhcmFtIHtOb2RlfSBjb3VudHJ5Tm9kZUVsZW1lbnQgY291bnRyeSBgPHNlbGVjdD5gIGVsZW1lbnRcbiAqL1xuXG4gLyoqXG4gKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlciBhIHVzZXIgaW50ZXJhY3RlZCB3aXRoIGEgcHJvdmluY2UgYDxzZWxlY3Q+YFxuICogQGNhbGxiYWNrIENvdW50cnlQcm92aW5jZVNlbGVjdG9yfm9uUHJvdmluY2VDaGFuZ2VcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IHRoZSBwcm92aW5jZSBzZWxlY3RvciBgY2hhbmdlYCBldmVudCBvYmplY3RcbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIDxvcHRpb24+IHdpdGggdGhlIHNwZWNpZmllZCB2YWx1ZSBmcm9tIHRoZVxuICogZ2l2ZW4gbm9kZSBlbGVtZW50XG4gKiBBIG51bGwgaXMgcmV0dXJuZWQgaWYgbm8gc3VjaCA8b3B0aW9uPiBpcyBmb3VuZFxuICovXG5mdW5jdGlvbiBnZXRPcHRpb24obm9kZUVsZW1lbnQsIHZhbHVlKSB7XG4gIHJldHVybiBub2RlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdvcHRpb25bdmFsdWU9XCInICsgdmFsdWUgKydcIl0nKVxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgb3B0aW9ucyBmb3IgcHJvdmluY2Ugc2VsZWN0b3JcbiAqL1xuZnVuY3Rpb24gYnVpbGRPcHRpb25zIChwcm92aW5jZU5vZGVFbGVtZW50LCBwcm92aW5jZXMpIHtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IHByb3ZpbmNlTm9kZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWRlZmF1bHQnKTtcblxuICBwcm92aW5jZXMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgdmFyIG9wdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICBvcHRpb25FbGVtZW50LnZhbHVlID0gb3B0aW9uWzBdO1xuICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBvcHRpb25bMV07XG5cbiAgICBwcm92aW5jZU5vZGVFbGVtZW50LmFwcGVuZENoaWxkKG9wdGlvbkVsZW1lbnQpO1xuICB9KVxuXG4gIGlmIChkZWZhdWx0VmFsdWUgJiYgZ2V0T3B0aW9uKHByb3ZpbmNlTm9kZUVsZW1lbnQsIGRlZmF1bHRWYWx1ZSkpIHtcbiAgICBwcm92aW5jZU5vZGVFbGVtZW50LnZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBwcm92aW5jZSBzZWxlY3RvclxuICovXG5mdW5jdGlvbiBidWlsZFByb3ZpbmNlIChjb3VudHJ5Tm9kZUVsZW1lbnQsIHByb3ZpbmNlTm9kZUVsZW1lbnQsIHNlbGVjdGVkVmFsdWUpIHtcbiAgdmFyIHNlbGVjdGVkT3B0aW9uID0gZ2V0T3B0aW9uKGNvdW50cnlOb2RlRWxlbWVudCwgc2VsZWN0ZWRWYWx1ZSk7XG4gIHZhciBwcm92aW5jZXMgPSBKU09OLnBhcnNlKHNlbGVjdGVkT3B0aW9uLmdldEF0dHJpYnV0ZSgnZGF0YS1wcm92aW5jZXMnKSk7XG5cbiAgcHJvdmluY2VOb2RlRWxlbWVudC5vcHRpb25zLmxlbmd0aCA9IDA7XG5cbiAgaWYgKHByb3ZpbmNlcy5sZW5ndGgpIHtcbiAgICBidWlsZE9wdGlvbnMocHJvdmluY2VOb2RlRWxlbWVudCwgcHJvdmluY2VzKVxuICB9XG5cbiAgcmV0dXJuIHByb3ZpbmNlcztcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@shopify/theme-addresses/theme-addresses.js\n") },
vendor: 4,421 bytes, line 1
1"./node_modules/desandro-matches-selector/matches-selector.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGVzYW5kcm8tbWF0Y2hlcy1zZWxlY3Rvci9tYXRjaGVzLXNlbGVjdG9yLmpzP2M3NDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBeUM7QUFDaEQ7QUFDQSxJQUFJLG9DQUFRLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQSxvR0FBRTtBQUNyQixHQUFHLE1BQU0sRUFNTjs7QUFFSCxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9kZXNhbmRyby1tYXRjaGVzLXNlbGVjdG9yL21hdGNoZXMtc2VsZWN0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG1hdGNoZXNTZWxlY3RvciB2Mi4wLjJcbiAqIG1hdGNoZXNTZWxlY3RvciggZWxlbWVudCwgJy5zZWxlY3RvcicgKVxuICogTUlUIGxpY2Vuc2VcbiAqL1xuXG4vKmpzaGludCBicm93c2VyOiB0cnVlLCBzdHJpY3Q6IHRydWUsIHVuZGVmOiB0cnVlLCB1bnVzZWQ6IHRydWUgKi9cblxuKCBmdW5jdGlvbiggd2luZG93LCBmYWN0b3J5ICkge1xuICAvKmdsb2JhbCBkZWZpbmU6IGZhbHNlLCBtb2R1bGU6IGZhbHNlICovXG4gICd1c2Ugc3RyaWN0JztcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EXG4gICAgZGVmaW5lKCBmYWN0b3J5ICk7XG4gIH0gZWxzZSBpZiAoIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMgKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIHdpbmRvdy5tYXRjaGVzU2VsZWN0b3IgPSBmYWN0b3J5KCk7XG4gIH1cblxufSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIG1hdGNoZXNNZXRob2QgPSAoIGZ1bmN0aW9uKCkge1xuICAgIHZhciBFbGVtUHJvdG8gPSB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGU7XG4gICAgLy8gY2hlY2sgZm9yIHRoZSBzdGFuZGFyZCBtZXRob2QgbmFtZSBmaXJzdFxuICAgIGlmICggRWxlbVByb3RvLm1hdGNoZXMgKSB7XG4gICAgICByZXR1cm4gJ21hdGNoZXMnO1xuICAgIH1cbiAgICAvLyBjaGVjayB1bi1wcmVmaXhlZFxuICAgIGlmICggRWxlbVByb3RvLm1hdGNoZXNTZWxlY3RvciApIHtcbiAgICAgIHJldHVybiAnbWF0Y2hlc1NlbGVjdG9yJztcbiAgICB9XG4gICAgLy8gY2hlY2sgdmVuZG9yIHByZWZpeGVzXG4gICAgdmFyIHByZWZpeGVzID0gWyAnd2Via2l0JywgJ21veicsICdtcycsICdvJyBdO1xuXG4gICAgZm9yICggdmFyIGk9MDsgaSA8IHByZWZpeGVzLmxlbmd0aDsgaSsrICkge1xuICAgICAgdmFyIHByZWZpeCA9IHByZWZpeGVzW2ldO1xuICAgICAgdmFyIG1ldGhvZCA9IHByZWZpeCArICdNYXRjaGVzU2VsZWN0b3InO1xuICAgICAgaWYgKCBFbGVtUHJvdG9bIG1ldGhvZCBdICkge1xuICAgICAgICByZXR1cm4gbWV0aG9kO1xuICAgICAgfVxuICAgIH1cbiAgfSkoKTtcblxuICByZXR1cm4gZnVuY3Rpb24gbWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBzZWxlY3RvciApIHtcbiAgICByZXR1cm4gZWxlbVsgbWF0Y2hlc01ldGhvZCBdKCBzZWxlY3RvciApO1xuICB9O1xuXG59KSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/desandro-matches-selector/matches-selector.js\n") },
vendor: 8,048 bytes, line 1
1"./node_modules/ev-emitter/ev-emitter.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( true ) {\n // AMD - RequireJS\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXYtZW1pdHRlci9ldi1lbWl0dGVyLmpzPzA5NDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQXlDO0FBQ2hEO0FBQ0EsSUFBSSxvQ0FBUSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0dBQUU7QUFDckIsR0FBRyxNQUFNLEVBTU47O0FBRUgsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9ldi1lbWl0dGVyL2V2LWVtaXR0ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV2RW1pdHRlciB2MS4xLjBcbiAqIExpbCcgZXZlbnQgZW1pdHRlclxuICogTUlUIExpY2Vuc2VcbiAqL1xuXG4vKiBqc2hpbnQgdW51c2VkOiB0cnVlLCB1bmRlZjogdHJ1ZSwgc3RyaWN0OiB0cnVlICovXG5cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIC8qIGpzaGludCBzdHJpY3Q6IGZhbHNlICovIC8qIGdsb2JhbHMgZGVmaW5lLCBtb2R1bGUsIHdpbmRvdyAqL1xuICBpZiAoIHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkge1xuICAgIC8vIEFNRCAtIFJlcXVpcmVKU1xuICAgIGRlZmluZSggZmFjdG9yeSApO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTIC0gQnJvd3NlcmlmeSwgV2VicGFja1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsc1xuICAgIGdsb2JhbC5FdkVtaXR0ZXIgPSBmYWN0b3J5KCk7XG4gIH1cblxufSggdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCkge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gRXZFbWl0dGVyKCkge31cblxudmFyIHByb3RvID0gRXZFbWl0dGVyLnByb3RvdHlwZTtcblxucHJvdG8ub24gPSBmdW5jdGlvbiggZXZlbnROYW1lLCBsaXN0ZW5lciApIHtcbiAgaWYgKCAhZXZlbnROYW1lIHx8ICFsaXN0ZW5lciApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gc2V0IGV2ZW50cyBoYXNoXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG4gIC8vIHNldCBsaXN0ZW5lcnMgYXJyYXlcbiAgdmFyIGxpc3RlbmVycyA9IGV2ZW50c1sgZXZlbnROYW1lIF0gPSBldmVudHNbIGV2ZW50TmFtZSBdIHx8IFtdO1xuICAvLyBvbmx5IGFkZCBvbmNlXG4gIGlmICggbGlzdGVuZXJzLmluZGV4T2YoIGxpc3RlbmVyICkgPT0gLTEgKSB7XG4gICAgbGlzdGVuZXJzLnB1c2goIGxpc3RlbmVyICk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbnByb3RvLm9uY2UgPSBmdW5jdGlvbiggZXZlbnROYW1lLCBsaXN0ZW5lciApIHtcbiAgaWYgKCAhZXZlbnROYW1lIHx8ICFsaXN0ZW5lciApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gYWRkIGV2ZW50XG4gIHRoaXMub24oIGV2ZW50TmFtZSwgbGlzdGVuZXIgKTtcbiAgLy8gc2V0IG9uY2UgZmxhZ1xuICAvLyBzZXQgb25jZUV2ZW50cyBoYXNoXG4gIHZhciBvbmNlRXZlbnRzID0gdGhpcy5fb25jZUV2ZW50cyA9IHRoaXMuX29uY2VFdmVudHMgfHwge307XG4gIC8vIHNldCBvbmNlTGlzdGVuZXJzIG9iamVjdFxuICB2YXIgb25jZUxpc3RlbmVycyA9IG9uY2VFdmVudHNbIGV2ZW50TmFtZSBdID0gb25jZUV2ZW50c1sgZXZlbnROYW1lIF0gfHwge307XG4gIC8vIHNldCBmbGFnXG4gIG9uY2VMaXN0ZW5lcnNbIGxpc3RlbmVyIF0gPSB0cnVlO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxucHJvdG8ub2ZmID0gZnVuY3Rpb24oIGV2ZW50TmFtZSwgbGlzdGVuZXIgKSB7XG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHMgJiYgdGhpcy5fZXZlbnRzWyBldmVudE5hbWUgXTtcbiAgaWYgKCAhbGlzdGVuZXJzIHx8ICFsaXN0ZW5lcnMubGVuZ3RoICkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZiggbGlzdGVuZXIgKTtcbiAgaWYgKCBpbmRleCAhPSAtMSApIHtcbiAgICBsaXN0ZW5lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5wcm90by5lbWl0RXZlbnQgPSBmdW5jdGlvbiggZXZlbnROYW1lLCBhcmdzICkge1xuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1sgZXZlbnROYW1lIF07XG4gIGlmICggIWxpc3RlbmVycyB8fCAhbGlzdGVuZXJzLmxlbmd0aCApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gY29weSBvdmVyIHRvIGF2b2lkIGludGVyZmVyZW5jZSBpZiAub2ZmKCkgaW4gbGlzdGVuZXJcbiAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLnNsaWNlKDApO1xuICBhcmdzID0gYXJncyB8fCBbXTtcbiAgLy8gb25jZSBzdHVmZlxuICB2YXIgb25jZUxpc3RlbmVycyA9IHRoaXMuX29uY2VFdmVudHMgJiYgdGhpcy5fb25jZUV2ZW50c1sgZXZlbnROYW1lIF07XG5cbiAgZm9yICggdmFyIGk9MDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKyApIHtcbiAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV1cbiAgICB2YXIgaXNPbmNlID0gb25jZUxpc3RlbmVycyAmJiBvbmNlTGlzdGVuZXJzWyBsaXN0ZW5lciBdO1xuICAgIGlmICggaXNPbmNlICkge1xuICAgICAgLy8gcmVtb3ZlIGxpc3RlbmVyXG4gICAgICAvLyByZW1vdmUgYmVmb3JlIHRyaWdnZXIgdG8gcHJldmVudCByZWN1cnNpb25cbiAgICAgIHRoaXMub2ZmKCBldmVudE5hbWUsIGxpc3RlbmVyICk7XG4gICAgICAvLyB1bnNldCBvbmNlIGZsYWdcbiAgICAgIGRlbGV0ZSBvbmNlTGlzdGVuZXJzWyBsaXN0ZW5lciBdO1xuICAgIH1cbiAgICAvLyB0cmlnZ2VyIGxpc3RlbmVyXG4gICAgbGlzdGVuZXIuYXBwbHkoIHRoaXMsIGFyZ3MgKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxucHJvdG8uYWxsT2ZmID0gZnVuY3Rpb24oKSB7XG4gIGRlbGV0ZSB0aGlzLl9ldmVudHM7XG4gIGRlbGV0ZSB0aGlzLl9vbmNlRXZlbnRzO1xufTtcblxucmV0dXJuIEV2RW1pdHRlcjtcblxufSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/ev-emitter/ev-emitter.js\n") },
vendor: 58,491 bytes, line 1
1"./node_modules/eventemitter2/lib/eventemitter2.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_RESULT__;/*!\r\n * EventEmitter2\r\n * https://github.com/hij1nx/EventEmitter2\r\n *\r\n * Copyright (c) 2013 hij1nx\r\n * Licensed under the MIT license.\r\n */\r\n;!function(undefined) {\r\n\r\n var isArray = Array.isArray ? Array.isArray : function _isArray(obj) {\r\n return Object.prototype.toString.call(obj) === \"[object Array]\";\r\n };\r\n var defaultMaxListeners = 10;\r\n\r\n function init() {\r\n this._events = {};\r\n if (this._conf) {\r\n configure.call(this, this._conf);\r\n }\r\n }\r\n\r\n function configure(conf) {\r\n if (conf) {\r\n this._conf = conf;\r\n\r\n conf.delimiter && (this.delimiter = conf.delimiter);\r\n this._events.maxListeners = conf.maxListeners !== undefined ? conf.maxListeners : defaultMaxListeners;\r\n conf.wildcard && (this.wildcard = conf.wildcard);\r\n conf.newListener && (this.newListener = conf.newListener);\r\n conf.verboseMemoryLeak && (this.verboseMemoryLeak = conf.verboseMemoryLeak);\r\n\r\n if (this.wildcard) {\r\n this.listenerTree = {};\r\n }\r\n } else {\r\n this._events.maxListeners = defaultMaxListeners;\r\n }\r\n }\r\n\r\n function logPossibleMemoryLeak(count, eventName) {\r\n var errorMsg = '(node) warning: possible EventEmitter memory ' +\r\n 'leak detected. %d listeners added. ' +\r\n 'Use emitter.setMaxListeners() to increase limit.';\r\n\r\n if(this.verboseMemoryLeak){\r\n errorMsg += ' Event name: %s.';\r\n console.error(errorMsg, count, eventName);\r\n } else {\r\n console.error(errorMsg, count);\r\n }\r\n\r\n if (console.trace){\r\n console.trace();\r\n }\r\n }\r\n\r\n function EventEmitter(conf) {\r\n this._events = {};\r\n this.newListener = false;\r\n this.verboseMemoryLeak = false;\r\n configure.call(this, conf);\r\n }\r\n EventEmitter.EventEmitter2 = EventEmitter; // backwards compatibility for exporting EventEmitter property\r\n\r\n //\r\n // Attention, function return type now is array, always !\r\n // It has zero elements if no any matches found and one or more\r\n // elements (leafs) if there are matches\r\n //\r\n function searchListenerTree(handlers, type, tree, i) {\r\n if (!tree) {\r\n return [];\r\n }\r\n var listeners=[], leaf, len, branch, xTree, xxTree, isolatedBranch, endReached,\r\n typeLength = type.length, currentType = type[i], nextType = type[i+1];\r\n if (i === typeLength && tree._listeners) {\r\n //\r\n // If at the end of the event(s) list and the tree has listeners\r\n // invoke those listeners.\r\n //\r\n if (typeof tree._listeners === 'function') {\r\n handlers && handlers.push(tree._listeners);\r\n return [tree];\r\n } else {\r\n for (leaf = 0, len = tree._listeners.length; leaf < len; leaf++) {\r\n handlers && handlers.push(tree._listeners[leaf]);\r\n }\r\n return [tree];\r\n }\r\n }\r\n\r\n if ((currentType === '*' || currentType === '**') || tree[currentType]) {\r\n //\r\n // If the event emitted is '*' at this part\r\n // or there is a concrete match at this patch\r\n //\r\n if (currentType === '*') {\r\n for (branch in tree) {\r\n if (branch !== '_listeners' && tree.hasOwnProperty(branch)) {\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i+1));\r\n }\r\n }\r\n return listeners;\r\n } else if(currentType === '**') {\r\n endReached = (i+1 === typeLength || (i+2 === typeLength && nextType === '*'));\r\n if(endReached && tree._listeners) {\r\n // The next element has a _listeners, add it to the handlers.\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree, typeLength));\r\n }\r\n\r\n for (branch in tree) {\r\n if (branch !== '_listeners' && tree.hasOwnProperty(branch)) {\r\n if(branch === '*' || branch === '**') {\r\n if(tree[branch]._listeners && !endReached) {\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], typeLength));\r\n }\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i));\r\n } else if(branch === nextType) {\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i+2));\r\n } else {\r\n // No match on this one, shift into the tree but not in the type array.\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i));\r\n }\r\n }\r\n }\r\n return listeners;\r\n }\r\n\r\n listeners = listeners.concat(searchListenerTree(handlers, type, tree[currentType], i+1));\r\n }\r\n\r\n xTree = tree['*'];\r\n if (xTree) {\r\n //\r\n // If the listener tree will allow any match for this part,\r\n // then recursively explore all branches of the tree\r\n //\r\n searchListenerTree(handlers, type, xTree, i+1);\r\n }\r\n\r\n xxTree = tree['**'];\r\n if(xxTree) {\r\n if(i < typeLength) {\r\n if(xxTree._listeners) {\r\n // If we have a listener on a '**', it will catch all, so add its handler.\r\n searchListenerTree(handlers, type, xxTree, typeLength);\r\n }\r\n\r\n // Build arrays of matching next branches and others.\r\n for(branch in xxTree) {\r\n if(branch !== '_listeners' && xxTree.hasOwnProperty(branch)) {\r\n if(branch === nextType) {\r\n // We know the next element will match, so jump twice.\r\n searchListenerTree(handlers, type, xxTree[branch], i+2);\r\n } else if(branch === currentType) {\r\n // Current node matches, move into the tree.\r\n searchListenerTree(handlers, type, xxTree[branch], i+1);\r\n } else {\r\n isolatedBranch = {};\r\n isolatedBranch[branch] = xxTree[branch];\r\n searchListenerTree(handlers, type, { '**': isolatedBranch }, i+1);\r\n }\r\n }\r\n }\r\n } else if(xxTree._listeners) {\r\n // We have reached the end and still on a '**'\r\n searchListenerTree(handlers, type, xxTree, typeLength);\r\n } else if(xxTree['*'] && xxTree['*']._listeners) {\r\n searchListenerTree(handlers, type, xxTree['*'], typeLength);\r\n }\r\n }\r\n\r\n return listeners;\r\n }\r\n\r\n function growListenerTree(type, listener) {\r\n\r\n type = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n\r\n //\r\n // Looks for two consecutive '**', if so, don't add the event at all.\r\n //\r\n for(var i = 0, len = type.length; i+1 < len; i++) {\r\n if(type[i] === '**' && type[i+1] === '**') {\r\n return;\r\n }\r\n }\r\n\r\n var tree = this.listenerTree;\r\n var name = type.shift();\r\n\r\n while (name !== undefined) {\r\n\r\n if (!tree[name]) {\r\n tree[name] = {};\r\n }\r\n\r\n tree = tree[name];\r\n\r\n if (type.length === 0) {\r\n\r\n if (!tree._listeners) {\r\n tree._listeners = listener;\r\n }\r\n else {\r\n if (typeof tree._listeners === 'function') {\r\n tree._listeners = [tree._listeners];\r\n }\r\n\r\n tree._listeners.push(listener);\r\n\r\n if (\r\n !tree._listeners.warned &&\r\n this._events.maxListeners > 0 &&\r\n tree._listeners.length > this._events.maxListeners\r\n ) {\r\n tree._listeners.warned = true;\r\n logPossibleMemoryLeak.call(this, tree._listeners.length, name);\r\n }\r\n }\r\n return true;\r\n }\r\n name = type.shift();\r\n }\r\n return true;\r\n }\r\n\r\n // By default EventEmitters will print a warning if more than\r\n // 10 listeners are added to it. This is a useful default which\r\n // helps finding memory leaks.\r\n //\r\n // Obviously not all Emitters should be limited to 10. This function allows\r\n // that to be increased. Set to zero for unlimited.\r\n\r\n EventEmitter.prototype.delimiter = '.';\r\n\r\n EventEmitter.prototype.setMaxListeners = function(n) {\r\n if (n !== undefined) {\r\n this._events || init.call(this);\r\n this._events.maxListeners = n;\r\n if (!this._conf) this._conf = {};\r\n this._conf.maxListeners = n;\r\n }\r\n };\r\n\r\n EventEmitter.prototype.event = '';\r\n\r\n EventEmitter.prototype.once = function(event, fn) {\r\n this.many(event, 1, fn);\r\n return this;\r\n };\r\n\r\n EventEmitter.prototype.many = function(event, ttl, fn) {\r\n var self = this;\r\n\r\n if (typeof fn !== 'function') {\r\n throw new Error('many only accepts instances of Function');\r\n }\r\n\r\n function listener() {\r\n if (--ttl === 0) {\r\n self.off(event, listener);\r\n }\r\n return fn.apply(this, arguments);\r\n }\r\n\r\n listener._origin = fn;\r\n\r\n this.on(event, listener);\r\n\r\n return self;\r\n };\r\n\r\n EventEmitter.prototype.emit = function() {\r\n\r\n this._events || init.call(this);\r\n\r\n var type = arguments[0];\r\n\r\n if (type === 'newListener' && !this.newListener) {\r\n if (!this._events.newListener) {\r\n return false;\r\n }\r\n }\r\n\r\n var al = arguments.length;\r\n var args,l,i,j;\r\n var handler;\r\n\r\n if (this._all && this._all.length) {\r\n handler = this._all.slice();\r\n if (al > 3) {\r\n args = new Array(al);\r\n for (j = 0; j < al; j++) args[j] = arguments[j];\r\n }\r\n\r\n for (i = 0, l = handler.length; i < l; i++) {\r\n this.event = type;\r\n switch (al) {\r\n case 1:\r\n handler[i].call(this, type);\r\n break;\r\n case 2:\r\n handler[i].call(this, type, arguments[1]);\r\n break;\r\n case 3:\r\n handler[i].call(this, type, arguments[1], arguments[2]);\r\n break;\r\n default:\r\n handler[i].apply(this, args);\r\n }\r\n }\r\n }\r\n\r\n if (this.wildcard) {\r\n handler = [];\r\n var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n searchListenerTree.call(this, handler, ns, this.listenerTree, 0);\r\n } else {\r\n handler = this._events[type];\r\n if (typeof handler === 'function') {\r\n this.event = type;\r\n switch (al) {\r\n case 1:\r\n handler.call(this);\r\n break;\r\n case 2:\r\n handler.call(this, arguments[1]);\r\n break;\r\n case 3:\r\n handler.call(this, arguments[1], arguments[2]);\r\n break;\r\n default:\r\n args = new Array(al - 1);\r\n for (j = 1; j < al; j++) args[j - 1] = arguments[j];\r\n handler.apply(this, args);\r\n }\r\n return true;\r\n } else if (handler) {\r\n // need to make copy of handlers because list can change in the middle\r\n // of emit call\r\n handler = handler.slice();\r\n }\r\n }\r\n\r\n if (handler && handler.length) {\r\n if (al > 3) {\r\n args = new Array(al - 1);\r\n for (j = 1; j < al; j++) args[j - 1] = arguments[j];\r\n }\r\n for (i = 0, l = handler.length; i < l; i++) {\r\n this.event = type;\r\n switch (al) {\r\n case 1:\r\n handler[i].call(this);\r\n break;\r\n case 2:\r\n handler[i].call(this, arguments[1]);\r\n break;\r\n case 3:\r\n handler[i].call(this, arguments[1], arguments[2]);\r\n break;\r\n default:\r\n handler[i].apply(this, args);\r\n }\r\n }\r\n return true;\r\n } else if (!this._all && type === 'error') {\r\n if (arguments[1] instanceof Error) {\r\n throw arguments[1]; // Unhandled 'error' event\r\n } else {\r\n throw new Error(\"Uncaught, unspecified 'error' event.\");\r\n }\r\n return false;\r\n }\r\n\r\n return !!this._all;\r\n };\r\n\r\n EventEmitter.prototype.emitAsync = function() {\r\n\r\n this._events || init.call(this);\r\n\r\n var type = arguments[0];\r\n\r\n if (type === 'newListener' && !this.newListener) {\r\n if (!this._events.newListener) { return Promise.resolve([false]); }\r\n }\r\n\r\n var promises= [];\r\n\r\n var al = arguments.length;\r\n var args,l,i,j;\r\n var handler;\r\n\r\n if (this._all) {\r\n if (al > 3) {\r\n args = new Array(al);\r\n for (j = 1; j < al; j++) args[j] = arguments[j];\r\n }\r\n for (i = 0, l = this._all.length; i < l; i++) {\r\n this.event = type;\r\n switch (al) {\r\n case 1:\r\n promises.push(this._all[i].call(this, type));\r\n break;\r\n case 2:\r\n promises.push(this._all[i].call(this, type, arguments[1]));\r\n break;\r\n case 3:\r\n promises.push(this._all[i].call(this, type, arguments[1], arguments[2]));\r\n break;\r\n default:\r\n promises.push(this._all[i].apply(this, args));\r\n }\r\n }\r\n }\r\n\r\n if (this.wildcard) {\r\n handler = [];\r\n var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n searchListenerTree.call(this, handler, ns, this.listenerTree, 0);\r\n } else {\r\n handler = this._events[type];\r\n }\r\n\r\n if (typeof handler === 'function') {\r\n this.event = type;\r\n switch (al) {\r\n case 1:\r\n promises.push(handler.call(this));\r\n break;\r\n case 2:\r\n promises.push(handler.call(this, arguments[1]));\r\n break;\r\n case 3:\r\n promises.push(handler.call(this, arguments[1], arguments[2]));\r\n break;\r\n default:\r\n args = new Array(al - 1);\r\n for (j = 1; j < al; j++) args[j - 1] = arguments[j];\r\n promises.push(handler.apply(this, args));\r\n }\r\n } else if (handler && handler.length) {\r\n handler = handler.slice();\r\n if (al > 3) {\r\n args = new Array(al - 1);\r\n for (j = 1; j < al; j++) args[j - 1] = arguments[j];\r\n }\r\n for (i = 0, l = handler.length; i < l; i++) {\r\n this.event = type;\r\n switch (al) {\r\n case 1:\r\n promises.push(handler[i].call(this));\r\n break;\r\n case 2:\r\n promises.push(handler[i].call(this, arguments[1]));\r\n break;\r\n case 3:\r\n promises.push(handler[i].call(this, arguments[1], arguments[2]));\r\n break;\r\n default:\r\n promises.push(handler[i].apply(this, args));\r\n }\r\n }\r\n } else if (!this._all && type === 'error') {\r\n if (arguments[1] instanceof Error) {\r\n return Promise.reject(arguments[1]); // Unhandled 'error' event\r\n } else {\r\n return Promise.reject(\"Uncaught, unspecified 'error' event.\");\r\n }\r\n }\r\n\r\n return Promise.all(promises);\r\n };\r\n\r\n EventEmitter.prototype.on = function(type, listener) {\r\n if (typeof type === 'function') {\r\n this.onAny(type);\r\n return this;\r\n }\r\n\r\n if (typeof listener !== 'function') {\r\n throw new Error('on only accepts instances of Function');\r\n }\r\n this._events || init.call(this);\r\n\r\n // To avoid recursion in the case that type == \"newListeners\"! Before\r\n // adding it to the listeners, first emit \"newListeners\".\r\n this.emit('newListener', type, listener);\r\n\r\n if (this.wildcard) {\r\n growListenerTree.call(this, type, listener);\r\n return this;\r\n }\r\n\r\n if (!this._events[type]) {\r\n // Optimize the case of one listener. Don't need the extra array object.\r\n this._events[type] = listener;\r\n }\r\n else {\r\n if (typeof this._events[type] === 'function') {\r\n // Change to array.\r\n this._events[type] = [this._events[type]];\r\n }\r\n\r\n // If we've already got an array, just append.\r\n this._events[type].push(listener);\r\n\r\n // Check for listener leak\r\n if (\r\n !this._events[type].warned &&\r\n this._events.maxListeners > 0 &&\r\n this._events[type].length > this._events.maxListeners\r\n ) {\r\n this._events[type].warned = true;\r\n logPossibleMemoryLeak.call(this, this._events[type].length, type);\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n EventEmitter.prototype.onAny = function(fn) {\r\n if (typeof fn !== 'function') {\r\n throw new Error('onAny only accepts instances of Function');\r\n }\r\n\r\n if (!this._all) {\r\n this._all = [];\r\n }\r\n\r\n // Add the function to the event listener collection.\r\n this._all.push(fn);\r\n return this;\r\n };\r\n\r\n EventEmitter.prototype.addListener = EventEmitter.prototype.on;\r\n\r\n EventEmitter.prototype.off = function(type, listener) {\r\n if (typeof listener !== 'function') {\r\n throw new Error('removeListener only takes instances of Function');\r\n }\r\n\r\n var handlers,leafs=[];\r\n\r\n if(this.wildcard) {\r\n var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);\r\n }\r\n else {\r\n // does not use listeners(), so no side effect of creating _events[type]\r\n if (!this._events[type]) return this;\r\n handlers = this._events[type];\r\n leafs.push({_listeners:handlers});\r\n }\r\n\r\n for (var iLeaf=0; iLeaf<leafs.length; iLeaf++) {\r\n var leaf = leafs[iLeaf];\r\n handlers = leaf._listeners;\r\n if (isArray(handlers)) {\r\n\r\n var position = -1;\r\n\r\n for (var i = 0, length = handlers.length; i < length; i++) {\r\n if (handlers[i] === listener ||\r\n (handlers[i].listener && handlers[i].listener === listener) ||\r\n (handlers[i]._origin && handlers[i]._origin === listener)) {\r\n position = i;\r\n break;\r\n }\r\n }\r\n\r\n if (position < 0) {\r\n continue;\r\n }\r\n\r\n if(this.wildcard) {\r\n leaf._listeners.splice(position, 1);\r\n }\r\n else {\r\n this._events[type].splice(position, 1);\r\n }\r\n\r\n if (handlers.length === 0) {\r\n if(this.wildcard) {\r\n delete leaf._listeners;\r\n }\r\n else {\r\n delete this._events[type];\r\n }\r\n }\r\n\r\n this.emit(\"removeListener\", type, listener);\r\n\r\n return this;\r\n }\r\n else if (handlers === listener ||\r\n (handlers.listener && handlers.listener === listener) ||\r\n (handlers._origin && handlers._origin === listener)) {\r\n if(this.wildcard) {\r\n delete leaf._listeners;\r\n }\r\n else {\r\n delete this._events[type];\r\n }\r\n\r\n this.emit(\"removeListener\", type, listener);\r\n }\r\n }\r\n\r\n function recursivelyGarbageCollect(root) {\r\n if (root === undefined) {\r\n return;\r\n }\r\n var keys = Object.keys(root);\r\n for (var i in keys) {\r\n var key = keys[i];\r\n var obj = root[key];\r\n if ((obj instanceof Function) || (typeof obj !== \"object\") || (obj === null))\r\n continue;\r\n if (Object.keys(obj).length > 0) {\r\n recursivelyGarbageCollect(root[key]);\r\n }\r\n if (Object.keys(obj).length === 0) {\r\n delete root[key];\r\n }\r\n }\r\n }\r\n recursivelyGarbageCollect(this.listenerTree);\r\n\r\n return this;\r\n };\r\n\r\n EventEmitter.prototype.offAny = function(fn) {\r\n var i = 0, l = 0, fns;\r\n if (fn && this._all && this._all.length > 0) {\r\n fns = this._all;\r\n for(i = 0, l = fns.length; i < l; i++) {\r\n if(fn === fns[i]) {\r\n fns.splice(i, 1);\r\n this.emit(\"removeListenerAny\", fn);\r\n return this;\r\n }\r\n }\r\n } else {\r\n fns = this._all;\r\n for(i = 0, l = fns.length; i < l; i++)\r\n this.emit(\"removeListenerAny\", fns[i]);\r\n this._all = [];\r\n }\r\n return this;\r\n };\r\n\r\n EventEmitter.prototype.removeListener = EventEmitter.prototype.off;\r\n\r\n EventEmitter.prototype.removeAllListeners = function(type) {\r\n if (arguments.length === 0) {\r\n !this._events || init.call(this);\r\n return this;\r\n }\r\n\r\n if (this.wildcard) {\r\n var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n var leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);\r\n\r\n for (var iLeaf=0; iLeaf<leafs.length; iLeaf++) {\r\n var leaf = leafs[iLeaf];\r\n leaf._listeners = null;\r\n }\r\n }\r\n else if (this._events) {\r\n this._events[type] = null;\r\n }\r\n return this;\r\n };\r\n\r\n EventEmitter.prototype.listeners = function(type) {\r\n if (this.wildcard) {\r\n var handlers = [];\r\n var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n searchListenerTree.call(this, handlers, ns, this.listenerTree, 0);\r\n return handlers;\r\n }\r\n\r\n this._events || init.call(this);\r\n\r\n if (!this._events[type]) this._events[type] = [];\r\n if (!isArray(this._events[type])) {\r\n this._events[type] = [this._events[type]];\r\n }\r\n return this._events[type];\r\n };\r\n\r\n EventEmitter.prototype.listenerCount = function(type) {\r\n return this.listeners(type).length;\r\n };\r\n\r\n EventEmitter.prototype.listenersAny = function() {\r\n\r\n if(this._all) {\r\n return this._all;\r\n }\r\n else {\r\n return [];\r\n }\r\n\r\n };\r\n\r\n if (true) {\r\n // AMD. Register as an anonymous module.\r\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\r\n return EventEmitter;\r\n }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n } else {}\r\n}();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXZlbnRlbWl0dGVyMi9saWIvZXZlbnRlbWl0dGVyMi5qcz83MjMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLG9EQUFvRCxZQUFZO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxrREFBa0QsdUJBQXVCO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxXQUFXO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCOztBQUVBLHFDQUFxQyxPQUFPO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixRQUFRO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxNQUFNLElBQTBDO0FBQ2hEO0FBQ0EsSUFBSSxtQ0FBTztBQUNYO0FBQ0EsS0FBSztBQUFBLG9HQUFDO0FBQ04sR0FBRyxNQUFNLEVBT047QUFDSCxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjIvbGliL2V2ZW50ZW1pdHRlcjIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcclxuICogRXZlbnRFbWl0dGVyMlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vaGlqMW54L0V2ZW50RW1pdHRlcjJcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDEzIGhpajFueFxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG47IWZ1bmN0aW9uKHVuZGVmaW5lZCkge1xyXG5cclxuICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgPyBBcnJheS5pc0FycmF5IDogZnVuY3Rpb24gX2lzQXJyYXkob2JqKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBBcnJheV1cIjtcclxuICB9O1xyXG4gIHZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XHJcblxyXG4gIGZ1bmN0aW9uIGluaXQoKSB7XHJcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcclxuICAgIGlmICh0aGlzLl9jb25mKSB7XHJcbiAgICAgIGNvbmZpZ3VyZS5jYWxsKHRoaXMsIHRoaXMuX2NvbmYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY29uZmlndXJlKGNvbmYpIHtcclxuICAgIGlmIChjb25mKSB7XHJcbiAgICAgIHRoaXMuX2NvbmYgPSBjb25mO1xyXG5cclxuICAgICAgY29uZi5kZWxpbWl0ZXIgJiYgKHRoaXMuZGVsaW1pdGVyID0gY29uZi5kZWxpbWl0ZXIpO1xyXG4gICAgICB0aGlzLl9ldmVudHMubWF4TGlzdGVuZXJzID0gY29uZi5tYXhMaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCA/IGNvbmYubWF4TGlzdGVuZXJzIDogZGVmYXVsdE1heExpc3RlbmVycztcclxuICAgICAgY29uZi53aWxkY2FyZCAmJiAodGhpcy53aWxkY2FyZCA9IGNvbmYud2lsZGNhcmQpO1xyXG4gICAgICBjb25mLm5ld0xpc3RlbmVyICYmICh0aGlzLm5ld0xpc3RlbmVyID0gY29uZi5uZXdMaXN0ZW5lcik7XHJcbiAgICAgIGNvbmYudmVyYm9zZU1lbW9yeUxlYWsgJiYgKHRoaXMudmVyYm9zZU1lbW9yeUxlYWsgPSBjb25mLnZlcmJvc2VNZW1vcnlMZWFrKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLndpbGRjYXJkKSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lclRyZWUgPSB7fTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZXZlbnRzLm1heExpc3RlbmVycyA9IGRlZmF1bHRNYXhMaXN0ZW5lcnM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBsb2dQb3NzaWJsZU1lbW9yeUxlYWsoY291bnQsIGV2ZW50TmFtZSkge1xyXG4gICAgdmFyIGVycm9yTXNnID0gJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgK1xyXG4gICAgICAgICdsZWFrIGRldGVjdGVkLiAlZCBsaXN0ZW5lcnMgYWRkZWQuICcgK1xyXG4gICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nO1xyXG5cclxuICAgIGlmKHRoaXMudmVyYm9zZU1lbW9yeUxlYWspe1xyXG4gICAgICBlcnJvck1zZyArPSAnIEV2ZW50IG5hbWU6ICVzLic7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JNc2csIGNvdW50LCBldmVudE5hbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvck1zZywgY291bnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25zb2xlLnRyYWNlKXtcclxuICAgICAgY29uc29sZS50cmFjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gRXZlbnRFbWl0dGVyKGNvbmYpIHtcclxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xyXG4gICAgdGhpcy5uZXdMaXN0ZW5lciA9IGZhbHNlO1xyXG4gICAgdGhpcy52ZXJib3NlTWVtb3J5TGVhayA9IGZhbHNlO1xyXG4gICAgY29uZmlndXJlLmNhbGwodGhpcywgY29uZik7XHJcbiAgfVxyXG4gIEV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIyID0gRXZlbnRFbWl0dGVyOyAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgZXhwb3J0aW5nIEV2ZW50RW1pdHRlciBwcm9wZXJ0eVxyXG5cclxuICAvL1xyXG4gIC8vIEF0dGVudGlvbiwgZnVuY3Rpb24gcmV0dXJuIHR5cGUgbm93IGlzIGFycmF5LCBhbHdheXMgIVxyXG4gIC8vIEl0IGhhcyB6ZXJvIGVsZW1lbnRzIGlmIG5vIGFueSBtYXRjaGVzIGZvdW5kIGFuZCBvbmUgb3IgbW9yZVxyXG4gIC8vIGVsZW1lbnRzIChsZWFmcykgaWYgdGhlcmUgYXJlIG1hdGNoZXNcclxuICAvL1xyXG4gIGZ1bmN0aW9uIHNlYXJjaExpc3RlbmVyVHJlZShoYW5kbGVycywgdHlwZSwgdHJlZSwgaSkge1xyXG4gICAgaWYgKCF0cmVlKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHZhciBsaXN0ZW5lcnM9W10sIGxlYWYsIGxlbiwgYnJhbmNoLCB4VHJlZSwgeHhUcmVlLCBpc29sYXRlZEJyYW5jaCwgZW5kUmVhY2hlZCxcclxuICAgICAgICB0eXBlTGVuZ3RoID0gdHlwZS5sZW5ndGgsIGN1cnJlbnRUeXBlID0gdHlwZVtpXSwgbmV4dFR5cGUgPSB0eXBlW2krMV07XHJcbiAgICBpZiAoaSA9PT0gdHlwZUxlbmd0aCAmJiB0cmVlLl9saXN0ZW5lcnMpIHtcclxuICAgICAgLy9cclxuICAgICAgLy8gSWYgYXQgdGhlIGVuZCBvZiB0aGUgZXZlbnQocykgbGlzdCBhbmQgdGhlIHRyZWUgaGFzIGxpc3RlbmVyc1xyXG4gICAgICAvLyBpbnZva2UgdGhvc2UgbGlzdGVuZXJzLlxyXG4gICAgICAvL1xyXG4gICAgICBpZiAodHlwZW9mIHRyZWUuX2xpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGhhbmRsZXJzICYmIGhhbmRsZXJzLnB1c2godHJlZS5fbGlzdGVuZXJzKTtcclxuICAgICAgICByZXR1cm4gW3RyZWVdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAobGVhZiA9IDAsIGxlbiA9IHRyZWUuX2xpc3RlbmVycy5sZW5ndGg7IGxlYWYgPCBsZW47IGxlYWYrKykge1xyXG4gICAgICAgICAgaGFuZGxlcnMgJiYgaGFuZGxlcnMucHVzaCh0cmVlLl9saXN0ZW5lcnNbbGVhZl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW3RyZWVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKChjdXJyZW50VHlwZSA9PT0gJyonIHx8IGN1cnJlbnRUeXBlID09PSAnKionKSB8fCB0cmVlW2N1cnJlbnRUeXBlXSkge1xyXG4gICAgICAvL1xyXG4gICAgICAvLyBJZiB0aGUgZXZlbnQgZW1pdHRlZCBpcyAnKicgYXQgdGhpcyBwYXJ0XHJcbiAgICAgIC8vIG9yIHRoZXJlIGlzIGEgY29uY3JldGUgbWF0Y2ggYXQgdGhpcyBwYXRjaFxyXG4gICAgICAvL1xyXG4gICAgICBpZiAoY3VycmVudFR5cGUgPT09ICcqJykge1xyXG4gICAgICAgIGZvciAoYnJhbmNoIGluIHRyZWUpIHtcclxuICAgICAgICAgIGlmIChicmFuY2ggIT09ICdfbGlzdGVuZXJzJyAmJiB0cmVlLmhhc093blByb3BlcnR5KGJyYW5jaCkpIHtcclxuICAgICAgICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmNvbmNhdChzZWFyY2hMaXN0ZW5lclRyZWUoaGFuZGxlcnMsIHR5cGUsIHRyZWVbYnJhbmNoXSwgaSsxKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaXN0ZW5lcnM7XHJcbiAgICAgIH0gZWxzZSBpZihjdXJyZW50VHlwZSA9PT0gJyoqJykge1xyXG4gICAgICAgIGVuZFJlYWNoZWQgPSAoaSsxID09PSB0eXBlTGVuZ3RoIHx8IChpKzIgPT09IHR5cGVMZW5ndGggJiYgbmV4dFR5cGUgPT09ICcqJykpO1xyXG4gICAgICAgIGlmKGVuZFJlYWNoZWQgJiYgdHJlZS5fbGlzdGVuZXJzKSB7XHJcbiAgICAgICAgICAvLyBUaGUgbmV4dCBlbGVtZW50IGhhcyBhIF9saXN0ZW5lcnMsIGFkZCBpdCB0byB0aGUgaGFuZGxlcnMuXHJcbiAgICAgICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuY29uY2F0KHNlYXJjaExpc3RlbmVyVHJlZShoYW5kbGVycywgdHlwZSwgdHJlZSwgdHlwZUxlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChicmFuY2ggaW4gdHJlZSkge1xyXG4gICAgICAgICAgaWYgKGJyYW5jaCAhPT0gJ19saXN0ZW5lcnMnICYmIHRyZWUuaGFzT3duUHJvcGVydHkoYnJhbmNoKSkge1xyXG4gICAgICAgICAgICBpZihicmFuY2ggPT09ICcqJyB8fCBicmFuY2ggPT09ICcqKicpIHtcclxuICAgICAgICAgICAgICBpZih0cmVlW2JyYW5jaF0uX2xpc3RlbmVycyAmJiAhZW5kUmVhY2hlZCkge1xyXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmNvbmNhdChzZWFyY2hMaXN0ZW5lclRyZWUoaGFuZGxlcnMsIHR5cGUsIHRyZWVbYnJhbmNoXSwgdHlwZUxlbmd0aCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuY29uY2F0KHNlYXJjaExpc3RlbmVyVHJlZShoYW5kbGVycywgdHlwZSwgdHJlZVticmFuY2hdLCBpKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZihicmFuY2ggPT09IG5leHRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmNvbmNhdChzZWFyY2hMaXN0ZW5lclRyZWUoaGFuZGxlcnMsIHR5cGUsIHRyZWVbYnJhbmNoXSwgaSsyKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gTm8gbWF0Y2ggb24gdGhpcyBvbmUsIHNoaWZ0IGludG8gdGhlIHRyZWUgYnV0IG5vdCBpbiB0aGUgdHlwZSBhcnJheS5cclxuICAgICAgICAgICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuY29uY2F0KHNlYXJjaExpc3RlbmVyVHJlZShoYW5kbGVycywgdHlwZSwgdHJlZVticmFuY2hdLCBpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpc3RlbmVycztcclxuICAgICAgfVxyXG5cclxuICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmNvbmNhdChzZWFyY2hMaXN0ZW5lclRyZWUoaGFuZGxlcnMsIHR5cGUsIHRyZWVbY3VycmVudFR5cGVdLCBpKzEpKTtcclxuICAgIH1cclxuXHJcbiAgICB4VHJlZSA9IHRyZWVbJyonXTtcclxuICAgIGlmICh4VHJlZSkge1xyXG4gICAgICAvL1xyXG4gICAgICAvLyBJZiB0aGUgbGlzdGVuZXIgdHJlZSB3aWxsIGFsbG93IGFueSBtYXRjaCBmb3IgdGhpcyBwYXJ0LFxyXG4gICAgICAvLyB0aGVuIHJlY3Vyc2l2ZWx5IGV4cGxvcmUgYWxsIGJyYW5jaGVzIG9mIHRoZSB0cmVlXHJcbiAgICAgIC8vXHJcbiAgICAgIHNlYXJjaExpc3RlbmVyVHJlZShoYW5kbGVycywgdHlwZSwgeFRyZWUsIGkrMSk7XHJcbiAgICB9XHJcblxyXG4gICAgeHhUcmVlID0gdHJlZVsnKionXTtcclxuICAgIGlmKHh4VHJlZSkge1xyXG4gICAgICBpZihpIDwgdHlwZUxlbmd0aCkge1xyXG4gICAgICAgIGlmKHh4VHJlZS5fbGlzdGVuZXJzKSB7XHJcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgbGlzdGVuZXIgb24gYSAnKionLCBpdCB3aWxsIGNhdGNoIGFsbCwgc28gYWRkIGl0cyBoYW5kbGVyLlxyXG4gICAgICAgICAgc2VhcmNoTGlzdGVuZXJUcmVlKGhhbmRsZXJzLCB0eXBlLCB4eFRyZWUsIHR5cGVMZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQnVpbGQgYXJyYXlzIG9mIG1hdGNoaW5nIG5leHQgYnJhbmNoZXMgYW5kIG90aGVycy5cclxuICAgICAgICBmb3IoYnJhbmNoIGluIHh4VHJlZSkge1xyXG4gICAgICAgICAgaWYoYnJhbmNoICE9PSAnX2xpc3RlbmVycycgJiYgeHhUcmVlLmhhc093blByb3BlcnR5KGJyYW5jaCkpIHtcclxuICAgICAgICAgICAgaWYoYnJhbmNoID09PSBuZXh0VHlwZSkge1xyXG4gICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIG5leHQgZWxlbWVudCB3aWxsIG1hdGNoLCBzbyBqdW1wIHR3aWNlLlxyXG4gICAgICAgICAgICAgIHNlYXJjaExpc3RlbmVyVHJlZShoYW5kbGVycywgdHlwZSwgeHhUcmVlW2JyYW5jaF0sIGkrMik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZihicmFuY2ggPT09IGN1cnJlbnRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgLy8gQ3VycmVudCBub2RlIG1hdGNoZXMsIG1vdmUgaW50byB0aGUgdHJlZS5cclxuICAgICAgICAgICAgICBzZWFyY2hMaXN0ZW5lclRyZWUoaGFuZGxlcnMsIHR5cGUsIHh4VHJlZVticmFuY2hdLCBpKzEpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlzb2xhdGVkQnJhbmNoID0ge307XHJcbiAgICAgICAgICAgICAgaXNvbGF0ZWRCcmFuY2hbYnJhbmNoXSA9IHh4VHJlZVticmFuY2hdO1xyXG4gICAgICAgICAgICAgIHNlYXJjaExpc3RlbmVyVHJlZShoYW5kbGVycywgdHlwZSwgeyAnKionOiBpc29sYXRlZEJyYW5jaCB9LCBpKzEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYoeHhUcmVlLl9saXN0ZW5lcnMpIHtcclxuICAgICAgICAvLyBXZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBhbmQgc3RpbGwgb24gYSAnKionXHJcbiAgICAgICAgc2VhcmNoTGlzdGVuZXJUcmVlKGhhbmRsZXJzLCB0eXBlLCB4eFRyZWUsIHR5cGVMZW5ndGgpO1xyXG4gICAgICB9IGVsc2UgaWYoeHhUcmVlWycqJ10gJiYgeHhUcmVlWycqJ10uX2xpc3RlbmVycykge1xyXG4gICAgICAgIHNlYXJjaExpc3RlbmVyVHJlZShoYW5kbGVycywgdHlwZSwgeHhUcmVlWycqJ10sIHR5cGVMZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxpc3RlbmVycztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdyb3dMaXN0ZW5lclRyZWUodHlwZSwgbGlzdGVuZXIpIHtcclxuXHJcbiAgICB0eXBlID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnID8gdHlwZS5zcGxpdCh0aGlzLmRlbGltaXRlcikgOiB0eXBlLnNsaWNlKCk7XHJcblxyXG4gICAgLy9cclxuICAgIC8vIExvb2tzIGZvciB0d28gY29uc2VjdXRpdmUgJyoqJywgaWYgc28sIGRvbid0IGFkZCB0aGUgZXZlbnQgYXQgYWxsLlxyXG4gICAgLy9cclxuICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IHR5cGUubGVuZ3RoOyBpKzEgPCBsZW47IGkrKykge1xyXG4gICAgICBpZih0eXBlW2ldID09PSAnKionICYmIHR5cGVbaSsxXSA9PT0gJyoqJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB0cmVlID0gdGhpcy5saXN0ZW5lclRyZWU7XHJcbiAgICB2YXIgbmFtZSA9IHR5cGUuc2hpZnQoKTtcclxuXHJcbiAgICB3aGlsZSAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICBpZiAoIXRyZWVbbmFtZV0pIHtcclxuICAgICAgICB0cmVlW25hbWVdID0ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyZWUgPSB0cmVlW25hbWVdO1xyXG5cclxuICAgICAgaWYgKHR5cGUubGVuZ3RoID09PSAwKSB7XHJcblxyXG4gICAgICAgIGlmICghdHJlZS5fbGlzdGVuZXJzKSB7XHJcbiAgICAgICAgICB0cmVlLl9saXN0ZW5lcnMgPSBsaXN0ZW5lcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHRyZWUuX2xpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0cmVlLl9saXN0ZW5lcnMgPSBbdHJlZS5fbGlzdGVuZXJzXTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0cmVlLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdHJlZS5fbGlzdGVuZXJzLndhcm5lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMubWF4TGlzdGVuZXJzID4gMCAmJlxyXG4gICAgICAgICAgICB0cmVlLl9saXN0ZW5lcnMubGVuZ3RoID4gdGhpcy5fZXZlbnRzLm1heExpc3RlbmVyc1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRyZWUuX2xpc3RlbmVycy53YXJuZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBsb2dQb3NzaWJsZU1lbW9yeUxlYWsuY2FsbCh0aGlzLCB0cmVlLl9saXN0ZW5lcnMubGVuZ3RoLCBuYW1lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgbmFtZSA9IHR5cGUuc2hpZnQoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhblxyXG4gIC8vIDEwIGxpc3RlbmVycyBhcmUgYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaFxyXG4gIC8vIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxyXG4gIC8vXHJcbiAgLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXHJcbiAgLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXHJcblxyXG4gIEV2ZW50RW1pdHRlci5wcm90b3R5cGUuZGVsaW1pdGVyID0gJy4nO1xyXG5cclxuICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uKG4pIHtcclxuICAgIGlmIChuICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fZXZlbnRzIHx8IGluaXQuY2FsbCh0aGlzKTtcclxuICAgICAgdGhpcy5fZXZlbnRzLm1heExpc3RlbmVycyA9IG47XHJcbiAgICAgIGlmICghdGhpcy5fY29uZikgdGhpcy5fY29uZiA9IHt9O1xyXG4gICAgICB0aGlzLl9jb25mLm1heExpc3RlbmVycyA9IG47XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudCA9ICcnO1xyXG5cclxuICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbihldmVudCwgZm4pIHtcclxuICAgIHRoaXMubWFueShldmVudCwgMSwgZm4pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5tYW55ID0gZnVuY3Rpb24oZXZlbnQsIHR0bCwgZm4pIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWFueSBvbmx5IGFjY2VwdHMgaW5zdGFuY2VzIG9mIEZ1bmN0aW9uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XHJcbiAgICAgIGlmICgtLXR0bCA9PT0gMCkge1xyXG4gICAgICAgIHNlbGYub2ZmKGV2ZW50LCBsaXN0ZW5lcik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuZXIuX29yaWdpbiA9IGZuO1xyXG5cclxuICAgIHRoaXMub24oZXZlbnQsIGxpc3RlbmVyKTtcclxuXHJcbiAgICByZXR1cm4gc2VsZjtcclxuICB9O1xyXG5cclxuICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB0aGlzLl9ldmVudHMgfHwgaW5pdC5jYWxsKHRoaXMpO1xyXG5cclxuICAgIHZhciB0eXBlID0gYXJndW1lbnRzWzBdO1xyXG5cclxuICAgIGlmICh0eXBlID09PSAnbmV3TGlzdGVuZXInICYmICF0aGlzLm5ld0xpc3RlbmVyKSB7XHJcbiAgICAgIGlmICghdGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGFsID0gYXJndW1lbnRzLmxlbmd0aDtcclxuICAgIHZhciBhcmdzLGwsaSxqO1xyXG4gICAgdmFyIGhhbmRsZXI7XHJcblxyXG4gICAgaWYgKHRoaXMuX2FsbCAmJiB0aGlzLl9hbGwubGVuZ3RoKSB7XHJcbiAgICAgIGhhbmRsZXIgPSB0aGlzLl9hbGwuc2xpY2UoKTtcclxuICAgICAgaWYgKGFsID4gMykge1xyXG4gICAgICAgIGFyZ3MgPSBuZXcgQXJyYXkoYWwpO1xyXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBhbDsgaisrKSBhcmdzW2pdID0gYXJndW1lbnRzW2pdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGkgPSAwLCBsID0gaGFuZGxlci5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICB0aGlzLmV2ZW50ID0gdHlwZTtcclxuICAgICAgICBzd2l0Y2ggKGFsKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgaGFuZGxlcltpXS5jYWxsKHRoaXMsIHR5cGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgaGFuZGxlcltpXS5jYWxsKHRoaXMsIHR5cGUsIGFyZ3VtZW50c1sxXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICBoYW5kbGVyW2ldLmNhbGwodGhpcywgdHlwZSwgYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGhhbmRsZXJbaV0uYXBwbHkodGhpcywgYXJncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMud2lsZGNhcmQpIHtcclxuICAgICAgaGFuZGxlciA9IFtdO1xyXG4gICAgICB2YXIgbnMgPSB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgPyB0eXBlLnNwbGl0KHRoaXMuZGVsaW1pdGVyKSA6IHR5cGUuc2xpY2UoKTtcclxuICAgICAgc2VhcmNoTGlzdGVuZXJUcmVlLmNhbGwodGhpcywgaGFuZGxlciwgbnMsIHRoaXMubGlzdGVuZXJUcmVlLCAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XHJcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRoaXMuZXZlbnQgPSB0eXBlO1xyXG4gICAgICAgIHN3aXRjaCAoYWwpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYXJncyA9IG5ldyBBcnJheShhbCAtIDEpO1xyXG4gICAgICAgICAgZm9yIChqID0gMTsgaiA8IGFsOyBqKyspIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xyXG4gICAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoaGFuZGxlcikge1xyXG4gICAgICAgIC8vIG5lZWQgdG8gbWFrZSBjb3B5IG9mIGhhbmRsZXJzIGJlY2F1c2UgbGlzdCBjYW4gY2hhbmdlIGluIHRoZSBtaWRkbGVcclxuICAgICAgICAvLyBvZiBlbWl0IGNhbGxcclxuICAgICAgICBoYW5kbGVyID0gaGFuZGxlci5zbGljZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhbmRsZXIgJiYgaGFuZGxlci5sZW5ndGgpIHtcclxuICAgICAgaWYgKGFsID4gMykge1xyXG4gICAgICAgIGFyZ3MgPSBuZXcgQXJyYXkoYWwgLSAxKTtcclxuICAgICAgICBmb3IgKGogPSAxOyBqIDwgYWw7IGorKykgYXJnc1tqIC0gMV0gPSBhcmd1bWVudHNbal07XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChpID0gMCwgbCA9IGhhbmRsZXIubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudCA9IHR5cGU7XHJcbiAgICAgICAgc3dpdGNoIChhbCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIGhhbmRsZXJbaV0uY2FsbCh0aGlzKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIGhhbmRsZXJbaV0uY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgaGFuZGxlcltpXS5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBoYW5kbGVyW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuX2FsbCAmJiB0eXBlID09PSAnZXJyb3InKSB7XHJcbiAgICAgIGlmIChhcmd1bWVudHNbMV0gaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgIHRocm93IGFyZ3VtZW50c1sxXTsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmNhdWdodCwgdW5zcGVjaWZpZWQgJ2Vycm9yJyBldmVudC5cIik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAhIXRoaXMuX2FsbDtcclxuICB9O1xyXG5cclxuICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXRBc3luYyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuX2V2ZW50cyB8fCBpbml0LmNhbGwodGhpcyk7XHJcblxyXG4gICAgdmFyIHR5cGUgPSBhcmd1bWVudHNbMF07XHJcblxyXG4gICAgaWYgKHR5cGUgPT09ICduZXdMaXN0ZW5lcicgJiYgIXRoaXMubmV3TGlzdGVuZXIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lcikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtmYWxzZV0pOyB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHByb21pc2VzPSBbXTtcclxuXHJcbiAgICB2YXIgYWwgPSBhcmd1bWVudHMubGVuZ3RoO1xyXG4gICAgdmFyIGFyZ3MsbCxpLGo7XHJcbiAgICB2YXIgaGFuZGxlcjtcclxuXHJcbiAgICBpZiAodGhpcy5fYWxsKSB7XHJcbiAgICAgIGlmIChhbCA+IDMpIHtcclxuICAgICAgICBhcmdzID0gbmV3IEFycmF5KGFsKTtcclxuICAgICAgICBmb3IgKGogPSAxOyBqIDwgYWw7IGorKykgYXJnc1tqXSA9IGFyZ3VtZW50c1tqXTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5fYWxsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIHRoaXMuZXZlbnQgPSB0eXBlO1xyXG4gICAgICAgIHN3aXRjaCAoYWwpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX2FsbFtpXS5jYWxsKHRoaXMsIHR5cGUpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fYWxsW2ldLmNhbGwodGhpcywgdHlwZSwgYXJndW1lbnRzWzFdKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX2FsbFtpXS5jYWxsKHRoaXMsIHR5cGUsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl9hbGxbaV0uYXBwbHkodGhpcywgYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLndpbGRjYXJkKSB7XHJcbiAgICAgIGhhbmRsZXIgPSBbXTtcclxuICAgICAgdmFyIG5zID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnID8gdHlwZS5zcGxpdCh0aGlzLmRlbGltaXRlcikgOiB0eXBlLnNsaWNlKCk7XHJcbiAgICAgIHNlYXJjaExpc3RlbmVyVHJlZS5jYWxsKHRoaXMsIGhhbmRsZXIsIG5zLCB0aGlzLmxpc3RlbmVyVHJlZSwgMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBoYW5kbGVyID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aGlzLmV2ZW50ID0gdHlwZTtcclxuICAgICAgc3dpdGNoIChhbCkge1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgcHJvbWlzZXMucHVzaChoYW5kbGVyLmNhbGwodGhpcykpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcHJvbWlzZXMucHVzaChoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICBwcm9taXNlcy5wdXNoKGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGFyZ3MgPSBuZXcgQXJyYXkoYWwgLSAxKTtcclxuICAgICAgICBmb3IgKGogPSAxOyBqIDwgYWw7IGorKykgYXJnc1tqIC0gMV0gPSBhcmd1bWVudHNbal07XHJcbiAgICAgICAgcHJvbWlzZXMucHVzaChoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChoYW5kbGVyICYmIGhhbmRsZXIubGVuZ3RoKSB7XHJcbiAgICAgIGhhbmRsZXIgPSBoYW5kbGVyLnNsaWNlKCk7XHJcbiAgICAgIGlmIChhbCA+IDMpIHtcclxuICAgICAgICBhcmdzID0gbmV3IEFycmF5KGFsIC0gMSk7XHJcbiAgICAgICAgZm9yIChqID0gMTsgaiA8IGFsOyBqKyspIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBoYW5kbGVyLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIHRoaXMuZXZlbnQgPSB0eXBlO1xyXG4gICAgICAgIHN3aXRjaCAoYWwpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKGhhbmRsZXJbaV0uY2FsbCh0aGlzKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKGhhbmRsZXJbaV0uY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlcltpXS5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcHJvbWlzZXMucHVzaChoYW5kbGVyW2ldLmFwcGx5KHRoaXMsIGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuX2FsbCAmJiB0eXBlID09PSAnZXJyb3InKSB7XHJcbiAgICAgIGlmIChhcmd1bWVudHNbMV0gaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChhcmd1bWVudHNbMV0pOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIlVuY2F1Z2h0LCB1bnNwZWNpZmllZCAnZXJyb3InIGV2ZW50LlwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XHJcbiAgfTtcclxuXHJcbiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XHJcbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhpcy5vbkFueSh0eXBlKTtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29uIG9ubHkgYWNjZXB0cyBpbnN0YW5jZXMgb2YgRnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2V2ZW50cyB8fCBpbml0LmNhbGwodGhpcyk7XHJcblxyXG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PSBcIm5ld0xpc3RlbmVyc1wiISBCZWZvcmVcclxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJzXCIuXHJcbiAgICB0aGlzLmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xyXG5cclxuICAgIGlmICh0aGlzLndpbGRjYXJkKSB7XHJcbiAgICAgIGdyb3dMaXN0ZW5lclRyZWUuY2FsbCh0aGlzLCB0eXBlLCBsaXN0ZW5lcik7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKSB7XHJcbiAgICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxyXG4gICAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuX2V2ZW50c1t0eXBlXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIC8vIENoYW5nZSB0byBhcnJheS5cclxuICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxyXG4gICAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQgJiZcclxuICAgICAgICB0aGlzLl9ldmVudHMubWF4TGlzdGVuZXJzID4gMCAmJlxyXG4gICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiB0aGlzLl9ldmVudHMubWF4TGlzdGVuZXJzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQgPSB0cnVlO1xyXG4gICAgICAgIGxvZ1Bvc3NpYmxlTWVtb3J5TGVhay5jYWxsKHRoaXMsIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgsIHR5cGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbkFueSA9IGZ1bmN0aW9uKGZuKSB7XHJcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignb25Bbnkgb25seSBhY2NlcHRzIGluc3RhbmNlcyBvZiBGdW5jdGlvbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fYWxsKSB7XHJcbiAgICAgIHRoaXMuX2FsbCA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCB0aGUgZnVuY3Rpb24gdG8gdGhlIGV2ZW50IGxpc3RlbmVyIGNvbGxlY3Rpb24uXHJcbiAgICB0aGlzLl9hbGwucHVzaChmbik7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbjtcclxuXHJcbiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xyXG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlbW92ZUxpc3RlbmVyIG9ubHkgdGFrZXMgaW5zdGFuY2VzIG9mIEZ1bmN0aW9uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGhhbmRsZXJzLGxlYWZzPVtdO1xyXG5cclxuICAgIGlmKHRoaXMud2lsZGNhcmQpIHtcclxuICAgICAgdmFyIG5zID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnID8gdHlwZS5zcGxpdCh0aGlzLmRlbGltaXRlcikgOiB0eXBlLnNsaWNlKCk7XHJcbiAgICAgIGxlYWZzID0gc2VhcmNoTGlzdGVuZXJUcmVlLmNhbGwodGhpcywgbnVsbCwgbnMsIHRoaXMubGlzdGVuZXJUcmVlLCAwKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBkb2VzIG5vdCB1c2UgbGlzdGVuZXJzKCksIHNvIG5vIHNpZGUgZWZmZWN0IG9mIGNyZWF0aW5nIF9ldmVudHNbdHlwZV1cclxuICAgICAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pIHJldHVybiB0aGlzO1xyXG4gICAgICBoYW5kbGVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcclxuICAgICAgbGVhZnMucHVzaCh7X2xpc3RlbmVyczpoYW5kbGVyc30pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIGlMZWFmPTA7IGlMZWFmPGxlYWZzLmxlbmd0aDsgaUxlYWYrKykge1xyXG4gICAgICB2YXIgbGVhZiA9IGxlYWZzW2lMZWFmXTtcclxuICAgICAgaGFuZGxlcnMgPSBsZWFmLl9saXN0ZW5lcnM7XHJcbiAgICAgIGlmIChpc0FycmF5KGhhbmRsZXJzKSkge1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb24gPSAtMTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaGFuZGxlcnNbaV0gPT09IGxpc3RlbmVyIHx8XHJcbiAgICAgICAgICAgIChoYW5kbGVyc1tpXS5saXN0ZW5lciAmJiBoYW5kbGVyc1tpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHx8XHJcbiAgICAgICAgICAgIChoYW5kbGVyc1tpXS5fb3JpZ2luICYmIGhhbmRsZXJzW2ldLl9vcmlnaW4gPT09IGxpc3RlbmVyKSkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLndpbGRjYXJkKSB7XHJcbiAgICAgICAgICBsZWFmLl9saXN0ZW5lcnMuc3BsaWNlKHBvc2l0aW9uLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0uc3BsaWNlKHBvc2l0aW9uLCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChoYW5kbGVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGlmKHRoaXMud2lsZGNhcmQpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGxlYWYuX2xpc3RlbmVycztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIiwgdHlwZSwgbGlzdGVuZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChoYW5kbGVycyA9PT0gbGlzdGVuZXIgfHxcclxuICAgICAgICAoaGFuZGxlcnMubGlzdGVuZXIgJiYgaGFuZGxlcnMubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB8fFxyXG4gICAgICAgIChoYW5kbGVycy5fb3JpZ2luICYmIGhhbmRsZXJzLl9vcmlnaW4gPT09IGxpc3RlbmVyKSkge1xyXG4gICAgICAgIGlmKHRoaXMud2lsZGNhcmQpIHtcclxuICAgICAgICAgIGRlbGV0ZSBsZWFmLl9saXN0ZW5lcnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsIHR5cGUsIGxpc3RlbmVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5R2FyYmFnZUNvbGxlY3Qocm9vdCkge1xyXG4gICAgICBpZiAocm9vdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMocm9vdCk7XHJcbiAgICAgIGZvciAodmFyIGkgaW4ga2V5cykge1xyXG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgIHZhciBvYmogPSByb290W2tleV07XHJcbiAgICAgICAgaWYgKChvYmogaW5zdGFuY2VvZiBGdW5jdGlvbikgfHwgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHx8IChvYmogPT09IG51bGwpKVxyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgcmVjdXJzaXZlbHlHYXJiYWdlQ29sbGVjdChyb290W2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGRlbGV0ZSByb290W2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZWN1cnNpdmVseUdhcmJhZ2VDb2xsZWN0KHRoaXMubGlzdGVuZXJUcmVlKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZkFueSA9IGZ1bmN0aW9uKGZuKSB7XHJcbiAgICB2YXIgaSA9IDAsIGwgPSAwLCBmbnM7XHJcbiAgICBpZiAoZm4gJiYgdGhpcy5fYWxsICYmIHRoaXMuX2FsbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZucyA9IHRoaXMuX2FsbDtcclxuICAgICAgZm9yKGkgPSAwLCBsID0gZm5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmKGZuID09PSBmbnNbaV0pIHtcclxuICAgICAgICAgIGZucy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICB0aGlzLmVtaXQoXCJyZW1vdmVMaXN0ZW5lckFueVwiLCBmbik7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZucyA9IHRoaXMuX2FsbDtcclxuICAgICAgZm9yKGkgPSAwLCBsID0gZm5zLmxlbmd0aDsgaSA8IGw7IGkrKylcclxuICAgICAgICB0aGlzLmVtaXQoXCJyZW1vdmVMaXN0ZW5lckFueVwiLCBmbnNbaV0pO1xyXG4gICAgICB0aGlzLl9hbGwgPSBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcclxuXHJcbiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAhdGhpcy5fZXZlbnRzIHx8IGluaXQuY2FsbCh0aGlzKTtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMud2lsZGNhcmQpIHtcclxuICAgICAgdmFyIG5zID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnID8gdHlwZS5zcGxpdCh0aGlzLmRlbGltaXRlcikgOiB0eXBlLnNsaWNlKCk7XHJcbiAgICAgIHZhciBsZWFmcyA9IHNlYXJjaExpc3RlbmVyVHJlZS5jYWxsKHRoaXMsIG51bGwsIG5zLCB0aGlzLmxpc3RlbmVyVHJlZSwgMCk7XHJcblxyXG4gICAgICBmb3IgKHZhciBpTGVhZj0wOyBpTGVhZjxsZWFmcy5sZW5ndGg7IGlMZWFmKyspIHtcclxuICAgICAgICB2YXIgbGVhZiA9IGxlYWZzW2lMZWFmXTtcclxuICAgICAgICBsZWFmLl9saXN0ZW5lcnMgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLl9ldmVudHMpIHtcclxuICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIEV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xyXG4gICAgaWYgKHRoaXMud2lsZGNhcmQpIHtcclxuICAgICAgdmFyIGhhbmRsZXJzID0gW107XHJcbiAgICAgIHZhciBucyA9IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyA/IHR5cGUuc3BsaXQodGhpcy5kZWxpbWl0ZXIpIDogdHlwZS5zbGljZSgpO1xyXG4gICAgICBzZWFyY2hMaXN0ZW5lclRyZWUuY2FsbCh0aGlzLCBoYW5kbGVycywgbnMsIHRoaXMubGlzdGVuZXJUcmVlLCAwKTtcclxuICAgICAgcmV0dXJuIGhhbmRsZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2V2ZW50cyB8fCBpbml0LmNhbGwodGhpcyk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFtdO1xyXG4gICAgaWYgKCFpc0FycmF5KHRoaXMuX2V2ZW50c1t0eXBlXSkpIHtcclxuICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRzW3R5cGVdO1xyXG4gIH07XHJcblxyXG4gIEV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycyh0eXBlKS5sZW5ndGg7XHJcbiAgfTtcclxuXHJcbiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnNBbnkgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICBpZih0aGlzLl9hbGwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2FsbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gIH07XHJcblxyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXHJcbiAgICBkZWZpbmUoZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBFdmVudEVtaXR0ZXI7XHJcbiAgICB9KTtcclxuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xyXG4gICAgLy8gQ29tbW9uSlNcclxuICAgIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xyXG4gIH1cclxuICBlbHNlIHtcclxuICAgIC8vIEJyb3dzZXIgZ2xvYmFsLlxyXG4gICAgd2luZG93LkV2ZW50RW1pdHRlcjIgPSBFdmVudEVtaXR0ZXI7XHJcbiAgfVxyXG59KCk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/eventemitter2/lib/eventemitter2.js\n") },
vendor: 9,041 bytes, line 1
1"./node_modules/fitvids/index.js": function (module, exports, __webpack_require__) { "use strict"; eval("\n\n\nvar selectors = [\n\t'iframe[src*=\"player.vimeo.com\"]',\n\t'iframe[src*=\"youtube.com\"]',\n\t'iframe[src*=\"youtube-nocookie.com\"]',\n\t'iframe[src*=\"kickstarter.com\"][src*=\"video.html\"]',\n\t'object'\n]\n\nvar css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}'\n\nmodule.exports = function (parentSelector, opts) {\n\tparentSelector = parentSelector || 'body'\n\topts = opts || {}\n\n\tif (isObject(parentSelector)) {\n\t\topts = parentSelector\n\t\tparentSelector = 'body'\n\t}\n\n\topts.ignore = opts.ignore || ''\n\topts.players = opts.players || ''\n\n\tvar containers = queryAll(parentSelector)\n\tif (!hasLength(containers)) return\n\n\tif (!document.getElementById('fit-vids-style')) {\n\t\tvar head = document.head || document.getElementsByTagName('head')[0]\n\t\thead.appendChild(styles())\n\t}\n\n\tvar custom = toSelectorArray(opts.players) || []\n\tvar ignored = toSelectorArray(opts.ignore) || []\n\tvar selector = selectors\n\t\t.filter(notIgnored(ignored))\n\t\t.concat(custom)\n\t\t.join()\n\n\tif (!hasLength(selector)) return\n\n\tcontainers.forEach(function (container) {\n\t\tvar videos = queryAll(container, selector)\n\t\tvideos.forEach(function (video) {\n\t\t\twrap(video)\n\t\t})\n\t})\n}\n\nfunction queryAll (el, selector) {\n\tif (typeof el === 'string') {\n\t\tselector = el\n\t\tel = document\n\t}\n\treturn Array.prototype.slice.call(el.querySelectorAll(selector))\n}\n\nfunction toSelectorArray (input) {\n\tif (typeof input === 'string') {\n\t\treturn input.split(',').map(trim).filter(hasLength)\n\t} else if (isArray(input)) {\n\t\treturn flatten(input.map(toSelectorArray).filter(hasLength))\n\t}\n\treturn input || []\n}\n\nfunction wrap (el) {\n\tif (/fluid-width-video-wrapper/.test(el.parentNode.className)) return\n\n\tvar widthAttr = parseInt(el.getAttribute('width'), 10)\n\tvar heightAttr = parseInt(el.getAttribute('height'), 10)\n\n\tvar width = !isNaN(widthAttr) ? widthAttr : el.clientWidth\n\tvar height = !isNaN(heightAttr) ? heightAttr : el.clientHeight\n\tvar aspect = height / width\n\n\tel.removeAttribute('width')\n\tel.removeAttribute('height')\n\n\tvar wrapper = document.createElement('div')\n\tel.parentNode.insertBefore(wrapper, el)\n\twrapper.className = 'fluid-width-video-wrapper'\n\twrapper.style.paddingTop = (aspect * 100) + '%'\n\twrapper.appendChild(el)\n}\n\nfunction styles () {\n\tvar div = document.createElement('div')\n\tdiv.innerHTML = '<p>x</p><style id=\"fit-vids-style\">' + css + '</style>'\n\treturn div.childNodes[1]\n}\n\nfunction notIgnored (ignored) {\n\tif (ignored.length < 1) {\n\t\treturn function () {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn function (selector) {\n\t\treturn ignored.indexOf(selector) === -1\n\t}\n}\n\nfunction hasLength (input) {\n\treturn input.length > 0\n}\n\nfunction trim (str) {\n\treturn str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction flatten (input) {\n\treturn [].concat.apply([], input)\n}\n\nfunction isObject (input) {\n\treturn Object.prototype.toString.call(input) === '[object Object]'\n}\n\nfunction isArray (input) {\n\treturn Object.prototype.toString.call(input) === '[object Array]'\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZml0dmlkcy9pbmRleC5qcz80ZTlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0MsV0FBVyxrQkFBa0IsV0FBVyxzR0FBc0csa0JBQWtCLE1BQU0sT0FBTyxXQUFXLGFBQWE7O0FBRTNPO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZml0dmlkcy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuJ3VzZSBzdHJpY3QnXG5cbnZhciBzZWxlY3RvcnMgPSBbXG5cdCdpZnJhbWVbc3JjKj1cInBsYXllci52aW1lby5jb21cIl0nLFxuXHQnaWZyYW1lW3NyYyo9XCJ5b3V0dWJlLmNvbVwiXScsXG5cdCdpZnJhbWVbc3JjKj1cInlvdXR1YmUtbm9jb29raWUuY29tXCJdJyxcblx0J2lmcmFtZVtzcmMqPVwia2lja3N0YXJ0ZXIuY29tXCJdW3NyYyo9XCJ2aWRlby5odG1sXCJdJyxcblx0J29iamVjdCdcbl1cblxudmFyIGNzcyA9ICcuZmx1aWQtd2lkdGgtdmlkZW8td3JhcHBlcnt3aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MDt9LmZsdWlkLXdpZHRoLXZpZGVvLXdyYXBwZXIgaWZyYW1lLC5mbHVpZC13aWR0aC12aWRlby13cmFwcGVyIG9iamVjdCwuZmx1aWQtd2lkdGgtdmlkZW8td3JhcHBlciBlbWJlZCB7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7fSdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFyZW50U2VsZWN0b3IsIG9wdHMpIHtcblx0cGFyZW50U2VsZWN0b3IgPSBwYXJlbnRTZWxlY3RvciB8fCAnYm9keSdcblx0b3B0cyA9IG9wdHMgfHwge31cblxuXHRpZiAoaXNPYmplY3QocGFyZW50U2VsZWN0b3IpKSB7XG5cdFx0b3B0cyA9IHBhcmVudFNlbGVjdG9yXG5cdFx0cGFyZW50U2VsZWN0b3IgPSAnYm9keSdcblx0fVxuXG5cdG9wdHMuaWdub3JlID0gb3B0cy5pZ25vcmUgfHwgJydcblx0b3B0cy5wbGF5ZXJzID0gb3B0cy5wbGF5ZXJzIHx8ICcnXG5cblx0dmFyIGNvbnRhaW5lcnMgPSBxdWVyeUFsbChwYXJlbnRTZWxlY3Rvcilcblx0aWYgKCFoYXNMZW5ndGgoY29udGFpbmVycykpIHJldHVyblxuXG5cdGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpdC12aWRzLXN0eWxlJykpIHtcblx0XHR2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXVxuXHRcdGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVzKCkpXG5cdH1cblxuXHR2YXIgY3VzdG9tID0gdG9TZWxlY3RvckFycmF5KG9wdHMucGxheWVycykgfHwgW11cblx0dmFyIGlnbm9yZWQgPSB0b1NlbGVjdG9yQXJyYXkob3B0cy5pZ25vcmUpIHx8IFtdXG5cdHZhciBzZWxlY3RvciA9IHNlbGVjdG9yc1xuXHRcdC5maWx0ZXIobm90SWdub3JlZChpZ25vcmVkKSlcblx0XHQuY29uY2F0KGN1c3RvbSlcblx0XHQuam9pbigpXG5cblx0aWYgKCFoYXNMZW5ndGgoc2VsZWN0b3IpKSByZXR1cm5cblxuXHRjb250YWluZXJzLmZvckVhY2goZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuXHRcdHZhciB2aWRlb3MgPSBxdWVyeUFsbChjb250YWluZXIsIHNlbGVjdG9yKVxuXHRcdHZpZGVvcy5mb3JFYWNoKGZ1bmN0aW9uICh2aWRlbykge1xuXHRcdFx0d3JhcCh2aWRlbylcblx0XHR9KVxuXHR9KVxufVxuXG5mdW5jdGlvbiBxdWVyeUFsbCAoZWwsIHNlbGVjdG9yKSB7XG5cdGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG5cdFx0c2VsZWN0b3IgPSBlbFxuXHRcdGVsID0gZG9jdW1lbnRcblx0fVxuXHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpXG59XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3JBcnJheSAoaW5wdXQpIHtcblx0aWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gaW5wdXQuc3BsaXQoJywnKS5tYXAodHJpbSkuZmlsdGVyKGhhc0xlbmd0aClcblx0fSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuXHRcdHJldHVybiBmbGF0dGVuKGlucHV0Lm1hcCh0b1NlbGVjdG9yQXJyYXkpLmZpbHRlcihoYXNMZW5ndGgpKVxuXHR9XG5cdHJldHVybiBpbnB1dCB8fCBbXVxufVxuXG5mdW5jdGlvbiB3cmFwIChlbCkge1xuXHRpZiAoL2ZsdWlkLXdpZHRoLXZpZGVvLXdyYXBwZXIvLnRlc3QoZWwucGFyZW50Tm9kZS5jbGFzc05hbWUpKSByZXR1cm5cblxuXHR2YXIgd2lkdGhBdHRyID0gcGFyc2VJbnQoZWwuZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMClcblx0dmFyIGhlaWdodEF0dHIgPSBwYXJzZUludChlbC5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLCAxMClcblxuXHR2YXIgd2lkdGggPSAhaXNOYU4od2lkdGhBdHRyKSA/IHdpZHRoQXR0ciA6IGVsLmNsaWVudFdpZHRoXG5cdHZhciBoZWlnaHQgPSAhaXNOYU4oaGVpZ2h0QXR0cikgPyBoZWlnaHRBdHRyIDogZWwuY2xpZW50SGVpZ2h0XG5cdHZhciBhc3BlY3QgPSBoZWlnaHQgLyB3aWR0aFxuXG5cdGVsLnJlbW92ZUF0dHJpYnV0ZSgnd2lkdGgnKVxuXHRlbC5yZW1vdmVBdHRyaWJ1dGUoJ2hlaWdodCcpXG5cblx0dmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuXHRlbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLCBlbClcblx0d3JhcHBlci5jbGFzc05hbWUgPSAnZmx1aWQtd2lkdGgtdmlkZW8td3JhcHBlcidcblx0d3JhcHBlci5zdHlsZS5wYWRkaW5nVG9wID0gKGFzcGVjdCAqIDEwMCkgKyAnJSdcblx0d3JhcHBlci5hcHBlbmRDaGlsZChlbClcbn1cblxuZnVuY3Rpb24gc3R5bGVzICgpIHtcblx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG5cdGRpdi5pbm5lckhUTUwgPSAnPHA+eDwvcD48c3R5bGUgaWQ9XCJmaXQtdmlkcy1zdHlsZVwiPicgKyBjc3MgKyAnPC9zdHlsZT4nXG5cdHJldHVybiBkaXYuY2hpbGROb2Rlc1sxXVxufVxuXG5mdW5jdGlvbiBub3RJZ25vcmVkIChpZ25vcmVkKSB7XG5cdGlmIChpZ25vcmVkLmxlbmd0aCA8IDEpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuXHRcdHJldHVybiBpZ25vcmVkLmluZGV4T2Yoc2VsZWN0b3IpID09PSAtMVxuXHR9XG59XG5cbmZ1bmN0aW9uIGhhc0xlbmd0aCAoaW5wdXQpIHtcblx0cmV0dXJuIGlucHV0Lmxlbmd0aCA+IDBcbn1cblxuZnVuY3Rpb24gdHJpbSAoc3RyKSB7XG5cdHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4gKGlucHV0KSB7XG5cdHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIGlucHV0KVxufVxuXG5mdW5jdGlvbiBpc09iamVjdCAoaW5wdXQpIHtcblx0cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkgKGlucHV0KSB7XG5cdHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/fitvids/index.js\n") },
vendor: 16,635 bytes, line 1
1"./node_modules/fizzy-ui-utils/utils.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! desandro-matches-selector/matches-selector */ \"./node_modules/desandro-matches-selector/matches-selector.js\")\n ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( matchesSelector ) {\n return factory( window, matchesSelector );\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZml6enktdWktdXRpbHMvdXRpbHMuanM/NjE1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTyxJQUF5QztBQUNoRDtBQUNBLElBQUksaUNBQVE7QUFDWixNQUFNLHFJQUE0QztBQUNsRCxLQUFLLG1DQUFFO0FBQ1A7QUFDQSxLQUFLO0FBQUEsb0dBQUM7QUFDTixHQUFHLE1BQU0sRUFZTjs7QUFFSCxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsdUJBQXVCO0FBQ3pDO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsR0FBRztBQUNIOztBQUVBOztBQUVBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZml6enktdWktdXRpbHMvdXRpbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpenp5IFVJIHV0aWxzIHYyLjAuN1xuICogTUlUIGxpY2Vuc2VcbiAqL1xuXG4vKmpzaGludCBicm93c2VyOiB0cnVlLCB1bmRlZjogdHJ1ZSwgdW51c2VkOiB0cnVlLCBzdHJpY3Q6IHRydWUgKi9cblxuKCBmdW5jdGlvbiggd2luZG93LCBmYWN0b3J5ICkge1xuICAvLyB1bml2ZXJzYWwgbW9kdWxlIGRlZmluaXRpb25cbiAgLypqc2hpbnQgc3RyaWN0OiBmYWxzZSAqLyAvKmdsb2JhbHMgZGVmaW5lLCBtb2R1bGUsIHJlcXVpcmUgKi9cblxuICBpZiAoIHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkge1xuICAgIC8vIEFNRFxuICAgIGRlZmluZSggW1xuICAgICAgJ2Rlc2FuZHJvLW1hdGNoZXMtc2VsZWN0b3IvbWF0Y2hlcy1zZWxlY3RvcidcbiAgICBdLCBmdW5jdGlvbiggbWF0Y2hlc1NlbGVjdG9yICkge1xuICAgICAgcmV0dXJuIGZhY3RvcnkoIHdpbmRvdywgbWF0Y2hlc1NlbGVjdG9yICk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMgKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoXG4gICAgICB3aW5kb3csXG4gICAgICByZXF1aXJlKCdkZXNhbmRyby1tYXRjaGVzLXNlbGVjdG9yJylcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIGJyb3dzZXIgZ2xvYmFsXG4gICAgd2luZG93LmZpenp5VUlVdGlscyA9IGZhY3RvcnkoXG4gICAgICB3aW5kb3csXG4gICAgICB3aW5kb3cubWF0Y2hlc1NlbGVjdG9yXG4gICAgKTtcbiAgfVxuXG59KCB3aW5kb3csIGZ1bmN0aW9uIGZhY3RvcnkoIHdpbmRvdywgbWF0Y2hlc1NlbGVjdG9yICkge1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHt9O1xuXG4vLyAtLS0tLSBleHRlbmQgLS0tLS0gLy9cblxuLy8gZXh0ZW5kcyBvYmplY3RzXG51dGlscy5leHRlbmQgPSBmdW5jdGlvbiggYSwgYiApIHtcbiAgZm9yICggdmFyIHByb3AgaW4gYiApIHtcbiAgICBhWyBwcm9wIF0gPSBiWyBwcm9wIF07XG4gIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAtLS0tLSBtb2R1bG8gLS0tLS0gLy9cblxudXRpbHMubW9kdWxvID0gZnVuY3Rpb24oIG51bSwgZGl2ICkge1xuICByZXR1cm4gKCAoIG51bSAlIGRpdiApICsgZGl2ICkgJSBkaXY7XG59O1xuXG4vLyAtLS0tLSBtYWtlQXJyYXkgLS0tLS0gLy9cblxudmFyIGFycmF5U2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbi8vIHR1cm4gZWxlbWVudCBvciBub2RlTGlzdCBpbnRvIGFuIGFycmF5XG51dGlscy5tYWtlQXJyYXkgPSBmdW5jdGlvbiggb2JqICkge1xuICBpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuICAgIC8vIHVzZSBvYmplY3QgaWYgYWxyZWFkeSBhbiBhcnJheVxuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgLy8gcmV0dXJuIGVtcHR5IGFycmF5IGlmIHVuZGVmaW5lZCBvciBudWxsLiAjNlxuICBpZiAoIG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgaXNBcnJheUxpa2UgPSB0eXBlb2Ygb2JqID09ICdvYmplY3QnICYmIHR5cGVvZiBvYmoubGVuZ3RoID09ICdudW1iZXInO1xuICBpZiAoIGlzQXJyYXlMaWtlICkge1xuICAgIC8vIGNvbnZlcnQgbm9kZUxpc3QgdG8gYXJyYXlcbiAgICByZXR1cm4gYXJyYXlTbGljZS5jYWxsKCBvYmogKTtcbiAgfVxuXG4gIC8vIGFycmF5IG9mIHNpbmdsZSBpbmRleFxuICByZXR1cm4gWyBvYmogXTtcbn07XG5cbi8vIC0tLS0tIHJlbW92ZUZyb20gLS0tLS0gLy9cblxudXRpbHMucmVtb3ZlRnJvbSA9IGZ1bmN0aW9uKCBhcnksIG9iaiApIHtcbiAgdmFyIGluZGV4ID0gYXJ5LmluZGV4T2YoIG9iaiApO1xuICBpZiAoIGluZGV4ICE9IC0xICkge1xuICAgIGFyeS5zcGxpY2UoIGluZGV4LCAxICk7XG4gIH1cbn07XG5cbi8vIC0tLS0tIGdldFBhcmVudCAtLS0tLSAvL1xuXG51dGlscy5nZXRQYXJlbnQgPSBmdW5jdGlvbiggZWxlbSwgc2VsZWN0b3IgKSB7XG4gIHdoaWxlICggZWxlbS5wYXJlbnROb2RlICYmIGVsZW0gIT0gZG9jdW1lbnQuYm9keSApIHtcbiAgICBlbGVtID0gZWxlbS5wYXJlbnROb2RlO1xuICAgIGlmICggbWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBzZWxlY3RvciApICkge1xuICAgICAgcmV0dXJuIGVsZW07XG4gICAgfVxuICB9XG59O1xuXG4vLyAtLS0tLSBnZXRRdWVyeUVsZW1lbnQgLS0tLS0gLy9cblxuLy8gdXNlIGVsZW1lbnQgYXMgc2VsZWN0b3Igc3RyaW5nXG51dGlscy5nZXRRdWVyeUVsZW1lbnQgPSBmdW5jdGlvbiggZWxlbSApIHtcbiAgaWYgKCB0eXBlb2YgZWxlbSA9PSAnc3RyaW5nJyApIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggZWxlbSApO1xuICB9XG4gIHJldHVybiBlbGVtO1xufTtcblxuLy8gLS0tLS0gaGFuZGxlRXZlbnQgLS0tLS0gLy9cblxuLy8gZW5hYmxlIC5vbnR5cGUgdG8gdHJpZ2dlciBmcm9tIC5hZGRFdmVudExpc3RlbmVyKCBlbGVtLCAndHlwZScgKVxudXRpbHMuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gIHZhciBtZXRob2QgPSAnb24nICsgZXZlbnQudHlwZTtcbiAgaWYgKCB0aGlzWyBtZXRob2QgXSApIHtcbiAgICB0aGlzWyBtZXRob2QgXSggZXZlbnQgKTtcbiAgfVxufTtcblxuLy8gLS0tLS0gZmlsdGVyRmluZEVsZW1lbnRzIC0tLS0tIC8vXG5cbnV0aWxzLmZpbHRlckZpbmRFbGVtZW50cyA9IGZ1bmN0aW9uKCBlbGVtcywgc2VsZWN0b3IgKSB7XG4gIC8vIG1ha2UgYXJyYXkgb2YgZWxlbXNcbiAgZWxlbXMgPSB1dGlscy5tYWtlQXJyYXkoIGVsZW1zICk7XG4gIHZhciBmZkVsZW1zID0gW107XG5cbiAgZWxlbXMuZm9yRWFjaCggZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgLy8gY2hlY2sgdGhhdCBlbGVtIGlzIGFuIGFjdHVhbCBlbGVtZW50XG4gICAgaWYgKCAhKCBlbGVtIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gYWRkIGVsZW0gaWYgbm8gc2VsZWN0b3JcbiAgICBpZiAoICFzZWxlY3RvciApIHtcbiAgICAgIGZmRWxlbXMucHVzaCggZWxlbSApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBmaWx0ZXIgJiBmaW5kIGl0ZW1zIGlmIHdlIGhhdmUgYSBzZWxlY3RvclxuICAgIC8vIGZpbHRlclxuICAgIGlmICggbWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBzZWxlY3RvciApICkge1xuICAgICAgZmZFbGVtcy5wdXNoKCBlbGVtICk7XG4gICAgfVxuICAgIC8vIGZpbmQgY2hpbGRyZW5cbiAgICB2YXIgY2hpbGRFbGVtcyA9IGVsZW0ucXVlcnlTZWxlY3RvckFsbCggc2VsZWN0b3IgKTtcbiAgICAvLyBjb25jYXQgY2hpbGRFbGVtcyB0byBmaWx0ZXJGb3VuZCBhcnJheVxuICAgIGZvciAoIHZhciBpPTA7IGkgPCBjaGlsZEVsZW1zLmxlbmd0aDsgaSsrICkge1xuICAgICAgZmZFbGVtcy5wdXNoKCBjaGlsZEVsZW1zW2ldICk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZmZFbGVtcztcbn07XG5cbi8vIC0tLS0tIGRlYm91bmNlTWV0aG9kIC0tLS0tIC8vXG5cbnV0aWxzLmRlYm91bmNlTWV0aG9kID0gZnVuY3Rpb24oIF9jbGFzcywgbWV0aG9kTmFtZSwgdGhyZXNob2xkICkge1xuICB0aHJlc2hvbGQgPSB0aHJlc2hvbGQgfHwgMTAwO1xuICAvLyBvcmlnaW5hbCBtZXRob2RcbiAgdmFyIG1ldGhvZCA9IF9jbGFzcy5wcm90b3R5cGVbIG1ldGhvZE5hbWUgXTtcbiAgdmFyIHRpbWVvdXROYW1lID0gbWV0aG9kTmFtZSArICdUaW1lb3V0JztcblxuICBfY2xhc3MucHJvdG90eXBlWyBtZXRob2ROYW1lIF0gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdGltZW91dCA9IHRoaXNbIHRpbWVvdXROYW1lIF07XG4gICAgY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHRoaXNbIHRpbWVvdXROYW1lIF0gPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcbiAgICAgIG1ldGhvZC5hcHBseSggX3RoaXMsIGFyZ3MgKTtcbiAgICAgIGRlbGV0ZSBfdGhpc1sgdGltZW91dE5hbWUgXTtcbiAgICB9LCB0aHJlc2hvbGQgKTtcbiAgfTtcbn07XG5cbi8vIC0tLS0tIGRvY1JlYWR5IC0tLS0tIC8vXG5cbnV0aWxzLmRvY1JlYWR5ID0gZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuICB2YXIgcmVhZHlTdGF0ZSA9IGRvY3VtZW50LnJlYWR5U3RhdGU7XG4gIGlmICggcmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnIHx8IHJlYWR5U3RhdGUgPT0gJ2ludGVyYWN0aXZlJyApIHtcbiAgICAvLyBkbyBhc3luYyB0byBhbGxvdyBmb3Igb3RoZXIgc2NyaXB0cyB0byBydW4uIG1ldGFmaXp6eS9mbGlja2l0eSM0NDFcbiAgICBzZXRUaW1lb3V0KCBjYWxsYmFjayApO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdET01Db250ZW50TG9hZGVkJywgY2FsbGJhY2sgKTtcbiAgfVxufTtcblxuLy8gLS0tLS0gaHRtbEluaXQgLS0tLS0gLy9cblxuLy8gaHR0cDovL2phbWVzcm9iZXJ0cy5uYW1lL2Jsb2cvMjAxMC8wMi8yMi9zdHJpbmctZnVuY3Rpb25zLWZvci1qYXZhc2NyaXB0LXRyaW0tdG8tY2FtZWwtY2FzZS10by1kYXNoZWQtYW5kLXRvLXVuZGVyc2NvcmUvXG51dGlscy50b0Rhc2hlZCA9IGZ1bmN0aW9uKCBzdHIgKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSggLyguKShbQS1aXSkvZywgZnVuY3Rpb24oIG1hdGNoLCAkMSwgJDIgKSB7XG4gICAgcmV0dXJuICQxICsgJy0nICsgJDI7XG4gIH0pLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgY29uc29sZSA9IHdpbmRvdy5jb25zb2xlO1xuLyoqXG4gKiBhbGxvdyB1c2VyIHRvIGluaXRpYWxpemUgY2xhc3NlcyB2aWEgW2RhdGEtbmFtZXNwYWNlXSBvciAuanMtbmFtZXNwYWNlIGNsYXNzXG4gKiBodG1sSW5pdCggV2lkZ2V0LCAnd2lkZ2V0TmFtZScgKVxuICogb3B0aW9ucyBhcmUgcGFyc2VkIGZyb20gZGF0YS1uYW1lc3BhY2Utb3B0aW9uc1xuICovXG51dGlscy5odG1sSW5pdCA9IGZ1bmN0aW9uKCBXaWRnZXRDbGFzcywgbmFtZXNwYWNlICkge1xuICB1dGlscy5kb2NSZWFkeSggZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRhc2hlZE5hbWVzcGFjZSA9IHV0aWxzLnRvRGFzaGVkKCBuYW1lc3BhY2UgKTtcbiAgICB2YXIgZGF0YUF0dHIgPSAnZGF0YS0nICsgZGFzaGVkTmFtZXNwYWNlO1xuICAgIHZhciBkYXRhQXR0ckVsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJ1snICsgZGF0YUF0dHIgKyAnXScgKTtcbiAgICB2YXIganNEYXNoRWxlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnLmpzLScgKyBkYXNoZWROYW1lc3BhY2UgKTtcbiAgICB2YXIgZWxlbXMgPSB1dGlscy5tYWtlQXJyYXkoIGRhdGFBdHRyRWxlbXMgKVxuICAgICAgLmNvbmNhdCggdXRpbHMubWFrZUFycmF5KCBqc0Rhc2hFbGVtcyApICk7XG4gICAgdmFyIGRhdGFPcHRpb25zQXR0ciA9IGRhdGFBdHRyICsgJy1vcHRpb25zJztcbiAgICB2YXIgalF1ZXJ5ID0gd2luZG93LmpRdWVyeTtcblxuICAgIGVsZW1zLmZvckVhY2goIGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgdmFyIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSggZGF0YUF0dHIgKSB8fFxuICAgICAgICBlbGVtLmdldEF0dHJpYnV0ZSggZGF0YU9wdGlvbnNBdHRyICk7XG4gICAgICB2YXIgb3B0aW9ucztcbiAgICAgIHRyeSB7XG4gICAgICAgIG9wdGlvbnMgPSBhdHRyICYmIEpTT04ucGFyc2UoIGF0dHIgKTtcbiAgICAgIH0gY2F0Y2ggKCBlcnJvciApIHtcbiAgICAgICAgLy8gbG9nIGVycm9yLCBkbyBub3QgaW5pdGlhbGl6ZVxuICAgICAgICBpZiAoIGNvbnNvbGUgKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvciggJ0Vycm9yIHBhcnNpbmcgJyArIGRhdGFBdHRyICsgJyBvbiAnICsgZWxlbS5jbGFzc05hbWUgK1xuICAgICAgICAgICc6ICcgKyBlcnJvciApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGluaXRpYWxpemVcbiAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBXaWRnZXRDbGFzcyggZWxlbSwgb3B0aW9ucyApO1xuICAgICAgLy8gbWFrZSBhdmFpbGFibGUgdmlhICQoKS5kYXRhKCduYW1lc3BhY2UnKVxuICAgICAgaWYgKCBqUXVlcnkgKSB7XG4gICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtLCBuYW1lc3BhY2UsIGluc3RhbmNlICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgfSk7XG59O1xuXG4vLyAtLS0tLSAgLS0tLS0gLy9cblxucmV0dXJuIHV0aWxzO1xuXG59KSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/fizzy-ui-utils/utils.js\n") },
vendor: 11,725 bytes, line 1
1"./node_modules/flickity/js/add-remove-cell.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// add, remove cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! ./flickity */ \"./node_modules/flickity/js/flickity.js\"),\n __webpack_require__(/*! fizzy-ui-utils/utils */ \"./node_modules/fizzy-ui-utils/utils.js\")\n ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n });\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {Element, Array, NodeList} elems\n * @param {Integer} index\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {Element, Array, NodeList} elems\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvYWRkLXJlbW92ZS1jZWxsLmpzP2JkN2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQXlDO0FBQ2hEO0FBQ0EsSUFBSSxpQ0FBUTtBQUNaLE1BQU0sK0VBQVk7QUFDbEIsTUFBTSx5RkFBc0I7QUFDNUIsS0FBSyxtQ0FBRTtBQUNQO0FBQ0EsS0FBSztBQUFBLG9HQUFDO0FBQ04sR0FBRyxNQUFNLEVBY047O0FBRUgsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVcseUJBQXlCO0FBQ3BDLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyx5QkFBeUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2ZsaWNraXR5L2pzL2FkZC1yZW1vdmUtY2VsbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGFkZCwgcmVtb3ZlIGNlbGxcbiggZnVuY3Rpb24oIHdpbmRvdywgZmFjdG9yeSApIHtcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIC8qIGpzaGludCBzdHJpY3Q6IGZhbHNlICovXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EXG4gICAgZGVmaW5lKCBbXG4gICAgICAnLi9mbGlja2l0eScsXG4gICAgICAnZml6enktdWktdXRpbHMvdXRpbHMnXG4gICAgXSwgZnVuY3Rpb24oIEZsaWNraXR5LCB1dGlscyApIHtcbiAgICAgIHJldHVybiBmYWN0b3J5KCB3aW5kb3csIEZsaWNraXR5LCB1dGlscyApO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgcmVxdWlyZSgnLi9mbGlja2l0eScpLFxuICAgICAgcmVxdWlyZSgnZml6enktdWktdXRpbHMnKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gYnJvd3NlciBnbG9iYWxcbiAgICBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgd2luZG93LkZsaWNraXR5LFxuICAgICAgd2luZG93LmZpenp5VUlVdGlsc1xuICAgICk7XG4gIH1cblxufSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCB3aW5kb3csIEZsaWNraXR5LCB1dGlscyApIHtcblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBhcHBlbmQgY2VsbHMgdG8gYSBkb2N1bWVudCBmcmFnbWVudFxuZnVuY3Rpb24gZ2V0Q2VsbHNGcmFnbWVudCggY2VsbHMgKSB7XG4gIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgY2VsbHMuZm9yRWFjaCggZnVuY3Rpb24oIGNlbGwgKSB7XG4gICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNlbGwuZWxlbWVudCApO1xuICB9KTtcbiAgcmV0dXJuIGZyYWdtZW50O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhZGQvcmVtb3ZlIGNlbGwgcHJvdG90eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbnZhciBwcm90byA9IEZsaWNraXR5LnByb3RvdHlwZTtcblxuLyoqXG4gKiBJbnNlcnQsIHByZXBlbmQsIG9yIGFwcGVuZCBjZWxsc1xuICogQHBhcmFtIHtFbGVtZW50LCBBcnJheSwgTm9kZUxpc3R9IGVsZW1zXG4gKiBAcGFyYW0ge0ludGVnZXJ9IGluZGV4XG4gKi9cbnByb3RvLmluc2VydCA9IGZ1bmN0aW9uKCBlbGVtcywgaW5kZXggKSB7XG4gIHZhciBjZWxscyA9IHRoaXMuX21ha2VDZWxscyggZWxlbXMgKTtcbiAgaWYgKCAhY2VsbHMgfHwgIWNlbGxzLmxlbmd0aCApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGxlbiA9IHRoaXMuY2VsbHMubGVuZ3RoO1xuICAvLyBkZWZhdWx0IHRvIGFwcGVuZFxuICBpbmRleCA9IGluZGV4ID09PSB1bmRlZmluZWQgPyBsZW4gOiBpbmRleDtcbiAgLy8gYWRkIGNlbGxzIHdpdGggZG9jdW1lbnQgZnJhZ21lbnRcbiAgdmFyIGZyYWdtZW50ID0gZ2V0Q2VsbHNGcmFnbWVudCggY2VsbHMgKTtcbiAgLy8gYXBwZW5kIHRvIHNsaWRlclxuICB2YXIgaXNBcHBlbmQgPSBpbmRleCA9PSBsZW47XG4gIGlmICggaXNBcHBlbmQgKSB7XG4gICAgdGhpcy5zbGlkZXIuYXBwZW5kQ2hpbGQoIGZyYWdtZW50ICk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGluc2VydENlbGxFbGVtZW50ID0gdGhpcy5jZWxsc1sgaW5kZXggXS5lbGVtZW50O1xuICAgIHRoaXMuc2xpZGVyLmluc2VydEJlZm9yZSggZnJhZ21lbnQsIGluc2VydENlbGxFbGVtZW50ICk7XG4gIH1cbiAgLy8gYWRkIHRvIHRoaXMuY2VsbHNcbiAgaWYgKCBpbmRleCA9PT0gMCApIHtcbiAgICAvLyBwcmVwZW5kLCBhZGQgdG8gc3RhcnRcbiAgICB0aGlzLmNlbGxzID0gY2VsbHMuY29uY2F0KCB0aGlzLmNlbGxzICk7XG4gIH0gZWxzZSBpZiAoIGlzQXBwZW5kICkge1xuICAgIC8vIGFwcGVuZCwgYWRkIHRvIGVuZFxuICAgIHRoaXMuY2VsbHMgPSB0aGlzLmNlbGxzLmNvbmNhdCggY2VsbHMgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpbnNlcnQgaW4gdGhpcy5jZWxsc1xuICAgIHZhciBlbmRDZWxscyA9IHRoaXMuY2VsbHMuc3BsaWNlKCBpbmRleCwgbGVuIC0gaW5kZXggKTtcbiAgICB0aGlzLmNlbGxzID0gdGhpcy5jZWxscy5jb25jYXQoIGNlbGxzICkuY29uY2F0KCBlbmRDZWxscyApO1xuICB9XG5cbiAgdGhpcy5fc2l6ZUNlbGxzKCBjZWxscyApO1xuICB0aGlzLmNlbGxDaGFuZ2UoIGluZGV4LCB0cnVlICk7XG59O1xuXG5wcm90by5hcHBlbmQgPSBmdW5jdGlvbiggZWxlbXMgKSB7XG4gIHRoaXMuaW5zZXJ0KCBlbGVtcywgdGhpcy5jZWxscy5sZW5ndGggKTtcbn07XG5cbnByb3RvLnByZXBlbmQgPSBmdW5jdGlvbiggZWxlbXMgKSB7XG4gIHRoaXMuaW5zZXJ0KCBlbGVtcywgMCApO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgY2VsbHNcbiAqIEBwYXJhbSB7RWxlbWVudCwgQXJyYXksIE5vZGVMaXN0fSBlbGVtc1xuICovXG5wcm90by5yZW1vdmUgPSBmdW5jdGlvbiggZWxlbXMgKSB7XG4gIHZhciBjZWxscyA9IHRoaXMuZ2V0Q2VsbHMoIGVsZW1zICk7XG4gIGlmICggIWNlbGxzIHx8ICFjZWxscy5sZW5ndGggKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1pbkNlbGxJbmRleCA9IHRoaXMuY2VsbHMubGVuZ3RoIC0gMTtcbiAgLy8gcmVtb3ZlIGNlbGxzIGZyb20gY29sbGVjdGlvbiAmIERPTVxuICBjZWxscy5mb3JFYWNoKCBmdW5jdGlvbiggY2VsbCApIHtcbiAgICBjZWxsLnJlbW92ZSgpO1xuICAgIHZhciBpbmRleCA9IHRoaXMuY2VsbHMuaW5kZXhPZiggY2VsbCApO1xuICAgIG1pbkNlbGxJbmRleCA9IE1hdGgubWluKCBpbmRleCwgbWluQ2VsbEluZGV4ICk7XG4gICAgdXRpbHMucmVtb3ZlRnJvbSggdGhpcy5jZWxscywgY2VsbCApO1xuICB9LCB0aGlzICk7XG5cbiAgdGhpcy5jZWxsQ2hhbmdlKCBtaW5DZWxsSW5kZXgsIHRydWUgKTtcbn07XG5cbi8qKlxuICogbG9naWMgdG8gYmUgcnVuIGFmdGVyIGEgY2VsbCdzIHNpemUgY2hhbmdlc1xuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtIC0gY2VsbCdzIGVsZW1lbnRcbiAqL1xucHJvdG8uY2VsbFNpemVDaGFuZ2UgPSBmdW5jdGlvbiggZWxlbSApIHtcbiAgdmFyIGNlbGwgPSB0aGlzLmdldENlbGwoIGVsZW0gKTtcbiAgaWYgKCAhY2VsbCApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY2VsbC5nZXRTaXplKCk7XG5cbiAgdmFyIGluZGV4ID0gdGhpcy5jZWxscy5pbmRleE9mKCBjZWxsICk7XG4gIHRoaXMuY2VsbENoYW5nZSggaW5kZXggKTtcbn07XG5cbi8qKlxuICogbG9naWMgYW55IHRpbWUgYSBjZWxsIGlzIGNoYW5nZWQ6IGFkZGVkLCByZW1vdmVkLCBvciBzaXplIGNoYW5nZWRcbiAqIEBwYXJhbSB7SW50ZWdlcn0gY2hhbmdlZENlbGxJbmRleCAtIGluZGV4IG9mIHRoZSBjaGFuZ2VkIGNlbGwsIG9wdGlvbmFsXG4gKi9cbnByb3RvLmNlbGxDaGFuZ2UgPSBmdW5jdGlvbiggY2hhbmdlZENlbGxJbmRleCwgaXNQb3NpdGlvbmluZ1NsaWRlciApIHtcbiAgdmFyIHByZXZTZWxlY3RlZEVsZW0gPSB0aGlzLnNlbGVjdGVkRWxlbWVudDtcbiAgdGhpcy5fcG9zaXRpb25DZWxscyggY2hhbmdlZENlbGxJbmRleCApO1xuICB0aGlzLl9nZXRXcmFwU2hpZnRDZWxscygpO1xuICB0aGlzLnNldEdhbGxlcnlTaXplKCk7XG4gIC8vIHVwZGF0ZSBzZWxlY3RlZEluZGV4XG4gIC8vIHRyeSB0byBtYWludGFpbiBwb3NpdGlvbiAmIHNlbGVjdCBwcmV2aW91cyBzZWxlY3RlZCBlbGVtZW50XG4gIHZhciBjZWxsID0gdGhpcy5nZXRDZWxsKCBwcmV2U2VsZWN0ZWRFbGVtICk7XG4gIGlmICggY2VsbCApIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLmdldENlbGxTbGlkZUluZGV4KCBjZWxsICk7XG4gIH1cbiAgdGhpcy5zZWxlY3RlZEluZGV4ID0gTWF0aC5taW4oIHRoaXMuc2xpZGVzLmxlbmd0aCAtIDEsIHRoaXMuc2VsZWN0ZWRJbmRleCApO1xuXG4gIHRoaXMuZW1pdEV2ZW50KCAnY2VsbENoYW5nZScsIFsgY2hhbmdlZENlbGxJbmRleCBdICk7XG4gIC8vIHBvc2l0aW9uIHNsaWRlclxuICB0aGlzLnNlbGVjdCggdGhpcy5zZWxlY3RlZEluZGV4ICk7XG4gIC8vIGRvIG5vdCBwb3NpdGlvbiBzbGlkZXIgYWZ0ZXIgbGF6eSBsb2FkXG4gIGlmICggaXNQb3NpdGlvbmluZ1NsaWRlciApIHtcbiAgICB0aGlzLnBvc2l0aW9uU2xpZGVyQXRTZWxlY3RlZCgpO1xuICB9XG59O1xuXG4vLyAtLS0tLSAgLS0tLS0gLy9cblxucmV0dXJuIEZsaWNraXR5O1xuXG59KSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/flickity/js/add-remove-cell.js\n") },
vendor: 14,783 bytes, line 1
1"./node_modules/flickity/js/animate.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// animate\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! fizzy-ui-utils/utils */ \"./node_modules/fizzy-ui-utils/utils.js\")\n ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( utils ) {\n return factory( window, utils );\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n });\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x = x - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D tranforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i=0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i=0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvYW5pbWF0ZS5qcz8wMTUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUF5QztBQUNoRDtBQUNBLElBQUksaUNBQVE7QUFDWixNQUFNLHlGQUFzQjtBQUM1QixLQUFLLG1DQUFFO0FBQ1A7QUFDQSxLQUFLO0FBQUEsb0dBQUM7QUFDTixHQUFHLE1BQU0sRUFhTjs7QUFFSCxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrQkFBa0I7QUFDbEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvYW5pbWF0ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGFuaW1hdGVcbiggZnVuY3Rpb24oIHdpbmRvdywgZmFjdG9yeSApIHtcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIC8qIGpzaGludCBzdHJpY3Q6IGZhbHNlICovXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EXG4gICAgZGVmaW5lKCBbXG4gICAgICAnZml6enktdWktdXRpbHMvdXRpbHMnXG4gICAgXSwgZnVuY3Rpb24oIHV0aWxzICkge1xuICAgICAgcmV0dXJuIGZhY3RvcnkoIHdpbmRvdywgdXRpbHMgKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICggdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyApIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShcbiAgICAgIHdpbmRvdyxcbiAgICAgIHJlcXVpcmUoJ2Zpenp5LXVpLXV0aWxzJylcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIGJyb3dzZXIgZ2xvYmFsXG4gICAgd2luZG93LkZsaWNraXR5ID0gd2luZG93LkZsaWNraXR5IHx8IHt9O1xuICAgIHdpbmRvdy5GbGlja2l0eS5hbmltYXRlUHJvdG90eXBlID0gZmFjdG9yeShcbiAgICAgIHdpbmRvdyxcbiAgICAgIHdpbmRvdy5maXp6eVVJVXRpbHNcbiAgICApO1xuICB9XG5cbn0oIHdpbmRvdywgZnVuY3Rpb24gZmFjdG9yeSggd2luZG93LCB1dGlscyApIHtcblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhbmltYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbnZhciBwcm90byA9IHt9O1xuXG5wcm90by5zdGFydEFuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIHRoaXMuaXNBbmltYXRpbmcgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5pc0FuaW1hdGluZyA9IHRydWU7XG4gIHRoaXMucmVzdGluZ0ZyYW1lcyA9IDA7XG4gIHRoaXMuYW5pbWF0ZSgpO1xufTtcblxucHJvdG8uYW5pbWF0ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmFwcGx5RHJhZ0ZvcmNlKCk7XG4gIHRoaXMuYXBwbHlTZWxlY3RlZEF0dHJhY3Rpb24oKTtcblxuICB2YXIgcHJldmlvdXNYID0gdGhpcy54O1xuXG4gIHRoaXMuaW50ZWdyYXRlUGh5c2ljcygpO1xuICB0aGlzLnBvc2l0aW9uU2xpZGVyKCk7XG4gIHRoaXMuc2V0dGxlKCBwcmV2aW91c1ggKTtcbiAgLy8gYW5pbWF0ZSBuZXh0IGZyYW1lXG4gIGlmICggdGhpcy5pc0FuaW1hdGluZyApIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSggZnVuY3Rpb24gYW5pbWF0ZUZyYW1lKCkge1xuICAgICAgX3RoaXMuYW5pbWF0ZSgpO1xuICAgIH0pO1xuICB9XG59O1xuXG5wcm90by5wb3NpdGlvblNsaWRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgeCA9IHRoaXMueDtcbiAgLy8gd3JhcCBwb3NpdGlvbiBhcm91bmRcbiAgaWYgKCB0aGlzLm9wdGlvbnMud3JhcEFyb3VuZCAmJiB0aGlzLmNlbGxzLmxlbmd0aCA+IDEgKSB7XG4gICAgeCA9IHV0aWxzLm1vZHVsbyggeCwgdGhpcy5zbGlkZWFibGVXaWR0aCApO1xuICAgIHggPSB4IC0gdGhpcy5zbGlkZWFibGVXaWR0aDtcbiAgICB0aGlzLnNoaWZ0V3JhcENlbGxzKCB4ICk7XG4gIH1cblxuICB0aGlzLnNldFRyYW5zbGF0ZVgoIHgsIHRoaXMuaXNBbmltYXRpbmcgKTtcbiAgdGhpcy5kaXNwYXRjaFNjcm9sbEV2ZW50KCk7XG59O1xuXG5wcm90by5zZXRUcmFuc2xhdGVYID0gZnVuY3Rpb24oIHgsIGlzM2QgKSB7XG4gIHggKz0gdGhpcy5jdXJzb3JQb3NpdGlvbjtcbiAgLy8gcmV2ZXJzZSBpZiByaWdodC10by1sZWZ0IGFuZCB1c2luZyB0cmFuc2Zvcm1cbiAgeCA9IHRoaXMub3B0aW9ucy5yaWdodFRvTGVmdCA/IC14IDogeDtcbiAgdmFyIHRyYW5zbGF0ZVggPSB0aGlzLmdldFBvc2l0aW9uVmFsdWUoIHggKTtcbiAgLy8gdXNlIDNEIHRyYW5mb3JtcyBmb3IgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9uIGlPU1xuICAvLyBidXQgdXNlIDJEIHdoZW4gc2V0dGxlZCwgZm9yIGJldHRlciBmb250LXJlbmRlcmluZ1xuICB0aGlzLnNsaWRlci5zdHlsZS50cmFuc2Zvcm0gPSBpczNkID9cbiAgICAndHJhbnNsYXRlM2QoJyArIHRyYW5zbGF0ZVggKyAnLDAsMCknIDogJ3RyYW5zbGF0ZVgoJyArIHRyYW5zbGF0ZVggKyAnKSc7XG59O1xuXG5wcm90by5kaXNwYXRjaFNjcm9sbEV2ZW50ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBmaXJzdFNsaWRlID0gdGhpcy5zbGlkZXNbMF07XG4gIGlmICggIWZpcnN0U2xpZGUgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBwb3NpdGlvblggPSAtdGhpcy54IC0gZmlyc3RTbGlkZS50YXJnZXQ7XG4gIHZhciBwcm9ncmVzcyA9IHBvc2l0aW9uWCAvIHRoaXMuc2xpZGVzV2lkdGg7XG4gIHRoaXMuZGlzcGF0Y2hFdmVudCggJ3Njcm9sbCcsIG51bGwsIFsgcHJvZ3Jlc3MsIHBvc2l0aW9uWCBdICk7XG59O1xuXG5wcm90by5wb3NpdGlvblNsaWRlckF0U2VsZWN0ZWQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCAhdGhpcy5jZWxscy5sZW5ndGggKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMueCA9IC10aGlzLnNlbGVjdGVkU2xpZGUudGFyZ2V0O1xuICB0aGlzLnZlbG9jaXR5ID0gMDsgLy8gc3RvcCB3b2JibGVcbiAgdGhpcy5wb3NpdGlvblNsaWRlcigpO1xufTtcblxucHJvdG8uZ2V0UG9zaXRpb25WYWx1ZSA9IGZ1bmN0aW9uKCBwb3NpdGlvbiApIHtcbiAgaWYgKCB0aGlzLm9wdGlvbnMucGVyY2VudFBvc2l0aW9uICkge1xuICAgIC8vIHBlcmNlbnQgcG9zaXRpb24sIHJvdW5kIHRvIDIgZGlnaXRzLCBsaWtlIDEyLjM0JVxuICAgIHJldHVybiAoIE1hdGgucm91bmQoICggcG9zaXRpb24gLyB0aGlzLnNpemUuaW5uZXJXaWR0aCApICogMTAwMDAgKSAqIDAuMDEgKSsgJyUnO1xuICB9IGVsc2Uge1xuICAgIC8vIHBpeGVsIHBvc2l0aW9uaW5nXG4gICAgcmV0dXJuIE1hdGgucm91bmQoIHBvc2l0aW9uICkgKyAncHgnO1xuICB9XG59O1xuXG5wcm90by5zZXR0bGUgPSBmdW5jdGlvbiggcHJldmlvdXNYICkge1xuICAvLyBrZWVwIHRyYWNrIG9mIGZyYW1lcyB3aGVyZSB4IGhhc24ndCBtb3ZlZFxuICBpZiAoICF0aGlzLmlzUG9pbnRlckRvd24gJiYgTWF0aC5yb3VuZCggdGhpcy54ICogMTAwICkgPT0gTWF0aC5yb3VuZCggcHJldmlvdXNYICogMTAwICkgKSB7XG4gICAgdGhpcy5yZXN0aW5nRnJhbWVzKys7XG4gIH1cbiAgLy8gc3RvcCBhbmltYXRpbmcgaWYgcmVzdGluZyBmb3IgMyBvciBtb3JlIGZyYW1lc1xuICBpZiAoIHRoaXMucmVzdGluZ0ZyYW1lcyA+IDIgKSB7XG4gICAgdGhpcy5pc0FuaW1hdGluZyA9IGZhbHNlO1xuICAgIGRlbGV0ZSB0aGlzLmlzRnJlZVNjcm9sbGluZztcbiAgICAvLyByZW5kZXIgcG9zaXRpb24gd2l0aCB0cmFuc2xhdGVYIHdoZW4gc2V0dGxlZFxuICAgIHRoaXMucG9zaXRpb25TbGlkZXIoKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoICdzZXR0bGUnLCBudWxsLCBbIHRoaXMuc2VsZWN0ZWRJbmRleCBdICk7XG4gIH1cbn07XG5cbnByb3RvLnNoaWZ0V3JhcENlbGxzID0gZnVuY3Rpb24oIHggKSB7XG4gIC8vIHNoaWZ0IGJlZm9yZSBjZWxsc1xuICB2YXIgYmVmb3JlR2FwID0gdGhpcy5jdXJzb3JQb3NpdGlvbiArIHg7XG4gIHRoaXMuX3NoaWZ0Q2VsbHMoIHRoaXMuYmVmb3JlU2hpZnRDZWxscywgYmVmb3JlR2FwLCAtMSApO1xuICAvLyBzaGlmdCBhZnRlciBjZWxsc1xuICB2YXIgYWZ0ZXJHYXAgPSB0aGlzLnNpemUuaW5uZXJXaWR0aCAtICggeCArIHRoaXMuc2xpZGVhYmxlV2lkdGggKyB0aGlzLmN1cnNvclBvc2l0aW9uICk7XG4gIHRoaXMuX3NoaWZ0Q2VsbHMoIHRoaXMuYWZ0ZXJTaGlmdENlbGxzLCBhZnRlckdhcCwgMSApO1xufTtcblxucHJvdG8uX3NoaWZ0Q2VsbHMgPSBmdW5jdGlvbiggY2VsbHMsIGdhcCwgc2hpZnQgKSB7XG4gIGZvciAoIHZhciBpPTA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKyApIHtcbiAgICB2YXIgY2VsbCA9IGNlbGxzW2ldO1xuICAgIHZhciBjZWxsU2hpZnQgPSBnYXAgPiAwID8gc2hpZnQgOiAwO1xuICAgIGNlbGwud3JhcFNoaWZ0KCBjZWxsU2hpZnQgKTtcbiAgICBnYXAgLT0gY2VsbC5zaXplLm91dGVyV2lkdGg7XG4gIH1cbn07XG5cbnByb3RvLl91bnNoaWZ0Q2VsbHMgPSBmdW5jdGlvbiggY2VsbHMgKSB7XG4gIGlmICggIWNlbGxzIHx8ICFjZWxscy5sZW5ndGggKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAoIHZhciBpPTA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKyApIHtcbiAgICBjZWxsc1tpXS53cmFwU2hpZnQoIDAgKTtcbiAgfVxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGh5c2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5wcm90by5pbnRlZ3JhdGVQaHlzaWNzID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMueCArPSB0aGlzLnZlbG9jaXR5O1xuICB0aGlzLnZlbG9jaXR5ICo9IHRoaXMuZ2V0RnJpY3Rpb25GYWN0b3IoKTtcbn07XG5cbnByb3RvLmFwcGx5Rm9yY2UgPSBmdW5jdGlvbiggZm9yY2UgKSB7XG4gIHRoaXMudmVsb2NpdHkgKz0gZm9yY2U7XG59O1xuXG5wcm90by5nZXRGcmljdGlvbkZhY3RvciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gMSAtIHRoaXMub3B0aW9uc1sgdGhpcy5pc0ZyZWVTY3JvbGxpbmcgPyAnZnJlZVNjcm9sbEZyaWN0aW9uJyA6ICdmcmljdGlvbicgXTtcbn07XG5cbnByb3RvLmdldFJlc3RpbmdQb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAvLyBteSB0aGFua3MgdG8gU3RldmVuIFdpdHRlbnMsIHdobyBzaW1wbGlmaWVkIHRoaXMgbWF0aCBncmVhdGx5XG4gIHJldHVybiB0aGlzLnggKyB0aGlzLnZlbG9jaXR5IC8gKCAxIC0gdGhpcy5nZXRGcmljdGlvbkZhY3RvcigpICk7XG59O1xuXG5wcm90by5hcHBseURyYWdGb3JjZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoICF0aGlzLmlzRHJhZ2dhYmxlIHx8ICF0aGlzLmlzUG9pbnRlckRvd24gKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIGNoYW5nZSB0aGUgcG9zaXRpb24gdG8gZHJhZyBwb3NpdGlvbiBieSBhcHBseWluZyBmb3JjZVxuICB2YXIgZHJhZ1ZlbG9jaXR5ID0gdGhpcy5kcmFnWCAtIHRoaXMueDtcbiAgdmFyIGRyYWdGb3JjZSA9IGRyYWdWZWxvY2l0eSAtIHRoaXMudmVsb2NpdHk7XG4gIHRoaXMuYXBwbHlGb3JjZSggZHJhZ0ZvcmNlICk7XG59O1xuXG5wcm90by5hcHBseVNlbGVjdGVkQXR0cmFjdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAvLyBkbyBub3QgYXR0cmFjdCBpZiBwb2ludGVyIGRvd24gb3Igbm8gc2xpZGVzXG4gIHZhciBkcmFnRG93biA9IHRoaXMuaXNEcmFnZ2FibGUgJiYgdGhpcy5pc1BvaW50ZXJEb3duO1xuICBpZiAoIGRyYWdEb3duIHx8IHRoaXMuaXNGcmVlU2Nyb2xsaW5nIHx8ICF0aGlzLnNsaWRlcy5sZW5ndGggKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBkaXN0YW5jZSA9IHRoaXMuc2VsZWN0ZWRTbGlkZS50YXJnZXQgKiAtMSAtIHRoaXMueDtcbiAgdmFyIGZvcmNlID0gZGlzdGFuY2UgKiB0aGlzLm9wdGlvbnMuc2VsZWN0ZWRBdHRyYWN0aW9uO1xuICB0aGlzLmFwcGx5Rm9yY2UoIGZvcmNlICk7XG59O1xuXG5yZXR1cm4gcHJvdG87XG5cbn0pKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/flickity/js/animate.js\n") },
vendor: 6,919 bytes, line 1
1"./node_modules/flickity/js/cell.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! get-size/get-size */ \"./node_modules/get-size/get-size.js\")\n ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( getSize ) {\n return factory( window, getSize );\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var side = this.parent.originSide;\n this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} factor - 0, 1, or -1\n**/\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvY2VsbC5qcz9jOGRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUF5QztBQUNoRDtBQUNBLElBQUksaUNBQVE7QUFDWixNQUFNLG1GQUFtQjtBQUN6QixLQUFLLG1DQUFFO0FBQ1A7QUFDQSxLQUFLO0FBQUEsb0dBQUM7QUFDTixHQUFHLE1BQU0sRUFhTjs7QUFFSCxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2ZsaWNraXR5L2pzL2NlbGwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGbGlja2l0eS5DZWxsXG4oIGZ1bmN0aW9uKCB3aW5kb3csIGZhY3RvcnkgKSB7XG4gIC8vIHVuaXZlcnNhbCBtb2R1bGUgZGVmaW5pdGlvblxuICAvKiBqc2hpbnQgc3RyaWN0OiBmYWxzZSAqL1xuICBpZiAoIHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkge1xuICAgIC8vIEFNRFxuICAgIGRlZmluZSggW1xuICAgICAgJ2dldC1zaXplL2dldC1zaXplJ1xuICAgIF0sIGZ1bmN0aW9uKCBnZXRTaXplICkge1xuICAgICAgcmV0dXJuIGZhY3RvcnkoIHdpbmRvdywgZ2V0U2l6ZSApO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgcmVxdWlyZSgnZ2V0LXNpemUnKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gYnJvd3NlciBnbG9iYWxcbiAgICB3aW5kb3cuRmxpY2tpdHkgPSB3aW5kb3cuRmxpY2tpdHkgfHwge307XG4gICAgd2luZG93LkZsaWNraXR5LkNlbGwgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgd2luZG93LmdldFNpemVcbiAgICApO1xuICB9XG5cbn0oIHdpbmRvdywgZnVuY3Rpb24gZmFjdG9yeSggd2luZG93LCBnZXRTaXplICkge1xuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIENlbGwoIGVsZW0sIHBhcmVudCApIHtcbiAgdGhpcy5lbGVtZW50ID0gZWxlbTtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgdGhpcy5jcmVhdGUoKTtcbn1cblxudmFyIHByb3RvID0gQ2VsbC5wcm90b3R5cGU7XG5cbnByb3RvLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScgKTtcbiAgdGhpcy54ID0gMDtcbiAgdGhpcy5zaGlmdCA9IDA7XG59O1xuXG5wcm90by5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIC8vIHJlc2V0IHN0eWxlXG4gIHRoaXMudW5zZWxlY3QoKTtcbiAgdGhpcy5lbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJyc7XG4gIHZhciBzaWRlID0gdGhpcy5wYXJlbnQub3JpZ2luU2lkZTtcbiAgdGhpcy5lbGVtZW50LnN0eWxlWyBzaWRlIF0gPSAnJztcbn07XG5cbnByb3RvLmdldFNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5zaXplID0gZ2V0U2l6ZSggdGhpcy5lbGVtZW50ICk7XG59O1xuXG5wcm90by5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKCB4ICkge1xuICB0aGlzLnggPSB4O1xuICB0aGlzLnVwZGF0ZVRhcmdldCgpO1xuICB0aGlzLnJlbmRlclBvc2l0aW9uKCB4ICk7XG59O1xuXG4vLyBzZXREZWZhdWx0VGFyZ2V0IHYxIG1ldGhvZCwgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHJlbW92ZSBpbiB2M1xucHJvdG8udXBkYXRlVGFyZ2V0ID0gcHJvdG8uc2V0RGVmYXVsdFRhcmdldCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbWFyZ2luUHJvcGVydHkgPSB0aGlzLnBhcmVudC5vcmlnaW5TaWRlID09ICdsZWZ0JyA/ICdtYXJnaW5MZWZ0JyA6ICdtYXJnaW5SaWdodCc7XG4gIHRoaXMudGFyZ2V0ID0gdGhpcy54ICsgdGhpcy5zaXplWyBtYXJnaW5Qcm9wZXJ0eSBdICtcbiAgICB0aGlzLnNpemUud2lkdGggKiB0aGlzLnBhcmVudC5jZWxsQWxpZ247XG59O1xuXG5wcm90by5yZW5kZXJQb3NpdGlvbiA9IGZ1bmN0aW9uKCB4ICkge1xuICAvLyByZW5kZXIgcG9zaXRpb24gb2YgY2VsbCB3aXRoIGluIHNsaWRlclxuICB2YXIgc2lkZSA9IHRoaXMucGFyZW50Lm9yaWdpblNpZGU7XG4gIHRoaXMuZWxlbWVudC5zdHlsZVsgc2lkZSBdID0gdGhpcy5wYXJlbnQuZ2V0UG9zaXRpb25WYWx1ZSggeCApO1xufTtcblxucHJvdG8uc2VsZWN0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1zZWxlY3RlZCcpO1xuICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xufTtcblxucHJvdG8udW5zZWxlY3QgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNlbGVjdGVkJyk7XG4gIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoICdhcmlhLWhpZGRlbicsICd0cnVlJyApO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge0ludGVnZXJ9IGZhY3RvciAtIDAsIDEsIG9yIC0xXG4qKi9cbnByb3RvLndyYXBTaGlmdCA9IGZ1bmN0aW9uKCBzaGlmdCApIHtcbiAgdGhpcy5zaGlmdCA9IHNoaWZ0O1xuICB0aGlzLnJlbmRlclBvc2l0aW9uKCB0aGlzLnggKyB0aGlzLnBhcmVudC5zbGlkZWFibGVXaWR0aCAqIHNoaWZ0ICk7XG59O1xuXG5wcm90by5yZW1vdmUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRoaXMuZWxlbWVudCApO1xufTtcblxucmV0dXJuIENlbGw7XG5cbn0pKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/flickity/js/cell.js\n") },
vendor: 31,124 bytes, line 1
1"./node_modules/flickity/js/drag.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// drag\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! ./flickity */ \"./node_modules/flickity/js/flickity.js\"),\n __webpack_require__(/*! unidragger/unidragger */ \"./node_modules/unidragger/unidragger.js\"),\n __webpack_require__(/*! fizzy-ui-utils/utils */ \"./node_modules/fizzy-ui-utils/utils.js\")\n ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n});\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if ( isTouch && !isTouchmoveScrollCanceled ) {\n window.addEventListener( 'touchmove', function() {});\n isTouchmoveScrollCanceled = true;\n }\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x = moveVector.x % this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x\n * @param {Integer} index - slide index\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvZHJhZy5qcz80OTY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUF5QztBQUNoRDtBQUNBLElBQUksaUNBQVE7QUFDWixNQUFNLCtFQUFZO0FBQ2xCLE1BQU0sMkZBQXVCO0FBQzdCLE1BQU0seUZBQXNCO0FBQzVCLEtBQUssbUNBQUU7QUFDUDtBQUNBLEtBQUs7QUFBQSxvR0FBQztBQUNOLEdBQUcsTUFBTSxFQWdCTjs7QUFFSCxDQUFDOztBQUVEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CLGFBQWEsT0FBTyxJQUFJLFlBQVksT0FBTyxVQUFVLFFBQVE7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGdCQUFnQixFQUFFLHNCQUFzQixlQUFlO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9mbGlja2l0eS9qcy9kcmFnLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZHJhZ1xuKCBmdW5jdGlvbiggd2luZG93LCBmYWN0b3J5ICkge1xuICAvLyB1bml2ZXJzYWwgbW9kdWxlIGRlZmluaXRpb25cbiAgLyoganNoaW50IHN0cmljdDogZmFsc2UgKi9cbiAgaWYgKCB0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCApIHtcbiAgICAvLyBBTURcbiAgICBkZWZpbmUoIFtcbiAgICAgICcuL2ZsaWNraXR5JyxcbiAgICAgICd1bmlkcmFnZ2VyL3VuaWRyYWdnZXInLFxuICAgICAgJ2Zpenp5LXVpLXV0aWxzL3V0aWxzJ1xuICAgIF0sIGZ1bmN0aW9uKCBGbGlja2l0eSwgVW5pZHJhZ2dlciwgdXRpbHMgKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeSggd2luZG93LCBGbGlja2l0eSwgVW5pZHJhZ2dlciwgdXRpbHMgKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICggdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyApIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShcbiAgICAgIHdpbmRvdyxcbiAgICAgIHJlcXVpcmUoJy4vZmxpY2tpdHknKSxcbiAgICAgIHJlcXVpcmUoJ3VuaWRyYWdnZXInKSxcbiAgICAgIHJlcXVpcmUoJ2Zpenp5LXVpLXV0aWxzJylcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIGJyb3dzZXIgZ2xvYmFsXG4gICAgd2luZG93LkZsaWNraXR5ID0gZmFjdG9yeShcbiAgICAgIHdpbmRvdyxcbiAgICAgIHdpbmRvdy5GbGlja2l0eSxcbiAgICAgIHdpbmRvdy5VbmlkcmFnZ2VyLFxuICAgICAgd2luZG93LmZpenp5VUlVdGlsc1xuICAgICk7XG4gIH1cblxufSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCB3aW5kb3csIEZsaWNraXR5LCBVbmlkcmFnZ2VyLCB1dGlscyApIHtcblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyAtLS0tLSBkZWZhdWx0cyAtLS0tLSAvL1xuXG51dGlscy5leHRlbmQoIEZsaWNraXR5LmRlZmF1bHRzLCB7XG4gIGRyYWdnYWJsZTogJz4xJyxcbiAgZHJhZ1RocmVzaG9sZDogMyxcbn0pO1xuXG4vLyAtLS0tLSBjcmVhdGUgLS0tLS0gLy9cblxuRmxpY2tpdHkuY3JlYXRlTWV0aG9kcy5wdXNoKCdfY3JlYXRlRHJhZycpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkcmFnIHByb3RvdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG52YXIgcHJvdG8gPSBGbGlja2l0eS5wcm90b3R5cGU7XG51dGlscy5leHRlbmQoIHByb3RvLCBVbmlkcmFnZ2VyLnByb3RvdHlwZSApO1xucHJvdG8uX3RvdWNoQWN0aW9uVmFsdWUgPSAncGFuLXknO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxudmFyIGlzVG91Y2ggPSAnY3JlYXRlVG91Y2gnIGluIGRvY3VtZW50O1xudmFyIGlzVG91Y2htb3ZlU2Nyb2xsQ2FuY2VsZWQgPSBmYWxzZTtcblxucHJvdG8uX2NyZWF0ZURyYWcgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5vbiggJ2FjdGl2YXRlJywgdGhpcy5vbkFjdGl2YXRlRHJhZyApO1xuICB0aGlzLm9uKCAndWlDaGFuZ2UnLCB0aGlzLl91aUNoYW5nZURyYWcgKTtcbiAgdGhpcy5vbiggJ2RlYWN0aXZhdGUnLCB0aGlzLm9uRGVhY3RpdmF0ZURyYWcgKTtcbiAgdGhpcy5vbiggJ2NlbGxDaGFuZ2UnLCB0aGlzLnVwZGF0ZURyYWdnYWJsZSApO1xuICAvLyBUT0RPIHVwZGF0ZURyYWdnYWJsZSBvbiByZXNpemU/IGlmIGdyb3VwQ2VsbHMgJiBzbGlkZXMgY2hhbmdlXG4gIC8vIEhBQ0sgLSBhZGQgc2VlbWluZ2x5IGlubm9jdW91cyBoYW5kbGVyIHRvIGZpeCBpT1MgMTAgc2Nyb2xsIGJlaGF2aW9yXG4gIC8vICM0NTcsIFJ1YmFYYS9Tb3J0YWJsZSM5NzNcbiAgaWYgKCBpc1RvdWNoICYmICFpc1RvdWNobW92ZVNjcm9sbENhbmNlbGVkICkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAndG91Y2htb3ZlJywgZnVuY3Rpb24oKSB7fSk7XG4gICAgaXNUb3VjaG1vdmVTY3JvbGxDYW5jZWxlZCA9IHRydWU7XG4gIH1cbn07XG5cbnByb3RvLm9uQWN0aXZhdGVEcmFnID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuaGFuZGxlcyA9IFsgdGhpcy52aWV3cG9ydCBdO1xuICB0aGlzLmJpbmRIYW5kbGVzKCk7XG4gIHRoaXMudXBkYXRlRHJhZ2dhYmxlKCk7XG59O1xuXG5wcm90by5vbkRlYWN0aXZhdGVEcmFnID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMudW5iaW5kSGFuZGxlcygpO1xuICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtZHJhZ2dhYmxlJyk7XG59O1xuXG5wcm90by51cGRhdGVEcmFnZ2FibGUgPSBmdW5jdGlvbigpIHtcbiAgLy8gZGlzYWJsZSBkcmFnZ2luZyBpZiBsZXNzIHRoYW4gMiBzbGlkZXMuICMyNzhcbiAgaWYgKCB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlID09ICc+MScgKSB7XG4gICAgdGhpcy5pc0RyYWdnYWJsZSA9IHRoaXMuc2xpZGVzLmxlbmd0aCA+IDE7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pc0RyYWdnYWJsZSA9IHRoaXMub3B0aW9ucy5kcmFnZ2FibGU7XG4gIH1cbiAgaWYgKCB0aGlzLmlzRHJhZ2dhYmxlICkge1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1kcmFnZ2FibGUnKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtZHJhZ2dhYmxlJyk7XG4gIH1cbn07XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5wcm90by5iaW5kRHJhZyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlID0gdHJ1ZTtcbiAgdGhpcy51cGRhdGVEcmFnZ2FibGUoKTtcbn07XG5cbnByb3RvLnVuYmluZERyYWcgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5vcHRpb25zLmRyYWdnYWJsZSA9IGZhbHNlO1xuICB0aGlzLnVwZGF0ZURyYWdnYWJsZSgpO1xufTtcblxucHJvdG8uX3VpQ2hhbmdlRHJhZyA9IGZ1bmN0aW9uKCkge1xuICBkZWxldGUgdGhpcy5pc0ZyZWVTY3JvbGxpbmc7XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwb2ludGVyIGV2ZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5wcm90by5wb2ludGVyRG93biA9IGZ1bmN0aW9uKCBldmVudCwgcG9pbnRlciApIHtcbiAgaWYgKCAhdGhpcy5pc0RyYWdnYWJsZSApIHtcbiAgICB0aGlzLl9wb2ludGVyRG93bkRlZmF1bHQoIGV2ZW50LCBwb2ludGVyICk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBpc09rYXkgPSB0aGlzLm9rYXlQb2ludGVyRG93biggZXZlbnQgKTtcbiAgaWYgKCAhaXNPa2F5ICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX3BvaW50ZXJEb3duUHJldmVudERlZmF1bHQoIGV2ZW50ICk7XG4gIHRoaXMucG9pbnRlckRvd25Gb2N1cyggZXZlbnQgKTtcbiAgLy8gYmx1clxuICBpZiAoIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT0gdGhpcy5lbGVtZW50ICkge1xuICAgIC8vIGRvIG5vdCBibHVyIGlmIGFscmVhZHkgZm9jdXNlZFxuICAgIHRoaXMucG9pbnRlckRvd25CbHVyKCk7XG4gIH1cblxuICAvLyBzdG9wIGlmIGl0IHdhcyBtb3ZpbmdcbiAgdGhpcy5kcmFnWCA9IHRoaXMueDtcbiAgdGhpcy52aWV3cG9ydC5jbGFzc0xpc3QuYWRkKCdpcy1wb2ludGVyLWRvd24nKTtcbiAgLy8gdHJhY2sgc2Nyb2xsaW5nXG4gIHRoaXMucG9pbnRlckRvd25TY3JvbGwgPSBnZXRTY3JvbGxQb3NpdGlvbigpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ3Njcm9sbCcsIHRoaXMgKTtcblxuICB0aGlzLl9wb2ludGVyRG93bkRlZmF1bHQoIGV2ZW50LCBwb2ludGVyICk7XG59O1xuXG4vLyBkZWZhdWx0IHBvaW50ZXJEb3duIGxvZ2ljLCB1c2VkIGZvciBzdGF0aWNDbGlja1xucHJvdG8uX3BvaW50ZXJEb3duRGVmYXVsdCA9IGZ1bmN0aW9uKCBldmVudCwgcG9pbnRlciApIHtcbiAgLy8gdHJhY2sgc3RhcnQgZXZlbnQgcG9zaXRpb25cbiAgLy8gU2FmYXJpIDkgb3ZlcnJpZGVzIHBhZ2VYIGFuZCBwYWdlWS4gVGhlc2UgdmFsdWVzIG5lZWRzIHRvIGJlIGNvcGllZC4gIzc3OVxuICB0aGlzLnBvaW50ZXJEb3duUG9pbnRlciA9IHtcbiAgICBwYWdlWDogcG9pbnRlci5wYWdlWCxcbiAgICBwYWdlWTogcG9pbnRlci5wYWdlWSxcbiAgfTtcbiAgLy8gYmluZCBtb3ZlIGFuZCBlbmQgZXZlbnRzXG4gIHRoaXMuX2JpbmRQb3N0U3RhcnRFdmVudHMoIGV2ZW50ICk7XG4gIHRoaXMuZGlzcGF0Y2hFdmVudCggJ3BvaW50ZXJEb3duJywgZXZlbnQsIFsgcG9pbnRlciBdICk7XG59O1xuXG52YXIgZm9jdXNOb2RlcyA9IHtcbiAgSU5QVVQ6IHRydWUsXG4gIFRFWFRBUkVBOiB0cnVlLFxuICBTRUxFQ1Q6IHRydWUsXG59O1xuXG5wcm90by5wb2ludGVyRG93bkZvY3VzID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuICB2YXIgaXNGb2N1c05vZGUgPSBmb2N1c05vZGVzWyBldmVudC50YXJnZXQubm9kZU5hbWUgXTtcbiAgaWYgKCAhaXNGb2N1c05vZGUgKSB7XG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG59O1xuXG5wcm90by5fcG9pbnRlckRvd25QcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCBldmVudCApIHtcbiAgdmFyIGlzVG91Y2hTdGFydCA9IGV2ZW50LnR5cGUgPT0gJ3RvdWNoc3RhcnQnO1xuICB2YXIgaXNUb3VjaFBvaW50ZXIgPSBldmVudC5wb2ludGVyVHlwZSA9PSAndG91Y2gnO1xuICB2YXIgaXNGb2N1c05vZGUgPSBmb2N1c05vZGVzWyBldmVudC50YXJnZXQubm9kZU5hbWUgXTtcbiAgaWYgKCAhaXNUb3VjaFN0YXJ0ICYmICFpc1RvdWNoUG9pbnRlciAmJiAhaXNGb2N1c05vZGUgKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufTtcblxuLy8gLS0tLS0gbW92ZSAtLS0tLSAvL1xuXG5wcm90by5oYXNEcmFnU3RhcnRlZCA9IGZ1bmN0aW9uKCBtb3ZlVmVjdG9yICkge1xuICByZXR1cm4gTWF0aC5hYnMoIG1vdmVWZWN0b3IueCApID4gdGhpcy5vcHRpb25zLmRyYWdUaHJlc2hvbGQ7XG59O1xuXG4vLyAtLS0tLSB1cCAtLS0tLSAvL1xuXG5wcm90by5wb2ludGVyVXAgPSBmdW5jdGlvbiggZXZlbnQsIHBvaW50ZXIgKSB7XG4gIGRlbGV0ZSB0aGlzLmlzVG91Y2hTY3JvbGxpbmc7XG4gIHRoaXMudmlld3BvcnQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtcG9pbnRlci1kb3duJyk7XG4gIHRoaXMuZGlzcGF0Y2hFdmVudCggJ3BvaW50ZXJVcCcsIGV2ZW50LCBbIHBvaW50ZXIgXSApO1xuICB0aGlzLl9kcmFnUG9pbnRlclVwKCBldmVudCwgcG9pbnRlciApO1xufTtcblxucHJvdG8ucG9pbnRlckRvbmUgPSBmdW5jdGlvbigpIHtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdzY3JvbGwnLCB0aGlzICk7XG4gIGRlbGV0ZSB0aGlzLnBvaW50ZXJEb3duU2Nyb2xsO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZHJhZ2dpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxucHJvdG8uZHJhZ1N0YXJ0ID0gZnVuY3Rpb24oIGV2ZW50LCBwb2ludGVyICkge1xuICBpZiAoICF0aGlzLmlzRHJhZ2dhYmxlICkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmRyYWdTdGFydFBvc2l0aW9uID0gdGhpcy54O1xuICB0aGlzLnN0YXJ0QW5pbWF0aW9uKCk7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCAnc2Nyb2xsJywgdGhpcyApO1xuICB0aGlzLmRpc3BhdGNoRXZlbnQoICdkcmFnU3RhcnQnLCBldmVudCwgWyBwb2ludGVyIF0gKTtcbn07XG5cbnByb3RvLnBvaW50ZXJNb3ZlID0gZnVuY3Rpb24oIGV2ZW50LCBwb2ludGVyICkge1xuICB2YXIgbW92ZVZlY3RvciA9IHRoaXMuX2RyYWdQb2ludGVyTW92ZSggZXZlbnQsIHBvaW50ZXIgKTtcbiAgdGhpcy5kaXNwYXRjaEV2ZW50KCAncG9pbnRlck1vdmUnLCBldmVudCwgWyBwb2ludGVyLCBtb3ZlVmVjdG9yIF0gKTtcbiAgdGhpcy5fZHJhZ01vdmUoIGV2ZW50LCBwb2ludGVyLCBtb3ZlVmVjdG9yICk7XG59O1xuXG5wcm90by5kcmFnTW92ZSA9IGZ1bmN0aW9uKCBldmVudCwgcG9pbnRlciwgbW92ZVZlY3RvciApIHtcbiAgaWYgKCAhdGhpcy5pc0RyYWdnYWJsZSApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICB0aGlzLnByZXZpb3VzRHJhZ1ggPSB0aGlzLmRyYWdYO1xuICAvLyByZXZlcnNlIGlmIHJpZ2h0LXRvLWxlZnRcbiAgdmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5yaWdodFRvTGVmdCA/IC0xIDogMTtcbiAgaWYgKCB0aGlzLm9wdGlvbnMud3JhcEFyb3VuZCApIHtcbiAgICAvLyB3cmFwIGFyb3VuZCBtb3ZlLiAjNTg5XG4gICAgbW92ZVZlY3Rvci54ID0gbW92ZVZlY3Rvci54ICUgdGhpcy5zbGlkZWFibGVXaWR0aDtcbiAgfVxuICB2YXIgZHJhZ1ggPSB0aGlzLmRyYWdTdGFydFBvc2l0aW9uICsgbW92ZVZlY3Rvci54ICogZGlyZWN0aW9uO1xuXG4gIGlmICggIXRoaXMub3B0aW9ucy53cmFwQXJvdW5kICYmIHRoaXMuc2xpZGVzLmxlbmd0aCApIHtcbiAgICAvLyBzbG93IGRyYWdcbiAgICB2YXIgb3JpZ2luQm91bmQgPSBNYXRoLm1heCggLXRoaXMuc2xpZGVzWzBdLnRhcmdldCwgdGhpcy5kcmFnU3RhcnRQb3NpdGlvbiApO1xuICAgIGRyYWdYID0gZHJhZ1ggPiBvcmlnaW5Cb3VuZCA/ICggZHJhZ1ggKyBvcmlnaW5Cb3VuZCApICogMC41IDogZHJhZ1g7XG4gICAgdmFyIGVuZEJvdW5kID0gTWF0aC5taW4oIC10aGlzLmdldExhc3RTbGlkZSgpLnRhcmdldCwgdGhpcy5kcmFnU3RhcnRQb3NpdGlvbiApO1xuICAgIGRyYWdYID0gZHJhZ1ggPCBlbmRCb3VuZCA/ICggZHJhZ1ggKyBlbmRCb3VuZCApICogMC41IDogZHJhZ1g7XG4gIH1cblxuICB0aGlzLmRyYWdYID0gZHJhZ1g7XG5cbiAgdGhpcy5kcmFnTW92ZVRpbWUgPSBuZXcgRGF0ZSgpO1xuICB0aGlzLmRpc3BhdGNoRXZlbnQoICdkcmFnTW92ZScsIGV2ZW50LCBbIHBvaW50ZXIsIG1vdmVWZWN0b3IgXSApO1xufTtcblxucHJvdG8uZHJhZ0VuZCA9IGZ1bmN0aW9uKCBldmVudCwgcG9pbnRlciApIHtcbiAgaWYgKCAhdGhpcy5pc0RyYWdnYWJsZSApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCB0aGlzLm9wdGlvbnMuZnJlZVNjcm9sbCApIHtcbiAgICB0aGlzLmlzRnJlZVNjcm9sbGluZyA9IHRydWU7XG4gIH1cbiAgLy8gc2V0IHNlbGVjdGVkSW5kZXggYmFzZWQgb24gd2hlcmUgZmxpY2sgd2lsbCBlbmQgdXBcbiAgdmFyIGluZGV4ID0gdGhpcy5kcmFnRW5kUmVzdGluZ1NlbGVjdCgpO1xuXG4gIGlmICggdGhpcy5vcHRpb25zLmZyZWVTY3JvbGwgJiYgIXRoaXMub3B0aW9ucy53cmFwQXJvdW5kICkge1xuICAgIC8vIGlmIGZyZWUtc2Nyb2xsICYgbm90IHdyYXAgYXJvdW5kXG4gICAgLy8gZG8gbm90IGZyZWUtc2Nyb2xsIGlmIGdvaW5nIG91dHNpZGUgb2YgYm91bmRpbmcgc2xpZGVzXG4gICAgLy8gc28gYm91bmRpbmcgc2xpZGVzIGNhbiBhdHRyYWN0IHNsaWRlciwgYW5kIGtlZXAgaXQgaW4gYm91bmRzXG4gICAgdmFyIHJlc3RpbmdYID0gdGhpcy5nZXRSZXN0aW5nUG9zaXRpb24oKTtcbiAgICB0aGlzLmlzRnJlZVNjcm9sbGluZyA9IC1yZXN0aW5nWCA+IHRoaXMuc2xpZGVzWzBdLnRhcmdldCAmJlxuICAgICAgLXJlc3RpbmdYIDwgdGhpcy5nZXRMYXN0U2xpZGUoKS50YXJnZXQ7XG4gIH0gZWxzZSBpZiAoICF0aGlzLm9wdGlvbnMuZnJlZVNjcm9sbCAmJiBpbmRleCA9PSB0aGlzLnNlbGVjdGVkSW5kZXggKSB7XG4gICAgLy8gYm9vc3Qgc2VsZWN0aW9uIGlmIHNlbGVjdGVkIGluZGV4IGhhcyBub3QgY2hhbmdlZFxuICAgIGluZGV4ICs9IHRoaXMuZHJhZ0VuZEJvb3N0U2VsZWN0KCk7XG4gIH1cbiAgZGVsZXRlIHRoaXMucHJldmlvdXNEcmFnWDtcbiAgLy8gYXBwbHkgc2VsZWN0aW9uXG4gIC8vIFRPRE8gcmVmYWN0b3IgdGhpcywgc2VsZWN0aW5nIGhlcmUgZmVlbHMgd2VpcmRcbiAgLy8gSEFDSywgc2V0IGZsYWcgc28gZHJhZ2dpbmcgc3RheXMgaW4gY29ycmVjdCBkaXJlY3Rpb25cbiAgdGhpcy5pc0RyYWdTZWxlY3QgPSB0aGlzLm9wdGlvbnMud3JhcEFyb3VuZDtcbiAgdGhpcy5zZWxlY3QoIGluZGV4ICk7XG4gIGRlbGV0ZSB0aGlzLmlzRHJhZ1NlbGVjdDtcbiAgdGhpcy5kaXNwYXRjaEV2ZW50KCAnZHJhZ0VuZCcsIGV2ZW50LCBbIHBvaW50ZXIgXSApO1xufTtcblxucHJvdG8uZHJhZ0VuZFJlc3RpbmdTZWxlY3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3RpbmdYID0gdGhpcy5nZXRSZXN0aW5nUG9zaXRpb24oKTtcbiAgLy8gaG93IGZhciBhd2F5IGZyb20gc2VsZWN0ZWQgc2xpZGVcbiAgdmFyIGRpc3RhbmNlID0gTWF0aC5hYnMoIHRoaXMuZ2V0U2xpZGVEaXN0YW5jZSggLXJlc3RpbmdYLCB0aGlzLnNlbGVjdGVkSW5kZXggKSApO1xuICAvLyBnZXQgY2xvc2V0IHJlc3RpbmcgZ29pbmcgdXAgYW5kIGdvaW5nIGRvd25cbiAgdmFyIHBvc2l0aXZlUmVzdGluZyA9IHRoaXMuX2dldENsb3Nlc3RSZXN0aW5nKCByZXN0aW5nWCwgZGlzdGFuY2UsIDEgKTtcbiAgdmFyIG5lZ2F0aXZlUmVzdGluZyA9IHRoaXMuX2dldENsb3Nlc3RSZXN0aW5nKCByZXN0aW5nWCwgZGlzdGFuY2UsIC0xICk7XG4gIC8vIHVzZSBjbG9zZXIgcmVzdGluZyBmb3Igd3JhcC1hcm91bmRcbiAgdmFyIGluZGV4ID0gcG9zaXRpdmVSZXN0aW5nLmRpc3RhbmNlIDwgbmVnYXRpdmVSZXN0aW5nLmRpc3RhbmNlID9cbiAgICBwb3NpdGl2ZVJlc3RpbmcuaW5kZXggOiBuZWdhdGl2ZVJlc3RpbmcuaW5kZXg7XG4gIHJldHVybiBpbmRleDtcbn07XG5cbi8qKlxuICogZ2l2ZW4gcmVzdGluZyBYIGFuZCBkaXN0YW5jZSB0byBzZWxlY3RlZCBjZWxsXG4gKiBnZXQgdGhlIGRpc3RhbmNlIGFuZCBpbmRleCBvZiB0aGUgY2xvc2VzdCBjZWxsXG4gKiBAcGFyYW0ge051bWJlcn0gcmVzdGluZ1ggLSBlc3RpbWF0ZWQgcG9zdC1mbGljayByZXN0aW5nIHBvc2l0aW9uXG4gKiBAcGFyYW0ge051bWJlcn0gZGlzdGFuY2UgLSBkaXN0YW5jZSB0byBzZWxlY3RlZCBjZWxsXG4gKiBAcGFyYW0ge0ludGVnZXJ9IGluY3JlbWVudCAtICsxIG9yIC0xLCBnb2luZyB1cCBvciBkb3duXG4gKiBAcmV0dXJucyB7T2JqZWN0fSAtIHsgZGlzdGFuY2U6IHtOdW1iZXJ9LCBpbmRleDoge0ludGVnZXJ9IH1cbiAqL1xucHJvdG8uX2dldENsb3Nlc3RSZXN0aW5nID0gZnVuY3Rpb24oIHJlc3RpbmdYLCBkaXN0YW5jZSwgaW5jcmVtZW50ICkge1xuICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdGVkSW5kZXg7XG4gIHZhciBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuICB2YXIgY29uZGl0aW9uID0gdGhpcy5vcHRpb25zLmNvbnRhaW4gJiYgIXRoaXMub3B0aW9ucy53cmFwQXJvdW5kID9cbiAgICAvLyBpZiBjb250YWluLCBrZWVwIGdvaW5nIGlmIGRpc3RhbmNlIGlzIGVxdWFsIHRvIG1pbkRpc3RhbmNlXG4gICAgZnVuY3Rpb24oIGQsIG1kICkgeyByZXR1cm4gZCA8PSBtZDsgfSA6IGZ1bmN0aW9uKCBkLCBtZCApIHsgcmV0dXJuIGQgPCBtZDsgfTtcbiAgd2hpbGUgKCBjb25kaXRpb24oIGRpc3RhbmNlLCBtaW5EaXN0YW5jZSApICkge1xuICAgIC8vIG1lYXN1cmUgZGlzdGFuY2UgdG8gbmV4dCBjZWxsXG4gICAgaW5kZXggKz0gaW5jcmVtZW50O1xuICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgZGlzdGFuY2UgPSB0aGlzLmdldFNsaWRlRGlzdGFuY2UoIC1yZXN0aW5nWCwgaW5kZXggKTtcbiAgICBpZiAoIGRpc3RhbmNlID09PSBudWxsICkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoIGRpc3RhbmNlICk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBkaXN0YW5jZTogbWluRGlzdGFuY2UsXG4gICAgLy8gc2VsZWN0ZWQgd2FzIHByZXZpb3VzIGluZGV4XG4gICAgaW5kZXg6IGluZGV4IC0gaW5jcmVtZW50XG4gIH07XG59O1xuXG4vKipcbiAqIG1lYXN1cmUgZGlzdGFuY2UgYmV0d2VlbiB4IGFuZCBhIHNsaWRlIHRhcmdldFxuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7SW50ZWdlcn0gaW5kZXggLSBzbGlkZSBpbmRleFxuICovXG5wcm90by5nZXRTbGlkZURpc3RhbmNlID0gZnVuY3Rpb24oIHgsIGluZGV4ICkge1xuICB2YXIgbGVuID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xuICAvLyB3cmFwIGFyb3VuZCBpZiBhdCBsZWFzdCAyIHNsaWRlc1xuICB2YXIgaXNXcmFwQXJvdW5kID0gdGhpcy5vcHRpb25zLndyYXBBcm91bmQgJiYgbGVuID4gMTtcbiAgdmFyIHNsaWRlSW5kZXggPSBpc1dyYXBBcm91bmQgPyB1dGlscy5tb2R1bG8oIGluZGV4LCBsZW4gKSA6IGluZGV4O1xuICB2YXIgc2xpZGUgPSB0aGlzLnNsaWRlc1sgc2xpZGVJbmRleCBdO1xuICBpZiAoICFzbGlkZSApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBhZGQgZGlzdGFuY2UgZm9yIHdyYXAtYXJvdW5kIHNsaWRlc1xuICB2YXIgd3JhcCA9IGlzV3JhcEFyb3VuZCA/IHRoaXMuc2xpZGVhYmxlV2lkdGggKiBNYXRoLmZsb29yKCBpbmRleCAvIGxlbiApIDogMDtcbiAgcmV0dXJuIHggLSAoIHNsaWRlLnRhcmdldCArIHdyYXAgKTtcbn07XG5cbnByb3RvLmRyYWdFbmRCb29zdFNlbGVjdCA9IGZ1bmN0aW9uKCkge1xuICAvLyBkbyBub3QgYm9vc3QgaWYgbm8gcHJldmlvdXNEcmFnWCBvciBkcmFnTW92ZVRpbWVcbiAgaWYgKCB0aGlzLnByZXZpb3VzRHJhZ1ggPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5kcmFnTW92ZVRpbWUgfHxcbiAgICAvLyBvciBpZiBkcmFnIHdhcyBoZWxkIGZvciAxMDAgbXNcbiAgICBuZXcgRGF0ZSgpIC0gdGhpcy5kcmFnTW92ZVRpbWUgPiAxMDAgKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB2YXIgZGlzdGFuY2UgPSB0aGlzLmdldFNsaWRlRGlzdGFuY2UoIC10aGlzLmRyYWdYLCB0aGlzLnNlbGVjdGVkSW5kZXggKTtcbiAgdmFyIGRlbHRhID0gdGhpcy5wcmV2aW91c0RyYWdYIC0gdGhpcy5kcmFnWDtcbiAgaWYgKCBkaXN0YW5jZSA+IDAgJiYgZGVsdGEgPiAwICkge1xuICAgIC8vIGJvb3N0IHRvIG5leHQgaWYgbW92aW5nIHRvd2FyZHMgdGhlIHJpZ2h0LCBhbmQgcG9zaXRpdmUgdmVsb2NpdHlcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIGlmICggZGlzdGFuY2UgPCAwICYmIGRlbHRhIDwgMCApIHtcbiAgICAvLyBib29zdCB0byBwcmV2aW91cyBpZiBtb3ZpbmcgdG93YXJkcyB0aGUgbGVmdCwgYW5kIG5lZ2F0aXZlIHZlbG9jaXR5XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiAwO1xufTtcblxuLy8gLS0tLS0gc3RhdGljQ2xpY2sgLS0tLS0gLy9cblxucHJvdG8uc3RhdGljQ2xpY2sgPSBmdW5jdGlvbiggZXZlbnQsIHBvaW50ZXIgKSB7XG4gIC8vIGdldCBjbGlja2VkQ2VsbCwgaWYgY2VsbCB3YXMgY2xpY2tlZFxuICB2YXIgY2xpY2tlZENlbGwgPSB0aGlzLmdldFBhcmVudENlbGwoIGV2ZW50LnRhcmdldCApO1xuICB2YXIgY2VsbEVsZW0gPSBjbGlja2VkQ2VsbCAmJiBjbGlja2VkQ2VsbC5lbGVtZW50O1xuICB2YXIgY2VsbEluZGV4ID0gY2xpY2tlZENlbGwgJiYgdGhpcy5jZWxscy5pbmRleE9mKCBjbGlja2VkQ2VsbCApO1xuICB0aGlzLmRpc3BhdGNoRXZlbnQoICdzdGF0aWNDbGljaycsIGV2ZW50LCBbIHBvaW50ZXIsIGNlbGxFbGVtLCBjZWxsSW5kZXggXSApO1xufTtcblxuLy8gLS0tLS0gc2Nyb2xsIC0tLS0tIC8vXG5cbnByb3RvLm9uc2Nyb2xsID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzY3JvbGwgPSBnZXRTY3JvbGxQb3NpdGlvbigpO1xuICB2YXIgc2Nyb2xsTW92ZVggPSB0aGlzLnBvaW50ZXJEb3duU2Nyb2xsLnggLSBzY3JvbGwueDtcbiAgdmFyIHNjcm9sbE1vdmVZID0gdGhpcy5wb2ludGVyRG93blNjcm9sbC55IC0gc2Nyb2xsLnk7XG4gIC8vIGNhbmNlbCBjbGljay90YXAgaWYgc2Nyb2xsIGlzIHRvbyBtdWNoXG4gIGlmICggTWF0aC5hYnMoIHNjcm9sbE1vdmVYICkgPiAzIHx8IE1hdGguYWJzKCBzY3JvbGxNb3ZlWSApID4gMyApIHtcbiAgICB0aGlzLl9wb2ludGVyRG9uZSgpO1xuICB9XG59O1xuXG4vLyAtLS0tLSB1dGlscyAtLS0tLSAvL1xuXG5mdW5jdGlvbiBnZXRTY3JvbGxQb3NpdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgeTogd2luZG93LnBhZ2VZT2Zmc2V0XG4gIH07XG59XG5cbi8vIC0tLS0tICAtLS0tLSAvL1xuXG5yZXR1cm4gRmxpY2tpdHk7XG5cbn0pKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/flickity/js/drag.js\n") },
vendor: 66,742 bytes, line 1
1"./node_modules/flickity/js/flickity.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Flickity main\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! ev-emitter/ev-emitter */ \"./node_modules/ev-emitter/ev-emitter.js\"),\n __webpack_require__(/*! get-size/get-size */ \"./node_modules/get-size/get-size.js\"),\n __webpack_require__(/*! fizzy-ui-utils/utils */ \"./node_modules/fizzy-ui-utils/utils.js\"),\n __webpack_require__(/*! ./cell */ \"./node_modules/flickity/js/cell.js\"),\n __webpack_require__(/*! ./slide */ \"./node_modules/flickity/js/slide.js\"),\n __webpack_require__(/*! ./animate */ \"./node_modules/flickity/js/animate.js\")\n ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else { var _Flickity; }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i=index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n });\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match(/^(\\d+)%$/);\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5\n },\n left: {\n left: 0,\n right: 1\n },\n right: {\n right: 0,\n left: 1\n }\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {Element or Number} elem\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i=0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem\n * @returns {Flickity.Cell} item\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i=0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {Element, Array, NodeList} elems\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem\n * @returns {Flickit.Cell} cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount ; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {Element, Selector String, or Number} selector\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match(/^[#\\.]?[\\d\\/]/) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n if ( !this.isActive ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility ||isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n });\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {Element} elem\n * @returns {Flickity}\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvZmxpY2tpdHkuanM/MTM4NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBeUM7QUFDaEQ7QUFDQSxJQUFJLGlDQUFRO0FBQ1osTUFBTSwyRkFBdUI7QUFDN0IsTUFBTSxtRkFBbUI7QUFDekIsTUFBTSx5RkFBc0I7QUFDNUIsTUFBTSx1RUFBUTtBQUNkLE1BQU0seUVBQVM7QUFDZixNQUFNLDZFQUFXO0FBQ2pCLEtBQUssbUNBQUU7QUFDUDtBQUNBLEtBQUs7QUFBQSxvR0FBQztBQUNOLEdBQUcsTUFBTSxrQkF3Qk47O0FBRUgsQ0FBQztBQUNEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxpQ0FBaUM7QUFDNUMsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE1BQU07QUFDakIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvZmxpY2tpdHkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGbGlja2l0eSBtYWluXG4oIGZ1bmN0aW9uKCB3aW5kb3csIGZhY3RvcnkgKSB7XG4gIC8vIHVuaXZlcnNhbCBtb2R1bGUgZGVmaW5pdGlvblxuICAvKiBqc2hpbnQgc3RyaWN0OiBmYWxzZSAqL1xuICBpZiAoIHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkge1xuICAgIC8vIEFNRFxuICAgIGRlZmluZSggW1xuICAgICAgJ2V2LWVtaXR0ZXIvZXYtZW1pdHRlcicsXG4gICAgICAnZ2V0LXNpemUvZ2V0LXNpemUnLFxuICAgICAgJ2Zpenp5LXVpLXV0aWxzL3V0aWxzJyxcbiAgICAgICcuL2NlbGwnLFxuICAgICAgJy4vc2xpZGUnLFxuICAgICAgJy4vYW5pbWF0ZSdcbiAgICBdLCBmdW5jdGlvbiggRXZFbWl0dGVyLCBnZXRTaXplLCB1dGlscywgQ2VsbCwgU2xpZGUsIGFuaW1hdGVQcm90b3R5cGUgKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeSggd2luZG93LCBFdkVtaXR0ZXIsIGdldFNpemUsIHV0aWxzLCBDZWxsLCBTbGlkZSwgYW5pbWF0ZVByb3RvdHlwZSApO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgcmVxdWlyZSgnZXYtZW1pdHRlcicpLFxuICAgICAgcmVxdWlyZSgnZ2V0LXNpemUnKSxcbiAgICAgIHJlcXVpcmUoJ2Zpenp5LXVpLXV0aWxzJyksXG4gICAgICByZXF1aXJlKCcuL2NlbGwnKSxcbiAgICAgIHJlcXVpcmUoJy4vc2xpZGUnKSxcbiAgICAgIHJlcXVpcmUoJy4vYW5pbWF0ZScpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIHZhciBfRmxpY2tpdHkgPSB3aW5kb3cuRmxpY2tpdHk7XG5cbiAgICB3aW5kb3cuRmxpY2tpdHkgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgd2luZG93LkV2RW1pdHRlcixcbiAgICAgIHdpbmRvdy5nZXRTaXplLFxuICAgICAgd2luZG93LmZpenp5VUlVdGlscyxcbiAgICAgIF9GbGlja2l0eS5DZWxsLFxuICAgICAgX0ZsaWNraXR5LlNsaWRlLFxuICAgICAgX0ZsaWNraXR5LmFuaW1hdGVQcm90b3R5cGVcbiAgICApO1xuICB9XG5cbn0oIHdpbmRvdywgZnVuY3Rpb24gZmFjdG9yeSggd2luZG93LCBFdkVtaXR0ZXIsIGdldFNpemUsXG4gIHV0aWxzLCBDZWxsLCBTbGlkZSwgYW5pbWF0ZVByb3RvdHlwZSApIHtcblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXJzXG52YXIgalF1ZXJ5ID0gd2luZG93LmpRdWVyeTtcbnZhciBnZXRDb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGU7XG52YXIgY29uc29sZSA9IHdpbmRvdy5jb25zb2xlO1xuXG5mdW5jdGlvbiBtb3ZlRWxlbWVudHMoIGVsZW1zLCB0b0VsZW0gKSB7XG4gIGVsZW1zID0gdXRpbHMubWFrZUFycmF5KCBlbGVtcyApO1xuICB3aGlsZSAoIGVsZW1zLmxlbmd0aCApIHtcbiAgICB0b0VsZW0uYXBwZW5kQ2hpbGQoIGVsZW1zLnNoaWZ0KCkgKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGbGlja2l0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4vLyBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllcnNcbnZhciBHVUlEID0gMDtcbi8vIGludGVybmFsIHN0b3JlIG9mIGFsbCBGbGlja2l0eSBpbnRhbmNlc1xudmFyIGluc3RhbmNlcyA9IHt9O1xuXG5mdW5jdGlvbiBGbGlja2l0eSggZWxlbWVudCwgb3B0aW9ucyApIHtcbiAgdmFyIHF1ZXJ5RWxlbWVudCA9IHV0aWxzLmdldFF1ZXJ5RWxlbWVudCggZWxlbWVudCApO1xuICBpZiAoICFxdWVyeUVsZW1lbnQgKSB7XG4gICAgaWYgKCBjb25zb2xlICkge1xuICAgICAgY29uc29sZS5lcnJvciggJ0JhZCBlbGVtZW50IGZvciBGbGlja2l0eTogJyArICggcXVlcnlFbGVtZW50IHx8IGVsZW1lbnQgKSApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5lbGVtZW50ID0gcXVlcnlFbGVtZW50O1xuICAvLyBkbyBub3QgaW5pdGlhbGl6ZSB0d2ljZSBvbiBzYW1lIGVsZW1lbnRcbiAgaWYgKCB0aGlzLmVsZW1lbnQuZmxpY2tpdHlHVUlEICkge1xuICAgIHZhciBpbnN0YW5jZSA9IGluc3RhbmNlc1sgdGhpcy5lbGVtZW50LmZsaWNraXR5R1VJRCBdO1xuICAgIGluc3RhbmNlLm9wdGlvbiggb3B0aW9ucyApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8vIGFkZCBqUXVlcnlcbiAgaWYgKCBqUXVlcnkgKSB7XG4gICAgdGhpcy4kZWxlbWVudCA9IGpRdWVyeSggdGhpcy5lbGVtZW50ICk7XG4gIH1cbiAgLy8gb3B0aW9uc1xuICB0aGlzLm9wdGlvbnMgPSB1dGlscy5leHRlbmQoIHt9LCB0aGlzLmNvbnN0cnVjdG9yLmRlZmF1bHRzICk7XG4gIHRoaXMub3B0aW9uKCBvcHRpb25zICk7XG5cbiAgLy8ga2ljayB0aGluZ3Mgb2ZmXG4gIHRoaXMuX2NyZWF0ZSgpO1xufVxuXG5GbGlja2l0eS5kZWZhdWx0cyA9IHtcbiAgYWNjZXNzaWJpbGl0eTogdHJ1ZSxcbiAgLy8gYWRhcHRpdmVIZWlnaHQ6IGZhbHNlLFxuICBjZWxsQWxpZ246ICdjZW50ZXInLFxuICAvLyBjZWxsU2VsZWN0b3I6IHVuZGVmaW5lZCxcbiAgLy8gY29udGFpbjogZmFsc2UsXG4gIGZyZWVTY3JvbGxGcmljdGlvbjogMC4wNzUsIC8vIGZyaWN0aW9uIHdoZW4gZnJlZS1zY3JvbGxpbmdcbiAgZnJpY3Rpb246IDAuMjgsIC8vIGZyaWN0aW9uIHdoZW4gc2VsZWN0aW5nXG4gIG5hbWVzcGFjZUpRdWVyeUV2ZW50czogdHJ1ZSxcbiAgLy8gaW5pdGlhbEluZGV4OiAwLFxuICBwZXJjZW50UG9zaXRpb246IHRydWUsXG4gIHJlc2l6ZTogdHJ1ZSxcbiAgc2VsZWN0ZWRBdHRyYWN0aW9uOiAwLjAyNSxcbiAgc2V0R2FsbGVyeVNpemU6IHRydWVcbiAgLy8gd2F0Y2hDU1M6IGZhbHNlLFxuICAvLyB3cmFwQXJvdW5kOiBmYWxzZVxufTtcblxuLy8gaGFzaCBvZiBtZXRob2RzIHRyaWdnZXJlZCBvbiBfY3JlYXRlKClcbkZsaWNraXR5LmNyZWF0ZU1ldGhvZHMgPSBbXTtcblxudmFyIHByb3RvID0gRmxpY2tpdHkucHJvdG90eXBlO1xuLy8gaW5oZXJpdCBFdmVudEVtaXR0ZXJcbnV0aWxzLmV4dGVuZCggcHJvdG8sIEV2RW1pdHRlci5wcm90b3R5cGUgKTtcblxucHJvdG8uX2NyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAvLyBhZGQgaWQgZm9yIEZsaWNraXR5LmRhdGFcbiAgdmFyIGlkID0gdGhpcy5ndWlkID0gKytHVUlEO1xuICB0aGlzLmVsZW1lbnQuZmxpY2tpdHlHVUlEID0gaWQ7IC8vIGV4cGFuZG9cbiAgaW5zdGFuY2VzWyBpZCBdID0gdGhpczsgLy8gYXNzb2NpYXRlIHZpYSBpZFxuICAvLyBpbml0aWFsIHByb3BlcnRpZXNcbiAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcbiAgLy8gaG93IG1hbnkgZnJhbWVzIHNsaWRlciBoYXMgYmVlbiBpbiBzYW1lIHBvc2l0aW9uXG4gIHRoaXMucmVzdGluZ0ZyYW1lcyA9IDA7XG4gIC8vIGluaXRpYWwgcGh5c2ljcyBwcm9wZXJ0aWVzXG4gIHRoaXMueCA9IDA7XG4gIHRoaXMudmVsb2NpdHkgPSAwO1xuICB0aGlzLm9yaWdpblNpZGUgPSB0aGlzLm9wdGlvbnMucmlnaHRUb0xlZnQgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAvLyBjcmVhdGUgdmlld3BvcnQgJiBzbGlkZXJcbiAgdGhpcy52aWV3cG9ydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICB0aGlzLnZpZXdwb3J0LmNsYXNzTmFtZSA9ICdmbGlja2l0eS12aWV3cG9ydCc7XG4gIHRoaXMuX2NyZWF0ZVNsaWRlcigpO1xuXG4gIGlmICggdGhpcy5vcHRpb25zLnJlc2l6ZSB8fCB0aGlzLm9wdGlvbnMud2F0Y2hDU1MgKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdyZXNpemUnLCB0aGlzICk7XG4gIH1cblxuICAvLyBhZGQgbGlzdGVuZXJzIGZyb20gb24gb3B0aW9uXG4gIGZvciAoIHZhciBldmVudE5hbWUgaW4gdGhpcy5vcHRpb25zLm9uICkge1xuICAgIHZhciBsaXN0ZW5lciA9IHRoaXMub3B0aW9ucy5vblsgZXZlbnROYW1lIF07XG4gICAgdGhpcy5vbiggZXZlbnROYW1lLCBsaXN0ZW5lciApO1xuICB9XG5cbiAgRmxpY2tpdHkuY3JlYXRlTWV0aG9kcy5mb3JFYWNoKCBmdW5jdGlvbiggbWV0aG9kICkge1xuICAgIHRoaXNbIG1ldGhvZCBdKCk7XG4gIH0sIHRoaXMgKTtcblxuICBpZiAoIHRoaXMub3B0aW9ucy53YXRjaENTUyApIHtcbiAgICB0aGlzLndhdGNoQ1NTKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hY3RpdmF0ZSgpO1xuICB9XG5cbn07XG5cbi8qKlxuICogc2V0IG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKi9cbnByb3RvLm9wdGlvbiA9IGZ1bmN0aW9uKCBvcHRzICkge1xuICB1dGlscy5leHRlbmQoIHRoaXMub3B0aW9ucywgb3B0cyApO1xufTtcblxucHJvdG8uYWN0aXZhdGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCB0aGlzLmlzQWN0aXZlICkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZsaWNraXR5LWVuYWJsZWQnKTtcbiAgaWYgKCB0aGlzLm9wdGlvbnMucmlnaHRUb0xlZnQgKSB7XG4gICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZsaWNraXR5LXJ0bCcpO1xuICB9XG5cbiAgdGhpcy5nZXRTaXplKCk7XG4gIC8vIG1vdmUgaW5pdGlhbCBjZWxsIGVsZW1lbnRzIHNvIHRoZXkgY2FuIGJlIGxvYWRlZCBhcyBjZWxsc1xuICB2YXIgY2VsbEVsZW1zID0gdGhpcy5fZmlsdGVyRmluZENlbGxFbGVtZW50cyggdGhpcy5lbGVtZW50LmNoaWxkcmVuICk7XG4gIG1vdmVFbGVtZW50cyggY2VsbEVsZW1zLCB0aGlzLnNsaWRlciApO1xuICB0aGlzLnZpZXdwb3J0LmFwcGVuZENoaWxkKCB0aGlzLnNsaWRlciApO1xuICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoIHRoaXMudmlld3BvcnQgKTtcbiAgLy8gZ2V0IGNlbGxzIGZyb20gY2hpbGRyZW5cbiAgdGhpcy5yZWxvYWRDZWxscygpO1xuXG4gIGlmICggdGhpcy5vcHRpb25zLmFjY2Vzc2liaWxpdHkgKSB7XG4gICAgLy8gYWxsb3cgZWxlbWVudCB0byBmb2N1c2FibGVcbiAgICB0aGlzLmVsZW1lbnQudGFiSW5kZXggPSAwO1xuICAgIC8vIGxpc3RlbiBmb3Iga2V5IHByZXNzZXNcbiAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ2tleWRvd24nLCB0aGlzICk7XG4gIH1cblxuICB0aGlzLmVtaXRFdmVudCgnYWN0aXZhdGUnKTtcbiAgdGhpcy5zZWxlY3RJbml0aWFsSW5kZXgoKTtcbiAgLy8gZmxhZyBmb3IgaW5pdGlhbCBhY3RpdmF0aW9uLCBmb3IgdXNpbmcgaW5pdGlhbEluZGV4XG4gIHRoaXMuaXNJbml0QWN0aXZhdGVkID0gdHJ1ZTtcbiAgLy8gcmVhZHkgZXZlbnQuICM0OTNcbiAgdGhpcy5kaXNwYXRjaEV2ZW50KCdyZWFkeScpO1xufTtcblxuLy8gc2xpZGVyIHBvc2l0aW9ucyB0aGUgY2VsbHNcbnByb3RvLl9jcmVhdGVTbGlkZXIgPSBmdW5jdGlvbigpIHtcbiAgLy8gc2xpZGVyIGVsZW1lbnQgZG9lcyBhbGwgdGhlIHBvc2l0aW9uaW5nXG4gIHZhciBzbGlkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgc2xpZGVyLmNsYXNzTmFtZSA9ICdmbGlja2l0eS1zbGlkZXInO1xuICBzbGlkZXIuc3R5bGVbIHRoaXMub3JpZ2luU2lkZSBdID0gMDtcbiAgdGhpcy5zbGlkZXIgPSBzbGlkZXI7XG59O1xuXG5wcm90by5fZmlsdGVyRmluZENlbGxFbGVtZW50cyA9IGZ1bmN0aW9uKCBlbGVtcyApIHtcbiAgcmV0dXJuIHV0aWxzLmZpbHRlckZpbmRFbGVtZW50cyggZWxlbXMsIHRoaXMub3B0aW9ucy5jZWxsU2VsZWN0b3IgKTtcbn07XG5cbi8vIGdvZXMgdGhyb3VnaCBhbGwgY2hpbGRyZW5cbnByb3RvLnJlbG9hZENlbGxzID0gZnVuY3Rpb24oKSB7XG4gIC8vIGNvbGxlY3Rpb24gb2YgaXRlbSBlbGVtZW50c1xuICB0aGlzLmNlbGxzID0gdGhpcy5fbWFrZUNlbGxzKCB0aGlzLnNsaWRlci5jaGlsZHJlbiApO1xuICB0aGlzLnBvc2l0aW9uQ2VsbHMoKTtcbiAgdGhpcy5fZ2V0V3JhcFNoaWZ0Q2VsbHMoKTtcbiAgdGhpcy5zZXRHYWxsZXJ5U2l6ZSgpO1xufTtcblxuLyoqXG4gKiB0dXJuIGVsZW1lbnRzIGludG8gRmxpY2tpdHkuQ2VsbHNcbiAqIEBwYXJhbSB7QXJyYXkgb3IgTm9kZUxpc3Qgb3IgSFRNTEVsZW1lbnR9IGVsZW1zXG4gKiBAcmV0dXJucyB7QXJyYXl9IGl0ZW1zIC0gY29sbGVjdGlvbiBvZiBuZXcgRmxpY2tpdHkgQ2VsbHNcbiAqL1xucHJvdG8uX21ha2VDZWxscyA9IGZ1bmN0aW9uKCBlbGVtcyApIHtcbiAgdmFyIGNlbGxFbGVtcyA9IHRoaXMuX2ZpbHRlckZpbmRDZWxsRWxlbWVudHMoIGVsZW1zICk7XG5cbiAgLy8gY3JlYXRlIG5ldyBGbGlja2l0eSBmb3IgY29sbGVjdGlvblxuICB2YXIgY2VsbHMgPSBjZWxsRWxlbXMubWFwKCBmdW5jdGlvbiggY2VsbEVsZW0gKSB7XG4gICAgcmV0dXJuIG5ldyBDZWxsKCBjZWxsRWxlbSwgdGhpcyApO1xuICB9LCB0aGlzICk7XG5cbiAgcmV0dXJuIGNlbGxzO1xufTtcblxucHJvdG8uZ2V0TGFzdENlbGwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY2VsbHNbIHRoaXMuY2VsbHMubGVuZ3RoIC0gMSBdO1xufTtcblxucHJvdG8uZ2V0TGFzdFNsaWRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNsaWRlc1sgdGhpcy5zbGlkZXMubGVuZ3RoIC0gMSBdO1xufTtcblxuLy8gcG9zaXRpb25zIGFsbCBjZWxsc1xucHJvdG8ucG9zaXRpb25DZWxscyA9IGZ1bmN0aW9uKCkge1xuICAvLyBzaXplIGFsbCBjZWxsc1xuICB0aGlzLl9zaXplQ2VsbHMoIHRoaXMuY2VsbHMgKTtcbiAgLy8gcG9zaXRpb24gYWxsIGNlbGxzXG4gIHRoaXMuX3Bvc2l0aW9uQ2VsbHMoIDAgKTtcbn07XG5cbi8qKlxuICogcG9zaXRpb24gY2VydGFpbiBjZWxsc1xuICogQHBhcmFtIHtJbnRlZ2VyfSBpbmRleCAtIHdoaWNoIGNlbGwgdG8gc3RhcnQgd2l0aFxuICovXG5wcm90by5fcG9zaXRpb25DZWxscyA9IGZ1bmN0aW9uKCBpbmRleCApIHtcbiAgaW5kZXggPSBpbmRleCB8fCAwO1xuICAvLyBhbHNvIG1lYXN1cmUgbWF4Q2VsbEhlaWdodFxuICAvLyBzdGFydCAwIGlmIHBvc2l0aW9uaW5nIGFsbCBjZWxsc1xuICB0aGlzLm1heENlbGxIZWlnaHQgPSBpbmRleCA/IHRoaXMubWF4Q2VsbEhlaWdodCB8fCAwIDogMDtcbiAgdmFyIGNlbGxYID0gMDtcbiAgLy8gZ2V0IGNlbGxYXG4gIGlmICggaW5kZXggPiAwICkge1xuICAgIHZhciBzdGFydENlbGwgPSB0aGlzLmNlbGxzWyBpbmRleCAtIDEgXTtcbiAgICBjZWxsWCA9IHN0YXJ0Q2VsbC54ICsgc3RhcnRDZWxsLnNpemUub3V0ZXJXaWR0aDtcbiAgfVxuICB2YXIgbGVuID0gdGhpcy5jZWxscy5sZW5ndGg7XG4gIGZvciAoIHZhciBpPWluZGV4OyBpIDwgbGVuOyBpKysgKSB7XG4gICAgdmFyIGNlbGwgPSB0aGlzLmNlbGxzW2ldO1xuICAgIGNlbGwuc2V0UG9zaXRpb24oIGNlbGxYICk7XG4gICAgY2VsbFggKz0gY2VsbC5zaXplLm91dGVyV2lkdGg7XG4gICAgdGhpcy5tYXhDZWxsSGVpZ2h0ID0gTWF0aC5tYXgoIGNlbGwuc2l6ZS5vdXRlckhlaWdodCwgdGhpcy5tYXhDZWxsSGVpZ2h0ICk7XG4gIH1cbiAgLy8ga2VlcCB0cmFjayBvZiBjZWxsWCBmb3Igd3JhcC1hcm91bmRcbiAgdGhpcy5zbGlkZWFibGVXaWR0aCA9IGNlbGxYO1xuICAvLyBzbGlkZXNcbiAgdGhpcy51cGRhdGVTbGlkZXMoKTtcbiAgLy8gY29udGFpbiBzbGlkZXMgdGFyZ2V0XG4gIHRoaXMuX2NvbnRhaW5TbGlkZXMoKTtcbiAgLy8gdXBkYXRlIHNsaWRlc1dpZHRoXG4gIHRoaXMuc2xpZGVzV2lkdGggPSBsZW4gPyB0aGlzLmdldExhc3RTbGlkZSgpLnRhcmdldCAtIHRoaXMuc2xpZGVzWzBdLnRhcmdldCA6IDA7XG59O1xuXG4vKipcbiAqIGNlbGwuZ2V0U2l6ZSgpIG9uIG11bHRpcGxlIGNlbGxzXG4gKiBAcGFyYW0ge0FycmF5fSBjZWxsc1xuICovXG5wcm90by5fc2l6ZUNlbGxzID0gZnVuY3Rpb24oIGNlbGxzICkge1xuICBjZWxscy5mb3JFYWNoKCBmdW5jdGlvbiggY2VsbCApIHtcbiAgICBjZWxsLmdldFNpemUoKTtcbiAgfSk7XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxucHJvdG8udXBkYXRlU2xpZGVzID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc2xpZGVzID0gW107XG4gIGlmICggIXRoaXMuY2VsbHMubGVuZ3RoICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzbGlkZSA9IG5ldyBTbGlkZSggdGhpcyApO1xuICB0aGlzLnNsaWRlcy5wdXNoKCBzbGlkZSApO1xuICB2YXIgaXNPcmlnaW5MZWZ0ID0gdGhpcy5vcmlnaW5TaWRlID09ICdsZWZ0JztcbiAgdmFyIG5leHRNYXJnaW4gPSBpc09yaWdpbkxlZnQgPyAnbWFyZ2luUmlnaHQnIDogJ21hcmdpbkxlZnQnO1xuXG4gIHZhciBjYW5DZWxsRml0ID0gdGhpcy5fZ2V0Q2FuQ2VsbEZpdCgpO1xuXG4gIHRoaXMuY2VsbHMuZm9yRWFjaCggZnVuY3Rpb24oIGNlbGwsIGkgKSB7XG4gICAgLy8ganVzdCBhZGQgY2VsbCBpZiBmaXJzdCBjZWxsIGluIHNsaWRlXG4gICAgaWYgKCAhc2xpZGUuY2VsbHMubGVuZ3RoICkge1xuICAgICAgc2xpZGUuYWRkQ2VsbCggY2VsbCApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzbGlkZVdpZHRoID0gKCBzbGlkZS5vdXRlcldpZHRoIC0gc2xpZGUuZmlyc3RNYXJnaW4gKSArXG4gICAgICAoIGNlbGwuc2l6ZS5vdXRlcldpZHRoIC0gY2VsbC5zaXplWyBuZXh0TWFyZ2luIF0gKTtcblxuICAgIGlmICggY2FuQ2VsbEZpdC5jYWxsKCB0aGlzLCBpLCBzbGlkZVdpZHRoICkgKSB7XG4gICAgICBzbGlkZS5hZGRDZWxsKCBjZWxsICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRvZXNuJ3QgZml0LCBuZXcgc2xpZGVcbiAgICAgIHNsaWRlLnVwZGF0ZVRhcmdldCgpO1xuXG4gICAgICBzbGlkZSA9IG5ldyBTbGlkZSggdGhpcyApO1xuICAgICAgdGhpcy5zbGlkZXMucHVzaCggc2xpZGUgKTtcbiAgICAgIHNsaWRlLmFkZENlbGwoIGNlbGwgKTtcbiAgICB9XG4gIH0sIHRoaXMgKTtcbiAgLy8gbGFzdCBzbGlkZVxuICBzbGlkZS51cGRhdGVUYXJnZXQoKTtcbiAgLy8gdXBkYXRlIC5zZWxlY3RlZFNsaWRlXG4gIHRoaXMudXBkYXRlU2VsZWN0ZWRTbGlkZSgpO1xufTtcblxucHJvdG8uX2dldENhbkNlbGxGaXQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGdyb3VwQ2VsbHMgPSB0aGlzLm9wdGlvbnMuZ3JvdXBDZWxscztcbiAgaWYgKCAhZ3JvdXBDZWxscyApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfSBlbHNlIGlmICggdHlwZW9mIGdyb3VwQ2VsbHMgPT0gJ251bWJlcicgKSB7XG4gICAgLy8gZ3JvdXAgYnkgbnVtYmVyLiAzIC0+IFswLDEsMl0sIFszLDQsNV0sIC4uLlxuICAgIHZhciBudW1iZXIgPSBwYXJzZUludCggZ3JvdXBDZWxscywgMTAgKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oIGkgKSB7XG4gICAgICByZXR1cm4gKCBpICUgbnVtYmVyICkgIT09IDA7XG4gICAgfTtcbiAgfVxuICAvLyBkZWZhdWx0LCBncm91cCBieSB3aWR0aCBvZiBzbGlkZVxuICAvLyBwYXJzZSAnNzUlXG4gIHZhciBwZXJjZW50TWF0Y2ggPSB0eXBlb2YgZ3JvdXBDZWxscyA9PSAnc3RyaW5nJyAmJlxuICAgIGdyb3VwQ2VsbHMubWF0Y2goL14oXFxkKyklJC8pO1xuICB2YXIgcGVyY2VudCA9IHBlcmNlbnRNYXRjaCA/IHBhcnNlSW50KCBwZXJjZW50TWF0Y2hbMV0sIDEwICkgLyAxMDAgOiAxO1xuICByZXR1cm4gZnVuY3Rpb24oIGksIHNsaWRlV2lkdGggKSB7XG4gICAgcmV0dXJuIHNsaWRlV2lkdGggPD0gKCB0aGlzLnNpemUuaW5uZXJXaWR0aCArIDEgKSAqIHBlcmNlbnQ7XG4gIH07XG59O1xuXG4vLyBhbGlhcyBfaW5pdCBmb3IgalF1ZXJ5IHBsdWdpbiAuZmxpY2tpdHkoKVxucHJvdG8uX2luaXQgPVxucHJvdG8ucmVwb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnBvc2l0aW9uQ2VsbHMoKTtcbiAgdGhpcy5wb3NpdGlvblNsaWRlckF0U2VsZWN0ZWQoKTtcbn07XG5cbnByb3RvLmdldFNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5zaXplID0gZ2V0U2l6ZSggdGhpcy5lbGVtZW50ICk7XG4gIHRoaXMuc2V0Q2VsbEFsaWduKCk7XG4gIHRoaXMuY3Vyc29yUG9zaXRpb24gPSB0aGlzLnNpemUuaW5uZXJXaWR0aCAqIHRoaXMuY2VsbEFsaWduO1xufTtcblxudmFyIGNlbGxBbGlnblNob3J0aGFuZHMgPSB7XG4gIC8vIGNlbGwgYWxpZ24sIHRoZW4gYmFzZWQgb24gb3JpZ2luIHNpZGVcbiAgY2VudGVyOiB7XG4gICAgbGVmdDogMC41LFxuICAgIHJpZ2h0OiAwLjVcbiAgfSxcbiAgbGVmdDoge1xuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDFcbiAgfSxcbiAgcmlnaHQ6IHtcbiAgICByaWdodDogMCxcbiAgICBsZWZ0OiAxXG4gIH1cbn07XG5cbnByb3RvLnNldENlbGxBbGlnbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc2hvcnRoYW5kID0gY2VsbEFsaWduU2hvcnRoYW5kc1sgdGhpcy5vcHRpb25zLmNlbGxBbGlnbiBdO1xuICB0aGlzLmNlbGxBbGlnbiA9IHNob3J0aGFuZCA/IHNob3J0aGFuZFsgdGhpcy5vcmlnaW5TaWRlIF0gOiB0aGlzLm9wdGlvbnMuY2VsbEFsaWduO1xufTtcblxucHJvdG8uc2V0R2FsbGVyeVNpemUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCB0aGlzLm9wdGlvbnMuc2V0R2FsbGVyeVNpemUgKSB7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMub3B0aW9ucy5hZGFwdGl2ZUhlaWdodCAmJiB0aGlzLnNlbGVjdGVkU2xpZGUgP1xuICAgICAgdGhpcy5zZWxlY3RlZFNsaWRlLmhlaWdodCA6IHRoaXMubWF4Q2VsbEhlaWdodDtcbiAgICB0aGlzLnZpZXdwb3J0LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gIH1cbn07XG5cbnByb3RvLl9nZXRXcmFwU2hpZnRDZWxscyA9IGZ1bmN0aW9uKCkge1xuICAvLyBvbmx5IGZvciB3cmFwLWFyb3VuZFxuICBpZiAoICF0aGlzLm9wdGlvbnMud3JhcEFyb3VuZCApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gdW5zaGlmdCBwcmV2aW91cyBjZWxsc1xuICB0aGlzLl91bnNoaWZ0Q2VsbHMoIHRoaXMuYmVmb3JlU2hpZnRDZWxscyApO1xuICB0aGlzLl91bnNoaWZ0Q2VsbHMoIHRoaXMuYWZ0ZXJTaGlmdENlbGxzICk7XG4gIC8vIGdldCBiZWZvcmUgY2VsbHNcbiAgLy8gaW5pdGlhbCBnYXBcbiAgdmFyIGdhcFggPSB0aGlzLmN1cnNvclBvc2l0aW9uO1xuICB2YXIgY2VsbEluZGV4ID0gdGhpcy5jZWxscy5sZW5ndGggLSAxO1xuICB0aGlzLmJlZm9yZVNoaWZ0Q2VsbHMgPSB0aGlzLl9nZXRHYXBDZWxscyggZ2FwWCwgY2VsbEluZGV4LCAtMSApO1xuICAvLyBnZXQgYWZ0ZXIgY2VsbHNcbiAgLy8gZW5kaW5nIGdhcCBiZXR3ZWVuIGxhc3QgY2VsbCBhbmQgZW5kIG9mIGdhbGxlcnkgdmlld3BvcnRcbiAgZ2FwWCA9IHRoaXMuc2l6ZS5pbm5lcldpZHRoIC0gdGhpcy5jdXJzb3JQb3NpdGlvbjtcbiAgLy8gc3RhcnQgY2xvbmluZyBhdCBmaXJzdCBjZWxsLCB3b3JraW5nIGZvcndhcmRzXG4gIHRoaXMuYWZ0ZXJTaGlmdENlbGxzID0gdGhpcy5fZ2V0R2FwQ2VsbHMoIGdhcFgsIDAsIDEgKTtcbn07XG5cbnByb3RvLl9nZXRHYXBDZWxscyA9IGZ1bmN0aW9uKCBnYXBYLCBjZWxsSW5kZXgsIGluY3JlbWVudCApIHtcbiAgLy8ga2VlcCBhZGRpbmcgY2VsbHMgdW50aWwgdGhlIGNvdmVyIHRoZSBpbml0aWFsIGdhcFxuICB2YXIgY2VsbHMgPSBbXTtcbiAgd2hpbGUgKCBnYXBYID4gMCApIHtcbiAgICB2YXIgY2VsbCA9IHRoaXMuY2VsbHNbIGNlbGxJbmRleCBdO1xuICAgIGlmICggIWNlbGwgKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2VsbHMucHVzaCggY2VsbCApO1xuICAgIGNlbGxJbmRleCArPSBpbmNyZW1lbnQ7XG4gICAgZ2FwWCAtPSBjZWxsLnNpemUub3V0ZXJXaWR0aDtcbiAgfVxuICByZXR1cm4gY2VsbHM7XG59O1xuXG4vLyAtLS0tLSBjb250YWluIC0tLS0tIC8vXG5cbi8vIGNvbnRhaW4gY2VsbCB0YXJnZXRzIHNvIG5vIGV4Y2VzcyBzbGlkaW5nXG5wcm90by5fY29udGFpblNsaWRlcyA9IGZ1bmN0aW9uKCkge1xuICBpZiAoICF0aGlzLm9wdGlvbnMuY29udGFpbiB8fCB0aGlzLm9wdGlvbnMud3JhcEFyb3VuZCB8fCAhdGhpcy5jZWxscy5sZW5ndGggKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBpc1JpZ2h0VG9MZWZ0ID0gdGhpcy5vcHRpb25zLnJpZ2h0VG9MZWZ0O1xuICB2YXIgYmVnaW5NYXJnaW4gPSBpc1JpZ2h0VG9MZWZ0ID8gJ21hcmdpblJpZ2h0JyA6ICdtYXJnaW5MZWZ0JztcbiAgdmFyIGVuZE1hcmdpbiA9IGlzUmlnaHRUb0xlZnQgPyAnbWFyZ2luTGVmdCcgOiAnbWFyZ2luUmlnaHQnO1xuICB2YXIgY29udGVudFdpZHRoID0gdGhpcy5zbGlkZWFibGVXaWR0aCAtIHRoaXMuZ2V0TGFzdENlbGwoKS5zaXplWyBlbmRNYXJnaW4gXTtcbiAgLy8gY29udGVudCBpcyBsZXNzIHRoYW4gZ2FsbGVyeSBzaXplXG4gIHZhciBpc0NvbnRlbnRTbWFsbGVyID0gY29udGVudFdpZHRoIDwgdGhpcy5zaXplLmlubmVyV2lkdGg7XG4gIC8vIGJvdW5kc1xuICB2YXIgYmVnaW5Cb3VuZCA9IHRoaXMuY3Vyc29yUG9zaXRpb24gKyB0aGlzLmNlbGxzWzBdLnNpemVbIGJlZ2luTWFyZ2luIF07XG4gIHZhciBlbmRCb3VuZCA9IGNvbnRlbnRXaWR0aCAtIHRoaXMuc2l6ZS5pbm5lcldpZHRoICogKCAxIC0gdGhpcy5jZWxsQWxpZ24gKTtcbiAgLy8gY29udGFpbiBlYWNoIGNlbGwgdGFyZ2V0XG4gIHRoaXMuc2xpZGVzLmZvckVhY2goIGZ1bmN0aW9uKCBzbGlkZSApIHtcbiAgICBpZiAoIGlzQ29udGVudFNtYWxsZXIgKSB7XG4gICAgICAvLyBhbGwgY2VsbHMgZml0IGluc2lkZSBnYWxsZXJ5XG4gICAgICBzbGlkZS50YXJnZXQgPSBjb250ZW50V2lkdGggKiB0aGlzLmNlbGxBbGlnbjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29udGFpbiB0byBib3VuZHNcbiAgICAgIHNsaWRlLnRhcmdldCA9IE1hdGgubWF4KCBzbGlkZS50YXJnZXQsIGJlZ2luQm91bmQgKTtcbiAgICAgIHNsaWRlLnRhcmdldCA9IE1hdGgubWluKCBzbGlkZS50YXJnZXQsIGVuZEJvdW5kICk7XG4gICAgfVxuICB9LCB0aGlzICk7XG59O1xuXG4vLyAtLS0tLSAgLS0tLS0gLy9cblxuLyoqXG4gKiBlbWl0cyBldmVudHMgdmlhIGV2ZW50RW1pdHRlciBhbmQgalF1ZXJ5IGV2ZW50c1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgLSBuYW1lIG9mIGV2ZW50XG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCAtIG9yaWdpbmFsIGV2ZW50XG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIC0gZXh0cmEgYXJndW1lbnRzXG4gKi9cbnByb3RvLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiggdHlwZSwgZXZlbnQsIGFyZ3MgKSB7XG4gIHZhciBlbWl0QXJncyA9IGV2ZW50ID8gWyBldmVudCBdLmNvbmNhdCggYXJncyApIDogYXJncztcbiAgdGhpcy5lbWl0RXZlbnQoIHR5cGUsIGVtaXRBcmdzICk7XG5cbiAgaWYgKCBqUXVlcnkgJiYgdGhpcy4kZWxlbWVudCApIHtcbiAgICAvLyBkZWZhdWx0IHRyaWdnZXIgd2l0aCB0eXBlIGlmIG5vIGV2ZW50XG4gICAgdHlwZSArPSB0aGlzLm9wdGlvbnMubmFtZXNwYWNlSlF1ZXJ5RXZlbnRzID8gJy5mbGlja2l0eScgOiAnJztcbiAgICB2YXIgJGV2ZW50ID0gdHlwZTtcbiAgICBpZiAoIGV2ZW50ICkge1xuICAgICAgLy8gY3JlYXRlIGpRdWVyeSBldmVudFxuICAgICAgdmFyIGpRRXZlbnQgPSBqUXVlcnkuRXZlbnQoIGV2ZW50ICk7XG4gICAgICBqUUV2ZW50LnR5cGUgPSB0eXBlO1xuICAgICAgJGV2ZW50ID0galFFdmVudDtcbiAgICB9XG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCAkZXZlbnQsIGFyZ3MgKTtcbiAgfVxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2VsZWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbi8qKlxuICogQHBhcmFtIHtJbnRlZ2VyfSBpbmRleCAtIGluZGV4IG9mIHRoZSBzbGlkZVxuICogQHBhcmFtIHtCb29sZWFufSBpc1dyYXAgLSB3aWxsIHdyYXAtYXJvdW5kIHRvIGxhc3QvZmlyc3QgaWYgYXQgdGhlIGVuZFxuICogQHBhcmFtIHtCb29sZWFufSBpc0luc3RhbnQgLSB3aWxsIGltbWVkaWF0ZWx5IHNldCBwb3NpdGlvbiBhdCBzZWxlY3RlZCBjZWxsXG4gKi9cbnByb3RvLnNlbGVjdCA9IGZ1bmN0aW9uKCBpbmRleCwgaXNXcmFwLCBpc0luc3RhbnQgKSB7XG4gIGlmICggIXRoaXMuaXNBY3RpdmUgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGluZGV4ID0gcGFyc2VJbnQoIGluZGV4LCAxMCApO1xuICB0aGlzLl93cmFwU2VsZWN0KCBpbmRleCApO1xuXG4gIGlmICggdGhpcy5vcHRpb25zLndyYXBBcm91bmQgfHwgaXNXcmFwICkge1xuICAgIGluZGV4ID0gdXRpbHMubW9kdWxvKCBpbmRleCwgdGhpcy5zbGlkZXMubGVuZ3RoICk7XG4gIH1cbiAgLy8gYmFpbCBpZiBpbnZhbGlkIGluZGV4XG4gIGlmICggIXRoaXMuc2xpZGVzWyBpbmRleCBdICkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgcHJldkluZGV4ID0gdGhpcy5zZWxlY3RlZEluZGV4O1xuICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgdGhpcy51cGRhdGVTZWxlY3RlZFNsaWRlKCk7XG4gIGlmICggaXNJbnN0YW50ICkge1xuICAgIHRoaXMucG9zaXRpb25TbGlkZXJBdFNlbGVjdGVkKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFydEFuaW1hdGlvbigpO1xuICB9XG4gIGlmICggdGhpcy5vcHRpb25zLmFkYXB0aXZlSGVpZ2h0ICkge1xuICAgIHRoaXMuc2V0R2FsbGVyeVNpemUoKTtcbiAgfVxuICAvLyBldmVudHNcbiAgdGhpcy5kaXNwYXRjaEV2ZW50KCAnc2VsZWN0JywgbnVsbCwgWyBpbmRleCBdICk7XG4gIC8vIGNoYW5nZSBldmVudCBpZiBuZXcgaW5kZXhcbiAgaWYgKCBpbmRleCAhPSBwcmV2SW5kZXggKSB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCAnY2hhbmdlJywgbnVsbCwgWyBpbmRleCBdICk7XG4gIH1cbiAgLy8gb2xkIHYxIGV2ZW50IG5hbWUsIHJlbW92ZSBpbiB2M1xuICB0aGlzLmRpc3BhdGNoRXZlbnQoJ2NlbGxTZWxlY3QnKTtcbn07XG5cbi8vIHdyYXBzIHBvc2l0aW9uIGZvciB3cmFwQXJvdW5kLCB0byBtb3ZlIHRvIGNsb3Nlc3Qgc2xpZGUuICMxMTNcbnByb3RvLl93cmFwU2VsZWN0ID0gZnVuY3Rpb24oIGluZGV4ICkge1xuICB2YXIgbGVuID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xuICB2YXIgaXNXcmFwcGluZyA9IHRoaXMub3B0aW9ucy53cmFwQXJvdW5kICYmIGxlbiA+IDE7XG4gIGlmICggIWlzV3JhcHBpbmcgKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4gIHZhciB3cmFwSW5kZXggPSB1dGlscy5tb2R1bG8oIGluZGV4LCBsZW4gKTtcbiAgLy8gZ28gdG8gc2hvcnRlc3RcbiAgdmFyIGRlbHRhID0gTWF0aC5hYnMoIHdyYXBJbmRleCAtIHRoaXMuc2VsZWN0ZWRJbmRleCApO1xuICB2YXIgYmFja1dyYXBEZWx0YSA9IE1hdGguYWJzKCAoIHdyYXBJbmRleCArIGxlbiApIC0gdGhpcy5zZWxlY3RlZEluZGV4ICk7XG4gIHZhciBmb3Jld2FyZFdyYXBEZWx0YSA9IE1hdGguYWJzKCAoIHdyYXBJbmRleCAtIGxlbiApIC0gdGhpcy5zZWxlY3RlZEluZGV4ICk7XG4gIGlmICggIXRoaXMuaXNEcmFnU2VsZWN0ICYmIGJhY2tXcmFwRGVsdGEgPCBkZWx0YSApIHtcbiAgICBpbmRleCArPSBsZW47XG4gIH0gZWxzZSBpZiAoICF0aGlzLmlzRHJhZ1NlbGVjdCAmJiBmb3Jld2FyZFdyYXBEZWx0YSA8IGRlbHRhICkge1xuICAgIGluZGV4IC09IGxlbjtcbiAgfVxuICAvLyB3cmFwIHBvc2l0aW9uIHNvIHNsaWRlciBpcyB3aXRoaW4gbm9ybWFsIGFyZWFcbiAgaWYgKCBpbmRleCA8IDAgKSB7XG4gICAgdGhpcy54IC09IHRoaXMuc2xpZGVhYmxlV2lkdGg7XG4gIH0gZWxzZSBpZiAoIGluZGV4ID49IGxlbiApIHtcbiAgICB0aGlzLnggKz0gdGhpcy5zbGlkZWFibGVXaWR0aDtcbiAgfVxufTtcblxucHJvdG8ucHJldmlvdXMgPSBmdW5jdGlvbiggaXNXcmFwLCBpc0luc3RhbnQgKSB7XG4gIHRoaXMuc2VsZWN0KCB0aGlzLnNlbGVjdGVkSW5kZXggLSAxLCBpc1dyYXAsIGlzSW5zdGFudCApO1xufTtcblxucHJvdG8ubmV4dCA9IGZ1bmN0aW9uKCBpc1dyYXAsIGlzSW5zdGFudCApIHtcbiAgdGhpcy5zZWxlY3QoIHRoaXMuc2VsZWN0ZWRJbmRleCArIDEsIGlzV3JhcCwgaXNJbnN0YW50ICk7XG59O1xuXG5wcm90by51cGRhdGVTZWxlY3RlZFNsaWRlID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzbGlkZSA9IHRoaXMuc2xpZGVzWyB0aGlzLnNlbGVjdGVkSW5kZXggXTtcbiAgLy8gc2VsZWN0ZWRJbmRleCBjb3VsZCBiZSBvdXRzaWRlIG9mIHNsaWRlcywgaWYgdHJpZ2dlcmVkIGJlZm9yZSByZXNpemUoKVxuICBpZiAoICFzbGlkZSApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gdW5zZWxlY3QgcHJldmlvdXMgc2VsZWN0ZWQgc2xpZGVcbiAgdGhpcy51bnNlbGVjdFNlbGVjdGVkU2xpZGUoKTtcbiAgLy8gdXBkYXRlIG5ldyBzZWxlY3RlZCBzbGlkZVxuICB0aGlzLnNlbGVjdGVkU2xpZGUgPSBzbGlkZTtcbiAgc2xpZGUuc2VsZWN0KCk7XG4gIHRoaXMuc2VsZWN0ZWRDZWxscyA9IHNsaWRlLmNlbGxzO1xuICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBzbGlkZS5nZXRDZWxsRWxlbWVudHMoKTtcbiAgLy8gSEFDSzogc2VsZWN0ZWRDZWxsICYgc2VsZWN0ZWRFbGVtZW50IGlzIGZpcnN0IGNlbGwgaW4gc2xpZGUsIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIC8vIFJlbW92ZSBpbiB2Mz9cbiAgdGhpcy5zZWxlY3RlZENlbGwgPSBzbGlkZS5jZWxsc1swXTtcbiAgdGhpcy5zZWxlY3RlZEVsZW1lbnQgPSB0aGlzLnNlbGVjdGVkRWxlbWVudHNbMF07XG59O1xuXG5wcm90by51bnNlbGVjdFNlbGVjdGVkU2xpZGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCB0aGlzLnNlbGVjdGVkU2xpZGUgKSB7XG4gICAgdGhpcy5zZWxlY3RlZFNsaWRlLnVuc2VsZWN0KCk7XG4gIH1cbn07XG5cbnByb3RvLnNlbGVjdEluaXRpYWxJbmRleCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaW5pdGlhbEluZGV4ID0gdGhpcy5vcHRpb25zLmluaXRpYWxJbmRleDtcbiAgLy8gYWxyZWFkeSBhY3RpdmF0ZWQsIHNlbGVjdCBwcmV2aW91cyBzZWxlY3RlZEluZGV4XG4gIGlmICggdGhpcy5pc0luaXRBY3RpdmF0ZWQgKSB7XG4gICAgdGhpcy5zZWxlY3QoIHRoaXMuc2VsZWN0ZWRJbmRleCwgZmFsc2UsIHRydWUgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gc2VsZWN0IHdpdGggc2VsZWN0b3Igc3RyaW5nXG4gIGlmICggaW5pdGlhbEluZGV4ICYmIHR5cGVvZiBpbml0aWFsSW5kZXggPT0gJ3N0cmluZycgKSB7XG4gICAgdmFyIGNlbGwgPSB0aGlzLnF1ZXJ5Q2VsbCggaW5pdGlhbEluZGV4ICk7XG4gICAgaWYgKCBjZWxsICkge1xuICAgICAgdGhpcy5zZWxlY3RDZWxsKCBpbml0aWFsSW5kZXgsIGZhbHNlLCB0cnVlICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgdmFyIGluZGV4ID0gMDtcbiAgLy8gc2VsZWN0IHdpdGggbnVtYmVyXG4gIGlmICggaW5pdGlhbEluZGV4ICYmIHRoaXMuc2xpZGVzWyBpbml0aWFsSW5kZXggXSApIHtcbiAgICBpbmRleCA9IGluaXRpYWxJbmRleDtcbiAgfVxuICAvLyBzZWxlY3QgaW5zdGFudGx5XG4gIHRoaXMuc2VsZWN0KCBpbmRleCwgZmFsc2UsIHRydWUgKTtcbn07XG5cbi8qKlxuICogc2VsZWN0IHNsaWRlIGZyb20gbnVtYmVyIG9yIGNlbGwgZWxlbWVudFxuICogQHBhcmFtIHtFbGVtZW50IG9yIE51bWJlcn0gZWxlbVxuICovXG5wcm90by5zZWxlY3RDZWxsID0gZnVuY3Rpb24oIHZhbHVlLCBpc1dyYXAsIGlzSW5zdGFudCApIHtcbiAgLy8gZ2V0IGNlbGxcbiAgdmFyIGNlbGwgPSB0aGlzLnF1ZXJ5Q2VsbCggdmFsdWUgKTtcbiAgaWYgKCAhY2VsbCApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaW5kZXggPSB0aGlzLmdldENlbGxTbGlkZUluZGV4KCBjZWxsICk7XG4gIHRoaXMuc2VsZWN0KCBpbmRleCwgaXNXcmFwLCBpc0luc3RhbnQgKTtcbn07XG5cbnByb3RvLmdldENlbGxTbGlkZUluZGV4ID0gZnVuY3Rpb24oIGNlbGwgKSB7XG4gIC8vIGdldCBpbmRleCBvZiBzbGlkZXMgdGhhdCBoYXMgY2VsbFxuICBmb3IgKCB2YXIgaT0wOyBpIDwgdGhpcy5zbGlkZXMubGVuZ3RoOyBpKysgKSB7XG4gICAgdmFyIHNsaWRlID0gdGhpcy5zbGlkZXNbaV07XG4gICAgdmFyIGluZGV4ID0gc2xpZGUuY2VsbHMuaW5kZXhPZiggY2VsbCApO1xuICAgIGlmICggaW5kZXggIT0gLTEgKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdldCBjZWxscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4vKipcbiAqIGdldCBGbGlja2l0eS5DZWxsLCBnaXZlbiBhbiBFbGVtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1cbiAqIEByZXR1cm5zIHtGbGlja2l0eS5DZWxsfSBpdGVtXG4gKi9cbnByb3RvLmdldENlbGwgPSBmdW5jdGlvbiggZWxlbSApIHtcbiAgLy8gbG9vcCB0aHJvdWdoIGNlbGxzIHRvIGdldCB0aGUgb25lIHRoYXQgbWF0Y2hlc1xuICBmb3IgKCB2YXIgaT0wOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKyApIHtcbiAgICB2YXIgY2VsbCA9IHRoaXMuY2VsbHNbaV07XG4gICAgaWYgKCBjZWxsLmVsZW1lbnQgPT0gZWxlbSApIHtcbiAgICAgIHJldHVybiBjZWxsO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBnZXQgY29sbGVjdGlvbiBvZiBGbGlja2l0eS5DZWxscywgZ2l2ZW4gRWxlbWVudHNcbiAqIEBwYXJhbSB7RWxlbWVudCwgQXJyYXksIE5vZGVMaXN0fSBlbGVtc1xuICogQHJldHVybnMge0FycmF5fSBjZWxscyAtIEZsaWNraXR5LkNlbGxzXG4gKi9cbnByb3RvLmdldENlbGxzID0gZnVuY3Rpb24oIGVsZW1zICkge1xuICBlbGVtcyA9IHV0aWxzLm1ha2VBcnJheSggZWxlbXMgKTtcbiAgdmFyIGNlbGxzID0gW107XG4gIGVsZW1zLmZvckVhY2goIGZ1bmN0aW9uKCBlbGVtICkge1xuICAgIHZhciBjZWxsID0gdGhpcy5nZXRDZWxsKCBlbGVtICk7XG4gICAgaWYgKCBjZWxsICkge1xuICAgICAgY2VsbHMucHVzaCggY2VsbCApO1xuICAgIH1cbiAgfSwgdGhpcyApO1xuICByZXR1cm4gY2VsbHM7XG59O1xuXG4vKipcbiAqIGdldCBjZWxsIGVsZW1lbnRzXG4gKiBAcmV0dXJucyB7QXJyYXl9IGNlbGxFbGVtc1xuICovXG5wcm90by5nZXRDZWxsRWxlbWVudHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY2VsbHMubWFwKCBmdW5jdGlvbiggY2VsbCApIHtcbiAgICByZXR1cm4gY2VsbC5lbGVtZW50O1xuICB9KTtcbn07XG5cbi8qKlxuICogZ2V0IHBhcmVudCBjZWxsIGZyb20gYW4gZWxlbWVudFxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtXG4gKiBAcmV0dXJucyB7RmxpY2tpdC5DZWxsfSBjZWxsXG4gKi9cbnByb3RvLmdldFBhcmVudENlbGwgPSBmdW5jdGlvbiggZWxlbSApIHtcbiAgLy8gZmlyc3QgY2hlY2sgaWYgZWxlbSBpcyBjZWxsXG4gIHZhciBjZWxsID0gdGhpcy5nZXRDZWxsKCBlbGVtICk7XG4gIGlmICggY2VsbCApIHtcbiAgICByZXR1cm4gY2VsbDtcbiAgfVxuICAvLyB0cnkgdG8gZ2V0IHBhcmVudCBjZWxsIGVsZW1cbiAgZWxlbSA9IHV0aWxzLmdldFBhcmVudCggZWxlbSwgJy5mbGlja2l0eS1zbGlkZXIgPiAqJyApO1xuICByZXR1cm4gdGhpcy5nZXRDZWxsKCBlbGVtICk7XG59O1xuXG4vKipcbiAqIGdldCBjZWxscyBhZGphY2VudCB0byBhIHNsaWRlXG4gKiBAcGFyYW0ge0ludGVnZXJ9IGFkakNvdW50IC0gbnVtYmVyIG9mIGFkamFjZW50IHNsaWRlc1xuICogQHBhcmFtIHtJbnRlZ2VyfSBpbmRleCAtIGluZGV4IG9mIHNsaWRlIHRvIHN0YXJ0XG4gKiBAcmV0dXJucyB7QXJyYXl9IGNlbGxzIC0gYXJyYXkgb2YgRmxpY2tpdHkuQ2VsbHNcbiAqL1xucHJvdG8uZ2V0QWRqYWNlbnRDZWxsRWxlbWVudHMgPSBmdW5jdGlvbiggYWRqQ291bnQsIGluZGV4ICkge1xuICBpZiAoICFhZGpDb3VudCApIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFNsaWRlLmdldENlbGxFbGVtZW50cygpO1xuICB9XG4gIGluZGV4ID0gaW5kZXggPT09IHVuZGVmaW5lZCA/IHRoaXMuc2VsZWN0ZWRJbmRleCA6IGluZGV4O1xuXG4gIHZhciBsZW4gPSB0aGlzLnNsaWRlcy5sZW5ndGg7XG4gIGlmICggMSArICggYWRqQ291bnQgKiAyICkgPj0gbGVuICkge1xuICAgIHJldHVybiB0aGlzLmdldENlbGxFbGVtZW50cygpO1xuICB9XG5cbiAgdmFyIGNlbGxFbGVtcyA9IFtdO1xuICBmb3IgKCB2YXIgaSA9IGluZGV4IC0gYWRqQ291bnQ7IGkgPD0gaW5kZXggKyBhZGpDb3VudCA7IGkrKyApIHtcbiAgICB2YXIgc2xpZGVJbmRleCA9IHRoaXMub3B0aW9ucy53cmFwQXJvdW5kID8gdXRpbHMubW9kdWxvKCBpLCBsZW4gKSA6IGk7XG4gICAgdmFyIHNsaWRlID0gdGhpcy5zbGlkZXNbIHNsaWRlSW5kZXggXTtcbiAgICBpZiAoIHNsaWRlICkge1xuICAgICAgY2VsbEVsZW1zID0gY2VsbEVsZW1zLmNvbmNhdCggc2xpZGUuZ2V0Q2VsbEVsZW1lbnRzKCkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNlbGxFbGVtcztcbn07XG5cbi8qKlxuICogc2VsZWN0IHNsaWRlIGZyb20gbnVtYmVyIG9yIGNlbGwgZWxlbWVudFxuICogQHBhcmFtIHtFbGVtZW50LCBTZWxlY3RvciBTdHJpbmcsIG9yIE51bWJlcn0gc2VsZWN0b3JcbiAqL1xucHJvdG8ucXVlcnlDZWxsID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuICBpZiAoIHR5cGVvZiBzZWxlY3RvciA9PSAnbnVtYmVyJyApIHtcbiAgICAvLyB1c2UgbnVtYmVyIGFzIGluZGV4XG4gICAgcmV0dXJuIHRoaXMuY2VsbHNbIHNlbGVjdG9yIF07XG4gIH1cbiAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT0gJ3N0cmluZycgKSB7XG4gICAgLy8gZG8gbm90IHNlbGVjdCBpbnZhbGlkIHNlbGVjdG9ycyBmcm9tIGhhc2g6ICMxMjMsICMvLiAjNzkxXG4gICAgaWYgKCBzZWxlY3Rvci5tYXRjaCgvXlsjXFwuXT9bXFxkXFwvXS8pICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyB1c2Ugc3RyaW5nIGFzIHNlbGVjdG9yLCBnZXQgZWxlbWVudFxuICAgIHNlbGVjdG9yID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIHNlbGVjdG9yICk7XG4gIH1cbiAgLy8gZ2V0IGNlbGwgZnJvbSBlbGVtZW50XG4gIHJldHVybiB0aGlzLmdldENlbGwoIHNlbGVjdG9yICk7XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBldmVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxucHJvdG8udWlDaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5lbWl0RXZlbnQoJ3VpQ2hhbmdlJyk7XG59O1xuXG4vLyBrZWVwIGZvY3VzIG9uIGVsZW1lbnQgd2hlbiBjaGlsZCBVSSBlbGVtZW50cyBhcmUgY2xpY2tlZFxucHJvdG8uY2hpbGRVSVBvaW50ZXJEb3duID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuICAvLyBIQUNLIGlPUyBkb2VzIG5vdCBhbGxvdyB0b3VjaCBldmVudHMgdG8gYnViYmxlIHVwPyFcbiAgaWYgKCBldmVudC50eXBlICE9ICd0b3VjaHN0YXJ0JyApIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIHRoaXMuZm9jdXMoKTtcbn07XG5cbi8vIC0tLS0tIHJlc2l6ZSAtLS0tLSAvL1xuXG5wcm90by5vbnJlc2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLndhdGNoQ1NTKCk7XG4gIHRoaXMucmVzaXplKCk7XG59O1xuXG51dGlscy5kZWJvdW5jZU1ldGhvZCggRmxpY2tpdHksICdvbnJlc2l6ZScsIDE1MCApO1xuXG5wcm90by5yZXNpemUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCAhdGhpcy5pc0FjdGl2ZSApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5nZXRTaXplKCk7XG4gIC8vIHdyYXAgdmFsdWVzXG4gIGlmICggdGhpcy5vcHRpb25zLndyYXBBcm91bmQgKSB7XG4gICAgdGhpcy54ID0gdXRpbHMubW9kdWxvKCB0aGlzLngsIHRoaXMuc2xpZGVhYmxlV2lkdGggKTtcbiAgfVxuICB0aGlzLnBvc2l0aW9uQ2VsbHMoKTtcbiAgdGhpcy5fZ2V0V3JhcFNoaWZ0Q2VsbHMoKTtcbiAgdGhpcy5zZXRHYWxsZXJ5U2l6ZSgpO1xuICB0aGlzLmVtaXRFdmVudCgncmVzaXplJyk7XG4gIC8vIHVwZGF0ZSBzZWxlY3RlZCBpbmRleCBmb3IgZ3JvdXAgc2xpZGVzLCBpbnN0YW50XG4gIC8vIFRPRE86IHBvc2l0aW9uIGNhbiBiZSBsb3N0IGJldHdlZW4gZ3JvdXBzIG9mIHZhcmlvdXMgbnVtYmVyc1xuICB2YXIgc2VsZWN0ZWRFbGVtZW50ID0gdGhpcy5zZWxlY3RlZEVsZW1lbnRzICYmIHRoaXMuc2VsZWN0ZWRFbGVtZW50c1swXTtcbiAgdGhpcy5zZWxlY3RDZWxsKCBzZWxlY3RlZEVsZW1lbnQsIGZhbHNlLCB0cnVlICk7XG59O1xuXG4vLyB3YXRjaGVzIHRoZSA6YWZ0ZXIgcHJvcGVydHksIGFjdGl2YXRlcy9kZWFjdGl2YXRlc1xucHJvdG8ud2F0Y2hDU1MgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdhdGNoT3B0aW9uID0gdGhpcy5vcHRpb25zLndhdGNoQ1NTO1xuICBpZiAoICF3YXRjaE9wdGlvbiApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYWZ0ZXJDb250ZW50ID0gZ2V0Q29tcHV0ZWRTdHlsZSggdGhpcy5lbGVtZW50LCAnOmFmdGVyJyApLmNvbnRlbnQ7XG4gIC8vIGFjdGl2YXRlIGlmIDphZnRlciB7IGNvbnRlbnQ6ICdmbGlja2l0eScgfVxuICBpZiAoIGFmdGVyQ29udGVudC5pbmRleE9mKCdmbGlja2l0eScpICE9IC0xICkge1xuICAgIHRoaXMuYWN0aXZhdGUoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxufTtcblxuLy8gLS0tLS0ga2V5ZG93biAtLS0tLSAvL1xuXG4vLyBnbyBwcmV2aW91cy9uZXh0IGlmIGxlZnQvcmlnaHQga2V5cyBwcmVzc2VkXG5wcm90by5vbmtleWRvd24gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gIC8vIG9ubHkgd29yayBpZiBlbGVtZW50IGlzIGluIGZvY3VzXG4gIHZhciBpc05vdEZvY3VzZWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT0gdGhpcy5lbGVtZW50O1xuICBpZiAoICF0aGlzLm9wdGlvbnMuYWNjZXNzaWJpbGl0eSB8fGlzTm90Rm9jdXNlZCApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IEZsaWNraXR5LmtleWJvYXJkSGFuZGxlcnNbIGV2ZW50LmtleUNvZGUgXTtcbiAgaWYgKCBoYW5kbGVyICkge1xuICAgIGhhbmRsZXIuY2FsbCggdGhpcyApO1xuICB9XG59O1xuXG5GbGlja2l0eS5rZXlib2FyZEhhbmRsZXJzID0ge1xuICAvLyBsZWZ0IGFycm93XG4gIDM3OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVmdE1ldGhvZCA9IHRoaXMub3B0aW9ucy5yaWdodFRvTGVmdCA/ICduZXh0JyA6ICdwcmV2aW91cyc7XG4gICAgdGhpcy51aUNoYW5nZSgpO1xuICAgIHRoaXNbIGxlZnRNZXRob2QgXSgpO1xuICB9LFxuICAvLyByaWdodCBhcnJvd1xuICAzOTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJpZ2h0TWV0aG9kID0gdGhpcy5vcHRpb25zLnJpZ2h0VG9MZWZ0ID8gJ3ByZXZpb3VzJyA6ICduZXh0JztcbiAgICB0aGlzLnVpQ2hhbmdlKCk7XG4gICAgdGhpc1sgcmlnaHRNZXRob2QgXSgpO1xuICB9LFxufTtcblxuLy8gLS0tLS0gZm9jdXMgLS0tLS0gLy9cblxucHJvdG8uZm9jdXMgPSBmdW5jdGlvbigpIHtcbiAgLy8gVE9ETyByZW1vdmUgc2Nyb2xsVG8gb25jZSBmb2N1cyBvcHRpb25zIGdldHMgbW9yZSBzdXBwb3J0XG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1cyNCcm93c2VyX2NvbXBhdGliaWxpdHlcbiAgdmFyIHByZXZTY3JvbGxZID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICB0aGlzLmVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAvLyBoYWNrIHRvIGZpeCBzY3JvbGwganVtcCBhZnRlciBmb2N1cywgIzc2XG4gIGlmICggd2luZG93LnBhZ2VZT2Zmc2V0ICE9IHByZXZTY3JvbGxZICkge1xuICAgIHdpbmRvdy5zY3JvbGxUbyggd2luZG93LnBhZ2VYT2Zmc2V0LCBwcmV2U2Nyb2xsWSApO1xuICB9XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkZXN0cm95IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbi8vIGRlYWN0aXZhdGUgYWxsIEZsaWNraXR5IGZ1bmN0aW9uYWxpdHksIGJ1dCBrZWVwIHN0dWZmIGF2YWlsYWJsZVxucHJvdG8uZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoICF0aGlzLmlzQWN0aXZlICkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZmxpY2tpdHktZW5hYmxlZCcpO1xuICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZmxpY2tpdHktcnRsJyk7XG4gIHRoaXMudW5zZWxlY3RTZWxlY3RlZFNsaWRlKCk7XG4gIC8vIGRlc3Ryb3kgY2VsbHNcbiAgdGhpcy5jZWxscy5mb3JFYWNoKCBmdW5jdGlvbiggY2VsbCApIHtcbiAgICBjZWxsLmRlc3Ryb3koKTtcbiAgfSk7XG4gIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCggdGhpcy52aWV3cG9ydCApO1xuICAvLyBtb3ZlIGNoaWxkIGVsZW1lbnRzIGJhY2sgaW50byBlbGVtZW50XG4gIG1vdmVFbGVtZW50cyggdGhpcy5zbGlkZXIuY2hpbGRyZW4sIHRoaXMuZWxlbWVudCApO1xuICBpZiAoIHRoaXMub3B0aW9ucy5hY2Nlc3NpYmlsaXR5ICkge1xuICAgIHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RhYkluZGV4Jyk7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdrZXlkb3duJywgdGhpcyApO1xuICB9XG4gIC8vIHNldCBmbGFnc1xuICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gIHRoaXMuZW1pdEV2ZW50KCdkZWFjdGl2YXRlJyk7XG59O1xuXG5wcm90by5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3Jlc2l6ZScsIHRoaXMgKTtcbiAgdGhpcy5hbGxPZmYoKTtcbiAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKTtcbiAgaWYgKCBqUXVlcnkgJiYgdGhpcy4kZWxlbWVudCApIHtcbiAgICBqUXVlcnkucmVtb3ZlRGF0YSggdGhpcy5lbGVtZW50LCAnZmxpY2tpdHknICk7XG4gIH1cbiAgZGVsZXRlIHRoaXMuZWxlbWVudC5mbGlja2l0eUdVSUQ7XG4gIGRlbGV0ZSBpbnN0YW5jZXNbIHRoaXMuZ3VpZCBdO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHJvdG90eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbnV0aWxzLmV4dGVuZCggcHJvdG8sIGFuaW1hdGVQcm90b3R5cGUgKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZXh0cmFzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbi8qKlxuICogZ2V0IEZsaWNraXR5IGluc3RhbmNlIGZyb20gZWxlbWVudFxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtXG4gKiBAcmV0dXJucyB7RmxpY2tpdHl9XG4gKi9cbkZsaWNraXR5LmRhdGEgPSBmdW5jdGlvbiggZWxlbSApIHtcbiAgZWxlbSA9IHV0aWxzLmdldFF1ZXJ5RWxlbWVudCggZWxlbSApO1xuICB2YXIgaWQgPSBlbGVtICYmIGVsZW0uZmxpY2tpdHlHVUlEO1xuICByZXR1cm4gaWQgJiYgaW5zdGFuY2VzWyBpZCBdO1xufTtcblxudXRpbHMuaHRtbEluaXQoIEZsaWNraXR5LCAnZmxpY2tpdHknICk7XG5cbmlmICggalF1ZXJ5ICYmIGpRdWVyeS5icmlkZ2V0ICkge1xuICBqUXVlcnkuYnJpZGdldCggJ2ZsaWNraXR5JywgRmxpY2tpdHkgKTtcbn1cblxuLy8gc2V0IGludGVybmFsIGpRdWVyeSwgZm9yIFdlYnBhY2sgKyBqUXVlcnkgdjMsICM0NzhcbkZsaWNraXR5LnNldEpRdWVyeSA9IGZ1bmN0aW9uKCBqcSApIHtcbiAgalF1ZXJ5ID0ganE7XG59O1xuXG5GbGlja2l0eS5DZWxsID0gQ2VsbDtcbkZsaWNraXR5LlNsaWRlID0gU2xpZGU7XG5cbnJldHVybiBGbGlja2l0eTtcblxufSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/flickity/js/flickity.js\n") },
vendor: 3,959 bytes, line 1
1"./node_modules/flickity/js/index.js": function (module, exports, __webpack_require__) { eval('var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * Flickity v2.2.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2018 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! ./flickity */ "./node_modules/flickity/js/flickity.js"),\n __webpack_require__(/*! ./drag */ "./node_modules/flickity/js/drag.js"),\n __webpack_require__(/*! ./prev-next-button */ "./node_modules/flickity/js/prev-next-button.js"),\n __webpack_require__(/*! ./page-dots */ "./node_modules/flickity/js/page-dots.js"),\n __webpack_require__(/*! ./player */ "./node_modules/flickity/js/player.js"),\n __webpack_require__(/*! ./add-remove-cell */ "./node_modules/flickity/js/add-remove-cell.js"),\n __webpack_require__(/*! ./lazyload */ "./node_modules/flickity/js/lazyload.js")\n ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === \'function\' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n})( window, function factory( Flickity ) {\n /*jshint strict: false*/\n return Flickity;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvaW5kZXguanM/MjE3YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQXlDO0FBQ2hEO0FBQ0EsSUFBSSxpQ0FBUTtBQUNaLE1BQU0sK0VBQVk7QUFDbEIsTUFBTSx1RUFBUTtBQUNkLE1BQU0sK0ZBQW9CO0FBQzFCLE1BQU0saUZBQWE7QUFDbkIsTUFBTSwyRUFBVTtBQUNoQixNQUFNLDZGQUFtQjtBQUN6QixNQUFNLCtFQUFZO0FBQ2xCLEtBQUssb0NBQUUsT0FBTztBQUFBO0FBQUE7QUFBQSxvR0FBRTtBQUNoQixHQUFHLE1BQU0sRUFXTjs7QUFFSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEZsaWNraXR5IHYyLjIuMFxuICogVG91Y2gsIHJlc3BvbnNpdmUsIGZsaWNrYWJsZSBjYXJvdXNlbHNcbiAqXG4gKiBMaWNlbnNlZCBHUEx2MyBmb3Igb3BlbiBzb3VyY2UgdXNlXG4gKiBvciBGbGlja2l0eSBDb21tZXJjaWFsIExpY2Vuc2UgZm9yIGNvbW1lcmNpYWwgdXNlXG4gKlxuICogaHR0cHM6Ly9mbGlja2l0eS5tZXRhZml6enkuY29cbiAqIENvcHlyaWdodCAyMDE1LTIwMTggTWV0YWZpenp5XG4gKi9cblxuKCBmdW5jdGlvbiggd2luZG93LCBmYWN0b3J5ICkge1xuICAvLyB1bml2ZXJzYWwgbW9kdWxlIGRlZmluaXRpb25cbiAgLyoganNoaW50IHN0cmljdDogZmFsc2UgKi9cbiAgaWYgKCB0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCApIHtcbiAgICAvLyBBTURcbiAgICBkZWZpbmUoIFtcbiAgICAgICcuL2ZsaWNraXR5JyxcbiAgICAgICcuL2RyYWcnLFxuICAgICAgJy4vcHJldi1uZXh0LWJ1dHRvbicsXG4gICAgICAnLi9wYWdlLWRvdHMnLFxuICAgICAgJy4vcGxheWVyJyxcbiAgICAgICcuL2FkZC1yZW1vdmUtY2VsbCcsXG4gICAgICAnLi9sYXp5bG9hZCdcbiAgICBdLCBmYWN0b3J5ICk7XG4gIH0gZWxzZSBpZiAoIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMgKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoXG4gICAgICByZXF1aXJlKCcuL2ZsaWNraXR5JyksXG4gICAgICByZXF1aXJlKCcuL2RyYWcnKSxcbiAgICAgIHJlcXVpcmUoJy4vcHJldi1uZXh0LWJ1dHRvbicpLFxuICAgICAgcmVxdWlyZSgnLi9wYWdlLWRvdHMnKSxcbiAgICAgIHJlcXVpcmUoJy4vcGxheWVyJyksXG4gICAgICByZXF1aXJlKCcuL2FkZC1yZW1vdmUtY2VsbCcpLFxuICAgICAgcmVxdWlyZSgnLi9sYXp5bG9hZCcpXG4gICAgKTtcbiAgfVxuXG59KSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCBGbGlja2l0eSApIHtcbiAgLypqc2hpbnQgc3RyaWN0OiBmYWxzZSovXG4gIHJldHVybiBGbGlja2l0eTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/flickity/js/index.js\n') },
vendor: 10,640 bytes, line 1
1"./node_modules/flickity/js/lazyload.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// lazyload\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! ./flickity */ \"./node_modules/flickity/js/flickity.js\"),\n __webpack_require__(/*! fizzy-ui-utils/utils */ \"./node_modules/fizzy-ui-utils/utils.js\")\n ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n });\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvbGF6eWxvYWQuanM/OGExNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBeUM7QUFDaEQ7QUFDQSxJQUFJLGlDQUFRO0FBQ1osTUFBTSwrRUFBWTtBQUNsQixNQUFNLHlGQUFzQjtBQUM1QixLQUFLLG1DQUFFO0FBQ1A7QUFDQSxLQUFLO0FBQUEsb0dBQUM7QUFDTixHQUFHLE1BQU0sRUFjTjs7QUFFSCxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9mbGlja2l0eS9qcy9sYXp5bG9hZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGxhenlsb2FkXG4oIGZ1bmN0aW9uKCB3aW5kb3csIGZhY3RvcnkgKSB7XG4gIC8vIHVuaXZlcnNhbCBtb2R1bGUgZGVmaW5pdGlvblxuICAvKiBqc2hpbnQgc3RyaWN0OiBmYWxzZSAqL1xuICBpZiAoIHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkge1xuICAgIC8vIEFNRFxuICAgIGRlZmluZSggW1xuICAgICAgJy4vZmxpY2tpdHknLFxuICAgICAgJ2Zpenp5LXVpLXV0aWxzL3V0aWxzJ1xuICAgIF0sIGZ1bmN0aW9uKCBGbGlja2l0eSwgdXRpbHMgKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeSggd2luZG93LCBGbGlja2l0eSwgdXRpbHMgKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICggdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyApIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShcbiAgICAgIHdpbmRvdyxcbiAgICAgIHJlcXVpcmUoJy4vZmxpY2tpdHknKSxcbiAgICAgIHJlcXVpcmUoJ2Zpenp5LXVpLXV0aWxzJylcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIGJyb3dzZXIgZ2xvYmFsXG4gICAgZmFjdG9yeShcbiAgICAgIHdpbmRvdyxcbiAgICAgIHdpbmRvdy5GbGlja2l0eSxcbiAgICAgIHdpbmRvdy5maXp6eVVJVXRpbHNcbiAgICApO1xuICB9XG5cbn0oIHdpbmRvdywgZnVuY3Rpb24gZmFjdG9yeSggd2luZG93LCBGbGlja2l0eSwgdXRpbHMgKSB7XG4ndXNlIHN0cmljdCc7XG5cbkZsaWNraXR5LmNyZWF0ZU1ldGhvZHMucHVzaCgnX2NyZWF0ZUxhenlsb2FkJyk7XG52YXIgcHJvdG8gPSBGbGlja2l0eS5wcm90b3R5cGU7XG5cbnByb3RvLl9jcmVhdGVMYXp5bG9hZCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm9uKCAnc2VsZWN0JywgdGhpcy5sYXp5TG9hZCApO1xufTtcblxucHJvdG8ubGF6eUxvYWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGxhenlMb2FkID0gdGhpcy5vcHRpb25zLmxhenlMb2FkO1xuICBpZiAoICFsYXp5TG9hZCApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gZ2V0IGFkamFjZW50IGNlbGxzLCB1c2UgbGF6eUxvYWQgb3B0aW9uIGZvciBhZGphY2VudCBjb3VudFxuICB2YXIgYWRqQ291bnQgPSB0eXBlb2YgbGF6eUxvYWQgPT0gJ251bWJlcicgPyBsYXp5TG9hZCA6IDA7XG4gIHZhciBjZWxsRWxlbXMgPSB0aGlzLmdldEFkamFjZW50Q2VsbEVsZW1lbnRzKCBhZGpDb3VudCApO1xuICAvLyBnZXQgbGF6eSBpbWFnZXMgaW4gdGhvc2UgY2VsbHNcbiAgdmFyIGxhenlJbWFnZXMgPSBbXTtcbiAgY2VsbEVsZW1zLmZvckVhY2goIGZ1bmN0aW9uKCBjZWxsRWxlbSApIHtcbiAgICB2YXIgbGF6eUNlbGxJbWFnZXMgPSBnZXRDZWxsTGF6eUltYWdlcyggY2VsbEVsZW0gKTtcbiAgICBsYXp5SW1hZ2VzID0gbGF6eUltYWdlcy5jb25jYXQoIGxhenlDZWxsSW1hZ2VzICk7XG4gIH0pO1xuICAvLyBsb2FkIGxhenkgaW1hZ2VzXG4gIGxhenlJbWFnZXMuZm9yRWFjaCggZnVuY3Rpb24oIGltZyApIHtcbiAgICBuZXcgTGF6eUxvYWRlciggaW1nLCB0aGlzICk7XG4gIH0sIHRoaXMgKTtcbn07XG5cbmZ1bmN0aW9uIGdldENlbGxMYXp5SW1hZ2VzKCBjZWxsRWxlbSApIHtcbiAgLy8gY2hlY2sgaWYgY2VsbCBlbGVtZW50IGlzIGxhenkgaW1hZ2VcbiAgaWYgKCBjZWxsRWxlbS5ub2RlTmFtZSA9PSAnSU1HJyApIHtcbiAgICB2YXIgbGF6eWxvYWRBdHRyID0gY2VsbEVsZW0uZ2V0QXR0cmlidXRlKCdkYXRhLWZsaWNraXR5LWxhenlsb2FkJyk7XG4gICAgdmFyIHNyY0F0dHIgPSBjZWxsRWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmxpY2tpdHktbGF6eWxvYWQtc3JjJyk7XG4gICAgdmFyIHNyY3NldEF0dHIgPSBjZWxsRWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmxpY2tpdHktbGF6eWxvYWQtc3Jjc2V0Jyk7XG4gICAgaWYgKCBsYXp5bG9hZEF0dHIgfHwgc3JjQXR0ciB8fCBzcmNzZXRBdHRyICkge1xuICAgICAgcmV0dXJuIFsgY2VsbEVsZW0gXTtcbiAgICB9XG4gIH1cbiAgLy8gc2VsZWN0IGxhenkgaW1hZ2VzIGluIGNlbGxcbiAgdmFyIGxhenlTZWxlY3RvciA9ICdpbWdbZGF0YS1mbGlja2l0eS1sYXp5bG9hZF0sICcgK1xuICAgICdpbWdbZGF0YS1mbGlja2l0eS1sYXp5bG9hZC1zcmNdLCBpbWdbZGF0YS1mbGlja2l0eS1sYXp5bG9hZC1zcmNzZXRdJztcbiAgdmFyIGltZ3MgPSBjZWxsRWxlbS5xdWVyeVNlbGVjdG9yQWxsKCBsYXp5U2VsZWN0b3IgKTtcbiAgcmV0dXJuIHV0aWxzLm1ha2VBcnJheSggaW1ncyApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMYXp5TG9hZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbi8qKlxuICogY2xhc3MgdG8gaGFuZGxlIGxvYWRpbmcgaW1hZ2VzXG4gKi9cbmZ1bmN0aW9uIExhenlMb2FkZXIoIGltZywgZmxpY2tpdHkgKSB7XG4gIHRoaXMuaW1nID0gaW1nO1xuICB0aGlzLmZsaWNraXR5ID0gZmxpY2tpdHk7XG4gIHRoaXMubG9hZCgpO1xufVxuXG5MYXp5TG9hZGVyLnByb3RvdHlwZS5oYW5kbGVFdmVudCA9IHV0aWxzLmhhbmRsZUV2ZW50O1xuXG5MYXp5TG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuaW1nLmFkZEV2ZW50TGlzdGVuZXIoICdsb2FkJywgdGhpcyApO1xuICB0aGlzLmltZy5hZGRFdmVudExpc3RlbmVyKCAnZXJyb3InLCB0aGlzICk7XG4gIC8vIGdldCBzcmMgJiBzcmNzZXRcbiAgdmFyIHNyYyA9IHRoaXMuaW1nLmdldEF0dHJpYnV0ZSgnZGF0YS1mbGlja2l0eS1sYXp5bG9hZCcpIHx8XG4gICAgdGhpcy5pbWcuZ2V0QXR0cmlidXRlKCdkYXRhLWZsaWNraXR5LWxhenlsb2FkLXNyYycpO1xuICB2YXIgc3Jjc2V0ID0gdGhpcy5pbWcuZ2V0QXR0cmlidXRlKCdkYXRhLWZsaWNraXR5LWxhenlsb2FkLXNyY3NldCcpO1xuICAvLyBzZXQgc3JjICYgc2Vyc2V0XG4gIHRoaXMuaW1nLnNyYyA9IHNyYztcbiAgaWYgKCBzcmNzZXQgKSB7XG4gICAgdGhpcy5pbWcuc2V0QXR0cmlidXRlKCAnc3Jjc2V0Jywgc3Jjc2V0ICk7XG4gIH1cbiAgLy8gcmVtb3ZlIGF0dHJcbiAgdGhpcy5pbWcucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWZsaWNraXR5LWxhenlsb2FkJyk7XG4gIHRoaXMuaW1nLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1mbGlja2l0eS1sYXp5bG9hZC1zcmMnKTtcbiAgdGhpcy5pbWcucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWZsaWNraXR5LWxhenlsb2FkLXNyY3NldCcpO1xufTtcblxuTGF6eUxvYWRlci5wcm90b3R5cGUub25sb2FkID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuICB0aGlzLmNvbXBsZXRlKCBldmVudCwgJ2ZsaWNraXR5LWxhenlsb2FkZWQnICk7XG59O1xuXG5MYXp5TG9hZGVyLnByb3RvdHlwZS5vbmVycm9yID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuICB0aGlzLmNvbXBsZXRlKCBldmVudCwgJ2ZsaWNraXR5LWxhenllcnJvcicgKTtcbn07XG5cbkxhenlMb2FkZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oIGV2ZW50LCBjbGFzc05hbWUgKSB7XG4gIC8vIHVuYmluZCBldmVudHNcbiAgdGhpcy5pbWcucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2xvYWQnLCB0aGlzICk7XG4gIHRoaXMuaW1nLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdlcnJvcicsIHRoaXMgKTtcblxuICB2YXIgY2VsbCA9IHRoaXMuZmxpY2tpdHkuZ2V0UGFyZW50Q2VsbCggdGhpcy5pbWcgKTtcbiAgdmFyIGNlbGxFbGVtID0gY2VsbCAmJiBjZWxsLmVsZW1lbnQ7XG4gIHRoaXMuZmxpY2tpdHkuY2VsbFNpemVDaGFuZ2UoIGNlbGxFbGVtICk7XG5cbiAgdGhpcy5pbWcuY2xhc3NMaXN0LmFkZCggY2xhc3NOYW1lICk7XG4gIHRoaXMuZmxpY2tpdHkuZGlzcGF0Y2hFdmVudCggJ2xhenlMb2FkJywgZXZlbnQsIGNlbGxFbGVtICk7XG59O1xuXG4vLyAtLS0tLSAgLS0tLS0gLy9cblxuRmxpY2tpdHkuTGF6eUxvYWRlciA9IExhenlMb2FkZXI7XG5cbnJldHVybiBGbGlja2l0eTtcblxufSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/flickity/js/lazyload.js\n") },
vendor: 13,404 bytes, line 1
1"./node_modules/flickity/js/page-dots.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// page dots\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! ./flickity */ \"./node_modules/flickity/js/flickity.js\"),\n __webpack_require__(/*! unipointer/unipointer */ \"./node_modules/unipointer/unipointer.js\"),\n __webpack_require__(/*! fizzy-ui-utils/utils */ \"./node_modules/fizzy-ui-utils/utils.js\")\n ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true\n});\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvcGFnZS1kb3RzLmpzPzA2MjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQXlDO0FBQ2hEO0FBQ0EsSUFBSSxpQ0FBUTtBQUNaLE1BQU0sK0VBQVk7QUFDbEIsTUFBTSwyRkFBdUI7QUFDN0IsTUFBTSx5RkFBc0I7QUFDNUIsS0FBSyxtQ0FBRTtBQUNQO0FBQ0EsS0FBSztBQUFBLG9HQUFDO0FBQ04sR0FBRyxNQUFNLEVBZ0JOOztBQUVILENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvcGFnZS1kb3RzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcGFnZSBkb3RzXG4oIGZ1bmN0aW9uKCB3aW5kb3csIGZhY3RvcnkgKSB7XG4gIC8vIHVuaXZlcnNhbCBtb2R1bGUgZGVmaW5pdGlvblxuICAvKiBqc2hpbnQgc3RyaWN0OiBmYWxzZSAqL1xuICBpZiAoIHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkge1xuICAgIC8vIEFNRFxuICAgIGRlZmluZSggW1xuICAgICAgJy4vZmxpY2tpdHknLFxuICAgICAgJ3VuaXBvaW50ZXIvdW5pcG9pbnRlcicsXG4gICAgICAnZml6enktdWktdXRpbHMvdXRpbHMnXG4gICAgXSwgZnVuY3Rpb24oIEZsaWNraXR5LCBVbmlwb2ludGVyLCB1dGlscyApIHtcbiAgICAgIHJldHVybiBmYWN0b3J5KCB3aW5kb3csIEZsaWNraXR5LCBVbmlwb2ludGVyLCB1dGlscyApO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgcmVxdWlyZSgnLi9mbGlja2l0eScpLFxuICAgICAgcmVxdWlyZSgndW5pcG9pbnRlcicpLFxuICAgICAgcmVxdWlyZSgnZml6enktdWktdXRpbHMnKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gYnJvd3NlciBnbG9iYWxcbiAgICBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgd2luZG93LkZsaWNraXR5LFxuICAgICAgd2luZG93LlVuaXBvaW50ZXIsXG4gICAgICB3aW5kb3cuZml6enlVSVV0aWxzXG4gICAgKTtcbiAgfVxuXG59KCB3aW5kb3csIGZ1bmN0aW9uIGZhY3RvcnkoIHdpbmRvdywgRmxpY2tpdHksIFVuaXBvaW50ZXIsIHV0aWxzICkge1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQYWdlRG90cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIFBhZ2VEb3RzKCBwYXJlbnQgKSB7XG4gIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9jcmVhdGUoKTtcbn1cblxuUGFnZURvdHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggVW5pcG9pbnRlci5wcm90b3R5cGUgKTtcblxuUGFnZURvdHMucHJvdG90eXBlLl9jcmVhdGUgPSBmdW5jdGlvbigpIHtcbiAgLy8gY3JlYXRlIGhvbGRlciBlbGVtZW50XG4gIHRoaXMuaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb2wnKTtcbiAgdGhpcy5ob2xkZXIuY2xhc3NOYW1lID0gJ2ZsaWNraXR5LXBhZ2UtZG90cyc7XG4gIC8vIGNyZWF0ZSBkb3RzLCBhcnJheSBvZiBlbGVtZW50c1xuICB0aGlzLmRvdHMgPSBbXTtcbiAgLy8gZXZlbnRzXG4gIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCggdGhpcyApO1xuICB0aGlzLm9uKCAncG9pbnRlckRvd24nLCB0aGlzLnBhcmVudC5jaGlsZFVJUG9pbnRlckRvd24uYmluZCggdGhpcy5wYXJlbnQgKSApO1xufTtcblxuUGFnZURvdHMucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc2V0RG90cygpO1xuICB0aGlzLmhvbGRlci5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrICk7XG4gIHRoaXMuYmluZFN0YXJ0RXZlbnQoIHRoaXMuaG9sZGVyICk7XG4gIC8vIGFkZCB0byBET01cbiAgdGhpcy5wYXJlbnQuZWxlbWVudC5hcHBlbmRDaGlsZCggdGhpcy5ob2xkZXIgKTtcbn07XG5cblBhZ2VEb3RzLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuaG9sZGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2sgKTtcbiAgdGhpcy51bmJpbmRTdGFydEV2ZW50KCB0aGlzLmhvbGRlciApO1xuICAvLyByZW1vdmUgZnJvbSBET01cbiAgdGhpcy5wYXJlbnQuZWxlbWVudC5yZW1vdmVDaGlsZCggdGhpcy5ob2xkZXIgKTtcbn07XG5cblBhZ2VEb3RzLnByb3RvdHlwZS5zZXREb3RzID0gZnVuY3Rpb24oKSB7XG4gIC8vIGdldCBkaWZmZXJlbmNlIGJldHdlZW4gbnVtYmVyIG9mIHNsaWRlcyBhbmQgbnVtYmVyIG9mIGRvdHNcbiAgdmFyIGRlbHRhID0gdGhpcy5wYXJlbnQuc2xpZGVzLmxlbmd0aCAtIHRoaXMuZG90cy5sZW5ndGg7XG4gIGlmICggZGVsdGEgPiAwICkge1xuICAgIHRoaXMuYWRkRG90cyggZGVsdGEgKTtcbiAgfSBlbHNlIGlmICggZGVsdGEgPCAwICkge1xuICAgIHRoaXMucmVtb3ZlRG90cyggLWRlbHRhICk7XG4gIH1cbn07XG5cblBhZ2VEb3RzLnByb3RvdHlwZS5hZGREb3RzID0gZnVuY3Rpb24oIGNvdW50ICkge1xuICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIHZhciBuZXdEb3RzID0gW107XG4gIHZhciBsZW5ndGggPSB0aGlzLmRvdHMubGVuZ3RoO1xuICB2YXIgbWF4ID0gbGVuZ3RoICsgY291bnQ7XG5cbiAgZm9yICggdmFyIGkgPSBsZW5ndGg7IGkgPCBtYXg7IGkrKyApIHtcbiAgICB2YXIgZG90ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICBkb3QuY2xhc3NOYW1lID0gJ2RvdCc7XG4gICAgZG90LnNldEF0dHJpYnV0ZSggJ2FyaWEtbGFiZWwnLCAnUGFnZSBkb3QgJyArICggaSArIDEgKSApO1xuICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb3QgKTtcbiAgICBuZXdEb3RzLnB1c2goIGRvdCApO1xuICB9XG5cbiAgdGhpcy5ob2xkZXIuYXBwZW5kQ2hpbGQoIGZyYWdtZW50ICk7XG4gIHRoaXMuZG90cyA9IHRoaXMuZG90cy5jb25jYXQoIG5ld0RvdHMgKTtcbn07XG5cblBhZ2VEb3RzLnByb3RvdHlwZS5yZW1vdmVEb3RzID0gZnVuY3Rpb24oIGNvdW50ICkge1xuICAvLyByZW1vdmUgZnJvbSB0aGlzLmRvdHMgY29sbGVjdGlvblxuICB2YXIgcmVtb3ZlRG90cyA9IHRoaXMuZG90cy5zcGxpY2UoIHRoaXMuZG90cy5sZW5ndGggLSBjb3VudCwgY291bnQgKTtcbiAgLy8gcmVtb3ZlIGZyb20gRE9NXG4gIHJlbW92ZURvdHMuZm9yRWFjaCggZnVuY3Rpb24oIGRvdCApIHtcbiAgICB0aGlzLmhvbGRlci5yZW1vdmVDaGlsZCggZG90ICk7XG4gIH0sIHRoaXMgKTtcbn07XG5cblBhZ2VEb3RzLnByb3RvdHlwZS51cGRhdGVTZWxlY3RlZCA9IGZ1bmN0aW9uKCkge1xuICAvLyByZW1vdmUgc2VsZWN0ZWQgY2xhc3Mgb24gcHJldmlvdXNcbiAgaWYgKCB0aGlzLnNlbGVjdGVkRG90ICkge1xuICAgIHRoaXMuc2VsZWN0ZWREb3QuY2xhc3NOYW1lID0gJ2RvdCc7XG4gICAgdGhpcy5zZWxlY3RlZERvdC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcpO1xuICB9XG4gIC8vIGRvbid0IHByb2NlZWQgaWYgbm8gZG90c1xuICBpZiAoICF0aGlzLmRvdHMubGVuZ3RoICkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnNlbGVjdGVkRG90ID0gdGhpcy5kb3RzWyB0aGlzLnBhcmVudC5zZWxlY3RlZEluZGV4IF07XG4gIHRoaXMuc2VsZWN0ZWREb3QuY2xhc3NOYW1lID0gJ2RvdCBpcy1zZWxlY3RlZCc7XG4gIHRoaXMuc2VsZWN0ZWREb3Quc2V0QXR0cmlidXRlKCAnYXJpYS1jdXJyZW50JywgJ3N0ZXAnICk7XG59O1xuXG5QYWdlRG90cy5wcm90b3R5cGUub25UYXAgPSAvLyBvbGQgbWV0aG9kIG5hbWUsIGJhY2t3YXJkcy1jb21wYXRpYmxlXG5QYWdlRG90cy5wcm90b3R5cGUub25DbGljayA9IGZ1bmN0aW9uKCBldmVudCApIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgLy8gb25seSBjYXJlIGFib3V0IGRvdCBjbGlja3NcbiAgaWYgKCB0YXJnZXQubm9kZU5hbWUgIT0gJ0xJJyApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnBhcmVudC51aUNoYW5nZSgpO1xuICB2YXIgaW5kZXggPSB0aGlzLmRvdHMuaW5kZXhPZiggdGFyZ2V0ICk7XG4gIHRoaXMucGFyZW50LnNlbGVjdCggaW5kZXggKTtcbn07XG5cblBhZ2VEb3RzLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICB0aGlzLmFsbE9mZigpO1xufTtcblxuRmxpY2tpdHkuUGFnZURvdHMgPSBQYWdlRG90cztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRmxpY2tpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxudXRpbHMuZXh0ZW5kKCBGbGlja2l0eS5kZWZhdWx0cywge1xuICBwYWdlRG90czogdHJ1ZVxufSk7XG5cbkZsaWNraXR5LmNyZWF0ZU1ldGhvZHMucHVzaCgnX2NyZWF0ZVBhZ2VEb3RzJyk7XG5cbnZhciBwcm90byA9IEZsaWNraXR5LnByb3RvdHlwZTtcblxucHJvdG8uX2NyZWF0ZVBhZ2VEb3RzID0gZnVuY3Rpb24oKSB7XG4gIGlmICggIXRoaXMub3B0aW9ucy5wYWdlRG90cyApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5wYWdlRG90cyA9IG5ldyBQYWdlRG90cyggdGhpcyApO1xuICAvLyBldmVudHNcbiAgdGhpcy5vbiggJ2FjdGl2YXRlJywgdGhpcy5hY3RpdmF0ZVBhZ2VEb3RzICk7XG4gIHRoaXMub24oICdzZWxlY3QnLCB0aGlzLnVwZGF0ZVNlbGVjdGVkUGFnZURvdHMgKTtcbiAgdGhpcy5vbiggJ2NlbGxDaGFuZ2UnLCB0aGlzLnVwZGF0ZVBhZ2VEb3RzICk7XG4gIHRoaXMub24oICdyZXNpemUnLCB0aGlzLnVwZGF0ZVBhZ2VEb3RzICk7XG4gIHRoaXMub24oICdkZWFjdGl2YXRlJywgdGhpcy5kZWFjdGl2YXRlUGFnZURvdHMgKTtcbn07XG5cbnByb3RvLmFjdGl2YXRlUGFnZURvdHMgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5wYWdlRG90cy5hY3RpdmF0ZSgpO1xufTtcblxucHJvdG8udXBkYXRlU2VsZWN0ZWRQYWdlRG90cyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnBhZ2VEb3RzLnVwZGF0ZVNlbGVjdGVkKCk7XG59O1xuXG5wcm90by51cGRhdGVQYWdlRG90cyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnBhZ2VEb3RzLnNldERvdHMoKTtcbn07XG5cbnByb3RvLmRlYWN0aXZhdGVQYWdlRG90cyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnBhZ2VEb3RzLmRlYWN0aXZhdGUoKTtcbn07XG5cbi8vIC0tLS0tICAtLS0tLSAvL1xuXG5GbGlja2l0eS5QYWdlRG90cyA9IFBhZ2VEb3RzO1xuXG5yZXR1cm4gRmxpY2tpdHk7XG5cbn0pKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/flickity/js/page-dots.js\n") },
vendor: 12,762 bytes, line 1
1"./node_modules/flickity/js/player.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! ev-emitter/ev-emitter */ \"./node_modules/ev-emitter/ev-emitter.js\"),\n __webpack_require__(/*! fizzy-ui-utils/utils */ \"./node_modules/fizzy-ui-utils/utils.js\"),\n __webpack_require__(/*! ./flickity */ \"./node_modules/flickity/js/flickity.js\")\n ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true\n});\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvcGxheWVyLmpzP2IxOGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQXlDO0FBQ2hEO0FBQ0EsSUFBSSxpQ0FBUTtBQUNaLE1BQU0sMkZBQXVCO0FBQzdCLE1BQU0seUZBQXNCO0FBQzVCLE1BQU0sK0VBQVk7QUFDbEIsS0FBSyxtQ0FBRTtBQUNQO0FBQ0EsS0FBSztBQUFBLG9HQUFDO0FBQ04sR0FBRyxNQUFNLEVBY047O0FBRUgsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvcGxheWVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcGxheWVyICYgYXV0b1BsYXlcbiggZnVuY3Rpb24oIHdpbmRvdywgZmFjdG9yeSApIHtcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIC8qIGpzaGludCBzdHJpY3Q6IGZhbHNlICovXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EXG4gICAgZGVmaW5lKCBbXG4gICAgICAnZXYtZW1pdHRlci9ldi1lbWl0dGVyJyxcbiAgICAgICdmaXp6eS11aS11dGlscy91dGlscycsXG4gICAgICAnLi9mbGlja2l0eSdcbiAgICBdLCBmdW5jdGlvbiggRXZFbWl0dGVyLCB1dGlscywgRmxpY2tpdHkgKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeSggRXZFbWl0dGVyLCB1dGlscywgRmxpY2tpdHkgKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICggdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyApIHtcbiAgICAvLyBDb21tb25KU1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShcbiAgICAgIHJlcXVpcmUoJ2V2LWVtaXR0ZXInKSxcbiAgICAgIHJlcXVpcmUoJ2Zpenp5LXVpLXV0aWxzJyksXG4gICAgICByZXF1aXJlKCcuL2ZsaWNraXR5JylcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIGJyb3dzZXIgZ2xvYmFsXG4gICAgZmFjdG9yeShcbiAgICAgIHdpbmRvdy5FdkVtaXR0ZXIsXG4gICAgICB3aW5kb3cuZml6enlVSVV0aWxzLFxuICAgICAgd2luZG93LkZsaWNraXR5XG4gICAgKTtcbiAgfVxuXG59KCB3aW5kb3csIGZ1bmN0aW9uIGZhY3RvcnkoIEV2RW1pdHRlciwgdXRpbHMsIEZsaWNraXR5ICkge1xuXG4ndXNlIHN0cmljdCc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXllciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5mdW5jdGlvbiBQbGF5ZXIoIHBhcmVudCApIHtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMuc3RhdGUgPSAnc3RvcHBlZCc7XG4gIC8vIHZpc2liaWxpdHkgY2hhbmdlIGV2ZW50IGhhbmRsZXJcbiAgdGhpcy5vblZpc2liaWxpdHlDaGFuZ2UgPSB0aGlzLnZpc2liaWxpdHlDaGFuZ2UuYmluZCggdGhpcyApO1xuICB0aGlzLm9uVmlzaWJpbGl0eVBsYXkgPSB0aGlzLnZpc2liaWxpdHlQbGF5LmJpbmQoIHRoaXMgKTtcbn1cblxuUGxheWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEV2RW1pdHRlci5wcm90b3R5cGUgKTtcblxuLy8gc3RhcnQgcGxheVxuUGxheWVyLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24oKSB7XG4gIGlmICggdGhpcy5zdGF0ZSA9PSAncGxheWluZycgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIGRvIG5vdCBwbGF5IGlmIHBhZ2UgaXMgaGlkZGVuLCBzdGFydCBwbGF5aW5nIHdoZW4gcGFnZSBpcyB2aXNpYmxlXG4gIHZhciBpc1BhZ2VIaWRkZW4gPSBkb2N1bWVudC5oaWRkZW47XG4gIGlmICggaXNQYWdlSGlkZGVuICkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICd2aXNpYmlsaXR5Y2hhbmdlJywgdGhpcy5vblZpc2liaWxpdHlQbGF5ICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5zdGF0ZSA9ICdwbGF5aW5nJztcbiAgLy8gbGlzdGVuIHRvIHZpc2liaWxpdHkgY2hhbmdlXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICd2aXNpYmlsaXR5Y2hhbmdlJywgdGhpcy5vblZpc2liaWxpdHlDaGFuZ2UgKTtcbiAgLy8gc3RhcnQgdGlja2luZ1xuICB0aGlzLnRpY2soKTtcbn07XG5cblBsYXllci5wcm90b3R5cGUudGljayA9IGZ1bmN0aW9uKCkge1xuICAvLyBkbyBub3QgdGljayBpZiBub3QgcGxheWluZ1xuICBpZiAoIHRoaXMuc3RhdGUgIT0gJ3BsYXlpbmcnICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0aW1lID0gdGhpcy5wYXJlbnQub3B0aW9ucy5hdXRvUGxheTtcbiAgLy8gZGVmYXVsdCB0byAzIHNlY29uZHNcbiAgdGltZSA9IHR5cGVvZiB0aW1lID09ICdudW1iZXInID8gdGltZSA6IDMwMDA7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIC8vIEhBQ0s6IHJlc2V0IHRpY2tzIGlmIHN0b3BwZWQgYW5kIHN0YXJ0ZWQgd2l0aGluIGludGVydmFsXG4gIHRoaXMuY2xlYXIoKTtcbiAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG4gICAgX3RoaXMucGFyZW50Lm5leHQoIHRydWUgKTtcbiAgICBfdGhpcy50aWNrKCk7XG4gIH0sIHRpbWUgKTtcbn07XG5cblBsYXllci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnN0YXRlID0gJ3N0b3BwZWQnO1xuICB0aGlzLmNsZWFyKCk7XG4gIC8vIHJlbW92ZSB2aXNpYmlsaXR5IGNoYW5nZSBldmVudFxuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlICk7XG59O1xuXG5QbGF5ZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG4gIGNsZWFyVGltZW91dCggdGhpcy50aW1lb3V0ICk7XG59O1xuXG5QbGF5ZXIucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIGlmICggdGhpcy5zdGF0ZSA9PSAncGxheWluZycgKSB7XG4gICAgdGhpcy5zdGF0ZSA9ICdwYXVzZWQnO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxufTtcblxuUGxheWVyLnByb3RvdHlwZS51bnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIC8vIHJlLXN0YXJ0IHBsYXkgaWYgcGF1c2VkXG4gIGlmICggdGhpcy5zdGF0ZSA9PSAncGF1c2VkJyApIHtcbiAgICB0aGlzLnBsYXkoKTtcbiAgfVxufTtcblxuLy8gcGF1c2UgaWYgcGFnZSB2aXNpYmlsaXR5IGlzIGhpZGRlbiwgdW5wYXVzZSBpZiB2aXNpYmxlXG5QbGF5ZXIucHJvdG90eXBlLnZpc2liaWxpdHlDaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGlzUGFnZUhpZGRlbiA9IGRvY3VtZW50LmhpZGRlbjtcbiAgdGhpc1sgaXNQYWdlSGlkZGVuID8gJ3BhdXNlJyA6ICd1bnBhdXNlJyBdKCk7XG59O1xuXG5QbGF5ZXIucHJvdG90eXBlLnZpc2liaWxpdHlQbGF5ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMucGxheSgpO1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMub25WaXNpYmlsaXR5UGxheSApO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRmxpY2tpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxudXRpbHMuZXh0ZW5kKCBGbGlja2l0eS5kZWZhdWx0cywge1xuICBwYXVzZUF1dG9QbGF5T25Ib3ZlcjogdHJ1ZVxufSk7XG5cbkZsaWNraXR5LmNyZWF0ZU1ldGhvZHMucHVzaCgnX2NyZWF0ZVBsYXllcicpO1xudmFyIHByb3RvID0gRmxpY2tpdHkucHJvdG90eXBlO1xuXG5wcm90by5fY3JlYXRlUGxheWVyID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMucGxheWVyID0gbmV3IFBsYXllciggdGhpcyApO1xuXG4gIHRoaXMub24oICdhY3RpdmF0ZScsIHRoaXMuYWN0aXZhdGVQbGF5ZXIgKTtcbiAgdGhpcy5vbiggJ3VpQ2hhbmdlJywgdGhpcy5zdG9wUGxheWVyICk7XG4gIHRoaXMub24oICdwb2ludGVyRG93bicsIHRoaXMuc3RvcFBsYXllciApO1xuICB0aGlzLm9uKCAnZGVhY3RpdmF0ZScsIHRoaXMuZGVhY3RpdmF0ZVBsYXllciApO1xufTtcblxucHJvdG8uYWN0aXZhdGVQbGF5ZXIgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCAhdGhpcy5vcHRpb25zLmF1dG9QbGF5ICkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnBsYXllci5wbGF5KCk7XG4gIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCAnbW91c2VlbnRlcicsIHRoaXMgKTtcbn07XG5cbi8vIFBsYXllciBBUEksIGRvbid0IGhhdGUgdGhlIC4uLiB0aGFua3MgSSBrbm93IHdoZXJlIHRoZSBkb29yIGlzXG5cbnByb3RvLnBsYXlQbGF5ZXIgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5wbGF5ZXIucGxheSgpO1xufTtcblxucHJvdG8uc3RvcFBsYXllciA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnBsYXllci5zdG9wKCk7XG59O1xuXG5wcm90by5wYXVzZVBsYXllciA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnBsYXllci5wYXVzZSgpO1xufTtcblxucHJvdG8udW5wYXVzZVBsYXllciA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnBsYXllci51bnBhdXNlKCk7XG59O1xuXG5wcm90by5kZWFjdGl2YXRlUGxheWVyID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMucGxheWVyLnN0b3AoKTtcbiAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICdtb3VzZWVudGVyJywgdGhpcyApO1xufTtcblxuLy8gLS0tLS0gbW91c2VlbnRlci9sZWF2ZSAtLS0tLSAvL1xuXG4vLyBwYXVzZSBhdXRvLXBsYXkgb24gaG92ZXJcbnByb3RvLm9ubW91c2VlbnRlciA9IGZ1bmN0aW9uKCkge1xuICBpZiAoICF0aGlzLm9wdGlvbnMucGF1c2VBdXRvUGxheU9uSG92ZXIgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMucGxheWVyLnBhdXNlKCk7XG4gIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCAnbW91c2VsZWF2ZScsIHRoaXMgKTtcbn07XG5cbi8vIHJlc3VtZSBhdXRvLXBsYXkgb24gaG92ZXIgb2ZmXG5wcm90by5vbm1vdXNlbGVhdmUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5wbGF5ZXIudW5wYXVzZSgpO1xuICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ21vdXNlbGVhdmUnLCB0aGlzICk7XG59O1xuXG4vLyAtLS0tLSAgLS0tLS0gLy9cblxuRmxpY2tpdHkuUGxheWVyID0gUGxheWVyO1xuXG5yZXR1cm4gRmxpY2tpdHk7XG5cbn0pKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/flickity/js/player.js\n") },
vendor: 15,933 bytes, line 1
1"./node_modules/flickity/js/prev-next-button.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! ./flickity */ \"./node_modules/flickity/js/flickity.js\"),\n __webpack_require__(/*! unipointer/unipointer */ \"./node_modules/unipointer/unipointer.js\"),\n __webpack_require__(/*! fizzy-ui-utils/utils */ \"./node_modules/fizzy-ui-utils/utils.js\")\n ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg');\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path');\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30\n }\n});\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvcHJldi1uZXh0LWJ1dHRvbi5qcz9jZmI2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUF5QztBQUNoRDtBQUNBLElBQUksaUNBQVE7QUFDWixNQUFNLCtFQUFZO0FBQ2xCLE1BQU0sMkZBQXVCO0FBQzdCLE1BQU0seUZBQXNCO0FBQzVCLEtBQUssbUNBQUU7QUFDUDtBQUNBLEtBQUs7QUFBQSxvR0FBQztBQUNOLEdBQUcsTUFBTSxFQWdCTjs7QUFFSCxDQUFDO0FBQ0Q7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9mbGlja2l0eS9qcy9wcmV2LW5leHQtYnV0dG9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcHJldi9uZXh0IGJ1dHRvbnNcbiggZnVuY3Rpb24oIHdpbmRvdywgZmFjdG9yeSApIHtcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIC8qIGpzaGludCBzdHJpY3Q6IGZhbHNlICovXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EXG4gICAgZGVmaW5lKCBbXG4gICAgICAnLi9mbGlja2l0eScsXG4gICAgICAndW5pcG9pbnRlci91bmlwb2ludGVyJyxcbiAgICAgICdmaXp6eS11aS11dGlscy91dGlscydcbiAgICBdLCBmdW5jdGlvbiggRmxpY2tpdHksIFVuaXBvaW50ZXIsIHV0aWxzICkge1xuICAgICAgcmV0dXJuIGZhY3RvcnkoIHdpbmRvdywgRmxpY2tpdHksIFVuaXBvaW50ZXIsIHV0aWxzICk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMgKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoXG4gICAgICB3aW5kb3csXG4gICAgICByZXF1aXJlKCcuL2ZsaWNraXR5JyksXG4gICAgICByZXF1aXJlKCd1bmlwb2ludGVyJyksXG4gICAgICByZXF1aXJlKCdmaXp6eS11aS11dGlscycpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIGZhY3RvcnkoXG4gICAgICB3aW5kb3csXG4gICAgICB3aW5kb3cuRmxpY2tpdHksXG4gICAgICB3aW5kb3cuVW5pcG9pbnRlcixcbiAgICAgIHdpbmRvdy5maXp6eVVJVXRpbHNcbiAgICApO1xuICB9XG5cbn0oIHdpbmRvdywgZnVuY3Rpb24gZmFjdG9yeSggd2luZG93LCBGbGlja2l0eSwgVW5pcG9pbnRlciwgdXRpbHMgKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdmdVUkkgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcmV2TmV4dEJ1dHRvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5mdW5jdGlvbiBQcmV2TmV4dEJ1dHRvbiggZGlyZWN0aW9uLCBwYXJlbnQgKSB7XG4gIHRoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5fY3JlYXRlKCk7XG59XG5cblByZXZOZXh0QnV0dG9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFVuaXBvaW50ZXIucHJvdG90eXBlICk7XG5cblByZXZOZXh0QnV0dG9uLnByb3RvdHlwZS5fY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gIC8vIHByb3BlcnRpZXNcbiAgdGhpcy5pc0VuYWJsZWQgPSB0cnVlO1xuICB0aGlzLmlzUHJldmlvdXMgPSB0aGlzLmRpcmVjdGlvbiA9PSAtMTtcbiAgdmFyIGxlZnREaXJlY3Rpb24gPSB0aGlzLnBhcmVudC5vcHRpb25zLnJpZ2h0VG9MZWZ0ID8gMSA6IC0xO1xuICB0aGlzLmlzTGVmdCA9IHRoaXMuZGlyZWN0aW9uID09IGxlZnREaXJlY3Rpb247XG5cbiAgdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgZWxlbWVudC5jbGFzc05hbWUgPSAnZmxpY2tpdHktYnV0dG9uIGZsaWNraXR5LXByZXYtbmV4dC1idXR0b24nO1xuICBlbGVtZW50LmNsYXNzTmFtZSArPSB0aGlzLmlzUHJldmlvdXMgPyAnIHByZXZpb3VzJyA6ICcgbmV4dCc7XG4gIC8vIHByZXZlbnQgYnV0dG9uIGZyb20gc3VibWl0dGluZyBmb3JtIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzEwODM2MDc2LzE4MjE4M1xuICBlbGVtZW50LnNldEF0dHJpYnV0ZSggJ3R5cGUnLCAnYnV0dG9uJyApO1xuICAvLyBpbml0IGFzIGRpc2FibGVkXG4gIHRoaXMuZGlzYWJsZSgpO1xuXG4gIGVsZW1lbnQuc2V0QXR0cmlidXRlKCAnYXJpYS1sYWJlbCcsIHRoaXMuaXNQcmV2aW91cyA/ICdQcmV2aW91cycgOiAnTmV4dCcgKTtcblxuICAvLyBjcmVhdGUgYXJyb3dcbiAgdmFyIHN2ZyA9IHRoaXMuY3JlYXRlU1ZHKCk7XG4gIGVsZW1lbnQuYXBwZW5kQ2hpbGQoIHN2ZyApO1xuICAvLyBldmVudHNcbiAgdGhpcy5wYXJlbnQub24oICdzZWxlY3QnLCB0aGlzLnVwZGF0ZS5iaW5kKCB0aGlzICkgKTtcbiAgdGhpcy5vbiggJ3BvaW50ZXJEb3duJywgdGhpcy5wYXJlbnQuY2hpbGRVSVBvaW50ZXJEb3duLmJpbmQoIHRoaXMucGFyZW50ICkgKTtcbn07XG5cblByZXZOZXh0QnV0dG9uLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmJpbmRTdGFydEV2ZW50KCB0aGlzLmVsZW1lbnQgKTtcbiAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIHRoaXMgKTtcbiAgLy8gYWRkIHRvIERPTVxuICB0aGlzLnBhcmVudC5lbGVtZW50LmFwcGVuZENoaWxkKCB0aGlzLmVsZW1lbnQgKTtcbn07XG5cblByZXZOZXh0QnV0dG9uLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24oKSB7XG4gIC8vIHJlbW92ZSBmcm9tIERPTVxuICB0aGlzLnBhcmVudC5lbGVtZW50LnJlbW92ZUNoaWxkKCB0aGlzLmVsZW1lbnQgKTtcbiAgLy8gY2xpY2sgZXZlbnRzXG4gIHRoaXMudW5iaW5kU3RhcnRFdmVudCggdGhpcy5lbGVtZW50ICk7XG4gIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAnY2xpY2snLCB0aGlzICk7XG59O1xuXG5QcmV2TmV4dEJ1dHRvbi5wcm90b3R5cGUuY3JlYXRlU1ZHID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoIHN2Z1VSSSwgJ3N2ZycpO1xuICBzdmcuc2V0QXR0cmlidXRlKCAnY2xhc3MnLCAnZmxpY2tpdHktYnV0dG9uLWljb24nICk7XG4gIHN2Zy5zZXRBdHRyaWJ1dGUoICd2aWV3Qm94JywgJzAgMCAxMDAgMTAwJyApO1xuICB2YXIgcGF0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggc3ZnVVJJLCAncGF0aCcpO1xuICB2YXIgcGF0aE1vdmVtZW50cyA9IGdldEFycm93TW92ZW1lbnRzKCB0aGlzLnBhcmVudC5vcHRpb25zLmFycm93U2hhcGUgKTtcbiAgcGF0aC5zZXRBdHRyaWJ1dGUoICdkJywgcGF0aE1vdmVtZW50cyApO1xuICBwYXRoLnNldEF0dHJpYnV0ZSggJ2NsYXNzJywgJ2Fycm93JyApO1xuICAvLyByb3RhdGUgYXJyb3dcbiAgaWYgKCAhdGhpcy5pc0xlZnQgKSB7XG4gICAgcGF0aC5zZXRBdHRyaWJ1dGUoICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDEwMCwgMTAwKSByb3RhdGUoMTgwKSAnICk7XG4gIH1cbiAgc3ZnLmFwcGVuZENoaWxkKCBwYXRoICk7XG4gIHJldHVybiBzdmc7XG59O1xuXG4vLyBnZXQgU1ZHIHBhdGggbW92bWVtZW50XG5mdW5jdGlvbiBnZXRBcnJvd01vdmVtZW50cyggc2hhcGUgKSB7XG4gIC8vIHVzZSBzaGFwZSBhcyBtb3ZlbWVudCBpZiBzdHJpbmdcbiAgaWYgKCB0eXBlb2Ygc2hhcGUgPT0gJ3N0cmluZycgKSB7XG4gICAgcmV0dXJuIHNoYXBlO1xuICB9XG4gIC8vIGNyZWF0ZSBtb3ZlbWVudCBzdHJpbmdcbiAgcmV0dXJuICdNICcgKyBzaGFwZS54MCArICcsNTAnICtcbiAgICAnIEwgJyArIHNoYXBlLngxICsgJywnICsgKCBzaGFwZS55MSArIDUwICkgK1xuICAgICcgTCAnICsgc2hhcGUueDIgKyAnLCcgKyAoIHNoYXBlLnkyICsgNTAgKSArXG4gICAgJyBMICcgKyBzaGFwZS54MyArICcsNTAgJyArXG4gICAgJyBMICcgKyBzaGFwZS54MiArICcsJyArICggNTAgLSBzaGFwZS55MiApICtcbiAgICAnIEwgJyArIHNoYXBlLngxICsgJywnICsgKCA1MCAtIHNoYXBlLnkxICkgK1xuICAgICcgWic7XG59XG5cblByZXZOZXh0QnV0dG9uLnByb3RvdHlwZS5oYW5kbGVFdmVudCA9IHV0aWxzLmhhbmRsZUV2ZW50O1xuXG5QcmV2TmV4dEJ1dHRvbi5wcm90b3R5cGUub25jbGljayA9IGZ1bmN0aW9uKCkge1xuICBpZiAoICF0aGlzLmlzRW5hYmxlZCApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5wYXJlbnQudWlDaGFuZ2UoKTtcbiAgdmFyIG1ldGhvZCA9IHRoaXMuaXNQcmV2aW91cyA/ICdwcmV2aW91cycgOiAnbmV4dCc7XG4gIHRoaXMucGFyZW50WyBtZXRob2QgXSgpO1xufTtcblxuLy8gLS0tLS0gIC0tLS0tIC8vXG5cblByZXZOZXh0QnV0dG9uLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCB0aGlzLmlzRW5hYmxlZCApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5lbGVtZW50LmRpc2FibGVkID0gZmFsc2U7XG4gIHRoaXMuaXNFbmFibGVkID0gdHJ1ZTtcbn07XG5cblByZXZOZXh0QnV0dG9uLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gIGlmICggIXRoaXMuaXNFbmFibGVkICkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICB0aGlzLmlzRW5hYmxlZCA9IGZhbHNlO1xufTtcblxuUHJldk5leHRCdXR0b24ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAvLyBpbmRleCBvZiBmaXJzdCBvciBsYXN0IHNsaWRlLCBpZiBwcmV2aW91cyBvciBuZXh0XG4gIHZhciBzbGlkZXMgPSB0aGlzLnBhcmVudC5zbGlkZXM7XG4gIC8vIGVuYWJsZSBpcyB3cmFwQXJvdW5kIGFuZCBhdCBsZWFzdCAyIHNsaWRlc1xuICBpZiAoIHRoaXMucGFyZW50Lm9wdGlvbnMud3JhcEFyb3VuZCAmJiBzbGlkZXMubGVuZ3RoID4gMSApIHtcbiAgICB0aGlzLmVuYWJsZSgpO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gc2xpZGVzLmxlbmd0aCA/IHNsaWRlcy5sZW5ndGggLSAxIDogMDtcbiAgdmFyIGJvdW5kSW5kZXggPSB0aGlzLmlzUHJldmlvdXMgPyAwIDogbGFzdEluZGV4O1xuICB2YXIgbWV0aG9kID0gdGhpcy5wYXJlbnQuc2VsZWN0ZWRJbmRleCA9PSBib3VuZEluZGV4ID8gJ2Rpc2FibGUnIDogJ2VuYWJsZSc7XG4gIHRoaXNbIG1ldGhvZCBdKCk7XG59O1xuXG5QcmV2TmV4dEJ1dHRvbi5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgdGhpcy5hbGxPZmYoKTtcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZsaWNraXR5IHByb3RvdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG51dGlscy5leHRlbmQoIEZsaWNraXR5LmRlZmF1bHRzLCB7XG4gIHByZXZOZXh0QnV0dG9uczogdHJ1ZSxcbiAgYXJyb3dTaGFwZToge1xuICAgIHgwOiAxMCxcbiAgICB4MTogNjAsIHkxOiA1MCxcbiAgICB4MjogNzAsIHkyOiA0MCxcbiAgICB4MzogMzBcbiAgfVxufSk7XG5cbkZsaWNraXR5LmNyZWF0ZU1ldGhvZHMucHVzaCgnX2NyZWF0ZVByZXZOZXh0QnV0dG9ucycpO1xudmFyIHByb3RvID0gRmxpY2tpdHkucHJvdG90eXBlO1xuXG5wcm90by5fY3JlYXRlUHJldk5leHRCdXR0b25zID0gZnVuY3Rpb24oKSB7XG4gIGlmICggIXRoaXMub3B0aW9ucy5wcmV2TmV4dEJ1dHRvbnMgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5wcmV2QnV0dG9uID0gbmV3IFByZXZOZXh0QnV0dG9uKCAtMSwgdGhpcyApO1xuICB0aGlzLm5leHRCdXR0b24gPSBuZXcgUHJldk5leHRCdXR0b24oIDEsIHRoaXMgKTtcblxuICB0aGlzLm9uKCAnYWN0aXZhdGUnLCB0aGlzLmFjdGl2YXRlUHJldk5leHRCdXR0b25zICk7XG59O1xuXG5wcm90by5hY3RpdmF0ZVByZXZOZXh0QnV0dG9ucyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnByZXZCdXR0b24uYWN0aXZhdGUoKTtcbiAgdGhpcy5uZXh0QnV0dG9uLmFjdGl2YXRlKCk7XG4gIHRoaXMub24oICdkZWFjdGl2YXRlJywgdGhpcy5kZWFjdGl2YXRlUHJldk5leHRCdXR0b25zICk7XG59O1xuXG5wcm90by5kZWFjdGl2YXRlUHJldk5leHRCdXR0b25zID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMucHJldkJ1dHRvbi5kZWFjdGl2YXRlKCk7XG4gIHRoaXMubmV4dEJ1dHRvbi5kZWFjdGl2YXRlKCk7XG4gIHRoaXMub2ZmKCAnZGVhY3RpdmF0ZScsIHRoaXMuZGVhY3RpdmF0ZVByZXZOZXh0QnV0dG9ucyApO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbkZsaWNraXR5LlByZXZOZXh0QnV0dG9uID0gUHJldk5leHRCdXR0b247XG5cbnJldHVybiBGbGlja2l0eTtcblxufSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/flickity/js/prev-next-button.js\n") },
vendor: 5,687 bytes, line 1
1"./node_modules/flickity/js/slide.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;// slide\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n });\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n });\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\nreturn Slide;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxpY2tpdHkvanMvc2xpZGUuanM/NzY1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBeUM7QUFDaEQ7QUFDQSxJQUFJLG9DQUFRLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQSxvR0FBRTtBQUNyQixHQUFHLE1BQU0sRUFPTjs7QUFFSCxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2ZsaWNraXR5L2pzL3NsaWRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc2xpZGVcbiggZnVuY3Rpb24oIHdpbmRvdywgZmFjdG9yeSApIHtcbiAgLy8gdW5pdmVyc2FsIG1vZHVsZSBkZWZpbml0aW9uXG4gIC8qIGpzaGludCBzdHJpY3Q6IGZhbHNlICovXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EXG4gICAgZGVmaW5lKCBmYWN0b3J5ICk7XG4gIH0gZWxzZSBpZiAoIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMgKSB7XG4gICAgLy8gQ29tbW9uSlNcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIHdpbmRvdy5GbGlja2l0eSA9IHdpbmRvdy5GbGlja2l0eSB8fCB7fTtcbiAgICB3aW5kb3cuRmxpY2tpdHkuU2xpZGUgPSBmYWN0b3J5KCk7XG4gIH1cblxufSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBTbGlkZSggcGFyZW50ICkge1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5pc09yaWdpbkxlZnQgPSBwYXJlbnQub3JpZ2luU2lkZSA9PSAnbGVmdCc7XG4gIHRoaXMuY2VsbHMgPSBbXTtcbiAgdGhpcy5vdXRlcldpZHRoID0gMDtcbiAgdGhpcy5oZWlnaHQgPSAwO1xufVxuXG52YXIgcHJvdG8gPSBTbGlkZS5wcm90b3R5cGU7XG5cbnByb3RvLmFkZENlbGwgPSBmdW5jdGlvbiggY2VsbCApIHtcbiAgdGhpcy5jZWxscy5wdXNoKCBjZWxsICk7XG4gIHRoaXMub3V0ZXJXaWR0aCArPSBjZWxsLnNpemUub3V0ZXJXaWR0aDtcbiAgdGhpcy5oZWlnaHQgPSBNYXRoLm1heCggY2VsbC5zaXplLm91dGVySGVpZ2h0LCB0aGlzLmhlaWdodCApO1xuICAvLyBmaXJzdCBjZWxsIHN0dWZmXG4gIGlmICggdGhpcy5jZWxscy5sZW5ndGggPT0gMSApIHtcbiAgICB0aGlzLnggPSBjZWxsLng7IC8vIHggY29tZXMgZnJvbSBmaXJzdCBjZWxsXG4gICAgdmFyIGJlZ2luTWFyZ2luID0gdGhpcy5pc09yaWdpbkxlZnQgPyAnbWFyZ2luTGVmdCcgOiAnbWFyZ2luUmlnaHQnO1xuICAgIHRoaXMuZmlyc3RNYXJnaW4gPSBjZWxsLnNpemVbIGJlZ2luTWFyZ2luIF07XG4gIH1cbn07XG5cbnByb3RvLnVwZGF0ZVRhcmdldCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZW5kTWFyZ2luID0gdGhpcy5pc09yaWdpbkxlZnQgPyAnbWFyZ2luUmlnaHQnIDogJ21hcmdpbkxlZnQnO1xuICB2YXIgbGFzdENlbGwgPSB0aGlzLmdldExhc3RDZWxsKCk7XG4gIHZhciBsYXN0TWFyZ2luID0gbGFzdENlbGwgPyBsYXN0Q2VsbC5zaXplWyBlbmRNYXJnaW4gXSA6IDA7XG4gIHZhciBzbGlkZVdpZHRoID0gdGhpcy5vdXRlcldpZHRoIC0gKCB0aGlzLmZpcnN0TWFyZ2luICsgbGFzdE1hcmdpbiApO1xuICB0aGlzLnRhcmdldCA9IHRoaXMueCArIHRoaXMuZmlyc3RNYXJnaW4gKyBzbGlkZVdpZHRoICogdGhpcy5wYXJlbnQuY2VsbEFsaWduO1xufTtcblxucHJvdG8uZ2V0TGFzdENlbGwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY2VsbHNbIHRoaXMuY2VsbHMubGVuZ3RoIC0gMSBdO1xufTtcblxucHJvdG8uc2VsZWN0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuY2VsbHMuZm9yRWFjaCggZnVuY3Rpb24oIGNlbGwgKSB7XG4gICAgY2VsbC5zZWxlY3QoKTtcbiAgfSk7XG59O1xuXG5wcm90by51bnNlbGVjdCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmNlbGxzLmZvckVhY2goIGZ1bmN0aW9uKCBjZWxsICkge1xuICAgIGNlbGwudW5zZWxlY3QoKTtcbiAgfSk7XG59O1xuXG5wcm90by5nZXRDZWxsRWxlbWVudHMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY2VsbHMubWFwKCBmdW5jdGlvbiggY2VsbCApIHtcbiAgICByZXR1cm4gY2VsbC5lbGVtZW50O1xuICB9KTtcbn07XG5cbnJldHVybiBTbGlkZTtcblxufSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/flickity/js/slide.js\n") },
vendor: 15,040 bytes, line 1
1"./node_modules/get-size/get-size.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZ2V0LXNpemUvZ2V0LXNpemUuanM/NDBhZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU8sSUFBeUM7QUFDaEQ7QUFDQSxJQUFJLG9DQUFRLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQSxvR0FBRTtBQUNyQixHQUFHLE1BQU0sRUFNTjs7QUFFSCxDQUFDO0FBQ0Q7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9nZXQtc2l6ZS9nZXQtc2l6ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogZ2V0U2l6ZSB2Mi4wLjNcbiAqIG1lYXN1cmUgc2l6ZSBvZiBlbGVtZW50c1xuICogTUlUIGxpY2Vuc2VcbiAqL1xuXG4vKiBqc2hpbnQgYnJvd3NlcjogdHJ1ZSwgc3RyaWN0OiB0cnVlLCB1bmRlZjogdHJ1ZSwgdW51c2VkOiB0cnVlICovXG4vKiBnbG9iYWxzIGNvbnNvbGU6IGZhbHNlICovXG5cbiggZnVuY3Rpb24oIHdpbmRvdywgZmFjdG9yeSApIHtcbiAgLyoganNoaW50IHN0cmljdDogZmFsc2UgKi8gLyogZ2xvYmFscyBkZWZpbmUsIG1vZHVsZSAqL1xuICBpZiAoIHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkge1xuICAgIC8vIEFNRFxuICAgIGRlZmluZSggZmFjdG9yeSApO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gYnJvd3NlciBnbG9iYWxcbiAgICB3aW5kb3cuZ2V0U2l6ZSA9IGZhY3RvcnkoKTtcbiAgfVxuXG59KSggd2luZG93LCBmdW5jdGlvbiBmYWN0b3J5KCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbi8vIGdldCBhIG51bWJlciBmcm9tIGEgc3RyaW5nLCBub3QgYSBwZXJjZW50YWdlXG5mdW5jdGlvbiBnZXRTdHlsZVNpemUoIHZhbHVlICkge1xuICB2YXIgbnVtID0gcGFyc2VGbG9hdCggdmFsdWUgKTtcbiAgLy8gbm90IGEgcGVyY2VudCBsaWtlICcxMDAlJywgYW5kIGEgbnVtYmVyXG4gIHZhciBpc1ZhbGlkID0gdmFsdWUuaW5kZXhPZignJScpID09IC0xICYmICFpc05hTiggbnVtICk7XG4gIHJldHVybiBpc1ZhbGlkICYmIG51bTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnZhciBsb2dFcnJvciA9IHR5cGVvZiBjb25zb2xlID09ICd1bmRlZmluZWQnID8gbm9vcCA6XG4gIGZ1bmN0aW9uKCBtZXNzYWdlICkge1xuICAgIGNvbnNvbGUuZXJyb3IoIG1lc3NhZ2UgKTtcbiAgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVhc3VyZW1lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbnZhciBtZWFzdXJlbWVudHMgPSBbXG4gICdwYWRkaW5nTGVmdCcsXG4gICdwYWRkaW5nUmlnaHQnLFxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nQm90dG9tJyxcbiAgJ21hcmdpbkxlZnQnLFxuICAnbWFyZ2luUmlnaHQnLFxuICAnbWFyZ2luVG9wJyxcbiAgJ21hcmdpbkJvdHRvbScsXG4gICdib3JkZXJMZWZ0V2lkdGgnLFxuICAnYm9yZGVyUmlnaHRXaWR0aCcsXG4gICdib3JkZXJUb3BXaWR0aCcsXG4gICdib3JkZXJCb3R0b21XaWR0aCdcbl07XG5cbnZhciBtZWFzdXJlbWVudHNMZW5ndGggPSBtZWFzdXJlbWVudHMubGVuZ3RoO1xuXG5mdW5jdGlvbiBnZXRaZXJvU2l6ZSgpIHtcbiAgdmFyIHNpemUgPSB7XG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwLFxuICAgIGlubmVyV2lkdGg6IDAsXG4gICAgaW5uZXJIZWlnaHQ6IDAsXG4gICAgb3V0ZXJXaWR0aDogMCxcbiAgICBvdXRlckhlaWdodDogMFxuICB9O1xuICBmb3IgKCB2YXIgaT0wOyBpIDwgbWVhc3VyZW1lbnRzTGVuZ3RoOyBpKysgKSB7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gbWVhc3VyZW1lbnRzW2ldO1xuICAgIHNpemVbIG1lYXN1cmVtZW50IF0gPSAwO1xuICB9XG4gIHJldHVybiBzaXplO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnZXRTdHlsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4vKipcbiAqIGdldFN0eWxlLCBnZXQgc3R5bGUgb2YgZWxlbWVudCwgY2hlY2sgZm9yIEZpcmVmb3ggYnVnXG4gKiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01NDgzOTdcbiAqL1xuZnVuY3Rpb24gZ2V0U3R5bGUoIGVsZW0gKSB7XG4gIHZhciBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTtcbiAgaWYgKCAhc3R5bGUgKSB7XG4gICAgbG9nRXJyb3IoICdTdHlsZSByZXR1cm5lZCAnICsgc3R5bGUgK1xuICAgICAgJy4gQXJlIHlvdSBydW5uaW5nIHRoaXMgY29kZSBpbiBhIGhpZGRlbiBpZnJhbWUgb24gRmlyZWZveD8gJyArXG4gICAgICAnU2VlIGh0dHBzOi8vYml0Lmx5L2dldHNpemVidWcxJyApO1xuICB9XG4gIHJldHVybiBzdHlsZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxudmFyIGlzU2V0dXAgPSBmYWxzZTtcblxudmFyIGlzQm94U2l6ZU91dGVyO1xuXG4vKipcbiAqIHNldHVwXG4gKiBjaGVjayBpc0JveFNpemVyT3V0ZXJcbiAqIGRvIG9uIGZpcnN0IGdldFNpemUoKSByYXRoZXIgdGhhbiBvbiBwYWdlIGxvYWQgZm9yIEZpcmVmb3ggYnVnXG4gKi9cbmZ1bmN0aW9uIHNldHVwKCkge1xuICAvLyBzZXR1cCBvbmNlXG4gIGlmICggaXNTZXR1cCApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaXNTZXR1cCA9IHRydWU7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYm94IHNpemluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBDaHJvbWUgJiBTYWZhcmkgbWVhc3VyZSB0aGUgb3V0ZXItd2lkdGggb24gc3R5bGUud2lkdGggb24gYm9yZGVyLWJveCBlbGVtc1xuICAgKiBJRTExICYgRmlyZWZveDwyOSBtZWFzdXJlcyB0aGUgaW5uZXItd2lkdGhcbiAgICovXG4gIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZGl2LnN0eWxlLndpZHRoID0gJzIwMHB4JztcbiAgZGl2LnN0eWxlLnBhZGRpbmcgPSAnMXB4IDJweCAzcHggNHB4JztcbiAgZGl2LnN0eWxlLmJvcmRlclN0eWxlID0gJ3NvbGlkJztcbiAgZGl2LnN0eWxlLmJvcmRlcldpZHRoID0gJzFweCAycHggM3B4IDRweCc7XG4gIGRpdi5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCc7XG5cbiAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgYm9keS5hcHBlbmRDaGlsZCggZGl2ICk7XG4gIHZhciBzdHlsZSA9IGdldFN0eWxlKCBkaXYgKTtcbiAgLy8gcm91bmQgdmFsdWUgZm9yIGJyb3dzZXIgem9vbS4gZGVzYW5kcm8vbWFzb25yeSM5MjhcbiAgaXNCb3hTaXplT3V0ZXIgPSBNYXRoLnJvdW5kKCBnZXRTdHlsZVNpemUoIHN0eWxlLndpZHRoICkgKSA9PSAyMDA7XG4gIGdldFNpemUuaXNCb3hTaXplT3V0ZXIgPSBpc0JveFNpemVPdXRlcjtcblxuICBib2R5LnJlbW92ZUNoaWxkKCBkaXYgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2V0U2l6ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5mdW5jdGlvbiBnZXRTaXplKCBlbGVtICkge1xuICBzZXR1cCgpO1xuXG4gIC8vIHVzZSBxdWVyeVNlbGV0b3IgaWYgZWxlbSBpcyBzdHJpbmdcbiAgaWYgKCB0eXBlb2YgZWxlbSA9PSAnc3RyaW5nJyApIHtcbiAgICBlbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggZWxlbSApO1xuICB9XG5cbiAgLy8gZG8gbm90IHByb2NlZWQgb24gbm9uLW9iamVjdHNcbiAgaWYgKCAhZWxlbSB8fCB0eXBlb2YgZWxlbSAhPSAnb2JqZWN0JyB8fCAhZWxlbS5ub2RlVHlwZSApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc3R5bGUgPSBnZXRTdHlsZSggZWxlbSApO1xuXG4gIC8vIGlmIGhpZGRlbiwgZXZlcnl0aGluZyBpcyAwXG4gIGlmICggc3R5bGUuZGlzcGxheSA9PSAnbm9uZScgKSB7XG4gICAgcmV0dXJuIGdldFplcm9TaXplKCk7XG4gIH1cblxuICB2YXIgc2l6ZSA9IHt9O1xuICBzaXplLndpZHRoID0gZWxlbS5vZmZzZXRXaWR0aDtcbiAgc2l6ZS5oZWlnaHQgPSBlbGVtLm9mZnNldEhlaWdodDtcblxuICB2YXIgaXNCb3JkZXJCb3ggPSBzaXplLmlzQm9yZGVyQm94ID0gc3R5bGUuYm94U2l6aW5nID09ICdib3JkZXItYm94JztcblxuICAvLyBnZXQgYWxsIG1lYXN1cmVtZW50c1xuICBmb3IgKCB2YXIgaT0wOyBpIDwgbWVhc3VyZW1lbnRzTGVuZ3RoOyBpKysgKSB7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gbWVhc3VyZW1lbnRzW2ldO1xuICAgIHZhciB2YWx1ZSA9IHN0eWxlWyBtZWFzdXJlbWVudCBdO1xuICAgIHZhciBudW0gPSBwYXJzZUZsb2F0KCB2YWx1ZSApO1xuICAgIC8vIGFueSAnYXV0bycsICdtZWRpdW0nIHZhbHVlIHdpbGwgYmUgMFxuICAgIHNpemVbIG1lYXN1cmVtZW50IF0gPSAhaXNOYU4oIG51bSApID8gbnVtIDogMDtcbiAgfVxuXG4gIHZhciBwYWRkaW5nV2lkdGggPSBzaXplLnBhZGRpbmdMZWZ0ICsgc2l6ZS5wYWRkaW5nUmlnaHQ7XG4gIHZhciBwYWRkaW5nSGVpZ2h0ID0gc2l6ZS5wYWRkaW5nVG9wICsgc2l6ZS5wYWRkaW5nQm90dG9tO1xuICB2YXIgbWFyZ2luV2lkdGggPSBzaXplLm1hcmdpbkxlZnQgKyBzaXplLm1hcmdpblJpZ2h0O1xuICB2YXIgbWFyZ2luSGVpZ2h0ID0gc2l6ZS5tYXJnaW5Ub3AgKyBzaXplLm1hcmdpbkJvdHRvbTtcbiAgdmFyIGJvcmRlcldpZHRoID0gc2l6ZS5ib3JkZXJMZWZ0V2lkdGggKyBzaXplLmJvcmRlclJpZ2h0V2lkdGg7XG4gIHZhciBib3JkZXJIZWlnaHQgPSBzaXplLmJvcmRlclRvcFdpZHRoICsgc2l6ZS5ib3JkZXJCb3R0b21XaWR0aDtcblxuICB2YXIgaXNCb3JkZXJCb3hTaXplT3V0ZXIgPSBpc0JvcmRlckJveCAmJiBpc0JveFNpemVPdXRlcjtcblxuICAvLyBvdmVyd3JpdGUgd2lkdGggYW5kIGhlaWdodCBpZiB3ZSBjYW4gZ2V0IGl0IGZyb20gc3R5bGVcbiAgdmFyIHN0eWxlV2lkdGggPSBnZXRTdHlsZVNpemUoIHN0eWxlLndpZHRoICk7XG4gIGlmICggc3R5bGVXaWR0aCAhPT0gZmFsc2UgKSB7XG4gICAgc2l6ZS53aWR0aCA9IHN0eWxlV2lkdGggK1xuICAgICAgLy8gYWRkIHBhZGRpbmcgYW5kIGJvcmRlciB1bmxlc3MgaXQncyBhbHJlYWR5IGluY2x1ZGluZyBpdFxuICAgICAgKCBpc0JvcmRlckJveFNpemVPdXRlciA/IDAgOiBwYWRkaW5nV2lkdGggKyBib3JkZXJXaWR0aCApO1xuICB9XG5cbiAgdmFyIHN0eWxlSGVpZ2h0ID0gZ2V0U3R5bGVTaXplKCBzdHlsZS5oZWlnaHQgKTtcbiAgaWYgKCBzdHlsZUhlaWdodCAhPT0gZmFsc2UgKSB7XG4gICAgc2l6ZS5oZWlnaHQgPSBzdHlsZUhlaWdodCArXG4gICAgICAvLyBhZGQgcGFkZGluZyBhbmQgYm9yZGVyIHVubGVzcyBpdCdzIGFscmVhZHkgaW5jbHVkaW5nIGl0XG4gICAgICAoIGlzQm9yZGVyQm94U2l6ZU91dGVyID8gMCA6IHBhZGRpbmdIZWlnaHQgKyBib3JkZXJIZWlnaHQgKTtcbiAgfVxuXG4gIHNpemUuaW5uZXJXaWR0aCA9IHNpemUud2lkdGggLSAoIHBhZGRpbmdXaWR0aCArIGJvcmRlcldpZHRoICk7XG4gIHNpemUuaW5uZXJIZWlnaHQgPSBzaXplLmhlaWdodCAtICggcGFkZGluZ0hlaWdodCArIGJvcmRlckhlaWdodCApO1xuXG4gIHNpemUub3V0ZXJXaWR0aCA9IHNpemUud2lkdGggKyBtYXJnaW5XaWR0aDtcbiAgc2l6ZS5vdXRlckhlaWdodCA9IHNpemUuaGVpZ2h0ICsgbWFyZ2luSGVpZ2h0O1xuXG4gIHJldHVybiBzaXplO1xufVxuXG5yZXR1cm4gZ2V0U2l6ZTtcblxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/get-size/get-size.js\n") },
vendor: 67,069 bytes, line 1
1"./node_modules/grouped-content/dist/index.js": function (module, exports, __webpack_require__) { "use strict"; eval("\n\n// forEach method, could be shipped as part of an Object Literal/Module\nfunction forEach(array, callback, scope) {\n var index = 0;\n\n for (index = 0; index < array.length; index += 1) {\n callback.call(scope, array[index], index); // passes back stuff we need\n }\n}\n\nfunction hasClass(el, className) {\n var regex = new RegExp('^' + className + '| +' + className, 'g');\n\n return el.className.match(regex);\n}\n\nfunction addClass(el, className) {\n // Return if it already has the className\n if (hasClass(el, className)) return;\n\n el.className += ' ' + className;\n}\n\nfunction removeClass(el, className) {\n // Return if it doesn't already have the className\n if (!hasClass(el, className)) return;\n\n var regex = new RegExp('^' + className + '| +' + className, 'g');\n\n el.className = el.className.replace(regex, '');\n}\n\nfunction toggleClass(el, className) {\n if (hasClass(el, className)) {\n removeClass(el, className);\n } else {\n addClass(el, className);\n }\n}\n\nfunction findPairingFromPairingTrigger(pairings, pairingTrigger) {\n var foundPairing = null;\n\n forEach(pairings, function (pairing) {\n if (pairing.trigger === pairingTrigger) {\n foundPairing = pairing;\n }\n });\n\n return foundPairing;\n}\n\n/**\n * See {@link https://stackoverflow.com/revisions/2117523/11 Stack Overflow}\n * An RFC4122 v4 compliant uuid solution\n */\nfunction uuidv4() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = c === 'x' ? r : r & 0x3 | 0x8;\n\n return v.toString(16);\n });\n}\n\nfunction init(groupedContent) {\n var triggers = groupedContent.triggers;\n var pairings = groupedContent.pairings;\n\n triggers.setAttribute('role', 'tablist');\n\n forEach(pairings, function (pairing, index) {\n pairing.trigger.setAttribute('role', 'tab');\n pairing.trigger.setAttribute('aria-controls', groupedContent.namespace + '-' + groupedContent.id + '-' + index + '-content');\n\n if (pairing.trigger.children.length > 0) {\n forEach(pairing.trigger.children, function (child) {\n child.setAttribute('tabIndex', '-1');\n });\n }\n\n if (hasClass(pairing.trigger, 'active')) {\n pairing.trigger.setAttribute('aria-selected', 'true');\n pairing.trigger.setAttribute('tabIndex', '0');\n } else {\n pairing.trigger.setAttribute('tabIndex', '-1');\n }\n\n pairing.content.id = groupedContent.namespace + '-' + groupedContent.id + '-' + index + '-content';\n pairing.content.setAttribute('role', 'tabpanel');\n\n if (!hasClass(pairing.content, 'active')) {\n pairing.content.setAttribute('aria-hidden', 'true');\n }\n });\n}\n\nfunction update(groupedContent) {\n var pairings = groupedContent.pairings;\n\n forEach(pairings, function (pairing) {\n pairing.trigger.removeAttribute('aria-selected');\n pairing.content.removeAttribute('aria-hidden');\n\n if (hasClass(pairing.trigger, 'active')) {\n pairing.trigger.setAttribute('aria-selected', 'true');\n pairing.trigger.setAttribute('tabIndex', '0');\n } else {\n pairing.trigger.setAttribute('tabIndex', '-1');\n }\n\n if (!hasClass(pairing.content, 'active')) {\n pairing.content.setAttribute('aria-hidden', 'true');\n }\n });\n}\n\nvar a11y = {\n init: init,\n update: update\n};\n\nvar asyncGenerator = function () {\n function AwaitValue(value) {\n this.value = value;\n }\n\n function AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function (resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg);\n var value = result.value;\n\n if (value instanceof AwaitValue) {\n Promise.resolve(value.value).then(function (arg) {\n resume(\"next\", arg);\n }, function (arg) {\n resume(\"throw\", arg);\n });\n } else {\n settle(result.done ? \"return\" : \"normal\", result.value);\n }\n } catch (err) {\n settle(\"throw\", err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case \"return\":\n front.resolve({\n value: value,\n done: true\n });\n break;\n\n case \"throw\":\n front.reject(value);\n break;\n\n default:\n front.resolve({\n value: value,\n done: false\n });\n break;\n }\n\n front = front.next;\n\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n if (typeof gen.return !== \"function\") {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n return this;\n };\n }\n\n AsyncGenerator.prototype.next = function (arg) {\n return this._invoke(\"next\", arg);\n };\n\n AsyncGenerator.prototype.throw = function (arg) {\n return this._invoke(\"throw\", arg);\n };\n\n AsyncGenerator.prototype.return = function (arg) {\n return this._invoke(\"return\", arg);\n };\n\n return {\n wrap: function (fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n },\n await: function (value) {\n return new AwaitValue(value);\n }\n };\n}();\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n/** A class for creating, managing, and destroying groupable content as tabs. */\n\nvar TabsLayout = function () {\n function TabsLayout(groupedContent) {\n classCallCheck(this, TabsLayout);\n\n this.groupedContent = groupedContent;\n this.pairings = groupedContent.pairings;\n this.events = [];\n\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handleClick = this._handleClick.bind(this);\n\n this._init();\n a11y.init(this.groupedContent);\n }\n\n createClass(TabsLayout, [{\n key: 'unload',\n value: function unload() {\n forEach(this.events, function (event) {\n event.trigger.removeEventListener(event.type, event.fn);\n });\n }\n }, {\n key: '_init',\n value: function _init() {\n var _this = this;\n\n var existingActive = false;\n\n forEach(this.pairings, function (pairing) {\n var trigger = pairing.trigger;\n\n if (hasClass(trigger, 'active')) {\n existingActive = true;\n }\n\n trigger.addEventListener('keydown', _this._handleKeydown);\n trigger.addEventListener('click', _this._handleClick);\n\n _this.events.push({\n trigger: trigger,\n type: 'keydown',\n fn: _this._handleKeydown\n });\n\n _this.events.push({\n trigger: trigger,\n type: 'click',\n fn: _this._handleClick\n });\n });\n\n if (!existingActive) {\n addClass(this.pairings[0].trigger, 'active');\n addClass(this.pairings[0].content, 'active');\n }\n }\n }, {\n key: '_handleKeydown',\n value: function _handleKeydown(event) {\n var trigger = event.currentTarget;\n var pairing = findPairingFromPairingTrigger(this.pairings, trigger);\n var pairingIndex = this.pairings.indexOf(pairing);\n var prevIndex = pairingIndex - 1 < 0 ? this.pairings.length - 1 : pairingIndex - 1;\n var nextIndex = pairingIndex + 1 >= this.pairings.length ? 0 : pairingIndex + 1;\n\n var nextPairing = null;\n\n switch (event.key) {\n case 'ArrowLeft':\n nextPairing = this.pairings[prevIndex];\n break;\n case 'ArrowRight':\n nextPairing = this.pairings[nextIndex];\n break;\n default:\n nextPairing = null;\n break;\n }\n\n // Fast exit if we can't find the tab or tabs\n if (nextPairing === null) return;\n\n event.preventDefault();\n\n forEach(this.pairings, function (inactivePairing) {\n removeClass(inactivePairing.trigger, 'active');\n removeClass(inactivePairing.content, 'active');\n });\n\n addClass(nextPairing.trigger, 'active');\n addClass(nextPairing.content, 'active');\n\n nextPairing.trigger.focus();\n\n a11y.update(this.groupedContent);\n }\n }, {\n key: '_handleClick',\n value: function _handleClick(event) {\n var trigger = event.currentTarget;\n var pairing = findPairingFromPairingTrigger(this.pairings, trigger);\n\n // Fast exit if we can't find the tab or tabs\n if (pairing === null) return;\n\n event.preventDefault();\n\n forEach(this.pairings, function (inactivePairing) {\n removeClass(inactivePairing.trigger, 'active');\n removeClass(inactivePairing.content, 'active');\n });\n\n addClass(pairing.trigger, 'active');\n addClass(pairing.content, 'active');\n\n a11y.update(this.groupedContent);\n }\n }]);\n return TabsLayout;\n}();\n\nfunction init$1(groupedContent) {\n var pairings = groupedContent.pairings;\n\n forEach(pairings, function (pairing, index) {\n pairing.trigger.setAttribute('role', 'button');\n pairing.trigger.setAttribute('aria-controls', groupedContent.namespace + '-' + groupedContent.id + '-' + index + '-content');\n pairing.trigger.setAttribute('tabIndex', '0');\n\n if (pairing.trigger.children.length > 0) {\n forEach(pairing.trigger.children, function (child) {\n child.setAttribute('tabIndex', '-1');\n });\n }\n\n if (hasClass(pairing.trigger, 'active')) {\n pairing.trigger.setAttribute('aria-expanded', 'true');\n } else {\n pairing.trigger.setAttribute('aria-expanded', 'false');\n }\n\n pairing.content.id = groupedContent.namespace + '-' + groupedContent.id + '-' + index + '-content';\n\n if (!hasClass(pairing.content, 'active')) {\n pairing.content.setAttribute('aria-hidden', 'true');\n }\n });\n}\n\nfunction update$1(groupedContent) {\n var pairings = groupedContent.pairings;\n\n forEach(pairings, function (pairing) {\n pairing.content.removeAttribute('aria-hidden');\n\n if (hasClass(pairing.trigger, 'active')) {\n pairing.trigger.setAttribute('aria-expanded', 'true');\n } else {\n pairing.trigger.setAttribute('aria-expanded', 'false');\n }\n\n if (!hasClass(pairing.content, 'active')) {\n pairing.content.setAttribute('aria-hidden', 'true');\n }\n });\n}\n\nvar a11y$1 = {\n init: init$1,\n update: update$1\n};\n\n/** A class for creating, managing, and destroying groupable content as an accordion. */\n\nvar AccordionLayout = function () {\n function AccordionLayout(groupedContent) {\n classCallCheck(this, AccordionLayout);\n\n this.groupedContent = groupedContent;\n this.pairings = groupedContent.pairings;\n this.events = [];\n\n this._handleKeydown = this._handleKeydown.bind(this);\n this._handleClick = this._handleClick.bind(this);\n\n this._init(this.pairings);\n a11y$1.init(this.groupedContent);\n }\n\n createClass(AccordionLayout, [{\n key: 'unload',\n value: function unload() {\n forEach(this.events, function (event) {\n event.trigger.removeEventListener(event.type, event.fn);\n });\n }\n }, {\n key: '_init',\n value: function _init() {\n var _this = this;\n\n forEach(this.pairings, function (pairing) {\n var trigger = pairing.trigger;\n var content = pairing.content;\n\n trigger.parentNode.insertBefore(content, trigger.nextSibling);\n\n trigger.addEventListener('keydown', _this._handleKeydown);\n trigger.addEventListener('click', _this._handleClick);\n\n _this.events.push({\n trigger: trigger,\n type: 'keydown',\n fn: _this._handleKeydown\n });\n\n _this.events.push({\n trigger: trigger,\n type: 'click',\n fn: _this._handleClick\n });\n });\n\n this.groupedContent.contents.remove();\n }\n }, {\n key: '_handleKeydown',\n value: function _handleKeydown(event) {\n var trigger = event.currentTarget;\n var pairing = findPairingFromPairingTrigger(this.pairings, trigger);\n\n // Fast exit if enter isn't pressed or we can't find the group\n if (event.key !== 'Enter' || pairing === null) return;\n\n event.preventDefault();\n\n toggleClass(pairing.trigger, 'active');\n toggleClass(pairing.content, 'active');\n a11y$1.update(this.groupedContent);\n }\n }, {\n key: '_handleClick',\n value: function _handleClick(event) {\n var trigger = event.currentTarget;\n var pairing = findPairingFromPairingTrigger(this.pairings, trigger);\n\n // Fast exit if we can't find the group\n if (pairing === null) return;\n\n event.preventDefault();\n\n toggleClass(pairing.trigger, 'active');\n toggleClass(pairing.content, 'active');\n a11y$1.update(this.groupedContent);\n }\n }]);\n return AccordionLayout;\n}();\n\n/**\n * Returns an array of nodes related to the heading node.\n * @param {node} heading - The heading node to search for content from.\n * @returns {node[]}\n */\nfunction getHeadingContent(heading) {\n var headingTagNames = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n var tagNameIndex = headingTagNames.indexOf(heading.tagName);\n var content = [];\n\n var sibling = heading.nextElementSibling;\n\n while (sibling !== null && (headingTagNames.indexOf(sibling.tagName) === -1 || headingTagNames.indexOf(sibling.tagName) > tagNameIndex)) {\n content.push(sibling);\n\n sibling = sibling.nextElementSibling;\n }\n\n return content;\n}\n\n/**\n * Returns an object array representing the heading tree from a given node.\n * Root nodes are evaluated differently, and requires the evaluatingRoot flag\n * to be true.\n * @param {node} el - The node being evaluated.\n * @param {node[]} children - The children of the evaluated node.\n * @param {boolean} [evaluatingRoot] - Whether to evaluate as root node.\n * @returns {Object[]}\n */\nfunction getHeadingTree(el, children) {\n var evaluatingRoot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var headingTagNames = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n var tagNameIndex = headingTagNames.indexOf(el.tagName);\n var headings = [];\n\n var currentLowestTagNameIndex = 5;\n\n for (var i = 0; i < children.length; i += 1) {\n var child = children[i];\n var childTagNameIndex = headingTagNames.indexOf(child.tagName);\n\n if (childTagNameIndex !== -1 && childTagNameIndex < currentLowestTagNameIndex) {\n currentLowestTagNameIndex = childTagNameIndex;\n }\n\n if (evaluatingRoot && childTagNameIndex !== -1 && childTagNameIndex <= currentLowestTagNameIndex || !evaluatingRoot && childTagNameIndex !== -1 && childTagNameIndex === tagNameIndex + 1) {\n var siblings = getHeadingContent(child);\n\n var childNode = {\n el: child,\n content: siblings,\n children: getHeadingTree(child, siblings)\n };\n\n headings.push(childNode);\n }\n }\n\n return headings;\n}\n\n/**\n * Returns groupings of headings that meet the minimum sequence value\n * and don't contain any invalid headings.\n * @param {Object[]} headings - An array of heading objects.\n * @param {int[]} invalidHeadings - An array of invalid heading integers,\n * representing indexes of headings.\n * @param {*} minInSequence - Minimum headings in sequence before being considered\n * as a grouping.\n * @returns {Object[][]}\n */\nfunction getHeadingGroupsInSequence(headings, invalidHeadings, minInSequence) {\n var headingGroupsInSequence = [];\n var currentHeadingGroupInSequence = [];\n var currentSequence = 0;\n\n for (var i = 0; i < headings.length; i += 1) {\n if (invalidHeadings.indexOf(i) === -1) {\n currentHeadingGroupInSequence.push(headings[i]);\n currentSequence += 1;\n\n if (i !== headings.length - 1 && headings[i].el.tagName !== headings[i + 1].el.tagName && invalidHeadings.indexOf(i + 1)) {\n currentHeadingGroupInSequence = [];\n currentSequence = 0;\n } else if (i !== 0 && headings[i].el.tagName !== headings[i - 1].el.tagName) {\n currentHeadingGroupInSequence.pop();\n currentSequence -= 1;\n\n if (currentSequence >= minInSequence) {\n headingGroupsInSequence.push(currentHeadingGroupInSequence);\n }\n\n currentHeadingGroupInSequence = [headings[i]];\n currentSequence = 1;\n }\n }\n }\n\n if (currentSequence >= minInSequence) {\n headingGroupsInSequence.push(currentHeadingGroupInSequence);\n }\n\n return headingGroupsInSequence;\n}\n\n/**\n * Generates necessary DOM elements to group related content.\n * Returns a object array representing the grouped content.\n * @param {Object[]} children - An array of objects.\n * @returns {Object[]}\n */\nfunction createGroupedContent(children) {\n var pairings = [];\n\n var firstChild = children[0].el;\n var triggers = document.createElement('div');\n var contents = document.createElement('div');\n\n contents = firstChild.parentNode.insertBefore(contents, firstChild.nextSibling);\n triggers = firstChild.parentNode.insertBefore(triggers, firstChild.nextSibling);\n\n for (var i = 0; i < children.length; i += 1) {\n var child = children[i];\n var trigger = child.el;\n var content = document.createElement('div');\n\n trigger = triggers.appendChild(trigger);\n content = contents.appendChild(content);\n\n for (var j = 0; j < child.content.length; j += 1) {\n content.appendChild(child.content[j]);\n }\n\n pairings.push({\n trigger: trigger,\n content: content\n });\n }\n\n return {\n triggers: triggers,\n contents: contents,\n pairings: pairings\n };\n}\n\n/**\n * Returns all groupable content within the supplied node.\n * @param {node} node - A node to traverse for groupable content.\n * @returns {Object[][]}\n */\n/*\n * Recursive function:\n * Returns all groups of headings that\n * are elegible to become grouped content.\n */\nfunction getGroupedContentSet(node) {\n var children = node.children;\n var childrenWithGroupableContent = [];\n var groupedContentSet = [];\n\n if (children.length === 0) {\n return [];\n }\n\n for (var i = 0; i < children.length; i += 1) {\n var childGroupableContent = getGroupedContentSet(children[i]);\n\n if (childGroupableContent.length > 0) {\n childrenWithGroupableContent.push(i);\n groupedContentSet = groupedContentSet.concat(childGroupableContent);\n }\n }\n\n var headingGroupsInSequence = getHeadingGroupsInSequence(children, childrenWithGroupableContent, 3);\n\n for (var _i = 0; _i < headingGroupsInSequence.length; _i += 1) {\n groupedContentSet.push(createGroupedContent(headingGroupsInSequence[_i]));\n }\n\n return groupedContentSet;\n}\n\n/**\n * When static parsing isn't enough, there's intelliparseâ¢!\n * Searches through dom content to find heading groupings that\n * are elegible to become tab groups.\n * Assumes that content is in a flattened hierarchy in the dom\n * and interprets increasing heading values as a deeper level of nesting.\n * Returns all groupable content as an array of object arrays.\n * @param {node} el - The node who's content will be searched for groupable content.\n * @returns {Object[][]}\n */\nfunction intelliParse(el) {\n var children = el.children;\n var heading = el.querySelector('h1, h2, h3, h4, h5, h6');\n\n // Fast return if there's no headings\n if (children.length === 0) return [];\n\n var rootNode = {\n el: el,\n content: null,\n children: getHeadingTree(heading, children, true)\n };\n\n return getGroupedContentSet(rootNode);\n}\n\n/**\n * Parses content from a given node based on a static structure.\n * The structure is as follows:\n * <ul class=\"tabs\">\n * <li class=\"active\">Tab 1</li>\n * <li>Tab 2</li>\n * <li>Tab 3</li>\n * </ul>\n *\n * <ul class=\"tabs-content\">\n * <li class=\"active\">\n * <p>Tab 1 content goes here.</p>\n * </li>\n * <li>\n * <p>Tab 2 content goes here.</p>\n * </li>\n * <li>\n * <p>Tab 3 content goes here.</p>\n * </li>\n * </ul>\n * Returns all groupable content as an array of object arrays.\n * @param {node} el - The node who's content will be searched for groupable content.\n * @returns {Object[][]}\n */\nfunction staticParse(el) {\n var groupedContentSet = [];\n\n var tabs = el.querySelectorAll('.tabs');\n\n for (var i = 0; i < tabs.length; i += 1) {\n var triggers = tabs[i].children;\n var contents = tabs[i].nextElementSibling.children;\n\n // Only add a tab group if equal triggers to contents\n if (triggers.length === contents.length) {\n var length = groupedContentSet.push({\n triggers: tabs[i],\n contents: tabs[i].nextElementSibling,\n pairings: []\n });\n var index = length - 1;\n\n for (var j = 0; j < triggers.length; j += 1) {\n var trigger = triggers[j];\n var content = contents[j];\n\n var pairing = {\n trigger: trigger,\n content: content\n };\n\n groupedContentSet[index].pairings.push(pairing);\n }\n }\n }\n\n return groupedContentSet;\n}\n\n/**\n * Returns all groupable content as an array of object arrays.\n * @param {node} content - The node to parse for groupable content.\n * @param {boolean} intelliparse - Whether to use intelligent parsing.\n * @returns {Object[][]}\n */\nfunction parse(content) {\n var intelliparse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var groupedContentSet = intelliparse ? intelliParse(content) : staticParse(content);\n\n return groupedContentSet;\n}\n\n/** A class for creating, managing, and destroying groupable content. */\n\nvar GroupedContent = function () {\n /**\n * Create grouped content\n * @param {node} el - The element to search for groupable content in.\n * @param {Object} [options] - Additional options\n * @param {string} [options.layout] - The layout to display groupable content in.\n * @param {boolean} [options.intelliparse] - The parsing algorithm used to find content with.\n */\n function GroupedContent(el) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n classCallCheck(this, GroupedContent);\n\n this.namespace = 'grouped-content';\n this.el = el;\n this.groupedContentInstances = [];\n\n var layout = options.layout || 'tabs';\n var intelliparse = !!options.intelliparse;\n\n forEach(parse(el, intelliparse), function (groupedContent) {\n var id = uuidv4();\n var instance = null;\n var groupedContentWrapper = document.createElement('div');\n\n groupedContentWrapper = groupedContent.triggers.parentNode.insertBefore(groupedContentWrapper, groupedContent.triggers.nextSibling);\n\n addClass(groupedContentWrapper, _this.namespace);\n addClass(groupedContentWrapper, _this.namespace + '-layout-' + layout);\n\n groupedContentWrapper.appendChild(groupedContent.triggers);\n groupedContentWrapper.appendChild(groupedContent.contents);\n\n groupedContent.namespace = _this.namespace;\n groupedContent.id = id;\n groupedContent.triggers.id = _this.namespace + '-' + id + '-triggers';\n groupedContent.contents.id = _this.namespace + '-' + id + '-contents';\n\n addClass(groupedContent.triggers, _this.namespace + '-triggers');\n addClass(groupedContent.contents, _this.namespace + '-contents');\n\n forEach(groupedContent.pairings, function (pairing) {\n addClass(pairing.trigger, _this.namespace + '-trigger');\n addClass(pairing.content, _this.namespace + '-content');\n });\n\n switch (layout) {\n case 'accordion':\n instance = new AccordionLayout(groupedContent);\n break;\n case 'tabs':\n default:\n instance = new TabsLayout(groupedContent);\n break;\n }\n\n _this.groupedContentInstances.push({\n groupedContent: groupedContent,\n instance: instance\n });\n });\n }\n\n /** Unload all grouped content instances */\n\n\n createClass(GroupedContent, [{\n key: 'unload',\n value: function unload() {\n forEach(this.groupedContentInstances, function (groupedContentInstance) {\n groupedContentInstance.instance.unload();\n });\n }\n }]);\n return GroupedContent;\n}();\n\nmodule.exports = GroupedContent;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZ3JvdXBlZC1jb250ZW50L2Rpc3QvaW5kZXguanM/ODA0MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHNCQUFzQjtBQUN2Qyw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7O0FBTUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPOztBQUVQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDSDtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZ3JvdXBlZC1jb250ZW50L2Rpc3QvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGZvckVhY2ggbWV0aG9kLCBjb3VsZCBiZSBzaGlwcGVkIGFzIHBhcnQgb2YgYW4gT2JqZWN0IExpdGVyYWwvTW9kdWxlXG5mdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgc2NvcGUpIHtcbiAgdmFyIGluZGV4ID0gMDtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjYWxsYmFjay5jYWxsKHNjb3BlLCBhcnJheVtpbmRleF0sIGluZGV4KTsgLy8gcGFzc2VzIGJhY2sgc3R1ZmYgd2UgbmVlZFxuICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsLCBjbGFzc05hbWUpIHtcbiAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXicgKyBjbGFzc05hbWUgKyAnfCArJyArIGNsYXNzTmFtZSwgJ2cnKTtcblxuICByZXR1cm4gZWwuY2xhc3NOYW1lLm1hdGNoKHJlZ2V4KTtcbn1cblxuZnVuY3Rpb24gYWRkQ2xhc3MoZWwsIGNsYXNzTmFtZSkge1xuICAvLyBSZXR1cm4gaWYgaXQgYWxyZWFkeSBoYXMgdGhlIGNsYXNzTmFtZVxuICBpZiAoaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkpIHJldHVybjtcblxuICBlbC5jbGFzc05hbWUgKz0gJyAnICsgY2xhc3NOYW1lO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDbGFzcyhlbCwgY2xhc3NOYW1lKSB7XG4gIC8vIFJldHVybiBpZiBpdCBkb2Vzbid0IGFscmVhZHkgaGF2ZSB0aGUgY2xhc3NOYW1lXG4gIGlmICghaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkpIHJldHVybjtcblxuICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCdeJyArIGNsYXNzTmFtZSArICd8ICsnICsgY2xhc3NOYW1lLCAnZycpO1xuXG4gIGVsLmNsYXNzTmFtZSA9IGVsLmNsYXNzTmFtZS5yZXBsYWNlKHJlZ2V4LCAnJyk7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGVsLCBjbGFzc05hbWUpIHtcbiAgaWYgKGhhc0NsYXNzKGVsLCBjbGFzc05hbWUpKSB7XG4gICAgcmVtb3ZlQ2xhc3MoZWwsIGNsYXNzTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgYWRkQ2xhc3MoZWwsIGNsYXNzTmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZFBhaXJpbmdGcm9tUGFpcmluZ1RyaWdnZXIocGFpcmluZ3MsIHBhaXJpbmdUcmlnZ2VyKSB7XG4gIHZhciBmb3VuZFBhaXJpbmcgPSBudWxsO1xuXG4gIGZvckVhY2gocGFpcmluZ3MsIGZ1bmN0aW9uIChwYWlyaW5nKSB7XG4gICAgaWYgKHBhaXJpbmcudHJpZ2dlciA9PT0gcGFpcmluZ1RyaWdnZXIpIHtcbiAgICAgIGZvdW5kUGFpcmluZyA9IHBhaXJpbmc7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZm91bmRQYWlyaW5nO1xufVxuXG4vKipcbiAqIFNlZSB7QGxpbmsgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9yZXZpc2lvbnMvMjExNzUyMy8xMSBTdGFjayBPdmVyZmxvd31cbiAqIEFuIFJGQzQxMjIgdjQgY29tcGxpYW50IHV1aWQgc29sdXRpb25cbiAqL1xuZnVuY3Rpb24gdXVpZHY0KCkge1xuICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMDtcbiAgICB2YXIgdiA9IGMgPT09ICd4JyA/IHIgOiByICYgMHgzIHwgMHg4O1xuXG4gICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaW5pdChncm91cGVkQ29udGVudCkge1xuICB2YXIgdHJpZ2dlcnMgPSBncm91cGVkQ29udGVudC50cmlnZ2VycztcbiAgdmFyIHBhaXJpbmdzID0gZ3JvdXBlZENvbnRlbnQucGFpcmluZ3M7XG5cbiAgdHJpZ2dlcnMuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3RhYmxpc3QnKTtcblxuICBmb3JFYWNoKHBhaXJpbmdzLCBmdW5jdGlvbiAocGFpcmluZywgaW5kZXgpIHtcbiAgICBwYWlyaW5nLnRyaWdnZXIuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3RhYicpO1xuICAgIHBhaXJpbmcudHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnLCBncm91cGVkQ29udGVudC5uYW1lc3BhY2UgKyAnLScgKyBncm91cGVkQ29udGVudC5pZCArICctJyArIGluZGV4ICsgJy1jb250ZW50Jyk7XG5cbiAgICBpZiAocGFpcmluZy50cmlnZ2VyLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvckVhY2gocGFpcmluZy50cmlnZ2VyLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsICctMScpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGhhc0NsYXNzKHBhaXJpbmcudHJpZ2dlciwgJ2FjdGl2ZScpKSB7XG4gICAgICBwYWlyaW5nLnRyaWdnZXIuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgIHBhaXJpbmcudHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JywgJzAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFpcmluZy50cmlnZ2VyLnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnLTEnKTtcbiAgICB9XG5cbiAgICBwYWlyaW5nLmNvbnRlbnQuaWQgPSBncm91cGVkQ29udGVudC5uYW1lc3BhY2UgKyAnLScgKyBncm91cGVkQ29udGVudC5pZCArICctJyArIGluZGV4ICsgJy1jb250ZW50JztcbiAgICBwYWlyaW5nLmNvbnRlbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3RhYnBhbmVsJyk7XG5cbiAgICBpZiAoIWhhc0NsYXNzKHBhaXJpbmcuY29udGVudCwgJ2FjdGl2ZScpKSB7XG4gICAgICBwYWlyaW5nLmNvbnRlbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlKGdyb3VwZWRDb250ZW50KSB7XG4gIHZhciBwYWlyaW5ncyA9IGdyb3VwZWRDb250ZW50LnBhaXJpbmdzO1xuXG4gIGZvckVhY2gocGFpcmluZ3MsIGZ1bmN0aW9uIChwYWlyaW5nKSB7XG4gICAgcGFpcmluZy50cmlnZ2VyLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcpO1xuICAgIHBhaXJpbmcuY29udGVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG5cbiAgICBpZiAoaGFzQ2xhc3MocGFpcmluZy50cmlnZ2VyLCAnYWN0aXZlJykpIHtcbiAgICAgIHBhaXJpbmcudHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgcGFpcmluZy50cmlnZ2VyLnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnMCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYWlyaW5nLnRyaWdnZXIuc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsICctMScpO1xuICAgIH1cblxuICAgIGlmICghaGFzQ2xhc3MocGFpcmluZy5jb250ZW50LCAnYWN0aXZlJykpIHtcbiAgICAgIHBhaXJpbmcuY29udGVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgYTExeSA9IHtcbiAgaW5pdDogaW5pdCxcbiAgdXBkYXRlOiB1cGRhdGVcbn07XG5cbnZhciBhc3luY0dlbmVyYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQXdhaXRWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEFzeW5jR2VuZXJhdG9yKGdlbikge1xuICAgIHZhciBmcm9udCwgYmFjaztcblxuICAgIGZ1bmN0aW9uIHNlbmQoa2V5LCBhcmcpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciByZXF1ZXN0ID0ge1xuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIGFyZzogYXJnLFxuICAgICAgICAgIHJlc29sdmU6IHJlc29sdmUsXG4gICAgICAgICAgcmVqZWN0OiByZWplY3QsXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChiYWNrKSB7XG4gICAgICAgICAgYmFjayA9IGJhY2submV4dCA9IHJlcXVlc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnJvbnQgPSBiYWNrID0gcmVxdWVzdDtcbiAgICAgICAgICByZXN1bWUoa2V5LCBhcmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXN1bWUoa2V5LCBhcmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBnZW5ba2V5XShhcmcpO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXdhaXRWYWx1ZSkge1xuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZS52YWx1ZSkudGhlbihmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXN1bWUoXCJuZXh0XCIsIGFyZyk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmVzdW1lKFwidGhyb3dcIiwgYXJnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXR0bGUocmVzdWx0LmRvbmUgPyBcInJldHVyblwiIDogXCJub3JtYWxcIiwgcmVzdWx0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHNldHRsZShcInRocm93XCIsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0dGxlKHR5cGUsIHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcInJldHVyblwiOlxuICAgICAgICAgIGZyb250LnJlc29sdmUoe1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJ0aHJvd1wiOlxuICAgICAgICAgIGZyb250LnJlamVjdCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBmcm9udC5yZXNvbHZlKHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGZyb250ID0gZnJvbnQubmV4dDtcblxuICAgICAgaWYgKGZyb250KSB7XG4gICAgICAgIHJlc3VtZShmcm9udC5rZXksIGZyb250LmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYWNrID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pbnZva2UgPSBzZW5kO1xuXG4gICAgaWYgKHR5cGVvZiBnZW4ucmV0dXJuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMucmV0dXJuID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHtcbiAgICBBc3luY0dlbmVyYXRvci5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgfVxuXG4gIEFzeW5jR2VuZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKGFyZykge1xuICAgIHJldHVybiB0aGlzLl9pbnZva2UoXCJuZXh0XCIsIGFyZyk7XG4gIH07XG5cbiAgQXN5bmNHZW5lcmF0b3IucHJvdG90eXBlLnRocm93ID0gZnVuY3Rpb24gKGFyZykge1xuICAgIHJldHVybiB0aGlzLl9pbnZva2UoXCJ0aHJvd1wiLCBhcmcpO1xuICB9O1xuXG4gIEFzeW5jR2VuZXJhdG9yLnByb3RvdHlwZS5yZXR1cm4gPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludm9rZShcInJldHVyblwiLCBhcmcpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgd3JhcDogZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFzeW5jR2VuZXJhdG9yKGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICAgICAgfTtcbiAgICB9LFxuICAgIGF3YWl0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBuZXcgQXdhaXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9O1xufSgpO1xuXG5cblxuXG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cbi8qKiBBIGNsYXNzIGZvciBjcmVhdGluZywgbWFuYWdpbmcsIGFuZCBkZXN0cm95aW5nIGdyb3VwYWJsZSBjb250ZW50IGFzIHRhYnMuICovXG5cbnZhciBUYWJzTGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUYWJzTGF5b3V0KGdyb3VwZWRDb250ZW50KSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgVGFic0xheW91dCk7XG5cbiAgICB0aGlzLmdyb3VwZWRDb250ZW50ID0gZ3JvdXBlZENvbnRlbnQ7XG4gICAgdGhpcy5wYWlyaW5ncyA9IGdyb3VwZWRDb250ZW50LnBhaXJpbmdzO1xuICAgIHRoaXMuZXZlbnRzID0gW107XG5cbiAgICB0aGlzLl9oYW5kbGVLZXlkb3duID0gdGhpcy5faGFuZGxlS2V5ZG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2hhbmRsZUNsaWNrID0gdGhpcy5faGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcblxuICAgIHRoaXMuX2luaXQoKTtcbiAgICBhMTF5LmluaXQodGhpcy5ncm91cGVkQ29udGVudCk7XG4gIH1cblxuICBjcmVhdGVDbGFzcyhUYWJzTGF5b3V0LCBbe1xuICAgIGtleTogJ3VubG9hZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVubG9hZCgpIHtcbiAgICAgIGZvckVhY2godGhpcy5ldmVudHMsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBldmVudC50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQudHlwZSwgZXZlbnQuZm4pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2luaXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdCgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBleGlzdGluZ0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICBmb3JFYWNoKHRoaXMucGFpcmluZ3MsIGZ1bmN0aW9uIChwYWlyaW5nKSB7XG4gICAgICAgIHZhciB0cmlnZ2VyID0gcGFpcmluZy50cmlnZ2VyO1xuXG4gICAgICAgIGlmIChoYXNDbGFzcyh0cmlnZ2VyLCAnYWN0aXZlJykpIHtcbiAgICAgICAgICBleGlzdGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBfdGhpcy5faGFuZGxlS2V5ZG93bik7XG4gICAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBfdGhpcy5faGFuZGxlQ2xpY2spO1xuXG4gICAgICAgIF90aGlzLmV2ZW50cy5wdXNoKHtcbiAgICAgICAgICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICAgICAgICAgIHR5cGU6ICdrZXlkb3duJyxcbiAgICAgICAgICBmbjogX3RoaXMuX2hhbmRsZUtleWRvd25cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX3RoaXMuZXZlbnRzLnB1c2goe1xuICAgICAgICAgIHRyaWdnZXI6IHRyaWdnZXIsXG4gICAgICAgICAgdHlwZTogJ2NsaWNrJyxcbiAgICAgICAgICBmbjogX3RoaXMuX2hhbmRsZUNsaWNrXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghZXhpc3RpbmdBY3RpdmUpIHtcbiAgICAgICAgYWRkQ2xhc3ModGhpcy5wYWlyaW5nc1swXS50cmlnZ2VyLCAnYWN0aXZlJyk7XG4gICAgICAgIGFkZENsYXNzKHRoaXMucGFpcmluZ3NbMF0uY29udGVudCwgJ2FjdGl2ZScpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19oYW5kbGVLZXlkb3duJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICAgIHZhciB0cmlnZ2VyID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHZhciBwYWlyaW5nID0gZmluZFBhaXJpbmdGcm9tUGFpcmluZ1RyaWdnZXIodGhpcy5wYWlyaW5ncywgdHJpZ2dlcik7XG4gICAgICB2YXIgcGFpcmluZ0luZGV4ID0gdGhpcy5wYWlyaW5ncy5pbmRleE9mKHBhaXJpbmcpO1xuICAgICAgdmFyIHByZXZJbmRleCA9IHBhaXJpbmdJbmRleCAtIDEgPCAwID8gdGhpcy5wYWlyaW5ncy5sZW5ndGggLSAxIDogcGFpcmluZ0luZGV4IC0gMTtcbiAgICAgIHZhciBuZXh0SW5kZXggPSBwYWlyaW5nSW5kZXggKyAxID49IHRoaXMucGFpcmluZ3MubGVuZ3RoID8gMCA6IHBhaXJpbmdJbmRleCArIDE7XG5cbiAgICAgIHZhciBuZXh0UGFpcmluZyA9IG51bGw7XG5cbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgICAgbmV4dFBhaXJpbmcgPSB0aGlzLnBhaXJpbmdzW3ByZXZJbmRleF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgIG5leHRQYWlyaW5nID0gdGhpcy5wYWlyaW5nc1tuZXh0SW5kZXhdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG5leHRQYWlyaW5nID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gRmFzdCBleGl0IGlmIHdlIGNhbid0IGZpbmQgdGhlIHRhYiBvciB0YWJzXG4gICAgICBpZiAobmV4dFBhaXJpbmcgPT09IG51bGwpIHJldHVybjtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgZm9yRWFjaCh0aGlzLnBhaXJpbmdzLCBmdW5jdGlvbiAoaW5hY3RpdmVQYWlyaW5nKSB7XG4gICAgICAgIHJlbW92ZUNsYXNzKGluYWN0aXZlUGFpcmluZy50cmlnZ2VyLCAnYWN0aXZlJyk7XG4gICAgICAgIHJlbW92ZUNsYXNzKGluYWN0aXZlUGFpcmluZy5jb250ZW50LCAnYWN0aXZlJyk7XG4gICAgICB9KTtcblxuICAgICAgYWRkQ2xhc3MobmV4dFBhaXJpbmcudHJpZ2dlciwgJ2FjdGl2ZScpO1xuICAgICAgYWRkQ2xhc3MobmV4dFBhaXJpbmcuY29udGVudCwgJ2FjdGl2ZScpO1xuXG4gICAgICBuZXh0UGFpcmluZy50cmlnZ2VyLmZvY3VzKCk7XG5cbiAgICAgIGExMXkudXBkYXRlKHRoaXMuZ3JvdXBlZENvbnRlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19oYW5kbGVDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9oYW5kbGVDbGljayhldmVudCkge1xuICAgICAgdmFyIHRyaWdnZXIgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdmFyIHBhaXJpbmcgPSBmaW5kUGFpcmluZ0Zyb21QYWlyaW5nVHJpZ2dlcih0aGlzLnBhaXJpbmdzLCB0cmlnZ2VyKTtcblxuICAgICAgLy8gRmFzdCBleGl0IGlmIHdlIGNhbid0IGZpbmQgdGhlIHRhYiBvciB0YWJzXG4gICAgICBpZiAocGFpcmluZyA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBmb3JFYWNoKHRoaXMucGFpcmluZ3MsIGZ1bmN0aW9uIChpbmFjdGl2ZVBhaXJpbmcpIHtcbiAgICAgICAgcmVtb3ZlQ2xhc3MoaW5hY3RpdmVQYWlyaW5nLnRyaWdnZXIsICdhY3RpdmUnKTtcbiAgICAgICAgcmVtb3ZlQ2xhc3MoaW5hY3RpdmVQYWlyaW5nLmNvbnRlbnQsICdhY3RpdmUnKTtcbiAgICAgIH0pO1xuXG4gICAgICBhZGRDbGFzcyhwYWlyaW5nLnRyaWdnZXIsICdhY3RpdmUnKTtcbiAgICAgIGFkZENsYXNzKHBhaXJpbmcuY29udGVudCwgJ2FjdGl2ZScpO1xuXG4gICAgICBhMTF5LnVwZGF0ZSh0aGlzLmdyb3VwZWRDb250ZW50KTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFRhYnNMYXlvdXQ7XG59KCk7XG5cbmZ1bmN0aW9uIGluaXQkMShncm91cGVkQ29udGVudCkge1xuICB2YXIgcGFpcmluZ3MgPSBncm91cGVkQ29udGVudC5wYWlyaW5ncztcblxuICBmb3JFYWNoKHBhaXJpbmdzLCBmdW5jdGlvbiAocGFpcmluZywgaW5kZXgpIHtcbiAgICBwYWlyaW5nLnRyaWdnZXIuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2J1dHRvbicpO1xuICAgIHBhaXJpbmcudHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnLCBncm91cGVkQ29udGVudC5uYW1lc3BhY2UgKyAnLScgKyBncm91cGVkQ29udGVudC5pZCArICctJyArIGluZGV4ICsgJy1jb250ZW50Jyk7XG4gICAgcGFpcmluZy50cmlnZ2VyLnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnMCcpO1xuXG4gICAgaWYgKHBhaXJpbmcudHJpZ2dlci5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBmb3JFYWNoKHBhaXJpbmcudHJpZ2dlci5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnLTEnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChoYXNDbGFzcyhwYWlyaW5nLnRyaWdnZXIsICdhY3RpdmUnKSkge1xuICAgICAgcGFpcmluZy50cmlnZ2VyLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhaXJpbmcudHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICB9XG5cbiAgICBwYWlyaW5nLmNvbnRlbnQuaWQgPSBncm91cGVkQ29udGVudC5uYW1lc3BhY2UgKyAnLScgKyBncm91cGVkQ29udGVudC5pZCArICctJyArIGluZGV4ICsgJy1jb250ZW50JztcblxuICAgIGlmICghaGFzQ2xhc3MocGFpcmluZy5jb250ZW50LCAnYWN0aXZlJykpIHtcbiAgICAgIHBhaXJpbmcuY29udGVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1cGRhdGUkMShncm91cGVkQ29udGVudCkge1xuICB2YXIgcGFpcmluZ3MgPSBncm91cGVkQ29udGVudC5wYWlyaW5ncztcblxuICBmb3JFYWNoKHBhaXJpbmdzLCBmdW5jdGlvbiAocGFpcmluZykge1xuICAgIHBhaXJpbmcuY29udGVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG5cbiAgICBpZiAoaGFzQ2xhc3MocGFpcmluZy50cmlnZ2VyLCAnYWN0aXZlJykpIHtcbiAgICAgIHBhaXJpbmcudHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYWlyaW5nLnRyaWdnZXIuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgfVxuXG4gICAgaWYgKCFoYXNDbGFzcyhwYWlyaW5nLmNvbnRlbnQsICdhY3RpdmUnKSkge1xuICAgICAgcGFpcmluZy5jb250ZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBhMTF5JDEgPSB7XG4gIGluaXQ6IGluaXQkMSxcbiAgdXBkYXRlOiB1cGRhdGUkMVxufTtcblxuLyoqIEEgY2xhc3MgZm9yIGNyZWF0aW5nLCBtYW5hZ2luZywgYW5kIGRlc3Ryb3lpbmcgZ3JvdXBhYmxlIGNvbnRlbnQgYXMgYW4gYWNjb3JkaW9uLiAqL1xuXG52YXIgQWNjb3JkaW9uTGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBBY2NvcmRpb25MYXlvdXQoZ3JvdXBlZENvbnRlbnQpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBBY2NvcmRpb25MYXlvdXQpO1xuXG4gICAgdGhpcy5ncm91cGVkQ29udGVudCA9IGdyb3VwZWRDb250ZW50O1xuICAgIHRoaXMucGFpcmluZ3MgPSBncm91cGVkQ29udGVudC5wYWlyaW5ncztcbiAgICB0aGlzLmV2ZW50cyA9IFtdO1xuXG4gICAgdGhpcy5faGFuZGxlS2V5ZG93biA9IHRoaXMuX2hhbmRsZUtleWRvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLl9oYW5kbGVDbGljayA9IHRoaXMuX2hhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLl9pbml0KHRoaXMucGFpcmluZ3MpO1xuICAgIGExMXkkMS5pbml0KHRoaXMuZ3JvdXBlZENvbnRlbnQpO1xuICB9XG5cbiAgY3JlYXRlQ2xhc3MoQWNjb3JkaW9uTGF5b3V0LCBbe1xuICAgIGtleTogJ3VubG9hZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVubG9hZCgpIHtcbiAgICAgIGZvckVhY2godGhpcy5ldmVudHMsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBldmVudC50cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQudHlwZSwgZXZlbnQuZm4pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2luaXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdCgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGZvckVhY2godGhpcy5wYWlyaW5ncywgZnVuY3Rpb24gKHBhaXJpbmcpIHtcbiAgICAgICAgdmFyIHRyaWdnZXIgPSBwYWlyaW5nLnRyaWdnZXI7XG4gICAgICAgIHZhciBjb250ZW50ID0gcGFpcmluZy5jb250ZW50O1xuXG4gICAgICAgIHRyaWdnZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY29udGVudCwgdHJpZ2dlci5uZXh0U2libGluZyk7XG5cbiAgICAgICAgdHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgX3RoaXMuX2hhbmRsZUtleWRvd24pO1xuICAgICAgICB0cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgX3RoaXMuX2hhbmRsZUNsaWNrKTtcblxuICAgICAgICBfdGhpcy5ldmVudHMucHVzaCh7XG4gICAgICAgICAgdHJpZ2dlcjogdHJpZ2dlcixcbiAgICAgICAgICB0eXBlOiAna2V5ZG93bicsXG4gICAgICAgICAgZm46IF90aGlzLl9oYW5kbGVLZXlkb3duXG4gICAgICAgIH0pO1xuXG4gICAgICAgIF90aGlzLmV2ZW50cy5wdXNoKHtcbiAgICAgICAgICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICAgICAgICAgIHR5cGU6ICdjbGljaycsXG4gICAgICAgICAgZm46IF90aGlzLl9oYW5kbGVDbGlja1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmdyb3VwZWRDb250ZW50LmNvbnRlbnRzLnJlbW92ZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19oYW5kbGVLZXlkb3duJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICAgIHZhciB0cmlnZ2VyID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHZhciBwYWlyaW5nID0gZmluZFBhaXJpbmdGcm9tUGFpcmluZ1RyaWdnZXIodGhpcy5wYWlyaW5ncywgdHJpZ2dlcik7XG5cbiAgICAgIC8vIEZhc3QgZXhpdCBpZiBlbnRlciBpc24ndCBwcmVzc2VkIG9yIHdlIGNhbid0IGZpbmQgdGhlIGdyb3VwXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInIHx8IHBhaXJpbmcgPT09IG51bGwpIHJldHVybjtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgdG9nZ2xlQ2xhc3MocGFpcmluZy50cmlnZ2VyLCAnYWN0aXZlJyk7XG4gICAgICB0b2dnbGVDbGFzcyhwYWlyaW5nLmNvbnRlbnQsICdhY3RpdmUnKTtcbiAgICAgIGExMXkkMS51cGRhdGUodGhpcy5ncm91cGVkQ29udGVudCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2hhbmRsZUNsaWNrJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICB2YXIgdHJpZ2dlciA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB2YXIgcGFpcmluZyA9IGZpbmRQYWlyaW5nRnJvbVBhaXJpbmdUcmlnZ2VyKHRoaXMucGFpcmluZ3MsIHRyaWdnZXIpO1xuXG4gICAgICAvLyBGYXN0IGV4aXQgaWYgd2UgY2FuJ3QgZmluZCB0aGUgZ3JvdXBcbiAgICAgIGlmIChwYWlyaW5nID09PSBudWxsKSByZXR1cm47XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIHRvZ2dsZUNsYXNzKHBhaXJpbmcudHJpZ2dlciwgJ2FjdGl2ZScpO1xuICAgICAgdG9nZ2xlQ2xhc3MocGFpcmluZy5jb250ZW50LCAnYWN0aXZlJyk7XG4gICAgICBhMTF5JDEudXBkYXRlKHRoaXMuZ3JvdXBlZENvbnRlbnQpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQWNjb3JkaW9uTGF5b3V0O1xufSgpO1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2Ygbm9kZXMgcmVsYXRlZCB0byB0aGUgaGVhZGluZyBub2RlLlxuICogQHBhcmFtIHtub2RlfSBoZWFkaW5nIC0gVGhlIGhlYWRpbmcgbm9kZSB0byBzZWFyY2ggZm9yIGNvbnRlbnQgZnJvbS5cbiAqIEByZXR1cm5zIHtub2RlW119XG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRpbmdDb250ZW50KGhlYWRpbmcpIHtcbiAgdmFyIGhlYWRpbmdUYWdOYW1lcyA9IFsnSDEnLCAnSDInLCAnSDMnLCAnSDQnLCAnSDUnLCAnSDYnXTtcbiAgdmFyIHRhZ05hbWVJbmRleCA9IGhlYWRpbmdUYWdOYW1lcy5pbmRleE9mKGhlYWRpbmcudGFnTmFtZSk7XG4gIHZhciBjb250ZW50ID0gW107XG5cbiAgdmFyIHNpYmxpbmcgPSBoZWFkaW5nLm5leHRFbGVtZW50U2libGluZztcblxuICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCAmJiAoaGVhZGluZ1RhZ05hbWVzLmluZGV4T2Yoc2libGluZy50YWdOYW1lKSA9PT0gLTEgfHwgaGVhZGluZ1RhZ05hbWVzLmluZGV4T2Yoc2libGluZy50YWdOYW1lKSA+IHRhZ05hbWVJbmRleCkpIHtcbiAgICBjb250ZW50LnB1c2goc2libGluZyk7XG5cbiAgICBzaWJsaW5nID0gc2libGluZy5uZXh0RWxlbWVudFNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCBhcnJheSByZXByZXNlbnRpbmcgdGhlIGhlYWRpbmcgdHJlZSBmcm9tIGEgZ2l2ZW4gbm9kZS5cbiAqIFJvb3Qgbm9kZXMgYXJlIGV2YWx1YXRlZCBkaWZmZXJlbnRseSwgYW5kIHJlcXVpcmVzIHRoZSBldmFsdWF0aW5nUm9vdCBmbGFnXG4gKiB0byBiZSB0cnVlLlxuICogQHBhcmFtIHtub2RlfSBlbCAtIFRoZSBub2RlIGJlaW5nIGV2YWx1YXRlZC5cbiAqIEBwYXJhbSB7bm9kZVtdfSBjaGlsZHJlbiAtIFRoZSBjaGlsZHJlbiBvZiB0aGUgZXZhbHVhdGVkIG5vZGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtldmFsdWF0aW5nUm9vdF0gLSBXaGV0aGVyIHRvIGV2YWx1YXRlIGFzIHJvb3Qgbm9kZS5cbiAqIEByZXR1cm5zIHtPYmplY3RbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0SGVhZGluZ1RyZWUoZWwsIGNoaWxkcmVuKSB7XG4gIHZhciBldmFsdWF0aW5nUm9vdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG5cbiAgdmFyIGhlYWRpbmdUYWdOYW1lcyA9IFsnSDEnLCAnSDInLCAnSDMnLCAnSDQnLCAnSDUnLCAnSDYnXTtcbiAgdmFyIHRhZ05hbWVJbmRleCA9IGhlYWRpbmdUYWdOYW1lcy5pbmRleE9mKGVsLnRhZ05hbWUpO1xuICB2YXIgaGVhZGluZ3MgPSBbXTtcblxuICB2YXIgY3VycmVudExvd2VzdFRhZ05hbWVJbmRleCA9IDU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIHZhciBjaGlsZFRhZ05hbWVJbmRleCA9IGhlYWRpbmdUYWdOYW1lcy5pbmRleE9mKGNoaWxkLnRhZ05hbWUpO1xuXG4gICAgaWYgKGNoaWxkVGFnTmFtZUluZGV4ICE9PSAtMSAmJiBjaGlsZFRhZ05hbWVJbmRleCA8IGN1cnJlbnRMb3dlc3RUYWdOYW1lSW5kZXgpIHtcbiAgICAgIGN1cnJlbnRMb3dlc3RUYWdOYW1lSW5kZXggPSBjaGlsZFRhZ05hbWVJbmRleDtcbiAgICB9XG5cbiAgICBpZiAoZXZhbHVhdGluZ1Jvb3QgJiYgY2hpbGRUYWdOYW1lSW5kZXggIT09IC0xICYmIGNoaWxkVGFnTmFtZUluZGV4IDw9IGN1cnJlbnRMb3dlc3RUYWdOYW1lSW5kZXggfHwgIWV2YWx1YXRpbmdSb290ICYmIGNoaWxkVGFnTmFtZUluZGV4ICE9PSAtMSAmJiBjaGlsZFRhZ05hbWVJbmRleCA9PT0gdGFnTmFtZUluZGV4ICsgMSkge1xuICAgICAgdmFyIHNpYmxpbmdzID0gZ2V0SGVhZGluZ0NvbnRlbnQoY2hpbGQpO1xuXG4gICAgICB2YXIgY2hpbGROb2RlID0ge1xuICAgICAgICBlbDogY2hpbGQsXG4gICAgICAgIGNvbnRlbnQ6IHNpYmxpbmdzLFxuICAgICAgICBjaGlsZHJlbjogZ2V0SGVhZGluZ1RyZWUoY2hpbGQsIHNpYmxpbmdzKVxuICAgICAgfTtcblxuICAgICAgaGVhZGluZ3MucHVzaChjaGlsZE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoZWFkaW5ncztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGdyb3VwaW5ncyBvZiBoZWFkaW5ncyB0aGF0IG1lZXQgdGhlIG1pbmltdW0gc2VxdWVuY2UgdmFsdWVcbiAqIGFuZCBkb24ndCBjb250YWluIGFueSBpbnZhbGlkIGhlYWRpbmdzLlxuICogQHBhcmFtIHtPYmplY3RbXX0gaGVhZGluZ3MgLSBBbiBhcnJheSBvZiBoZWFkaW5nIG9iamVjdHMuXG4gKiBAcGFyYW0ge2ludFtdfSBpbnZhbGlkSGVhZGluZ3MgLSBBbiBhcnJheSBvZiBpbnZhbGlkIGhlYWRpbmcgaW50ZWdlcnMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByZXNlbnRpbmcgaW5kZXhlcyBvZiBoZWFkaW5ncy5cbiAqIEBwYXJhbSB7Kn0gbWluSW5TZXF1ZW5jZSAtIE1pbmltdW0gaGVhZGluZ3MgaW4gc2VxdWVuY2UgYmVmb3JlIGJlaW5nIGNvbnNpZGVyZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgZ3JvdXBpbmcuXG4gKiBAcmV0dXJucyB7T2JqZWN0W11bXX1cbiAqL1xuZnVuY3Rpb24gZ2V0SGVhZGluZ0dyb3Vwc0luU2VxdWVuY2UoaGVhZGluZ3MsIGludmFsaWRIZWFkaW5ncywgbWluSW5TZXF1ZW5jZSkge1xuICB2YXIgaGVhZGluZ0dyb3Vwc0luU2VxdWVuY2UgPSBbXTtcbiAgdmFyIGN1cnJlbnRIZWFkaW5nR3JvdXBJblNlcXVlbmNlID0gW107XG4gIHZhciBjdXJyZW50U2VxdWVuY2UgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGluZ3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoaW52YWxpZEhlYWRpbmdzLmluZGV4T2YoaSkgPT09IC0xKSB7XG4gICAgICBjdXJyZW50SGVhZGluZ0dyb3VwSW5TZXF1ZW5jZS5wdXNoKGhlYWRpbmdzW2ldKTtcbiAgICAgIGN1cnJlbnRTZXF1ZW5jZSArPSAxO1xuXG4gICAgICBpZiAoaSAhPT0gaGVhZGluZ3MubGVuZ3RoIC0gMSAmJiBoZWFkaW5nc1tpXS5lbC50YWdOYW1lICE9PSBoZWFkaW5nc1tpICsgMV0uZWwudGFnTmFtZSAmJiBpbnZhbGlkSGVhZGluZ3MuaW5kZXhPZihpICsgMSkpIHtcbiAgICAgICAgY3VycmVudEhlYWRpbmdHcm91cEluU2VxdWVuY2UgPSBbXTtcbiAgICAgICAgY3VycmVudFNlcXVlbmNlID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoaSAhPT0gMCAmJiBoZWFkaW5nc1tpXS5lbC50YWdOYW1lICE9PSBoZWFkaW5nc1tpIC0gMV0uZWwudGFnTmFtZSkge1xuICAgICAgICBjdXJyZW50SGVhZGluZ0dyb3VwSW5TZXF1ZW5jZS5wb3AoKTtcbiAgICAgICAgY3VycmVudFNlcXVlbmNlIC09IDE7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRTZXF1ZW5jZSA+PSBtaW5JblNlcXVlbmNlKSB7XG4gICAgICAgICAgaGVhZGluZ0dyb3Vwc0luU2VxdWVuY2UucHVzaChjdXJyZW50SGVhZGluZ0dyb3VwSW5TZXF1ZW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50SGVhZGluZ0dyb3VwSW5TZXF1ZW5jZSA9IFtoZWFkaW5nc1tpXV07XG4gICAgICAgIGN1cnJlbnRTZXF1ZW5jZSA9IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnRTZXF1ZW5jZSA+PSBtaW5JblNlcXVlbmNlKSB7XG4gICAgaGVhZGluZ0dyb3Vwc0luU2VxdWVuY2UucHVzaChjdXJyZW50SGVhZGluZ0dyb3VwSW5TZXF1ZW5jZSk7XG4gIH1cblxuICByZXR1cm4gaGVhZGluZ0dyb3Vwc0luU2VxdWVuY2U7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIG5lY2Vzc2FyeSBET00gZWxlbWVudHMgdG8gZ3JvdXAgcmVsYXRlZCBjb250ZW50LlxuICogUmV0dXJucyBhIG9iamVjdCBhcnJheSByZXByZXNlbnRpbmcgdGhlIGdyb3VwZWQgY29udGVudC5cbiAqIEBwYXJhbSB7T2JqZWN0W119IGNoaWxkcmVuIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3RbXX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlR3JvdXBlZENvbnRlbnQoY2hpbGRyZW4pIHtcbiAgdmFyIHBhaXJpbmdzID0gW107XG5cbiAgdmFyIGZpcnN0Q2hpbGQgPSBjaGlsZHJlblswXS5lbDtcbiAgdmFyIHRyaWdnZXJzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHZhciBjb250ZW50cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gIGNvbnRlbnRzID0gZmlyc3RDaGlsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjb250ZW50cywgZmlyc3RDaGlsZC5uZXh0U2libGluZyk7XG4gIHRyaWdnZXJzID0gZmlyc3RDaGlsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0cmlnZ2VycywgZmlyc3RDaGlsZC5uZXh0U2libGluZyk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIHZhciB0cmlnZ2VyID0gY2hpbGQuZWw7XG4gICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgIHRyaWdnZXIgPSB0cmlnZ2Vycy5hcHBlbmRDaGlsZCh0cmlnZ2VyKTtcbiAgICBjb250ZW50ID0gY29udGVudHMuYXBwZW5kQ2hpbGQoY29udGVudCk7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkLmNvbnRlbnQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoY2hpbGQuY29udGVudFtqXSk7XG4gICAgfVxuXG4gICAgcGFpcmluZ3MucHVzaCh7XG4gICAgICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICAgICAgY29udGVudDogY29udGVudFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0cmlnZ2VyczogdHJpZ2dlcnMsXG4gICAgY29udGVudHM6IGNvbnRlbnRzLFxuICAgIHBhaXJpbmdzOiBwYWlyaW5nc1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGdyb3VwYWJsZSBjb250ZW50IHdpdGhpbiB0aGUgc3VwcGxpZWQgbm9kZS5cbiAqIEBwYXJhbSB7bm9kZX0gbm9kZSAtIEEgbm9kZSB0byB0cmF2ZXJzZSBmb3IgZ3JvdXBhYmxlIGNvbnRlbnQuXG4gKiBAcmV0dXJucyB7T2JqZWN0W11bXX1cbiAqL1xuLypcbiAqIFJlY3Vyc2l2ZSBmdW5jdGlvbjpcbiAqICBSZXR1cm5zIGFsbCBncm91cHMgb2YgaGVhZGluZ3MgdGhhdFxuICogIGFyZSBlbGVnaWJsZSB0byBiZWNvbWUgZ3JvdXBlZCBjb250ZW50LlxuICovXG5mdW5jdGlvbiBnZXRHcm91cGVkQ29udGVudFNldChub2RlKSB7XG4gIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gIHZhciBjaGlsZHJlbldpdGhHcm91cGFibGVDb250ZW50ID0gW107XG4gIHZhciBncm91cGVkQ29udGVudFNldCA9IFtdO1xuXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGNoaWxkR3JvdXBhYmxlQ29udGVudCA9IGdldEdyb3VwZWRDb250ZW50U2V0KGNoaWxkcmVuW2ldKTtcblxuICAgIGlmIChjaGlsZEdyb3VwYWJsZUNvbnRlbnQubGVuZ3RoID4gMCkge1xuICAgICAgY2hpbGRyZW5XaXRoR3JvdXBhYmxlQ29udGVudC5wdXNoKGkpO1xuICAgICAgZ3JvdXBlZENvbnRlbnRTZXQgPSBncm91cGVkQ29udGVudFNldC5jb25jYXQoY2hpbGRHcm91cGFibGVDb250ZW50KTtcbiAgICB9XG4gIH1cblxuICB2YXIgaGVhZGluZ0dyb3Vwc0luU2VxdWVuY2UgPSBnZXRIZWFkaW5nR3JvdXBzSW5TZXF1ZW5jZShjaGlsZHJlbiwgY2hpbGRyZW5XaXRoR3JvdXBhYmxlQ29udGVudCwgMyk7XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGhlYWRpbmdHcm91cHNJblNlcXVlbmNlLmxlbmd0aDsgX2kgKz0gMSkge1xuICAgIGdyb3VwZWRDb250ZW50U2V0LnB1c2goY3JlYXRlR3JvdXBlZENvbnRlbnQoaGVhZGluZ0dyb3Vwc0luU2VxdWVuY2VbX2ldKSk7XG4gIH1cblxuICByZXR1cm4gZ3JvdXBlZENvbnRlbnRTZXQ7XG59XG5cbi8qKlxuICogV2hlbiBzdGF0aWMgcGFyc2luZyBpc24ndCBlbm91Z2gsIHRoZXJlJ3MgaW50ZWxsaXBhcnNl4oSiIVxuICogU2VhcmNoZXMgdGhyb3VnaCBkb20gY29udGVudCB0byBmaW5kIGhlYWRpbmcgZ3JvdXBpbmdzIHRoYXRcbiAqIGFyZSBlbGVnaWJsZSB0byBiZWNvbWUgdGFiIGdyb3Vwcy5cbiAqIEFzc3VtZXMgdGhhdCBjb250ZW50IGlzIGluIGEgZmxhdHRlbmVkIGhpZXJhcmNoeSBpbiB0aGUgZG9tXG4gKiBhbmQgaW50ZXJwcmV0cyBpbmNyZWFzaW5nIGhlYWRpbmcgdmFsdWVzIGFzIGEgZGVlcGVyIGxldmVsIG9mIG5lc3RpbmcuXG4gKiBSZXR1cm5zIGFsbCBncm91cGFibGUgY29udGVudCBhcyBhbiBhcnJheSBvZiBvYmplY3QgYXJyYXlzLlxuICogQHBhcmFtIHtub2RlfSBlbCAtIFRoZSBub2RlIHdobydzIGNvbnRlbnQgd2lsbCBiZSBzZWFyY2hlZCBmb3IgZ3JvdXBhYmxlIGNvbnRlbnQuXG4gKiBAcmV0dXJucyB7T2JqZWN0W11bXX1cbiAqL1xuZnVuY3Rpb24gaW50ZWxsaVBhcnNlKGVsKSB7XG4gIHZhciBjaGlsZHJlbiA9IGVsLmNoaWxkcmVuO1xuICB2YXIgaGVhZGluZyA9IGVsLnF1ZXJ5U2VsZWN0b3IoJ2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYnKTtcblxuICAvLyBGYXN0IHJldHVybiBpZiB0aGVyZSdzIG5vIGhlYWRpbmdzXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICB2YXIgcm9vdE5vZGUgPSB7XG4gICAgZWw6IGVsLFxuICAgIGNvbnRlbnQ6IG51bGwsXG4gICAgY2hpbGRyZW46IGdldEhlYWRpbmdUcmVlKGhlYWRpbmcsIGNoaWxkcmVuLCB0cnVlKVxuICB9O1xuXG4gIHJldHVybiBnZXRHcm91cGVkQ29udGVudFNldChyb290Tm9kZSk7XG59XG5cbi8qKlxuICogUGFyc2VzIGNvbnRlbnQgZnJvbSBhIGdpdmVuIG5vZGUgYmFzZWQgb24gYSBzdGF0aWMgc3RydWN0dXJlLlxuICogVGhlIHN0cnVjdHVyZSBpcyBhcyBmb2xsb3dzOlxuICogPHVsIGNsYXNzPVwidGFic1wiPlxuICogICA8bGkgY2xhc3M9XCJhY3RpdmVcIj5UYWIgMTwvbGk+XG4gKiAgIDxsaT5UYWIgMjwvbGk+XG4gKiAgIDxsaT5UYWIgMzwvbGk+XG4gKiA8L3VsPlxuICpcbiAqIDx1bCBjbGFzcz1cInRhYnMtY29udGVudFwiPlxuICogICA8bGkgY2xhc3M9XCJhY3RpdmVcIj5cbiAqICAgICA8cD5UYWIgMSBjb250ZW50IGdvZXMgaGVyZS48L3A+XG4gKiAgIDwvbGk+XG4gKiAgIDxsaT5cbiAqICAgICA8cD5UYWIgMiBjb250ZW50IGdvZXMgaGVyZS48L3A+XG4gKiAgIDwvbGk+XG4gKiAgIDxsaT5cbiAqICAgICA8cD5UYWIgMyBjb250ZW50IGdvZXMgaGVyZS48L3A+XG4gKiAgIDwvbGk+XG4gKiA8L3VsPlxuICogUmV0dXJucyBhbGwgZ3JvdXBhYmxlIGNvbnRlbnQgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0IGFycmF5cy5cbiAqIEBwYXJhbSB7bm9kZX0gZWwgLSBUaGUgbm9kZSB3aG8ncyBjb250ZW50IHdpbGwgYmUgc2VhcmNoZWQgZm9yIGdyb3VwYWJsZSBjb250ZW50LlxuICogQHJldHVybnMge09iamVjdFtdW119XG4gKi9cbmZ1bmN0aW9uIHN0YXRpY1BhcnNlKGVsKSB7XG4gIHZhciBncm91cGVkQ29udGVudFNldCA9IFtdO1xuXG4gIHZhciB0YWJzID0gZWwucXVlcnlTZWxlY3RvckFsbCgnLnRhYnMnKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgdHJpZ2dlcnMgPSB0YWJzW2ldLmNoaWxkcmVuO1xuICAgIHZhciBjb250ZW50cyA9IHRhYnNbaV0ubmV4dEVsZW1lbnRTaWJsaW5nLmNoaWxkcmVuO1xuXG4gICAgLy8gT25seSBhZGQgYSB0YWIgZ3JvdXAgaWYgZXF1YWwgdHJpZ2dlcnMgdG8gY29udGVudHNcbiAgICBpZiAodHJpZ2dlcnMubGVuZ3RoID09PSBjb250ZW50cy5sZW5ndGgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBncm91cGVkQ29udGVudFNldC5wdXNoKHtcbiAgICAgICAgdHJpZ2dlcnM6IHRhYnNbaV0sXG4gICAgICAgIGNvbnRlbnRzOiB0YWJzW2ldLm5leHRFbGVtZW50U2libGluZyxcbiAgICAgICAgcGFpcmluZ3M6IFtdXG4gICAgICB9KTtcbiAgICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdHJpZ2dlcnMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdmFyIHRyaWdnZXIgPSB0cmlnZ2Vyc1tqXTtcbiAgICAgICAgdmFyIGNvbnRlbnQgPSBjb250ZW50c1tqXTtcblxuICAgICAgICB2YXIgcGFpcmluZyA9IHtcbiAgICAgICAgICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICAgICAgfTtcblxuICAgICAgICBncm91cGVkQ29udGVudFNldFtpbmRleF0ucGFpcmluZ3MucHVzaChwYWlyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ3JvdXBlZENvbnRlbnRTZXQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ3JvdXBhYmxlIGNvbnRlbnQgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0IGFycmF5cy5cbiAqIEBwYXJhbSB7bm9kZX0gY29udGVudCAtIFRoZSBub2RlIHRvIHBhcnNlIGZvciBncm91cGFibGUgY29udGVudC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW50ZWxsaXBhcnNlIC0gV2hldGhlciB0byB1c2UgaW50ZWxsaWdlbnQgcGFyc2luZy5cbiAqIEByZXR1cm5zIHtPYmplY3RbXVtdfVxuICovXG5mdW5jdGlvbiBwYXJzZShjb250ZW50KSB7XG4gIHZhciBpbnRlbGxpcGFyc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gIHZhciBncm91cGVkQ29udGVudFNldCA9IGludGVsbGlwYXJzZSA/IGludGVsbGlQYXJzZShjb250ZW50KSA6IHN0YXRpY1BhcnNlKGNvbnRlbnQpO1xuXG4gIHJldHVybiBncm91cGVkQ29udGVudFNldDtcbn1cblxuLyoqIEEgY2xhc3MgZm9yIGNyZWF0aW5nLCBtYW5hZ2luZywgYW5kIGRlc3Ryb3lpbmcgZ3JvdXBhYmxlIGNvbnRlbnQuICovXG5cbnZhciBHcm91cGVkQ29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBncm91cGVkIGNvbnRlbnRcbiAgICogQHBhcmFtIHtub2RlfSBlbCAtIFRoZSBlbGVtZW50IHRvIHNlYXJjaCBmb3IgZ3JvdXBhYmxlIGNvbnRlbnQgaW4uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgW29wdGlvbnNdIC0gQWRkaXRpb25hbCBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgW29wdGlvbnMubGF5b3V0XSAtIFRoZSBsYXlvdXQgdG8gZGlzcGxheSBncm91cGFibGUgY29udGVudCBpbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5pbnRlbGxpcGFyc2VdIC0gVGhlIHBhcnNpbmcgYWxnb3JpdGhtIHVzZWQgdG8gZmluZCBjb250ZW50IHdpdGguXG4gICAqL1xuICBmdW5jdGlvbiBHcm91cGVkQ29udGVudChlbCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgR3JvdXBlZENvbnRlbnQpO1xuXG4gICAgdGhpcy5uYW1lc3BhY2UgPSAnZ3JvdXBlZC1jb250ZW50JztcbiAgICB0aGlzLmVsID0gZWw7XG4gICAgdGhpcy5ncm91cGVkQ29udGVudEluc3RhbmNlcyA9IFtdO1xuXG4gICAgdmFyIGxheW91dCA9IG9wdGlvbnMubGF5b3V0IHx8ICd0YWJzJztcbiAgICB2YXIgaW50ZWxsaXBhcnNlID0gISFvcHRpb25zLmludGVsbGlwYXJzZTtcblxuICAgIGZvckVhY2gocGFyc2UoZWwsIGludGVsbGlwYXJzZSksIGZ1bmN0aW9uIChncm91cGVkQ29udGVudCkge1xuICAgICAgdmFyIGlkID0gdXVpZHY0KCk7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBudWxsO1xuICAgICAgdmFyIGdyb3VwZWRDb250ZW50V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBncm91cGVkQ29udGVudFdyYXBwZXIgPSBncm91cGVkQ29udGVudC50cmlnZ2Vycy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShncm91cGVkQ29udGVudFdyYXBwZXIsIGdyb3VwZWRDb250ZW50LnRyaWdnZXJzLm5leHRTaWJsaW5nKTtcblxuICAgICAgYWRkQ2xhc3MoZ3JvdXBlZENvbnRlbnRXcmFwcGVyLCBfdGhpcy5uYW1lc3BhY2UpO1xuICAgICAgYWRkQ2xhc3MoZ3JvdXBlZENvbnRlbnRXcmFwcGVyLCBfdGhpcy5uYW1lc3BhY2UgKyAnLWxheW91dC0nICsgbGF5b3V0KTtcblxuICAgICAgZ3JvdXBlZENvbnRlbnRXcmFwcGVyLmFwcGVuZENoaWxkKGdyb3VwZWRDb250ZW50LnRyaWdnZXJzKTtcbiAgICAgIGdyb3VwZWRDb250ZW50V3JhcHBlci5hcHBlbmRDaGlsZChncm91cGVkQ29udGVudC5jb250ZW50cyk7XG5cbiAgICAgIGdyb3VwZWRDb250ZW50Lm5hbWVzcGFjZSA9IF90aGlzLm5hbWVzcGFjZTtcbiAgICAgIGdyb3VwZWRDb250ZW50LmlkID0gaWQ7XG4gICAgICBncm91cGVkQ29udGVudC50cmlnZ2Vycy5pZCA9IF90aGlzLm5hbWVzcGFjZSArICctJyArIGlkICsgJy10cmlnZ2Vycyc7XG4gICAgICBncm91cGVkQ29udGVudC5jb250ZW50cy5pZCA9IF90aGlzLm5hbWVzcGFjZSArICctJyArIGlkICsgJy1jb250ZW50cyc7XG5cbiAgICAgIGFkZENsYXNzKGdyb3VwZWRDb250ZW50LnRyaWdnZXJzLCBfdGhpcy5uYW1lc3BhY2UgKyAnLXRyaWdnZXJzJyk7XG4gICAgICBhZGRDbGFzcyhncm91cGVkQ29udGVudC5jb250ZW50cywgX3RoaXMubmFtZXNwYWNlICsgJy1jb250ZW50cycpO1xuXG4gICAgICBmb3JFYWNoKGdyb3VwZWRDb250ZW50LnBhaXJpbmdzLCBmdW5jdGlvbiAocGFpcmluZykge1xuICAgICAgICBhZGRDbGFzcyhwYWlyaW5nLnRyaWdnZXIsIF90aGlzLm5hbWVzcGFjZSArICctdHJpZ2dlcicpO1xuICAgICAgICBhZGRDbGFzcyhwYWlyaW5nLmNvbnRlbnQsIF90aGlzLm5hbWVzcGFjZSArICctY29udGVudCcpO1xuICAgICAgfSk7XG5cbiAgICAgIHN3aXRjaCAobGF5b3V0KSB7XG4gICAgICAgIGNhc2UgJ2FjY29yZGlvbic6XG4gICAgICAgICAgaW5zdGFuY2UgPSBuZXcgQWNjb3JkaW9uTGF5b3V0KGdyb3VwZWRDb250ZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndGFicyc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaW5zdGFuY2UgPSBuZXcgVGFic0xheW91dChncm91cGVkQ29udGVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmdyb3VwZWRDb250ZW50SW5zdGFuY2VzLnB1c2goe1xuICAgICAgICBncm91cGVkQ29udGVudDogZ3JvdXBlZENvbnRlbnQsXG4gICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogVW5sb2FkIGFsbCBncm91cGVkIGNvbnRlbnQgaW5zdGFuY2VzICovXG5cblxuICBjcmVhdGVDbGFzcyhHcm91cGVkQ29udGVudCwgW3tcbiAgICBrZXk6ICd1bmxvYWQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1bmxvYWQoKSB7XG4gICAgICBmb3JFYWNoKHRoaXMuZ3JvdXBlZENvbnRlbnRJbnN0YW5jZXMsIGZ1bmN0aW9uIChncm91cGVkQ29udGVudEluc3RhbmNlKSB7XG4gICAgICAgIGdyb3VwZWRDb250ZW50SW5zdGFuY2UuaW5zdGFuY2UudW5sb2FkKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEdyb3VwZWRDb250ZW50O1xufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEdyb3VwZWRDb250ZW50O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/grouped-content/dist/index.js\n") },
vendor: 59,059 bytes, line 1
1"./node_modules/intersection-observer/intersection-observer.js": function (module, exports) { eval("/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n\n(function(window, document) {\n'use strict';\n\n\n// Exits early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype,\n 'isIntersecting', {\n get: function () {\n return this.intersectionRatio > 0;\n }\n });\n }\n return;\n}\n\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = entry.rootBounds;\n this.boundingClientRect = entry.boundingClientRect;\n this.intersectionRect = entry.intersectionRect || getEmptyRect();\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n // Round the intersection ratio to avoid floating point math issues:\n // https://github.com/w3c/IntersectionObserver/issues/324\n this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (options.root && options.root.nodeType != 1) {\n throw new Error('root must be an Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(\n this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function(margin) {\n return margin.value + margin.unit;\n }).join(' ');\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({element: target, entry: null});\n this._monitorIntersections();\n this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n this._observationTargets =\n this._observationTargets.filter(function(item) {\n\n return item.element != target;\n });\n if (!this._observationTargets.length) {\n this._unmonitorIntersections();\n this._unregisterInstance();\n }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n this._observationTargets = [];\n this._unmonitorIntersections();\n this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function(t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array<Object>} An array of margin objects with the keys\n * value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function(margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return {value: parseFloat(parts[1]), unit: parts[2]};\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function() {\n if (!this._monitoringIntersections) {\n this._monitoringIntersections = true;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n this._monitoringInterval = setInterval(\n this._checkForIntersections, this.POLL_INTERVAL);\n }\n else {\n addEvent(window, 'resize', this._checkForIntersections, true);\n addEvent(document, 'scroll', this._checkForIntersections, true);\n\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {\n this._domObserver = new MutationObserver(this._checkForIntersections);\n this._domObserver.observe(document, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function() {\n if (this._monitoringIntersections) {\n this._monitoringIntersections = false;\n\n clearInterval(this._monitoringInterval);\n this._monitoringInterval = null;\n\n removeEvent(window, 'resize', this._checkForIntersections, true);\n removeEvent(document, 'scroll', this._checkForIntersections, true);\n\n if (this._domObserver) {\n this._domObserver.disconnect();\n this._domObserver = null;\n }\n }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function(item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget &&\n this._computeTargetAndRootIntersection(target, rootRect);\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: rootRect,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n function(target, rootRect) {\n\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var targetRect = getBoundingClientRect(target);\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ?\n window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return;\n\n if (parent == this.root || parent == document) {\n atRoot = true;\n parentRect = rootRect;\n } else {\n // If the element has a non-visible overflow, and it's not the <body>\n // or <html> element, update the intersection rect.\n // Note: <body> and <html> cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n if (parent != document.body &&\n parent != document.documentElement &&\n parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n\n if (!intersectionRect) break;\n }\n parent = getParentNode(parent);\n }\n return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {Object} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n var rootRect;\n if (this.root) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use <html>/<body> instead of window since scroll bars affect size.\n var html = document.documentElement;\n var body = document.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {Object} rect The rect object to expand.\n * @return {Object} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n var margins = this._rootMarginValues.map(function(margin, i) {\n return margin.unit == 'px' ? margin.value :\n margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n function(oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ?\n oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ?\n newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio ||\n threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n return containsDeep(this.root || document, target);\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function() {\n fn();\n timer = null;\n }, timeout);\n }\n };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.detatchEvent == 'function') {\n node.detatchEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object} The intersection rect or undefined if no intersection\n * is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return (width >= 0 && height >= 0) && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n };\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {Object} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {Object} The empty rect.\n */\nfunction getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n}\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n var parent = node.parentNode;\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n return parent;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}(window, document));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaW50ZXJzZWN0aW9uLW9ic2VydmVyL2ludGVyc2VjdGlvbi1vYnNlcnZlci5qcz81YWJlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLDZCQUE2QjtBQUM5RDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsS0FBSztBQUNoQixZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvaW50ZXJzZWN0aW9uLW9ic2VydmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBXM0MgU09GVFdBUkUgQU5EIERPQ1VNRU5UIE5PVElDRSBBTkQgTElDRU5TRS5cbiAqXG4gKiAgaHR0cHM6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAxNS9jb3B5cmlnaHQtc29mdHdhcmUtYW5kLWRvY3VtZW50XG4gKlxuICovXG5cbihmdW5jdGlvbih3aW5kb3csIGRvY3VtZW50KSB7XG4ndXNlIHN0cmljdCc7XG5cblxuLy8gRXhpdHMgZWFybHkgaWYgYWxsIEludGVyc2VjdGlvbk9ic2VydmVyIGFuZCBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5XG4vLyBmZWF0dXJlcyBhcmUgbmF0aXZlbHkgc3VwcG9ydGVkLlxuaWYgKCdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93ICYmXG4gICAgJ0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnknIGluIHdpbmRvdyAmJlxuICAgICdpbnRlcnNlY3Rpb25SYXRpbycgaW4gd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyRW50cnkucHJvdG90eXBlKSB7XG5cbiAgLy8gTWluaW1hbCBwb2x5ZmlsbCBmb3IgRWRnZSAxNSdzIGxhY2sgb2YgYGlzSW50ZXJzZWN0aW5nYFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIvaXNzdWVzLzIxMVxuICBpZiAoISgnaXNJbnRlcnNlY3RpbmcnIGluIHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5LnByb3RvdHlwZSkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyRW50cnkucHJvdG90eXBlLFxuICAgICAgJ2lzSW50ZXJzZWN0aW5nJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVyc2VjdGlvblJhdGlvID4gMDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm47XG59XG5cblxuLyoqXG4gKiBBbiBJbnRlcnNlY3Rpb25PYnNlcnZlciByZWdpc3RyeS4gVGhpcyByZWdpc3RyeSBleGlzdHMgdG8gaG9sZCBhIHN0cm9uZ1xuICogcmVmZXJlbmNlIHRvIEludGVyc2VjdGlvbk9ic2VydmVyIGluc3RhbmNlcyBjdXJyZW50bHkgb2JzZXJ2aW5nIGEgdGFyZ2V0XG4gKiBlbGVtZW50LiBXaXRob3V0IHRoaXMgcmVnaXN0cnksIGluc3RhbmNlcyB3aXRob3V0IGFub3RoZXIgcmVmZXJlbmNlIG1heSBiZVxuICogZ2FyYmFnZSBjb2xsZWN0ZWQuXG4gKi9cbnZhciByZWdpc3RyeSA9IFtdO1xuXG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgZ2xvYmFsIEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkgY29uc3RydWN0b3IuXG4gKiBodHRwczovL3czYy5naXRodWIuaW8vSW50ZXJzZWN0aW9uT2JzZXJ2ZXIvI2ludGVyc2VjdGlvbi1vYnNlcnZlci1lbnRyeVxuICogQHBhcmFtIHtPYmplY3R9IGVudHJ5IEEgZGljdGlvbmFyeSBvZiBpbnN0YW5jZSBwcm9wZXJ0aWVzLlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkoZW50cnkpIHtcbiAgdGhpcy50aW1lID0gZW50cnkudGltZTtcbiAgdGhpcy50YXJnZXQgPSBlbnRyeS50YXJnZXQ7XG4gIHRoaXMucm9vdEJvdW5kcyA9IGVudHJ5LnJvb3RCb3VuZHM7XG4gIHRoaXMuYm91bmRpbmdDbGllbnRSZWN0ID0gZW50cnkuYm91bmRpbmdDbGllbnRSZWN0O1xuICB0aGlzLmludGVyc2VjdGlvblJlY3QgPSBlbnRyeS5pbnRlcnNlY3Rpb25SZWN0IHx8IGdldEVtcHR5UmVjdCgpO1xuICB0aGlzLmlzSW50ZXJzZWN0aW5nID0gISFlbnRyeS5pbnRlcnNlY3Rpb25SZWN0O1xuXG4gIC8vIENhbGN1bGF0ZXMgdGhlIGludGVyc2VjdGlvbiByYXRpby5cbiAgdmFyIHRhcmdldFJlY3QgPSB0aGlzLmJvdW5kaW5nQ2xpZW50UmVjdDtcbiAgdmFyIHRhcmdldEFyZWEgPSB0YXJnZXRSZWN0LndpZHRoICogdGFyZ2V0UmVjdC5oZWlnaHQ7XG4gIHZhciBpbnRlcnNlY3Rpb25SZWN0ID0gdGhpcy5pbnRlcnNlY3Rpb25SZWN0O1xuICB2YXIgaW50ZXJzZWN0aW9uQXJlYSA9IGludGVyc2VjdGlvblJlY3Qud2lkdGggKiBpbnRlcnNlY3Rpb25SZWN0LmhlaWdodDtcblxuICAvLyBTZXRzIGludGVyc2VjdGlvbiByYXRpby5cbiAgaWYgKHRhcmdldEFyZWEpIHtcbiAgICAvLyBSb3VuZCB0aGUgaW50ZXJzZWN0aW9uIHJhdGlvIHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IG1hdGggaXNzdWVzOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIvaXNzdWVzLzMyNFxuICAgIHRoaXMuaW50ZXJzZWN0aW9uUmF0aW8gPSBOdW1iZXIoKGludGVyc2VjdGlvbkFyZWEgLyB0YXJnZXRBcmVhKS50b0ZpeGVkKDQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhcmVhIGlzIHplcm8gYW5kIGlzIGludGVyc2VjdGluZywgc2V0cyB0byAxLCBvdGhlcndpc2UgdG8gMFxuICAgIHRoaXMuaW50ZXJzZWN0aW9uUmF0aW8gPSB0aGlzLmlzSW50ZXJzZWN0aW5nID8gMSA6IDA7XG4gIH1cbn1cblxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGdsb2JhbCBJbnRlcnNlY3Rpb25PYnNlcnZlciBjb25zdHJ1Y3Rvci5cbiAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9JbnRlcnNlY3Rpb25PYnNlcnZlci8jaW50ZXJzZWN0aW9uLW9ic2VydmVyLWludGVyZmFjZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgYWZ0ZXIgaW50ZXJzZWN0aW9uXG4gKiAgICAgY2hhbmdlcyBoYXZlIHF1ZXVlZC4gVGhlIGZ1bmN0aW9uIGlzIG5vdCBpbnZva2VkIGlmIHRoZSBxdWV1ZSBoYXNcbiAqICAgICBiZWVuIGVtcHRpZWQgYnkgY2FsbGluZyB0aGUgYHRha2VSZWNvcmRzYCBtZXRob2QuXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9vcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0X29wdGlvbnMpIHtcblxuICB2YXIgb3B0aW9ucyA9IG9wdF9vcHRpb25zIHx8IHt9O1xuXG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcignY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5yb290ICYmIG9wdGlvbnMucm9vdC5ub2RlVHlwZSAhPSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyb290IG11c3QgYmUgYW4gRWxlbWVudCcpO1xuICB9XG5cbiAgLy8gQmluZHMgYW5kIHRocm90dGxlcyBgdGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zYC5cbiAgdGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zID0gdGhyb3R0bGUoXG4gICAgICB0aGlzLl9jaGVja0ZvckludGVyc2VjdGlvbnMuYmluZCh0aGlzKSwgdGhpcy5USFJPVFRMRV9USU1FT1VUKTtcblxuICAvLyBQcml2YXRlIHByb3BlcnRpZXMuXG4gIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7XG4gIHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cyA9IFtdO1xuICB0aGlzLl9xdWV1ZWRFbnRyaWVzID0gW107XG4gIHRoaXMuX3Jvb3RNYXJnaW5WYWx1ZXMgPSB0aGlzLl9wYXJzZVJvb3RNYXJnaW4ob3B0aW9ucy5yb290TWFyZ2luKTtcblxuICAvLyBQdWJsaWMgcHJvcGVydGllcy5cbiAgdGhpcy50aHJlc2hvbGRzID0gdGhpcy5faW5pdFRocmVzaG9sZHMob3B0aW9ucy50aHJlc2hvbGQpO1xuICB0aGlzLnJvb3QgPSBvcHRpb25zLnJvb3QgfHwgbnVsbDtcbiAgdGhpcy5yb290TWFyZ2luID0gdGhpcy5fcm9vdE1hcmdpblZhbHVlcy5tYXAoZnVuY3Rpb24obWFyZ2luKSB7XG4gICAgcmV0dXJuIG1hcmdpbi52YWx1ZSArIG1hcmdpbi51bml0O1xuICB9KS5qb2luKCcgJyk7XG59XG5cblxuLyoqXG4gKiBUaGUgbWluaW11bSBpbnRlcnZhbCB3aXRoaW4gd2hpY2ggdGhlIGRvY3VtZW50IHdpbGwgYmUgY2hlY2tlZCBmb3JcbiAqIGludGVyc2VjdGlvbiBjaGFuZ2VzLlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuVEhST1RUTEVfVElNRU9VVCA9IDEwMDtcblxuXG4vKipcbiAqIFRoZSBmcmVxdWVuY3kgaW4gd2hpY2ggdGhlIHBvbHlmaWxsIHBvbGxzIGZvciBpbnRlcnNlY3Rpb24gY2hhbmdlcy5cbiAqIHRoaXMgY2FuIGJlIHVwZGF0ZWQgb24gYSBwZXIgaW5zdGFuY2UgYmFzaXMgYW5kIG11c3QgYmUgc2V0IHByaW9yIHRvXG4gKiBjYWxsaW5nIGBvYnNlcnZlYCBvbiB0aGUgZmlyc3QgdGFyZ2V0LlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuUE9MTF9JTlRFUlZBTCA9IG51bGw7XG5cbi8qKlxuICogVXNlIGEgbXV0YXRpb24gb2JzZXJ2ZXIgb24gdGhlIHJvb3QgZWxlbWVudFxuICogdG8gZGV0ZWN0IGludGVyc2VjdGlvbiBjaGFuZ2VzLlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuVVNFX01VVEFUSU9OX09CU0VSVkVSID0gdHJ1ZTtcblxuXG4vKipcbiAqIFN0YXJ0cyBvYnNlcnZpbmcgYSB0YXJnZXQgZWxlbWVudCBmb3IgaW50ZXJzZWN0aW9uIGNoYW5nZXMgYmFzZWQgb25cbiAqIHRoZSB0aHJlc2hvbGRzIHZhbHVlcy5cbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IFRoZSBET00gZWxlbWVudCB0byBvYnNlcnZlLlxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uKHRhcmdldCkge1xuICB2YXIgaXNUYXJnZXRBbHJlYWR5T2JzZXJ2ZWQgPSB0aGlzLl9vYnNlcnZhdGlvblRhcmdldHMuc29tZShmdW5jdGlvbihpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uZWxlbWVudCA9PSB0YXJnZXQ7XG4gIH0pO1xuXG4gIGlmIChpc1RhcmdldEFscmVhZHlPYnNlcnZlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIEVsZW1lbnQnKTtcbiAgfVxuXG4gIHRoaXMuX3JlZ2lzdGVySW5zdGFuY2UoKTtcbiAgdGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzLnB1c2goe2VsZW1lbnQ6IHRhcmdldCwgZW50cnk6IG51bGx9KTtcbiAgdGhpcy5fbW9uaXRvckludGVyc2VjdGlvbnMoKTtcbiAgdGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zKCk7XG59O1xuXG5cbi8qKlxuICogU3RvcHMgb2JzZXJ2aW5nIGEgdGFyZ2V0IGVsZW1lbnQgZm9yIGludGVyc2VjdGlvbiBjaGFuZ2VzLlxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgVGhlIERPTSBlbGVtZW50IHRvIG9ic2VydmUuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS51bm9ic2VydmUgPSBmdW5jdGlvbih0YXJnZXQpIHtcbiAgdGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzID1cbiAgICAgIHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xuXG4gICAgcmV0dXJuIGl0ZW0uZWxlbWVudCAhPSB0YXJnZXQ7XG4gIH0pO1xuICBpZiAoIXRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cy5sZW5ndGgpIHtcbiAgICB0aGlzLl91bm1vbml0b3JJbnRlcnNlY3Rpb25zKCk7XG4gICAgdGhpcy5fdW5yZWdpc3Rlckluc3RhbmNlKCk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBTdG9wcyBvYnNlcnZpbmcgYWxsIHRhcmdldCBlbGVtZW50cyBmb3IgaW50ZXJzZWN0aW9uIGNoYW5nZXMuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX29ic2VydmF0aW9uVGFyZ2V0cyA9IFtdO1xuICB0aGlzLl91bm1vbml0b3JJbnRlcnNlY3Rpb25zKCk7XG4gIHRoaXMuX3VucmVnaXN0ZXJJbnN0YW5jZSgpO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgYW55IHF1ZXVlIGVudHJpZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiByZXBvcnRlZCB0byB0aGVcbiAqIGNhbGxiYWNrIGFuZCBjbGVhcnMgdGhlIHF1ZXVlLiBUaGlzIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlXG4gKiBjYWxsYmFjayB0byBvYnRhaW4gdGhlIGFic29sdXRlIG1vc3QgdXAtdG8tZGF0ZSBpbnRlcnNlY3Rpb24gaW5mb3JtYXRpb24uXG4gKiBAcmV0dXJuIHtBcnJheX0gVGhlIGN1cnJlbnRseSBxdWV1ZWQgZW50cmllcy5cbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLnRha2VSZWNvcmRzID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZWNvcmRzID0gdGhpcy5fcXVldWVkRW50cmllcy5zbGljZSgpO1xuICB0aGlzLl9xdWV1ZWRFbnRyaWVzID0gW107XG4gIHJldHVybiByZWNvcmRzO1xufTtcblxuXG4vKipcbiAqIEFjY2VwdHMgdGhlIHRocmVzaG9sZCB2YWx1ZSBmcm9tIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGFuZFxuICogcmV0dXJucyBhIHNvcnRlZCBhcnJheSBvZiB1bmlxdWUgdGhyZXNob2xkIHZhbHVlcy4gSWYgYSB2YWx1ZSBpcyBub3RcbiAqIGJldHdlZW4gMCBhbmQgMSBhbmQgZXJyb3IgaXMgdGhyb3duLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8bnVtYmVyPX0gb3B0X3RocmVzaG9sZCBBbiBvcHRpb25hbCB0aHJlc2hvbGQgdmFsdWUgb3JcbiAqICAgICBhIGxpc3Qgb2YgdGhyZXNob2xkIHZhbHVlcywgZGVmYXVsdGluZyB0byBbMF0uXG4gKiBAcmV0dXJuIHtBcnJheX0gQSBzb3J0ZWQgbGlzdCBvZiB1bmlxdWUgYW5kIHZhbGlkIHRocmVzaG9sZCB2YWx1ZXMuXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5faW5pdFRocmVzaG9sZHMgPSBmdW5jdGlvbihvcHRfdGhyZXNob2xkKSB7XG4gIHZhciB0aHJlc2hvbGQgPSBvcHRfdGhyZXNob2xkIHx8IFswXTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHRocmVzaG9sZCkpIHRocmVzaG9sZCA9IFt0aHJlc2hvbGRdO1xuXG4gIHJldHVybiB0aHJlc2hvbGQuc29ydCgpLmZpbHRlcihmdW5jdGlvbih0LCBpLCBhKSB7XG4gICAgaWYgKHR5cGVvZiB0ICE9ICdudW1iZXInIHx8IGlzTmFOKHQpIHx8IHQgPCAwIHx8IHQgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RocmVzaG9sZCBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmNsdXNpdmVseScpO1xuICAgIH1cbiAgICByZXR1cm4gdCAhPT0gYVtpIC0gMV07XG4gIH0pO1xufTtcblxuXG4vKipcbiAqIEFjY2VwdHMgdGhlIHJvb3RNYXJnaW4gdmFsdWUgZnJvbSB0aGUgdXNlciBjb25maWd1cmF0aW9uIG9iamVjdFxuICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIGZvdXIgbWFyZ2luIHZhbHVlcyBhcyBhbiBvYmplY3QgY29udGFpbmluZ1xuICogdGhlIHZhbHVlIGFuZCB1bml0IHByb3BlcnRpZXMuIElmIGFueSBvZiB0aGUgdmFsdWVzIGFyZSBub3QgcHJvcGVybHlcbiAqIGZvcm1hdHRlZCBvciB1c2UgYSB1bml0IG90aGVyIHRoYW4gcHggb3IgJSwgYW5kIGVycm9yIGlzIHRocm93bi5cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZz19IG9wdF9yb290TWFyZ2luIEFuIG9wdGlvbmFsIHJvb3RNYXJnaW4gdmFsdWUsXG4gKiAgICAgZGVmYXVsdGluZyB0byAnMHB4Jy5cbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IEFuIGFycmF5IG9mIG1hcmdpbiBvYmplY3RzIHdpdGggdGhlIGtleXNcbiAqICAgICB2YWx1ZSBhbmQgdW5pdC5cbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9wYXJzZVJvb3RNYXJnaW4gPSBmdW5jdGlvbihvcHRfcm9vdE1hcmdpbikge1xuICB2YXIgbWFyZ2luU3RyaW5nID0gb3B0X3Jvb3RNYXJnaW4gfHwgJzBweCc7XG4gIHZhciBtYXJnaW5zID0gbWFyZ2luU3RyaW5nLnNwbGl0KC9cXHMrLykubWFwKGZ1bmN0aW9uKG1hcmdpbikge1xuICAgIHZhciBwYXJ0cyA9IC9eKC0/XFxkKlxcLj9cXGQrKShweHwlKSQvLmV4ZWMobWFyZ2luKTtcbiAgICBpZiAoIXBhcnRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jvb3RNYXJnaW4gbXVzdCBiZSBzcGVjaWZpZWQgaW4gcGl4ZWxzIG9yIHBlcmNlbnQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHt2YWx1ZTogcGFyc2VGbG9hdChwYXJ0c1sxXSksIHVuaXQ6IHBhcnRzWzJdfTtcbiAgfSk7XG5cbiAgLy8gSGFuZGxlcyBzaG9ydGhhbmQuXG4gIG1hcmdpbnNbMV0gPSBtYXJnaW5zWzFdIHx8IG1hcmdpbnNbMF07XG4gIG1hcmdpbnNbMl0gPSBtYXJnaW5zWzJdIHx8IG1hcmdpbnNbMF07XG4gIG1hcmdpbnNbM10gPSBtYXJnaW5zWzNdIHx8IG1hcmdpbnNbMV07XG5cbiAgcmV0dXJuIG1hcmdpbnM7XG59O1xuXG5cbi8qKlxuICogU3RhcnRzIHBvbGxpbmcgZm9yIGludGVyc2VjdGlvbiBjaGFuZ2VzIGlmIHRoZSBwb2xsaW5nIGlzIG5vdCBhbHJlYWR5XG4gKiBoYXBwZW5pbmcsIGFuZCBpZiB0aGUgcGFnZSdzIHZpc2liaWxpdHkgc3RhdGUgaXMgdmlzaWJsZS5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fbW9uaXRvckludGVyc2VjdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9tb25pdG9yaW5nSW50ZXJzZWN0aW9ucykge1xuICAgIHRoaXMuX21vbml0b3JpbmdJbnRlcnNlY3Rpb25zID0gdHJ1ZTtcblxuICAgIC8vIElmIGEgcG9sbCBpbnRlcnZhbCBpcyBzZXQsIHVzZSBwb2xsaW5nIGluc3RlYWQgb2YgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVzaXplIGFuZCBzY3JvbGwgZXZlbnRzIG9yIERPTSBtdXRhdGlvbnMuXG4gICAgaWYgKHRoaXMuUE9MTF9JTlRFUlZBTCkge1xuICAgICAgdGhpcy5fbW9uaXRvcmluZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoXG4gICAgICAgICAgdGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zLCB0aGlzLlBPTExfSU5URVJWQUwpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGFkZEV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScsIHRoaXMuX2NoZWNrRm9ySW50ZXJzZWN0aW9ucywgdHJ1ZSk7XG4gICAgICBhZGRFdmVudChkb2N1bWVudCwgJ3Njcm9sbCcsIHRoaXMuX2NoZWNrRm9ySW50ZXJzZWN0aW9ucywgdHJ1ZSk7XG5cbiAgICAgIGlmICh0aGlzLlVTRV9NVVRBVElPTl9PQlNFUlZFUiAmJiAnTXV0YXRpb25PYnNlcnZlcicgaW4gd2luZG93KSB7XG4gICAgICAgIHRoaXMuX2RvbU9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zKTtcbiAgICAgICAgdGhpcy5fZG9tT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cblxuLyoqXG4gKiBTdG9wcyBwb2xsaW5nIGZvciBpbnRlcnNlY3Rpb24gY2hhbmdlcy5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fdW5tb25pdG9ySW50ZXJzZWN0aW9ucyA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fbW9uaXRvcmluZ0ludGVyc2VjdGlvbnMpIHtcbiAgICB0aGlzLl9tb25pdG9yaW5nSW50ZXJzZWN0aW9ucyA9IGZhbHNlO1xuXG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9tb25pdG9yaW5nSW50ZXJ2YWwpO1xuICAgIHRoaXMuX21vbml0b3JpbmdJbnRlcnZhbCA9IG51bGw7XG5cbiAgICByZW1vdmVFdmVudCh3aW5kb3csICdyZXNpemUnLCB0aGlzLl9jaGVja0ZvckludGVyc2VjdGlvbnMsIHRydWUpO1xuICAgIHJlbW92ZUV2ZW50KGRvY3VtZW50LCAnc2Nyb2xsJywgdGhpcy5fY2hlY2tGb3JJbnRlcnNlY3Rpb25zLCB0cnVlKTtcblxuICAgIGlmICh0aGlzLl9kb21PYnNlcnZlcikge1xuICAgICAgdGhpcy5fZG9tT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5fZG9tT2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufTtcblxuXG4vKipcbiAqIFNjYW5zIGVhY2ggb2JzZXJ2YXRpb24gdGFyZ2V0IGZvciBpbnRlcnNlY3Rpb24gY2hhbmdlcyBhbmQgYWRkcyB0aGVtXG4gKiB0byB0aGUgaW50ZXJuYWwgZW50cmllcyBxdWV1ZS4gSWYgbmV3IGVudHJpZXMgYXJlIGZvdW5kLCBpdFxuICogc2NoZWR1bGVzIHRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9jaGVja0ZvckludGVyc2VjdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJvb3RJc0luRG9tID0gdGhpcy5fcm9vdElzSW5Eb20oKTtcbiAgdmFyIHJvb3RSZWN0ID0gcm9vdElzSW5Eb20gPyB0aGlzLl9nZXRSb290UmVjdCgpIDogZ2V0RW1wdHlSZWN0KCk7XG5cbiAgdGhpcy5fb2JzZXJ2YXRpb25UYXJnZXRzLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgIHZhciB0YXJnZXQgPSBpdGVtLmVsZW1lbnQ7XG4gICAgdmFyIHRhcmdldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QodGFyZ2V0KTtcbiAgICB2YXIgcm9vdENvbnRhaW5zVGFyZ2V0ID0gdGhpcy5fcm9vdENvbnRhaW5zVGFyZ2V0KHRhcmdldCk7XG4gICAgdmFyIG9sZEVudHJ5ID0gaXRlbS5lbnRyeTtcbiAgICB2YXIgaW50ZXJzZWN0aW9uUmVjdCA9IHJvb3RJc0luRG9tICYmIHJvb3RDb250YWluc1RhcmdldCAmJlxuICAgICAgICB0aGlzLl9jb21wdXRlVGFyZ2V0QW5kUm9vdEludGVyc2VjdGlvbih0YXJnZXQsIHJvb3RSZWN0KTtcblxuICAgIHZhciBuZXdFbnRyeSA9IGl0ZW0uZW50cnkgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSh7XG4gICAgICB0aW1lOiBub3coKSxcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgYm91bmRpbmdDbGllbnRSZWN0OiB0YXJnZXRSZWN0LFxuICAgICAgcm9vdEJvdW5kczogcm9vdFJlY3QsXG4gICAgICBpbnRlcnNlY3Rpb25SZWN0OiBpbnRlcnNlY3Rpb25SZWN0XG4gICAgfSk7XG5cbiAgICBpZiAoIW9sZEVudHJ5KSB7XG4gICAgICB0aGlzLl9xdWV1ZWRFbnRyaWVzLnB1c2gobmV3RW50cnkpO1xuICAgIH0gZWxzZSBpZiAocm9vdElzSW5Eb20gJiYgcm9vdENvbnRhaW5zVGFyZ2V0KSB7XG4gICAgICAvLyBJZiB0aGUgbmV3IGVudHJ5IGludGVyc2VjdGlvbiByYXRpbyBoYXMgY3Jvc3NlZCBhbnkgb2YgdGhlXG4gICAgICAvLyB0aHJlc2hvbGRzLCBhZGQgYSBuZXcgZW50cnkuXG4gICAgICBpZiAodGhpcy5faGFzQ3Jvc3NlZFRocmVzaG9sZChvbGRFbnRyeSwgbmV3RW50cnkpKSB7XG4gICAgICAgIHRoaXMuX3F1ZXVlZEVudHJpZXMucHVzaChuZXdFbnRyeSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZSByb290IGlzIG5vdCBpbiB0aGUgRE9NIG9yIHRhcmdldCBpcyBub3QgY29udGFpbmVkIHdpdGhpblxuICAgICAgLy8gcm9vdCBidXQgdGhlIHByZXZpb3VzIGVudHJ5IGZvciB0aGlzIHRhcmdldCBoYWQgYW4gaW50ZXJzZWN0aW9uLFxuICAgICAgLy8gYWRkIGEgbmV3IHJlY29yZCBpbmRpY2F0aW5nIHJlbW92YWwuXG4gICAgICBpZiAob2xkRW50cnkgJiYgb2xkRW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgdGhpcy5fcXVldWVkRW50cmllcy5wdXNoKG5ld0VudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHRoaXMpO1xuXG4gIGlmICh0aGlzLl9xdWV1ZWRFbnRyaWVzLmxlbmd0aCkge1xuICAgIHRoaXMuX2NhbGxiYWNrKHRoaXMudGFrZVJlY29yZHMoKSwgdGhpcyk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBBY2NlcHRzIGEgdGFyZ2V0IGFuZCByb290IHJlY3QgY29tcHV0ZXMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZW5cbiAqIGZvbGxvd2luZyB0aGUgYWxnb3JpdGhtIGluIHRoZSBzcGVjLlxuICogVE9ETyhwaGlsaXB3YWx0b24pOiBhdCB0aGlzIHRpbWUgY2xpcC1wYXRoIGlzIG5vdCBjb25zaWRlcmVkLlxuICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ludGVyc2VjdGlvbk9ic2VydmVyLyNjYWxjdWxhdGUtaW50ZXJzZWN0aW9uLXJlY3QtYWxnb1xuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgVGhlIHRhcmdldCBET00gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IHJvb3RSZWN0IFRoZSBib3VuZGluZyByZWN0IG9mIHRoZSByb290IGFmdGVyIGJlaW5nXG4gKiAgICAgZXhwYW5kZWQgYnkgdGhlIHJvb3RNYXJnaW4gdmFsdWUuXG4gKiBAcmV0dXJuIHs/T2JqZWN0fSBUaGUgZmluYWwgaW50ZXJzZWN0aW9uIHJlY3Qgb2JqZWN0IG9yIHVuZGVmaW5lZCBpZiBub1xuICogICAgIGludGVyc2VjdGlvbiBpcyBmb3VuZC5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fY29tcHV0ZVRhcmdldEFuZFJvb3RJbnRlcnNlY3Rpb24gPVxuICAgIGZ1bmN0aW9uKHRhcmdldCwgcm9vdFJlY3QpIHtcblxuICAvLyBJZiB0aGUgZWxlbWVudCBpc24ndCBkaXNwbGF5ZWQsIGFuIGludGVyc2VjdGlvbiBjYW4ndCBoYXBwZW4uXG4gIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmRpc3BsYXkgPT0gJ25vbmUnKSByZXR1cm47XG5cbiAgdmFyIHRhcmdldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QodGFyZ2V0KTtcbiAgdmFyIGludGVyc2VjdGlvblJlY3QgPSB0YXJnZXRSZWN0O1xuICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50Tm9kZSh0YXJnZXQpO1xuICB2YXIgYXRSb290ID0gZmFsc2U7XG5cbiAgd2hpbGUgKCFhdFJvb3QpIHtcbiAgICB2YXIgcGFyZW50UmVjdCA9IG51bGw7XG4gICAgdmFyIHBhcmVudENvbXB1dGVkU3R5bGUgPSBwYXJlbnQubm9kZVR5cGUgPT0gMSA/XG4gICAgICAgIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCkgOiB7fTtcblxuICAgIC8vIElmIHRoZSBwYXJlbnQgaXNuJ3QgZGlzcGxheWVkLCBhbiBpbnRlcnNlY3Rpb24gY2FuJ3QgaGFwcGVuLlxuICAgIGlmIChwYXJlbnRDb21wdXRlZFN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnKSByZXR1cm47XG5cbiAgICBpZiAocGFyZW50ID09IHRoaXMucm9vdCB8fCBwYXJlbnQgPT0gZG9jdW1lbnQpIHtcbiAgICAgIGF0Um9vdCA9IHRydWU7XG4gICAgICBwYXJlbnRSZWN0ID0gcm9vdFJlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIG5vbi12aXNpYmxlIG92ZXJmbG93LCBhbmQgaXQncyBub3QgdGhlIDxib2R5PlxuICAgICAgLy8gb3IgPGh0bWw+IGVsZW1lbnQsIHVwZGF0ZSB0aGUgaW50ZXJzZWN0aW9uIHJlY3QuXG4gICAgICAvLyBOb3RlOiA8Ym9keT4gYW5kIDxodG1sPiBjYW5ub3QgYmUgY2xpcHBlZCB0byBhIHJlY3QgdGhhdCdzIG5vdCBhbHNvXG4gICAgICAvLyB0aGUgZG9jdW1lbnQgcmVjdCwgc28gbm8gbmVlZCB0byBjb21wdXRlIGEgbmV3IGludGVyc2VjdGlvbi5cbiAgICAgIGlmIChwYXJlbnQgIT0gZG9jdW1lbnQuYm9keSAmJlxuICAgICAgICAgIHBhcmVudCAhPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICAgICAgICBwYXJlbnRDb21wdXRlZFN0eWxlLm92ZXJmbG93ICE9ICd2aXNpYmxlJykge1xuICAgICAgICBwYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHBhcmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgZWl0aGVyIG9mIHRoZSBhYm92ZSBjb25kaXRpb25hbHMgc2V0IGEgbmV3IHBhcmVudFJlY3QsXG4gICAgLy8gY2FsY3VsYXRlIG5ldyBpbnRlcnNlY3Rpb24gZGF0YS5cbiAgICBpZiAocGFyZW50UmVjdCkge1xuICAgICAgaW50ZXJzZWN0aW9uUmVjdCA9IGNvbXB1dGVSZWN0SW50ZXJzZWN0aW9uKHBhcmVudFJlY3QsIGludGVyc2VjdGlvblJlY3QpO1xuXG4gICAgICBpZiAoIWludGVyc2VjdGlvblJlY3QpIGJyZWFrO1xuICAgIH1cbiAgICBwYXJlbnQgPSBnZXRQYXJlbnROb2RlKHBhcmVudCk7XG4gIH1cbiAgcmV0dXJuIGludGVyc2VjdGlvblJlY3Q7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgcm9vdCByZWN0IGFmdGVyIGJlaW5nIGV4cGFuZGVkIGJ5IHRoZSByb290TWFyZ2luIHZhbHVlLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgZXhwYW5kZWQgcm9vdCByZWN0LlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9nZXRSb290UmVjdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcm9vdFJlY3Q7XG4gIGlmICh0aGlzLnJvb3QpIHtcbiAgICByb290UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdCh0aGlzLnJvb3QpO1xuICB9IGVsc2Uge1xuICAgIC8vIFVzZSA8aHRtbD4vPGJvZHk+IGluc3RlYWQgb2Ygd2luZG93IHNpbmNlIHNjcm9sbCBiYXJzIGFmZmVjdCBzaXplLlxuICAgIHZhciBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICByb290UmVjdCA9IHtcbiAgICAgIHRvcDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICByaWdodDogaHRtbC5jbGllbnRXaWR0aCB8fCBib2R5LmNsaWVudFdpZHRoLFxuICAgICAgd2lkdGg6IGh0bWwuY2xpZW50V2lkdGggfHwgYm9keS5jbGllbnRXaWR0aCxcbiAgICAgIGJvdHRvbTogaHRtbC5jbGllbnRIZWlnaHQgfHwgYm9keS5jbGllbnRIZWlnaHQsXG4gICAgICBoZWlnaHQ6IGh0bWwuY2xpZW50SGVpZ2h0IHx8IGJvZHkuY2xpZW50SGVpZ2h0XG4gICAgfTtcbiAgfVxuICByZXR1cm4gdGhpcy5fZXhwYW5kUmVjdEJ5Um9vdE1hcmdpbihyb290UmVjdCk7XG59O1xuXG5cbi8qKlxuICogQWNjZXB0cyBhIHJlY3QgYW5kIGV4cGFuZHMgaXQgYnkgdGhlIHJvb3RNYXJnaW4gdmFsdWUuXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjdCBUaGUgcmVjdCBvYmplY3QgdG8gZXhwYW5kLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgZXhwYW5kZWQgcmVjdC5cbiAqIEBwcml2YXRlXG4gKi9cbkludGVyc2VjdGlvbk9ic2VydmVyLnByb3RvdHlwZS5fZXhwYW5kUmVjdEJ5Um9vdE1hcmdpbiA9IGZ1bmN0aW9uKHJlY3QpIHtcbiAgdmFyIG1hcmdpbnMgPSB0aGlzLl9yb290TWFyZ2luVmFsdWVzLm1hcChmdW5jdGlvbihtYXJnaW4sIGkpIHtcbiAgICByZXR1cm4gbWFyZ2luLnVuaXQgPT0gJ3B4JyA/IG1hcmdpbi52YWx1ZSA6XG4gICAgICAgIG1hcmdpbi52YWx1ZSAqIChpICUgMiA/IHJlY3Qud2lkdGggOiByZWN0LmhlaWdodCkgLyAxMDA7XG4gIH0pO1xuICB2YXIgbmV3UmVjdCA9IHtcbiAgICB0b3A6IHJlY3QudG9wIC0gbWFyZ2luc1swXSxcbiAgICByaWdodDogcmVjdC5yaWdodCArIG1hcmdpbnNbMV0sXG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSArIG1hcmdpbnNbMl0sXG4gICAgbGVmdDogcmVjdC5sZWZ0IC0gbWFyZ2luc1szXVxuICB9O1xuICBuZXdSZWN0LndpZHRoID0gbmV3UmVjdC5yaWdodCAtIG5ld1JlY3QubGVmdDtcbiAgbmV3UmVjdC5oZWlnaHQgPSBuZXdSZWN0LmJvdHRvbSAtIG5ld1JlY3QudG9wO1xuXG4gIHJldHVybiBuZXdSZWN0O1xufTtcblxuXG4vKipcbiAqIEFjY2VwdHMgYW4gb2xkIGFuZCBuZXcgZW50cnkgYW5kIHJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlXG4gKiB0aHJlc2hvbGQgdmFsdWVzIGhhcyBiZWVuIGNyb3NzZWQuXG4gKiBAcGFyYW0gez9JbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5fSBvbGRFbnRyeSBUaGUgcHJldmlvdXMgZW50cnkgZm9yIGFcbiAqICAgIHBhcnRpY3VsYXIgdGFyZ2V0IGVsZW1lbnQgb3IgbnVsbCBpZiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMuXG4gKiBAcGFyYW0ge0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnl9IG5ld0VudHJ5IFRoZSBjdXJyZW50IGVudHJ5IGZvciBhXG4gKiAgICBwYXJ0aWN1bGFyIHRhcmdldCBlbGVtZW50LlxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGEgYW55IHRocmVzaG9sZCBoYXMgYmVlbiBjcm9zc2VkLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9oYXNDcm9zc2VkVGhyZXNob2xkID1cbiAgICBmdW5jdGlvbihvbGRFbnRyeSwgbmV3RW50cnkpIHtcblxuICAvLyBUbyBtYWtlIGNvbXBhcmluZyBlYXNpZXIsIGFuIGVudHJ5IHRoYXQgaGFzIGEgcmF0aW8gb2YgMFxuICAvLyBidXQgZG9lcyBub3QgYWN0dWFsbHkgaW50ZXJzZWN0IGlzIGdpdmVuIGEgdmFsdWUgb2YgLTFcbiAgdmFyIG9sZFJhdGlvID0gb2xkRW50cnkgJiYgb2xkRW50cnkuaXNJbnRlcnNlY3RpbmcgP1xuICAgICAgb2xkRW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gfHwgMCA6IC0xO1xuICB2YXIgbmV3UmF0aW8gPSBuZXdFbnRyeS5pc0ludGVyc2VjdGluZyA/XG4gICAgICBuZXdFbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyB8fCAwIDogLTE7XG5cbiAgLy8gSWdub3JlIHVuY2hhbmdlZCByYXRpb3NcbiAgaWYgKG9sZFJhdGlvID09PSBuZXdSYXRpbykgcmV0dXJuO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50aHJlc2hvbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHRocmVzaG9sZCA9IHRoaXMudGhyZXNob2xkc1tpXTtcblxuICAgIC8vIFJldHVybiB0cnVlIGlmIGFuIGVudHJ5IG1hdGNoZXMgYSB0aHJlc2hvbGQgb3IgaWYgdGhlIG5ldyByYXRpb1xuICAgIC8vIGFuZCB0aGUgb2xkIHJhdGlvIGFyZSBvbiB0aGUgb3Bwb3NpdGUgc2lkZXMgb2YgYSB0aHJlc2hvbGQuXG4gICAgaWYgKHRocmVzaG9sZCA9PSBvbGRSYXRpbyB8fCB0aHJlc2hvbGQgPT0gbmV3UmF0aW8gfHxcbiAgICAgICAgdGhyZXNob2xkIDwgb2xkUmF0aW8gIT09IHRocmVzaG9sZCA8IG5ld1JhdGlvKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSByb290IGVsZW1lbnQgaXMgYW4gZWxlbWVudCBhbmQgaXMgaW4gdGhlIERPTS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHJvb3QgZWxlbWVudCBpcyBhbiBlbGVtZW50IGFuZCBpcyBpbiB0aGUgRE9NLlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9yb290SXNJbkRvbSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gIXRoaXMucm9vdCB8fCBjb250YWluc0RlZXAoZG9jdW1lbnQsIHRoaXMucm9vdCk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgYSBjaGlsZCBvZiByb290LlxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgYSBjaGlsZCBvZiByb290LlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9yb290Q29udGFpbnNUYXJnZXQgPSBmdW5jdGlvbih0YXJnZXQpIHtcbiAgcmV0dXJuIGNvbnRhaW5zRGVlcCh0aGlzLnJvb3QgfHwgZG9jdW1lbnQsIHRhcmdldCk7XG59O1xuXG5cbi8qKlxuICogQWRkcyB0aGUgaW5zdGFuY2UgdG8gdGhlIGdsb2JhbCBJbnRlcnNlY3Rpb25PYnNlcnZlciByZWdpc3RyeSBpZiBpdCBpc24ndFxuICogYWxyZWFkeSBwcmVzZW50LlxuICogQHByaXZhdGVcbiAqL1xuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlLl9yZWdpc3Rlckluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChyZWdpc3RyeS5pbmRleE9mKHRoaXMpIDwgMCkge1xuICAgIHJlZ2lzdHJ5LnB1c2godGhpcyk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBpbnN0YW5jZSBmcm9tIHRoZSBnbG9iYWwgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgcmVnaXN0cnkuXG4gKiBAcHJpdmF0ZVxuICovXG5JbnRlcnNlY3Rpb25PYnNlcnZlci5wcm90b3R5cGUuX3VucmVnaXN0ZXJJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaW5kZXggPSByZWdpc3RyeS5pbmRleE9mKHRoaXMpO1xuICBpZiAoaW5kZXggIT0gLTEpIHJlZ2lzdHJ5LnNwbGljZShpbmRleCwgMSk7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBwZXJmb3JtYW5jZS5ub3coKSBtZXRob2Qgb3IgbnVsbCBpbiBicm93c2Vyc1xuICogdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBBUEkuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBlbGFwc2VkIHRpbWUgc2luY2UgdGhlIHBhZ2Ugd2FzIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gbm93KCkge1xuICByZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlICYmIHBlcmZvcm1hbmNlLm5vdyAmJiBwZXJmb3JtYW5jZS5ub3coKTtcbn1cblxuXG4vKipcbiAqIFRocm90dGxlcyBhIGZ1bmN0aW9uIGFuZCBkZWxheXMgaXRzIGV4ZWN1dGlvbiwgc28gaXQncyBvbmx5IGNhbGxlZCBhdCBtb3N0XG4gKiBvbmNlIHdpdGhpbiBhIGdpdmVuIHRpbWUgcGVyaW9kLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIHRocm90dGxlLlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgVGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgbXVzdCBwYXNzIGJlZm9yZSB0aGVcbiAqICAgICBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGFnYWluLlxuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSB0aHJvdHRsZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCB0aW1lb3V0KSB7XG4gIHZhciB0aW1lciA9IG51bGw7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aW1lcikge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICBmbigpO1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICB9LCB0aW1lb3V0KTtcbiAgICB9XG4gIH07XG59XG5cblxuLyoqXG4gKiBBZGRzIGFuIGV2ZW50IGhhbmRsZXIgdG8gYSBET00gbm9kZSBlbnN1cmluZyBjcm9zcy1icm93c2VyIGNvbXBhdGliaWxpdHkuXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIERPTSBub2RlIHRvIGFkZCB0aGUgZXZlbnQgaGFuZGxlciB0by5cbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBldmVudCBoYW5kbGVyIHRvIGFkZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X3VzZUNhcHR1cmUgT3B0aW9uYWxseSBhZGRzIHRoZSBldmVuIHRvIHRoZSBjYXB0dXJlXG4gKiAgICAgcGhhc2UuIE5vdGU6IHRoaXMgb25seSB3b3JrcyBpbiBtb2Rlcm4gYnJvd3NlcnMuXG4gKi9cbmZ1bmN0aW9uIGFkZEV2ZW50KG5vZGUsIGV2ZW50LCBmbiwgb3B0X3VzZUNhcHR1cmUpIHtcbiAgaWYgKHR5cGVvZiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZm4sIG9wdF91c2VDYXB0dXJlIHx8IGZhbHNlKTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2Ygbm9kZS5hdHRhY2hFdmVudCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgbm9kZS5hdHRhY2hFdmVudCgnb24nICsgZXZlbnQsIGZuKTtcbiAgfVxufVxuXG5cbi8qKlxuICogUmVtb3ZlcyBhIHByZXZpb3VzbHkgYWRkZWQgZXZlbnQgaGFuZGxlciBmcm9tIGEgRE9NIG5vZGUuXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIERPTSBub2RlIHRvIHJlbW92ZSB0aGUgZXZlbnQgaGFuZGxlciBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGV2ZW50IGhhbmRsZXIgdG8gcmVtb3ZlLlxuICogQHBhcmFtIHtib29sZWFufSBvcHRfdXNlQ2FwdHVyZSBJZiB0aGUgZXZlbnQgaGFuZGxlciB3YXMgYWRkZWQgd2l0aCB0aGlzXG4gKiAgICAgZmxhZyBzZXQgdG8gdHJ1ZSwgaXQgc2hvdWxkIGJlIHNldCB0byB0cnVlIGhlcmUgaW4gb3JkZXIgdG8gcmVtb3ZlIGl0LlxuICovXG5mdW5jdGlvbiByZW1vdmVFdmVudChub2RlLCBldmVudCwgZm4sIG9wdF91c2VDYXB0dXJlKSB7XG4gIGlmICh0eXBlb2Ygbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyID09ICdmdW5jdGlvbicpIHtcbiAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGZuLCBvcHRfdXNlQ2FwdHVyZSB8fCBmYWxzZSk7XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIG5vZGUuZGV0YXRjaEV2ZW50ID09ICdmdW5jdGlvbicpIHtcbiAgICBub2RlLmRldGF0Y2hFdmVudCgnb24nICsgZXZlbnQsIGZuKTtcbiAgfVxufVxuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHJlY3Qgb2JqZWN0cy5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZWN0MSBUaGUgZmlyc3QgcmVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZWN0MiBUaGUgc2Vjb25kIHJlY3QuXG4gKiBAcmV0dXJuIHs/T2JqZWN0fSBUaGUgaW50ZXJzZWN0aW9uIHJlY3Qgb3IgdW5kZWZpbmVkIGlmIG5vIGludGVyc2VjdGlvblxuICogICAgIGlzIGZvdW5kLlxuICovXG5mdW5jdGlvbiBjb21wdXRlUmVjdEludGVyc2VjdGlvbihyZWN0MSwgcmVjdDIpIHtcbiAgdmFyIHRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgdmFyIGJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgdmFyIGxlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgdmFyIHJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgdmFyIHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICB2YXIgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuXG4gIHJldHVybiAod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0gMCkgJiYge1xuICAgIHRvcDogdG9wLFxuICAgIGJvdHRvbTogYm90dG9tLFxuICAgIGxlZnQ6IGxlZnQsXG4gICAgcmlnaHQ6IHJpZ2h0LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufVxuXG5cbi8qKlxuICogU2hpbXMgdGhlIG5hdGl2ZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBJRS5cbiAqIEBwYXJhbSB7RWxlbWVudH0gZWwgVGhlIGVsZW1lbnQgd2hvc2UgYm91bmRpbmcgcmVjdCB0byBnZXQuXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSAocG9zc2libHkgc2hpbW1lZCkgcmVjdCBvZiB0aGUgZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsKSB7XG4gIHZhciByZWN0O1xuXG4gIHRyeSB7XG4gICAgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBJZ25vcmUgV2luZG93cyA3IElFMTEgXCJVbnNwZWNpZmllZCBlcnJvclwiXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3czYy9JbnRlcnNlY3Rpb25PYnNlcnZlci9wdWxsLzIwNVxuICB9XG5cbiAgaWYgKCFyZWN0KSByZXR1cm4gZ2V0RW1wdHlSZWN0KCk7XG5cbiAgLy8gT2xkZXIgSUVcbiAgaWYgKCEocmVjdC53aWR0aCAmJiByZWN0LmhlaWdodCkpIHtcbiAgICByZWN0ID0ge1xuICAgICAgdG9wOiByZWN0LnRvcCxcbiAgICAgIHJpZ2h0OiByZWN0LnJpZ2h0LFxuICAgICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICAgIHdpZHRoOiByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LFxuICAgICAgaGVpZ2h0OiByZWN0LmJvdHRvbSAtIHJlY3QudG9wXG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmVjdDtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgYW4gZW1wdHkgcmVjdCBvYmplY3QuIEFuIGVtcHR5IHJlY3QgaXMgcmV0dXJuZWQgd2hlbiBhbiBlbGVtZW50XG4gKiBpcyBub3QgaW4gdGhlIERPTS5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGVtcHR5IHJlY3QuXG4gKi9cbmZ1bmN0aW9uIGdldEVtcHR5UmVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwXG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2tzIHRvIHNlZSBpZiBhIHBhcmVudCBlbGVtZW50IGNvbnRhaW5zIGEgY2hpbGQgZWxlbWVudCAoaW5jbHVkaW5nIGluc2lkZVxuICogc2hhZG93IERPTSkuXG4gKiBAcGFyYW0ge05vZGV9IHBhcmVudCBUaGUgcGFyZW50IGVsZW1lbnQuXG4gKiBAcGFyYW0ge05vZGV9IGNoaWxkIFRoZSBjaGlsZCBlbGVtZW50LlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGFyZW50IG5vZGUgY29udGFpbnMgdGhlIGNoaWxkIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zRGVlcChwYXJlbnQsIGNoaWxkKSB7XG4gIHZhciBub2RlID0gY2hpbGQ7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUgPT0gcGFyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgIG5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCBub2RlIG9mIGFuIGVsZW1lbnQgb3IgaXRzIGhvc3QgZWxlbWVudCBpZiB0aGUgcGFyZW50IG5vZGVcbiAqIGlzIGEgc2hhZG93IHJvb3QuXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIG5vZGUgd2hvc2UgcGFyZW50IHRvIGdldC5cbiAqIEByZXR1cm4ge05vZGV8bnVsbH0gVGhlIHBhcmVudCBub2RlIG9yIG51bGwgaWYgbm8gcGFyZW50IGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShub2RlKSB7XG4gIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT0gMTEgJiYgcGFyZW50Lmhvc3QpIHtcbiAgICAvLyBJZiB0aGUgcGFyZW50IGlzIGEgc2hhZG93IHJvb3QsIHJldHVybiB0aGUgaG9zdCBlbGVtZW50LlxuICAgIHJldHVybiBwYXJlbnQuaG9zdDtcbiAgfVxuICByZXR1cm4gcGFyZW50O1xufVxuXG5cbi8vIEV4cG9zZXMgdGhlIGNvbnN0cnVjdG9ycyBnbG9iYWxseS5cbndpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlciA9IEludGVyc2VjdGlvbk9ic2VydmVyO1xud2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyRW50cnkgPSBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5O1xuXG59KHdpbmRvdywgZG9jdW1lbnQpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/intersection-observer/intersection-observer.js\n") },
vendor: 8,745 bytes, line 1
1"./node_modules/jquery-revealer/jquery.revealer.js": function (module, exports) { eval('/*!\n * Revealer 2.0.0\n *\n * Copyright 2015, Pixel Union - http://pixelunion.net\n * Released under the MIT license\n */\n(function($){\n // check for trend event (make sure jquery.trend is included)\n if (typeof $.event.special.trend !== "object") {\n console.warn("Please make sure jquery.trend is included! Otherwise revealer won\'t work.");\n }\n\n // Simple requestAnimationFrame polyfill\n var raf = window.requestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n function(fn) { window.setTimeout(fn, 1000/60); }\n\n\n // Public API\n var methods = {\n isVisible: function(el) {\n return !!el.data("revealer-visible");\n },\n\n show: function(el, force) {\n // Check state\n if (methods.isVisible(el)) {\n el.removeClass("animating animating-in");\n el.off("revealer-animating revealer-show");\n return;\n }\n\n // Remove previous event listeners\n el.data("revealer-visible", true);\n el.off("trend");\n\n if (force) {\n el.addClass("visible");\n raf(function(){\n el.trigger("revealer-animating");\n el.trigger("revealer-show");\n });\n return;\n }\n\n raf(function(){\n // Start animation state transition\n el.addClass("animating animating-in");\n el.trigger("revealer-animating");\n\n raf(function(){\n el.addClass("visible");\n\n el.one("trend", function(){\n el.removeClass("animating animating-in");\n el.trigger("revealer-show");\n });\n });\n });\n },\n\n hide: function(el, force) {\n // Check state\n if (!methods.isVisible(el)) {\n el.removeClass("animating animating-out visible");\n el.off("revealer-animating revealer-hide");\n return;\n }\n\n // Remove previous event listeners\n el.data("revealer-visible", false);\n el.off("trend");\n\n if (force) {\n el.removeClass("visible");\n raf(function(){\n el.trigger("revealer-animating");\n el.trigger("revealer-hide");\n });\n return;\n }\n\n raf(function(){\n el.addClass("animating animating-out");\n el.trigger("revealer-animating");\n\n raf(function(){\n el.removeClass("visible");\n\n el.one("trend", function(){\n el.removeClass("animating animating-in animating-out");\n el.trigger("revealer-hide");\n });\n });\n });\n },\n\n toggle: function(el, force) {\n if (methods.isVisible(el)) {\n methods.hide(el, force);\n } else {\n methods.show(el, force);\n }\n }\n };\n\n // jQuery plugin\n $.fn.revealer = function(method, force) {\n // Get action\n var action = methods[method || "toggle"];\n if (!action) return this;\n\n // Run action\n if (method === "isVisible") {\n return action(this);\n }\n\n return this.each(function(){\n action($(this), force);\n });\n };\n})(jQuery);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanF1ZXJ5LXJldmVhbGVyL2pxdWVyeS5yZXZlYWxlci5qcz9jN2NiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0NBQWdDOzs7QUFHbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9qcXVlcnktcmV2ZWFsZXIvanF1ZXJ5LnJldmVhbGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBSZXZlYWxlciAyLjAuMFxuICpcbiAqIENvcHlyaWdodCAyMDE1LCBQaXhlbCBVbmlvbiAtIGh0dHA6Ly9waXhlbHVuaW9uLm5ldFxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbihmdW5jdGlvbigkKXtcbiAgLy8gY2hlY2sgZm9yIHRyZW5kIGV2ZW50IChtYWtlIHN1cmUganF1ZXJ5LnRyZW5kIGlzIGluY2x1ZGVkKVxuICBpZiAodHlwZW9mICQuZXZlbnQuc3BlY2lhbC50cmVuZCAhPT0gXCJvYmplY3RcIikge1xuICAgIGNvbnNvbGUud2FybihcIlBsZWFzZSBtYWtlIHN1cmUganF1ZXJ5LnRyZW5kIGlzIGluY2x1ZGVkISBPdGhlcndpc2UgcmV2ZWFsZXIgd29uJ3Qgd29yay5cIik7XG4gIH1cblxuICAvLyBTaW1wbGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHBvbHlmaWxsXG4gIHZhciByYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICBmdW5jdGlvbihmbikgeyB3aW5kb3cuc2V0VGltZW91dChmbiwgMTAwMC82MCk7IH1cblxuXG4gIC8vIFB1YmxpYyBBUElcbiAgdmFyIG1ldGhvZHMgPSB7XG4gICAgaXNWaXNpYmxlOiBmdW5jdGlvbihlbCkge1xuICAgICAgcmV0dXJuICEhZWwuZGF0YShcInJldmVhbGVyLXZpc2libGVcIik7XG4gICAgfSxcblxuICAgIHNob3c6IGZ1bmN0aW9uKGVsLCBmb3JjZSkge1xuICAgICAgLy8gQ2hlY2sgc3RhdGVcbiAgICAgIGlmIChtZXRob2RzLmlzVmlzaWJsZShlbCkpIHtcbiAgICAgICAgZWwucmVtb3ZlQ2xhc3MoXCJhbmltYXRpbmcgYW5pbWF0aW5nLWluXCIpO1xuICAgICAgICBlbC5vZmYoXCJyZXZlYWxlci1hbmltYXRpbmcgcmV2ZWFsZXItc2hvd1wiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgcHJldmlvdXMgZXZlbnQgbGlzdGVuZXJzXG4gICAgICBlbC5kYXRhKFwicmV2ZWFsZXItdmlzaWJsZVwiLCB0cnVlKTtcbiAgICAgIGVsLm9mZihcInRyZW5kXCIpO1xuXG4gICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgZWwuYWRkQ2xhc3MoXCJ2aXNpYmxlXCIpO1xuICAgICAgICByYWYoZnVuY3Rpb24oKXtcbiAgICAgICAgICBlbC50cmlnZ2VyKFwicmV2ZWFsZXItYW5pbWF0aW5nXCIpO1xuICAgICAgICAgIGVsLnRyaWdnZXIoXCJyZXZlYWxlci1zaG93XCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByYWYoZnVuY3Rpb24oKXtcbiAgICAgICAgLy8gU3RhcnQgYW5pbWF0aW9uIHN0YXRlIHRyYW5zaXRpb25cbiAgICAgICAgZWwuYWRkQ2xhc3MoXCJhbmltYXRpbmcgYW5pbWF0aW5nLWluXCIpO1xuICAgICAgICBlbC50cmlnZ2VyKFwicmV2ZWFsZXItYW5pbWF0aW5nXCIpO1xuXG4gICAgICAgIHJhZihmdW5jdGlvbigpe1xuICAgICAgICAgIGVsLmFkZENsYXNzKFwidmlzaWJsZVwiKTtcblxuICAgICAgICAgIGVsLm9uZShcInRyZW5kXCIsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBlbC5yZW1vdmVDbGFzcyhcImFuaW1hdGluZyBhbmltYXRpbmctaW5cIik7XG4gICAgICAgICAgICBlbC50cmlnZ2VyKFwicmV2ZWFsZXItc2hvd1wiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgaGlkZTogZnVuY3Rpb24oZWwsIGZvcmNlKSB7XG4gICAgICAvLyBDaGVjayBzdGF0ZVxuICAgICAgaWYgKCFtZXRob2RzLmlzVmlzaWJsZShlbCkpIHtcbiAgICAgICAgZWwucmVtb3ZlQ2xhc3MoXCJhbmltYXRpbmcgYW5pbWF0aW5nLW91dCB2aXNpYmxlXCIpO1xuICAgICAgICBlbC5vZmYoXCJyZXZlYWxlci1hbmltYXRpbmcgcmV2ZWFsZXItaGlkZVwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgcHJldmlvdXMgZXZlbnQgbGlzdGVuZXJzXG4gICAgICBlbC5kYXRhKFwicmV2ZWFsZXItdmlzaWJsZVwiLCBmYWxzZSk7XG4gICAgICBlbC5vZmYoXCJ0cmVuZFwiKTtcblxuICAgICAgaWYgKGZvcmNlKSB7XG4gICAgICAgIGVsLnJlbW92ZUNsYXNzKFwidmlzaWJsZVwiKTtcbiAgICAgICAgcmFmKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgZWwudHJpZ2dlcihcInJldmVhbGVyLWFuaW1hdGluZ1wiKTtcbiAgICAgICAgICBlbC50cmlnZ2VyKFwicmV2ZWFsZXItaGlkZVwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmFmKGZ1bmN0aW9uKCl7XG4gICAgICAgIGVsLmFkZENsYXNzKFwiYW5pbWF0aW5nIGFuaW1hdGluZy1vdXRcIik7XG4gICAgICAgIGVsLnRyaWdnZXIoXCJyZXZlYWxlci1hbmltYXRpbmdcIik7XG5cbiAgICAgICAgcmFmKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgZWwucmVtb3ZlQ2xhc3MoXCJ2aXNpYmxlXCIpO1xuXG4gICAgICAgICAgZWwub25lKFwidHJlbmRcIiwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGVsLnJlbW92ZUNsYXNzKFwiYW5pbWF0aW5nIGFuaW1hdGluZy1pbiBhbmltYXRpbmctb3V0XCIpO1xuICAgICAgICAgICAgZWwudHJpZ2dlcihcInJldmVhbGVyLWhpZGVcIik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIHRvZ2dsZTogZnVuY3Rpb24oZWwsIGZvcmNlKSB7XG4gICAgICBpZiAobWV0aG9kcy5pc1Zpc2libGUoZWwpKSB7XG4gICAgICAgIG1ldGhvZHMuaGlkZShlbCwgZm9yY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWV0aG9kcy5zaG93KGVsLCBmb3JjZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIGpRdWVyeSBwbHVnaW5cbiAgJC5mbi5yZXZlYWxlciA9IGZ1bmN0aW9uKG1ldGhvZCwgZm9yY2UpIHtcbiAgICAvLyBHZXQgYWN0aW9uXG4gICAgdmFyIGFjdGlvbiA9IG1ldGhvZHNbbWV0aG9kIHx8IFwidG9nZ2xlXCJdO1xuICAgIGlmICghYWN0aW9uKSByZXR1cm4gdGhpcztcblxuICAgIC8vIFJ1biBhY3Rpb25cbiAgICBpZiAobWV0aG9kID09PSBcImlzVmlzaWJsZVwiKSB7XG4gICAgICByZXR1cm4gYWN0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIGFjdGlvbigkKHRoaXMpLCBmb3JjZSk7XG4gICAgfSk7XG4gIH07XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/jquery-revealer/jquery.revealer.js\n') },
vendor: 10,620 bytes, line 1
1"./node_modules/jquery-trend/jquery.trend.js": function (module, exports) { eval('/*!\n * Trend 0.2.0\n *\n * Fail-safe TransitionEnd event for jQuery.\n *\n * Adds a new "trend" event that can be used in browsers that don\'t\n * support "transitionend".\n *\n * NOTE: Only supports being bound with "jQuery.one".\n *\n * Copyright 2014, Pixel Union - http://pixelunion.net\n * Released under the MIT license\n */\n;(function($){\n\n // Prefixed transitionend event names\n var transitionEndEvents =\n "webkitTransitionEnd " +\n "otransitionend " +\n "oTransitionEnd " +\n "msTransitionEnd " +\n "transitionend";\n\n // Prefixed transition duration property names\n var transitionDurationProperties = [\n "transition-duration",\n "-moz-transition-duration",\n "-webkit-transition-duration",\n "-ms-transition-duration",\n "-o-transition-duration",\n "-khtml-transition-duration"\n ];\n\n // Prefixed transition delay property names\n var transitionDelayProperties = [\n "transition-delay",\n "-moz-transition-delay",\n "-webkit-transition-delay",\n "-ms-transition-delay",\n "-o-transition-delay",\n "-khtml-transition-delay"\n ];\n\n // Parses a CSS time value into milliseconds.\n var parseTime = function(s) {\n s = s.replace(/\\s/, "");\n var v = window.parseFloat(s);\n\n return s.match(/[^m]s$/i)\n ? v * 1000\n : v;\n };\n\n // Parses the longest time unit found in a series of CSS properties.\n // Returns a value in milliseconds.\n var parseProperties = function(el, properties) {\n var duration = 0;\n\n for (var i = 0; i < properties.length; i++) {\n // Get raw CSS value\n var value = el.css(properties[i]);\n if (!value) continue;\n\n // Multiple transitions--pick the longest\n if (value.indexOf(",") !== -1) {\n var values = value.split(",");\n var durations = (function(){\n var results = [];\n for (var i = 0; i < values.length; i++) {\n var duration = parseTime(values[i]);\n results.push(duration);\n }\n return results;\n })();\n\n duration = Math.max.apply(Math, durations);\n }\n\n // Single transition\n else {\n duration = parseTime(value);\n }\n\n // Accept first vaue\n break;\n }\n\n return duration;\n };\n\n $.event.special.trend = {\n // Triggers an event handler when an element is done transitioning.\n //\n // Handles browsers that don\'t support transitionend by adding a\n // timeout with the transition duration.\n add: function(handleObj) {\n var el = $(this);\n var fired = false;\n\n // Mark element as being in transition\n el.data("trend", true);\n\n // Calculate a fallback duration. + 20 because some browsers fire\n // timeouts faster than transitionend.\n var time =\n parseProperties(el, transitionDurationProperties) +\n parseProperties(el, transitionDelayProperties) +\n 20;\n\n var cb = function(e) {\n // transitionend events can be sent for each property. Let\'s just\n // skip all but the first. Also handles the timeout callback.\n if (fired) return;\n\n // Child elements that also have transitions can be fired before we\n // complete. This will catch and ignore those. Unfortunately, we\'ll\n // have to rely on the timeout in these cases.\n if (e && e.srcElement !== el[0]) return;\n\n // Mark element has not being in transition\n el.data("trend", false);\n\n // Callback\n fired = true;\n if (handleObj.handler) handleObj.handler();\n };\n\n el.one(transitionEndEvents, cb);\n el.data("trend-timeout", window.setTimeout(cb, time));\n },\n\n remove: function(handleObj) {\n var el = $(this);\n el.off(transitionEndEvents);\n window.clearTimeout(el.data("trend-timeout"));\n }\n };\n\n})(jQuery);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanF1ZXJ5LXRyZW5kL2pxdWVyeS50cmVuZC5qcz9jMDQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQix1QkFBdUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsbUJBQW1CO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9qcXVlcnktdHJlbmQvanF1ZXJ5LnRyZW5kLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBUcmVuZCAwLjIuMFxuICpcbiAqIEZhaWwtc2FmZSBUcmFuc2l0aW9uRW5kIGV2ZW50IGZvciBqUXVlcnkuXG4gKlxuICogQWRkcyBhIG5ldyBcInRyZW5kXCIgZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCBpbiBicm93c2VycyB0aGF0IGRvbid0XG4gKiBzdXBwb3J0IFwidHJhbnNpdGlvbmVuZFwiLlxuICpcbiAqIE5PVEU6IE9ubHkgc3VwcG9ydHMgYmVpbmcgYm91bmQgd2l0aCBcImpRdWVyeS5vbmVcIi5cbiAqXG4gKiBDb3B5cmlnaHQgMjAxNCwgUGl4ZWwgVW5pb24gLSBodHRwOi8vcGl4ZWx1bmlvbi5uZXRcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG47KGZ1bmN0aW9uKCQpe1xuXG4gIC8vIFByZWZpeGVkIHRyYW5zaXRpb25lbmQgZXZlbnQgbmFtZXNcbiAgdmFyIHRyYW5zaXRpb25FbmRFdmVudHMgPVxuICAgIFwid2Via2l0VHJhbnNpdGlvbkVuZCBcIiArXG4gICAgXCJvdHJhbnNpdGlvbmVuZCBcIiArXG4gICAgXCJvVHJhbnNpdGlvbkVuZCBcIiArXG4gICAgXCJtc1RyYW5zaXRpb25FbmQgXCIgK1xuICAgIFwidHJhbnNpdGlvbmVuZFwiO1xuXG4gIC8vIFByZWZpeGVkIHRyYW5zaXRpb24gZHVyYXRpb24gcHJvcGVydHkgbmFtZXNcbiAgdmFyIHRyYW5zaXRpb25EdXJhdGlvblByb3BlcnRpZXMgPSBbXG4gICAgXCJ0cmFuc2l0aW9uLWR1cmF0aW9uXCIsXG4gICAgXCItbW96LXRyYW5zaXRpb24tZHVyYXRpb25cIixcbiAgICBcIi13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvblwiLFxuICAgIFwiLW1zLXRyYW5zaXRpb24tZHVyYXRpb25cIixcbiAgICBcIi1vLXRyYW5zaXRpb24tZHVyYXRpb25cIixcbiAgICBcIi1raHRtbC10cmFuc2l0aW9uLWR1cmF0aW9uXCJcbiAgXTtcblxuICAvLyBQcmVmaXhlZCB0cmFuc2l0aW9uIGRlbGF5IHByb3BlcnR5IG5hbWVzXG4gIHZhciB0cmFuc2l0aW9uRGVsYXlQcm9wZXJ0aWVzID0gW1xuICAgIFwidHJhbnNpdGlvbi1kZWxheVwiLFxuICAgIFwiLW1vei10cmFuc2l0aW9uLWRlbGF5XCIsXG4gICAgXCItd2Via2l0LXRyYW5zaXRpb24tZGVsYXlcIixcbiAgICBcIi1tcy10cmFuc2l0aW9uLWRlbGF5XCIsXG4gICAgXCItby10cmFuc2l0aW9uLWRlbGF5XCIsXG4gICAgXCIta2h0bWwtdHJhbnNpdGlvbi1kZWxheVwiXG4gIF07XG5cbiAgLy8gUGFyc2VzIGEgQ1NTIHRpbWUgdmFsdWUgaW50byBtaWxsaXNlY29uZHMuXG4gIHZhciBwYXJzZVRpbWUgPSBmdW5jdGlvbihzKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFxzLywgXCJcIik7XG4gICAgdmFyIHYgPSB3aW5kb3cucGFyc2VGbG9hdChzKTtcblxuICAgIHJldHVybiBzLm1hdGNoKC9bXm1dcyQvaSlcbiAgICAgID8gdiAqIDEwMDBcbiAgICAgIDogdjtcbiAgfTtcblxuICAvLyBQYXJzZXMgdGhlIGxvbmdlc3QgdGltZSB1bml0IGZvdW5kIGluIGEgc2VyaWVzIG9mIENTUyBwcm9wZXJ0aWVzLlxuICAvLyBSZXR1cm5zIGEgdmFsdWUgaW4gbWlsbGlzZWNvbmRzLlxuICB2YXIgcGFyc2VQcm9wZXJ0aWVzID0gZnVuY3Rpb24oZWwsIHByb3BlcnRpZXMpIHtcbiAgICB2YXIgZHVyYXRpb24gPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBHZXQgcmF3IENTUyB2YWx1ZVxuICAgICAgdmFyIHZhbHVlID0gZWwuY3NzKHByb3BlcnRpZXNbaV0pO1xuICAgICAgaWYgKCF2YWx1ZSkgY29udGludWU7XG5cbiAgICAgIC8vIE11bHRpcGxlIHRyYW5zaXRpb25zLS1waWNrIHRoZSBsb25nZXN0XG4gICAgICBpZiAodmFsdWUuaW5kZXhPZihcIixcIikgIT09IC0xKSB7XG4gICAgICAgIHZhciB2YWx1ZXMgPSB2YWx1ZS5zcGxpdChcIixcIik7XG4gICAgICAgIHZhciBkdXJhdGlvbnMgPSAoZnVuY3Rpb24oKXtcbiAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZHVyYXRpb24gPSBwYXJzZVRpbWUodmFsdWVzW2ldKTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChkdXJhdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSgpO1xuXG4gICAgICAgIGR1cmF0aW9uID0gTWF0aC5tYXguYXBwbHkoTWF0aCwgZHVyYXRpb25zKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2luZ2xlIHRyYW5zaXRpb25cbiAgICAgIGVsc2Uge1xuICAgICAgICBkdXJhdGlvbiA9IHBhcnNlVGltZSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFjY2VwdCBmaXJzdCB2YXVlXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gZHVyYXRpb247XG4gIH07XG5cbiAgJC5ldmVudC5zcGVjaWFsLnRyZW5kID0ge1xuICAgIC8vIFRyaWdnZXJzIGFuIGV2ZW50IGhhbmRsZXIgd2hlbiBhbiBlbGVtZW50IGlzIGRvbmUgdHJhbnNpdGlvbmluZy5cbiAgICAvL1xuICAgIC8vIEhhbmRsZXMgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHRyYW5zaXRpb25lbmQgYnkgYWRkaW5nIGFcbiAgICAvLyB0aW1lb3V0IHdpdGggdGhlIHRyYW5zaXRpb24gZHVyYXRpb24uXG4gICAgYWRkOiBmdW5jdGlvbihoYW5kbGVPYmopIHtcbiAgICAgIHZhciBlbCA9ICQodGhpcyk7XG4gICAgICB2YXIgZmlyZWQgPSBmYWxzZTtcblxuICAgICAgLy8gTWFyayBlbGVtZW50IGFzIGJlaW5nIGluIHRyYW5zaXRpb25cbiAgICAgIGVsLmRhdGEoXCJ0cmVuZFwiLCB0cnVlKTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIGEgZmFsbGJhY2sgZHVyYXRpb24uICsgMjAgYmVjYXVzZSBzb21lIGJyb3dzZXJzIGZpcmVcbiAgICAgIC8vIHRpbWVvdXRzIGZhc3RlciB0aGFuIHRyYW5zaXRpb25lbmQuXG4gICAgICB2YXIgdGltZSA9XG4gICAgICAgIHBhcnNlUHJvcGVydGllcyhlbCwgdHJhbnNpdGlvbkR1cmF0aW9uUHJvcGVydGllcykgK1xuICAgICAgICBwYXJzZVByb3BlcnRpZXMoZWwsIHRyYW5zaXRpb25EZWxheVByb3BlcnRpZXMpICtcbiAgICAgICAgMjA7XG5cbiAgICAgIHZhciBjYiA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgLy8gdHJhbnNpdGlvbmVuZCBldmVudHMgY2FuIGJlIHNlbnQgZm9yIGVhY2ggcHJvcGVydHkuIExldCdzIGp1c3RcbiAgICAgICAgLy8gc2tpcCBhbGwgYnV0IHRoZSBmaXJzdC4gQWxzbyBoYW5kbGVzIHRoZSB0aW1lb3V0IGNhbGxiYWNrLlxuICAgICAgICBpZiAoZmlyZWQpIHJldHVybjtcblxuICAgICAgICAvLyBDaGlsZCBlbGVtZW50cyB0aGF0IGFsc28gaGF2ZSB0cmFuc2l0aW9ucyBjYW4gYmUgZmlyZWQgYmVmb3JlIHdlXG4gICAgICAgIC8vIGNvbXBsZXRlLiBUaGlzIHdpbGwgY2F0Y2ggYW5kIGlnbm9yZSB0aG9zZS4gVW5mb3J0dW5hdGVseSwgd2UnbGxcbiAgICAgICAgLy8gaGF2ZSB0byByZWx5IG9uIHRoZSB0aW1lb3V0IGluIHRoZXNlIGNhc2VzLlxuICAgICAgICBpZiAoZSAmJiBlLnNyY0VsZW1lbnQgIT09IGVsWzBdKSByZXR1cm47XG5cbiAgICAgICAgLy8gTWFyayBlbGVtZW50IGhhcyBub3QgYmVpbmcgaW4gdHJhbnNpdGlvblxuICAgICAgICBlbC5kYXRhKFwidHJlbmRcIiwgZmFsc2UpO1xuXG4gICAgICAgIC8vIENhbGxiYWNrXG4gICAgICAgIGZpcmVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKGhhbmRsZU9iai5oYW5kbGVyKSBoYW5kbGVPYmouaGFuZGxlcigpO1xuICAgICAgfTtcblxuICAgICAgZWwub25lKHRyYW5zaXRpb25FbmRFdmVudHMsIGNiKTtcbiAgICAgIGVsLmRhdGEoXCJ0cmVuZC10aW1lb3V0XCIsIHdpbmRvdy5zZXRUaW1lb3V0KGNiLCB0aW1lKSk7XG4gICAgfSxcblxuICAgIHJlbW92ZTogZnVuY3Rpb24oaGFuZGxlT2JqKSB7XG4gICAgICB2YXIgZWwgPSAkKHRoaXMpO1xuICAgICAgZWwub2ZmKHRyYW5zaXRpb25FbmRFdmVudHMpO1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dChlbC5kYXRhKFwidHJlbmQtdGltZW91dFwiKSk7XG4gICAgfVxuICB9O1xuXG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/jquery-trend/jquery.trend.js\n') },
vendor: 804,513 bytes, line 1
1"./node_modules/jquery/dist/jquery.js": function (module, exports, __webpack_require__) { eval('var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v3.4.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2019-05-01T21:04Z\n */\n( function( global, factory ) {\n\n\t"use strict";\n\n\tif ( true && typeof module.exports === "object" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require("jquery")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( "jQuery requires a window with a document" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n"use strict";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns "function" for HTML <object> elements\n // (i.e., `typeof document.createElement( "object" ) === "function"`).\n // We don\'t want to classify *any* DOM node as a function.\n return typeof obj === "function" && typeof obj.nodeType !== "number";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( "script" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don\'t support the "nonce" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + "";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === "object" || typeof obj === "function" ?\n\t\tclass2type[ toString.call( obj ) ] || "object" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = "3.4.1",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor \'enhanced\'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array\'s method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === "boolean" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== "object" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === "__proto__" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we\'re merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don\'t bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: "jQuery" + ( version + Math.random() ).replace( /\\D/g, "" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== "[object Object]" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, "constructor" ) && proto.constructor;\n\t\treturn typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code, options ) {\n\t\tDOMEval( code, { nonce: options && options.nonce } );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t"" :\n\t\t\t( text + "" ).replace( rtrim, "" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === "string" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === "function" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),\nfunction( i, name ) {\n\tclass2type[ "[object " + name + "]" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn\'t used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && "length" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === "array" || length === 0 ||\n\t\ttypeof length === "number" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.4\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2019-04-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = "sizzle" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it\'s faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = "[\\\\x20\\\\t\\\\r\\\\n\\\\f]",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = "(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = "\\\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +\n\t\t// Operator (capture 2)\n\t\t"*([*^$|!~]?=)" + whitespace +\n\t\t// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"\n\t\t"*(?:\'((?:\\\\\\\\.|[^\\\\\\\\\'])*)\'|\\"((?:\\\\\\\\.|[^\\\\\\\\\\"])*)\\"|(" + identifier + "))|)" + whitespace +\n\t\t"*\\\\]",\n\n\tpseudos = ":(" + identifier + ")(?:\\\\((" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t"(\'((?:\\\\\\\\.|[^\\\\\\\\\'])*)\'|\\"((?:\\\\\\\\.|[^\\\\\\\\\\"])*)\\")|" +\n\t\t// 2. simple (capture 6)\n\t\t"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|" + attributes + ")*)|" +\n\t\t// 3. anything else (capture 2)\n\t\t".*" +\n\t\t")\\\\)|)",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + "+", "g" ),\n\trtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)" + whitespace + "+$", "g" ),\n\n\trcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),\n\trcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),\n\trdescend = new RegExp( whitespace + "|>" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( "^" + identifier + "$" ),\n\n\tmatchExpr = {\n\t\t"ID": new RegExp( "^#(" + identifier + ")" ),\n\t\t"CLASS": new RegExp( "^\\\\.(" + identifier + ")" ),\n\t\t"TAG": new RegExp( "^(" + identifier + "|[*])" ),\n\t\t"ATTR": new RegExp( "^" + attributes ),\n\t\t"PSEUDO": new RegExp( "^" + pseudos ),\n\t\t"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(" + whitespace +\n\t\t\t"*(even|odd|(([+-]|)(\\\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +\n\t\t\t"*(\\\\d+)|))" + whitespace + "*\\\\)|)", "i" ),\n\t\t"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(" +\n\t\t\twhitespace + "*((?:-\\\\d)?\\\\d*)" + whitespace + "*\\\\)|)(?=[^-]|$)", "i" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( "\\\\\\\\([\\\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = "0x" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +"0x"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === "\\0" ) {\n\t\t\t\treturn "\\uFFFD";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + "\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn "\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a "Permission Denied"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";\n\t\t},\n\t\t{ dir: "parentNode", next: "legend" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can\'t trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== "string" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a "get*By*" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don\'t exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + " " ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t(nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 && rdescend.test( selector ) ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( "id" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( "id", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = "#" + nid + " " + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( "," );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( "id" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, "$1" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + " " ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + " " ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement("fieldset");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split("|"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === "input" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === "input" || name === "button") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( "form" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a "form" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( "label" in elem ) {\n\t\t\t\t\tif ( "label" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can\'t be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn\'t\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( "label" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== "undefined" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = (elem.ownerDocument || elem).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn\'t yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( "unload", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( "onunload", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = "i";\n\t\treturn !el.getAttribute("className");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName("*") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment("") );\n\t\treturn !el.getElementsByTagName("*").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don\'t pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter["ID"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute("id") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find["ID"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== "undefined" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter["ID"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== "undefined" &&\n\t\t\t\t\telem.getAttributeNode("id");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find["ID"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== "undefined" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode("id");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode("id");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find["TAG"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== "undefined" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don\'t have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === "*" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE\'s treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = "<a id=\'" + expando + "\'></a>" +\n\t\t\t\t"<select id=\'" + expando + "-\\r\\\\\' msallowcapture=\'\'>" +\n\t\t\t\t"<option selected=\'\'></option></select>";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but "safe" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll("[msallowcapture^=\'\']").length ) {\n\t\t\t\trbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\'\'|\\"\\")" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and "value" are not treated correctly\n\t\t\tif ( !el.querySelectorAll("[selected]").length ) {\n\t\t\t\trbuggyQSA.push( "\\\\[" + whitespace + "*(?:value|" + booleans + ")" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {\n\t\t\t\trbuggyQSA.push("~=");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(":checked").length ) {\n\t\t\t\trbuggyQSA.push(":checked");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {\n\t\t\t\trbuggyQSA.push(".#.+[+~]");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = "<a href=\'\' disabled=\'disabled\'></a>" +\n\t\t\t\t"<select disabled=\'disabled\'><option/></select>";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement("input");\n\t\t\tinput.setAttribute( "type", "hidden" );\n\t\t\tel.appendChild( input ).setAttribute( "name", "D" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll("[name=d]").length ) {\n\t\t\t\trbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(":enabled").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( ":enabled", ":disabled" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE\'s :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(":disabled").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( ":enabled", ":disabled" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll("*,:x");\n\t\t\trbuggyQSA.push(",.*:");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it\'s possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, "*" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, "[s!=\'\']:x" );\n\t\t\trbuggyMatches.push( "!=", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + " " ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9\'s matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don\'t get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + "").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( "Syntax error, unrecognized expression: " + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = "",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === "string" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t">": { dir: "parentNode", first: true },\n\t\t" ": { dir: "parentNode" },\n\t\t"+": { dir: "previousSibling", first: true },\n\t\t"~": { dir: "previousSibling" }\n\t},\n\n\tpreFilter: {\n\t\t"ATTR": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === "~=" ) {\n\t\t\t\tmatch[3] = " " + match[3] + " ";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t"CHILD": function( match ) {\n\t\t\t/* matches from matchExpr["CHILD"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === "nth" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t"PSEUDO": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr["CHILD"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || "";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t"TAG": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === "*" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t"CLASS": function( className ) {\n\t\t\tvar pattern = classCache[ className + " " ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );\n\t\t\t\t});\n\t\t},\n\n\t\t"ATTR": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === "!=";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += "";\n\n\t\t\t\treturn operator === "=" ? result === check :\n\t\t\t\t\toperator === "!=" ? result !== check :\n\t\t\t\t\toperator === "^=" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === "*=" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === "$=" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t"CHILD": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== "nth",\n\t\t\t\tforward = type.slice( -4 ) !== "last",\n\t\t\t\tofType = what === "of-type";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? "nextSibling" : "previousSibling",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven\'t yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === "only" && !start && "nextSibling";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t"PSEUDO": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( "unsupported pseudo: " + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, "", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t"not": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, "$1" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don\'t keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t"has": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t"contains": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// "Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element\'s language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by "-".\n\t\t// The matching of C against the element\'s language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name."\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t"lang": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || "") ) {\n\t\t\t\tSizzle.error( "unsupported lang: " + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t"target": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t"root": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t"focus": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t"enabled": createDisabledPseudo( false ),\n\t\t"disabled": createDisabledPseudo( true ),\n\n\t\t"checked": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);\n\t\t},\n\n\t\t"selected": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t"empty": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t"parent": function( elem ) {\n\t\t\treturn !Expr.pseudos["empty"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t"header": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t"input": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t"button": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === "input" && elem.type === "button" || name === "button";\n\t\t},\n\n\t\t"text": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === "input" &&\n\t\t\t\telem.type === "text" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"\n\t\t\t\t( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t"first": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t"last": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t"even": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t"odd": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos["nth"] = Expr.pseudos["eq"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + " " ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don\'t consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, " " )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we\'re just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = "";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === "parentNode",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can\'t set arbitrary data on XML nodes, so they don\'t benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we\'re done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[" "],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })\n\t\t\t\t\t).replace( rtrim, "$1" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = "0",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find["TAG"]( "*", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn\'t visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a "00" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + " " ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle\'s compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === "function" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split("").sort( sortOrder ).join("") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren\'t passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement("fieldset") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property "interpolation"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = "<a href=\'#\'></a>";\n\treturn el.firstChild.getAttribute("href") === "#" ;\n}) ) {\n\taddHandle( "type|href|height|width", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute("value")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = "<input/>";\n\tel.firstChild.setAttribute( "value", "" );\n\treturn el.firstChild.getAttribute( "value" ) === "";\n}) ) {\n\taddHandle( "value", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === "input" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute("disabled") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ ":" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== "string" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = ":not(" + expr + ")";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== "string" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $("p:first").is("p:last") won\'t return true for a doc with two "p".\n\t\t\ttypeof selector === "string" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(""), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === "string" ) {\n\t\t\tif ( selector[ 0 ] === "<" &&\n\t\t\t\tselector[ selector.length - 1 ] === ">" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== "string" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there\'s no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don\'t pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === "string" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, "parentNode" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, "parentNode", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, "nextSibling" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, "previousSibling" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, "nextSibling" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, "previousSibling" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, "nextSibling", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, "previousSibling", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( typeof elem.contentDocument !== "undefined" ) {\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don\'t support it.\n\t\tif ( nodeName( elem, "template" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== "Until" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === "string" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * "fired" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest "memorized"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === "string" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn\'t re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we\'re done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we\'re done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = "";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== "string" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = "";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = "";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn\'t unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ "notify", "progress", jQuery.Callbacks( "memory" ),\n\t\t\t\t\tjQuery.Callbacks( "memory" ), 2 ],\n\t\t\t\t[ "resolve", "done", jQuery.Callbacks( "once memory" ),\n\t\t\t\t\tjQuery.Callbacks( "once memory" ), 0, "resolved" ],\n\t\t\t\t[ "reject", "fail", jQuery.Callbacks( "once memory" ),\n\t\t\t\t\tjQuery.Callbacks( "once memory" ), 1, "rejected" ]\n\t\t\t],\n\t\t\tstate = "pending",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t"catch": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + "With" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( "Thenable self-resolution" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === "object" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === "function" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it\'s otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = "resolved" (i.e., fulfilled)\n\t\t\t\t\t\t// state = "rejected"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + "With" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === "pending" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we\'re already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( "DOMContentLoaded", completed );\n\twindow.removeEventListener( "load", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals "interactive" too soon\nif ( document.readyState === "complete" ||\n\t( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( "DOMContentLoaded", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( "load", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it\'s a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === "object" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === "string" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the "read" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === "string" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the "set" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there\'s no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module\'s maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support "private" and "user" data.\n//\t4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === "true" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === "false" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === "null" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn\'t change the string\n\tif ( data === +data + "" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === "string" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn\'t changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( "data-" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, "hasDataAttrs", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === "object" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to "discover" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn\'t exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || "fx" ) + "queue";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || "fx";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === "inprogress" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === "fx" ) {\n\t\t\t\tqueue.unshift( "inprogress" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + "queueHooks";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( "once memory" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + "queue", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== "string" ) {\n\t\t\tdata = type;\n\t\t\ttype = "fx";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === "fx" && queue[ 0 ] !== "inprogress" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || "fx", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== "string" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || "fx";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + "queueHooks" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );\n\n\nvar cssExpand = [ "Top", "Right", "Bottom", "Left" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === "none" ||\n\t\t\telem.style.display === "" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, "display" ) === "none";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, "" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, "display" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === "none" ) {\n\t\tdisplay = "block";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === "none" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, "display" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = "";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== "none" ) {\n\t\t\t\tvalues[ index ] = "none";\n\n\t\t\t\t// Remember what we\'re overwriting\n\t\t\t\tdataPriv.set( elem, "display", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === "boolean" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, "<select multiple=\'multiple\'>", "</select>" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, "<table>", "</table>" ],\n\tcol: [ 2, "<table><colgroup>", "</colgroup></table>" ],\n\ttr: [ 2, "<table><tbody>", "</tbody></table>" ],\n\ttd: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],\n\n\t_default: [ 0, "", "" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== "undefined" ) {\n\t\tret = context.getElementsByTagName( tag || "*" );\n\n\t} else if ( typeof context.querySelectorAll !== "undefined" ) {\n\t\tret = context.querySelectorAll( tag || "*" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t"globalEval",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], "globalEval" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === "object" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( "div" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = "";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = "";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), "script" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || "" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( "div" ) ),\n\t\tinput = document.createElement( "input" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( "type", "radio" );\n\tinput.setAttribute( "checked", "checked" );\n\tinput.setAttribute( "name", "t" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn\'t clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = "<textarea>x</textarea>";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === "focus" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === "object" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== "string" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === "string" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards\' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don\'t attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element\'s event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || "" ).match( rnothtmlwhite ) || [ "" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( "." )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we\'re the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element\'s handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || "" ).match( rnothtmlwhite ) || [ "" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( "(^|\\\\.)" + namespaces.join( "\\\\.(?:.*\\\\.|)" ) + "(\\\\.|$)" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === "**" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it\'s no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, "handle events" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event\'s.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === "click" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don\'t check non-elements (#13208)\n\t\t\t\t// Don\'t process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don\'t conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + " ";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, "input" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, "click", ... )\n\t\t\t\t\tleverageNative( el, "click", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, "input" ) ) {\n\n\t\t\t\t\tleverageNative( el, "click" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we\'re currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, "input" ) &&\n\t\t\t\t\tdataPriv.get( target, "click" ) ||\n\t\t\t\t\tnodeName( target, "a" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn\'t alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This "if" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the \'new\' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn\'t have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t"char": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, "focus", ... )\n\t\t\t// dataPriv.set( this, "blur", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: "mouseover",\n\tmouseleave: "mouseout",\n\tpointerenter: "pointerover",\n\tpointerleave: "pointerout"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + "." + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === "object" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === "function" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked="checked" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, "table" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {\n\n\t\treturn jQuery( elem ).children( "tbody" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( "type" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === "input" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === "input" || nodeName === "textarea" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can\'t cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === "string" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, "script" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, "script" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || "" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, "globalEval" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won\'t run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( "nonce" )\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, "script" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, "<$1></$2>" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, "script" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, "script" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove\'s overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = "";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === "string" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: "append",\n\tprependTo: "prepend",\n\tinsertBefore: "before",\n\tinsertAfter: "after",\n\treplaceAll: "replaceWith"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they\'re executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = "position:absolute;left:-11111px;width:60px;" +\n\t\t\t"margin-top:1px;padding:0;border:0";\n\t\tdiv.style.cssText =\n\t\t\t"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +\n\t\t\t"margin:auto;border:1px;padding:1px;" +\n\t\t\t"width:60%;top:1%";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== "1%";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn\'t\n\t\tdiv.style.right = "60%";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don\'t get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = "absolute";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn\'t be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( "div" ),\n\t\tdiv = document.createElement( "div" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = "content-box";\n\tdiv.cloneNode( true ).style.backgroundClip = "";\n\tsupport.clearCloneStyle = div.style.backgroundClip === "content-box";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css(\'filter\') (IE 9 only, #12537)\n\t// .css(\'--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === "" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the "awesome hack by Dean Edwards"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + "" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we\'ll check on the first run if it\'s really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it\'s not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ "Webkit", "Moz", "ms" ],\n\temptyStyle = document.createElement( "div" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except "table", "table-cell", or "table-caption"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: "absolute", visibility: "hidden", display: "block" },\n\tcssNormalTransform = {\n\t\tletterSpacing: "0",\n\t\tfontWeight: "400"\n\t};\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined "subtract", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === "width" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? "border" : "content" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === "margin" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we\'re seeking "padding" or "border" or "margin"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );\n\n\t\t\t// For "border" or "margin", add border\n\t\t\tif ( box !== "padding" ) {\n\t\t\t\tdelta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we\'re seeking "content" or\n\t\t// "padding" or "margin"\n\t\t} else {\n\n\t\t\t// For "content", subtract padding\n\t\t\tif ( box === "content" ) {\n\t\t\t\tdelta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For "content" or "padding", subtract border\n\t\t\tif ( box !== "margin" ) {\n\t\t\t\tdelta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can\'t determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it\'s needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, "boxSizing", false, styles ) === "border-box",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = "auto";\n\t}\n\n\n\t// Fall back to offsetWidth/offsetHeight when value is "auto"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t// Support: IE 9-11 only\n\t// Also use offsetWidth/offsetHeight for when box sizing is unreliable\n\t// We use getClientRects() to check for hidden/disconnected.\n\t// In those cases, the computed value can be trusted to be border-box\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\t\tval === "auto" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize "" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element\'s box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? "border" : "content" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + "px";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, "opacity" );\n\t\t\t\t\treturn ret === "" ? "1" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don\'t automatically add "px" to these possibly-unitless properties\n\tcssNumber: {\n\t\t"animationIterationCount": true,\n\t\t"columnCount": true,\n\t\t"fillOpacity": true,\n\t\t"flexGrow": true,\n\t\t"flexShrink": true,\n\t\t"fontWeight": true,\n\t\t"gridArea": true,\n\t\t"gridColumn": true,\n\t\t"gridColumnEnd": true,\n\t\t"gridColumnStart": true,\n\t\t"gridRow": true,\n\t\t"gridRowEnd": true,\n\t\t"gridRowStart": true,\n\t\t"lineHeight": true,\n\t\t"opacity": true,\n\t\t"order": true,\n\t\t"orphans": true,\n\t\t"widows": true,\n\t\t"zIndex": true,\n\t\t"zoom": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don\'t set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we\'re working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we\'re working with the right name. We don\'t\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we\'re setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert "+=" or "-=" to relative numbers (#7345)\n\t\t\tif ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = "number";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren\'t set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// "px" to a few hardcoded values.\n\t\t\tif ( type === "number" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone\'s values\n\t\t\tif ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {\n\t\t\t\tstyle[ name ] = "inherit";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( "set" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && "get" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we\'re working with the right name. We don\'t\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && "get" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert "normal" to computed value\n\t\tif ( val === "normal" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === "" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ "height", "width" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, "display" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === "absolute",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, "boxSizing", false, styles ) === "border-box",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, "border", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || "px" ) !== "px" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, "marginLeft" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + "px";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: "",\n\tpadding: "",\n\tborder: "Width"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === "string" ? value.split( " " ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== "margin" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as "10px" are parsed to Float;\n\t\t\t// complex values such as "rotate(1rad)" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, "" );\n\n\t\t\t// Empty strings, null, undefined and "auto" are converted to 0.\n\t\t\treturn !result || result === "auto" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: "swing"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ "margin" + which ] = attrs[ "padding" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We\'re done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = "width" in props || "height" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, "fxshow" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, "fx" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, "fx" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === "toggle";\n\t\t\tif ( value === ( hidden ? "hide" : "show" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a "show" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict "overflow" and "display" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, "display" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, "display" );\n\t\tif ( display === "none" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, "display" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, "float" ) === "none" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === "none" ? "" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = "inline-block";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = "hidden";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( "hidden" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` "reverses"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a "hide" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, "fxshow" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && "expand" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won\'t overwrite existing keys.\n\t\t\t// Reusing \'index\' because we have the correct "name"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don\'t match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won\'t allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there\'s more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t"*": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ "*" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== "number" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> "fx"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = "fx";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won\'t be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, "finish" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== "string" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || "fx", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + "queueHooks",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn\'t forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || "fx";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + "queue" ],\n\t\t\t\thooks = data[ type + "queueHooks" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === "boolean" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( "show" ),\n\tslideUp: genFx( "hide" ),\n\tslideToggle: genFx( "toggle" ),\n\tfadeIn: { opacity: "show" },\n\tfadeOut: { opacity: "hide" },\n\tfadeToggle: { opacity: "toggle" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || "fx";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( "input" ),\n\t\tselect = document.createElement( "select" ),\n\t\topt = select.appendChild( document.createElement( "option" ) );\n\n\tinput.type = "checkbox";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be "on"\n\tsupport.checkOn = input.value !== "";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( "input" );\n\tinput.value = "t";\n\tinput.type = "radio";\n\tsupport.radioValue = input.value === "t";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don\'t get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === "undefined" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && "set" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + "" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === "radio" &&\n\t\t\t\t\tnodeName( elem, "input" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( "type", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don\'t get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && "set" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn\'t always return the\n\t\t\t\t// correct value when it hasn\'t been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, "tabindex" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t"for": "htmlFor",\n\t\t"class": "className"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule "no-unused-expressions" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: "off" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: "off" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t"tabIndex",\n\t"readOnly",\n\t"maxLength",\n\t"cellSpacing",\n\t"cellPadding",\n\t"rowSpan",\n\t"colSpan",\n\t"useMap",\n\t"frameBorder",\n\t"contentEditable"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( " " );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( "class" ) || "";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === "string" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( " " + clazz + " " ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + " ";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( "class", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( "class", "" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( " " + clazz + " " ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( " " + clazz + " ", " " );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( "class", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === "string" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === "boolean" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === "boolean" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, "__className__", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we\'re passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( "class",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t"" :\n\t\t\t\t\t\tdataPriv.get( this, "__className__" ) || ""\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = " " + selector + " ";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t"get" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, "value" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === "string" ) {\n\t\t\t\t\treturn ret.replace( rreturn, "" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? "" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as ""; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = "";\n\n\t\t\t} else if ( typeof val === "number" ) {\n\t\t\t\tval += "";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? "" : value + "";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, "value" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === "select-one",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn\'t update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don\'t return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, "optgroup" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don\'t need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ "radio", "checkbox" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( "value" ) === null ? "on" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = "onfocusin" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, "type" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don\'t do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we\'re not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( "." ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( "." );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( ":" ) < 0 && "on" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === "object" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( "." );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( "(^|\\\\.)" + namespaces.join( "\\\\.(?:.*\\\\.|)" ) + "(\\\\.|$)" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, "handle" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don\'t do default actions on window, that\'s where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don\'t re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn\'t have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== "string" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {\n\t\tjQuery.error( "Invalid XML: " + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === "object" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + "=" +\n\t\t\t\tencodeURIComponent( value == null ? "" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn "";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the "old" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( "&" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for "elements" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, "elements" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( ":disabled" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( ":disabled" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, "\\r\\n" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, "\\r\\n" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol "*" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to "*" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol "*" can be used\n\t * 3) selection will start with transport dataType and THEN go to "*" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = "*/".concat( "*" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( "a" );\n\toriginAnchor.href = location.href;\n\n// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to "*"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== "string" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = "*";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === "+" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || "*";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === "string" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );\n}\n\n// A special extend for ajax options\n// that takes "flat" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === "*" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );\n\t\t}\n\t}\n\n\t// Check if we\'re dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There\'s only work to do if current dataType is non-auto\n\t\t\tif ( current === "*" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== "*" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + " " + current ] || converters[ "* " + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( " " );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + " " + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ "* " + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: "parsererror",\n\t\t\t\t\t\t\t\terror: conv ? e : "No conversion from " + prev + " to " + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: "success", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: "GET",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: "application/x-www-form-urlencoded; charset=UTF-8",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t"*": allTypes,\n\t\t\ttext: "text/plain",\n\t\t\thtml: "text/html",\n\t\t\txml: "application/xml, text/xml",\n\t\t\tjson: "application/json, text/javascript"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: "responseXML",\n\t\t\ttext: "responseText",\n\t\t\tjson: "responseJSON"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall "*") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t"* text": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t"text html": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t"text json": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t"text xml": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn\'t be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn\'t be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === "object" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( "once memory" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = "canceled",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + " " ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + " " ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( ", " );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + "" )\n\t\t\t.replace( rprotocol, location.protocol + "//" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];\n\n\t\t// A cross-domain request is in order when the origin doesn\'t match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( "a" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor\'s host property isn\'t correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + "//" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== "string" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don\'t fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( "ajaxStart" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we\'re toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, "" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === "string" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it\'s not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, "$1" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change \'%20\' to \'+\' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, "+" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( "Content-Type", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t"Accept",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :\n\t\t\t\ts.accepts[ "*" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = "abort";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, "No Transport" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( "timeout" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || "";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( "Last-Modified" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( "etag" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === "HEAD" ) {\n\t\t\t\t\tstatusText = "nocontent";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = "notmodified";\n\n\t\t\t\t// If we have data, let\'s convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = "error";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + "";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( "ajaxStop" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, "json" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, "script" );\n\t}\n} );\n\njQuery.each( [ "get", "post" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url, options ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: "GET",\n\t\tdataType: "script",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t"text script": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( "body" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won\'t change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {\n\t\t\t\t\theaders[ "X-Requested-With" ] = "XMLHttpRequest";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === "abort" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === "error" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== "number" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, "error" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || "text" ) !== "text" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== "string" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( "abort" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn\'t been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: "text/javascript, application/javascript, " +\n\t\t\t"application/ecmascript, application/x-ecmascript"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t"text script": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache\'s special case and crossDomain\njQuery.ajaxPrefilter( "script", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = "GET";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( "script", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( "<script>" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( "load error", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === "error" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: "callback",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t"url" :\n\t\t\ttypeof s.data === "string" &&\n\t\t\t\t( s.contentType || "" )\n\t\t\t\t\t.indexOf( "application/x-www-form-urlencoded" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && "data"\n\t\t);\n\n\t// Handle iff the expected data type is "jsonp" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ "script json" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + " was not called" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = "json";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn\'t exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn\'t screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn "script";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( "" ).body;\n\tbody.innerHTML = "<form></form><form></form>";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument "data" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== "string" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === "boolean" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( "" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document\'s URL (gh-2965)\n\t\t\tbase = context.createElement( "base" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( " " );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it\'s a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it\'s the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === "object" ) {\n\t\ttype = "POST";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If "type" variable is undefined, then "GET" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || "GET",\n\t\t\tdataType: "html",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE \'Permission Denied\' errors\n\t\t\t\tjQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets "data", "status", "jqXHR"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets "jqXHR", "status", "error"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t"ajaxStart",\n\t"ajaxStop",\n\t"ajaxComplete",\n\t"ajaxError",\n\t"ajaxSuccess",\n\t"ajaxSend"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, "position" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === "static" ) {\n\t\t\telem.style.position = "relative";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, "top" );\n\t\tcurCSSLeft = jQuery.css( elem, "left" );\n\t\tcalculatePosition = ( position === "absolute" || position === "fixed" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( "using" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element\'s border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element\'s margin box to its offset parent\'s padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, "position" ) === "fixed" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, "position" ) === "static" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {\n\tvar top = "pageYOffset" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ "top", "left" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + "px" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: "height", Width: "width" }, function( name, type ) {\n\tjQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( "outer" ) === 0 ?\n\t\t\t\t\t\telem[ "inner" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ "client" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ "scroll" + name ], doc[ "scroll" + name ],\n\t\t\t\t\t\telem.body[ "offset" + name ], doc[ "offset" + name ],\n\t\t\t\t\t\tdoc[ "client" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +\n\t"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +\n\t"change select submit keydown keypress keyup contextmenu" ).split( " " ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, "**" ) :\n\t\t\tthis.off( types, selector || "**", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === "string" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === "number" || type === "string" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives ("")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals ("0x...")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( true ) {\n\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\treturn jQuery;\n\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzPzExNTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxNQUFNLEtBQTBCOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLFlBQVk7O0FBRXBCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRixvQkFBb0I7O0FBRXBCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxrQkFBa0Isa0NBQWtDO0FBQ3BELEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxZQUFZO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLFNBQVM7QUFDbEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTLFlBQVk7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFlBQVk7QUFDdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxTQUFTO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixJQUFJOztBQUVwQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsSUFBSTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRLDZCQUE2QjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLGFBQWEsdUJBQXVCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtB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QUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFLFVBQVU7QUFDM0Usc0NBQXNDLDJCQUEyQjtBQUNqRTtBQUNBLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLFVBQVUsWUFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxVQUFVLFlBQVk7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFVBQVU7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsVUFBVSxjQUFjO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0EsWUFBWSx1RUFBdUU7QUFDbkY7QUFDQTtBQUNBLFlBQVksNEJBQTRCO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsU0FBUztBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQTtBQUNBLG9GQUFvRjs7QUFFcEY7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxTQUFTO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLFNBQVM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsUUFBUSxTQUFTO0FBQ2pCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxpREFBaUQ7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpREFBaUQ7QUFDakQsVUFBVSx3Q0FBd0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTs7QUFFQSxDQUFDOzs7O0FBSUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsUUFBUSxHQUFHO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7Ozs7QUFJQTs7QUFFQTs7QUFFQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7O0FBRUEsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxPQUFPO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLE9BQU87QUFDakIsMEJBQTBCLHdCQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsMENBQTBDO0FBQzFDLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjs7QUFFbkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVSxjQUFjO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0NBQXdDLHNDQUFzQztBQUM5RSxvQ0FBb0MsdUNBQXVDO0FBQzNFLG9DQUFvQyxzQ0FBc0M7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixPQUFPO0FBQ1A7QUFDQSxNQUFNO0FBQ04sS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQztBQUNwQyxxQ0FBcUM7QUFDckMsb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7Ozs7O0FBS0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxTQUFTO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsYUFBYTtBQUNwQyxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixTQUFTO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBOzs7QUFHQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxnQkFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGdCQUFnQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEOztBQUVBOztBQUVBOzs7O0FBSUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFO0FBQ0Y7O0FBRUEsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsT0FBTztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLE9BQU87QUFDZjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxnQkFBZ0I7QUFDbEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVc7O0FBRVg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEOztBQUVBO0FBQ0E7O0FBRUEsY0FBYyxzQkFBc0I7QUFDcEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsK0RBQStEO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxjQUFjOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG1CQUFtQjtBQUNwQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHVDQUF1QztBQUNqRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdURBQXVEO0FBQzlFOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLCtDQUErQztBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUMsY0FBYztBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsY0FBYyxxQ0FBcUM7QUFDbkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDLE9BQU87QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsT0FBTztBQUNqQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLCtCQUErQjtBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDLE9BQU87QUFDOUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLHFDQUFxQztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBLFNBQVMsOEJBQThCO0FBQ3ZDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxZQUFZLE9BQU87QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLFdBQVc7QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOzs7O0FBSUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtDQUErQyxjQUFjLFdBQVc7QUFDeEUsbUJBQW1CLFVBQVU7QUFDN0I7QUFDQSxzQkFBc0IsY0FBYyxzQkFBc0IsZ0JBQWdCO0FBQzFFLGdCQUFnQixXQUFXLFlBQVk7QUFDdkMsY0FBYztBQUNkOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLENBQUM7OztBQUdEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSwrREFBK0Q7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxPQUFPOztBQUVmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUEsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBOztBQUVBLFVBQVUsT0FBTztBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFdBQVcsU0FBUztBQUNwQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBLFFBQVEsT0FBTztBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxnQkFBZ0I7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLGlEQUFpRCwwQkFBMEI7QUFDM0U7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGdCQUFnQjtBQUMxQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUEsaUNBQWlDO0FBQ2pDO0FBQ0E7O0FBRUEsSUFBSTtBQUNKOztBQUVBLElBQUk7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLFdBQVcsU0FBUztBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7QUFLRDs7O0FBR0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxLQUFLO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQ0FBcUM7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEtBQUs7QUFDTDs7QUFFQSxXQUFXO0FBQ1gsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCO0FBQ2pCLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBLHNCQUFzQjtBQUN0QiwyQkFBMkI7O0FBRTNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLFdBQVcseUJBQXlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLGFBQWEsdUNBQXVDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7OztBQUtEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDs7QUFFQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQjs7QUFFbkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQSxjQUFjLHNEQUFzRDtBQUNwRTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBLGNBQWMsbUNBQW1DO0FBQ2pELGVBQWUsNkRBQTZEO0FBQzVFOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFO0FBQ0YsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7O0FBS0Q7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLLElBQTBDO0FBQy9DLENBQUMsaUNBQWtCLEVBQUUsbUNBQUU7QUFDdkI7QUFDQSxFQUFFO0FBQUEsb0dBQUU7QUFDSjs7Ozs7QUFLQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNC4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxOS0wNS0wMVQyMTowNFpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBjb25jYXQgPSBhcnIuY29uY2F0O1xuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG4gICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyXG4gICAgICAvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcbiAgICAgIC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG4gICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uXG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCI7XG4gIH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy40LjFcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxuXHRydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZztcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxuXHRsZW5ndGg6IDAsXG5cblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcblxuXHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcblx0XHRpZiAoIG51bSA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XG5cdFx0cmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XG5cdH0sXG5cblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XG5cdH0sXG5cblx0bGFzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIC0xICk7XG5cdH0sXG5cblx0ZXE6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XG5cdH0sXG5cblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuXHQvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC5cblx0cHVzaDogcHVzaCxcblx0c29ydDogYXJyLnNvcnQsXG5cdHNwbGljZTogYXJyLnNwbGljZVxufTtcblxualF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxuXHRcdGkgPSAxLFxuXHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0ZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xuXHRcdGkrKztcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IE9iamVjdC5wcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCBuYW1lID09PSBcIl9fcHJvdG9fX1wiIHx8IHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcblx0XHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblxuXHRcdFx0XHRcdC8vIEVuc3VyZSBwcm9wZXIgdHlwZSBmb3IgdGhlIHNvdXJjZSB2YWx1ZVxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgJiYgIUFycmF5LmlzQXJyYXkoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBbXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhY29weUlzQXJyYXkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0ge307XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgcHJvdG8sIEN0b3I7XG5cblx0XHQvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXNcblx0XHQvLyBVc2UgdG9TdHJpbmcgaW5zdGVhZCBvZiBqUXVlcnkudHlwZSB0byBjYXRjaCBob3N0IG9iamVjdHNcblx0XHRpZiAoICFvYmogfHwgdG9TdHJpbmcuY2FsbCggb2JqICkgIT09IFwiW29iamVjdCBPYmplY3RdXCIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cHJvdG8gPSBnZXRQcm90byggb2JqICk7XG5cblx0XHQvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBlIChlLmcuLCBgT2JqZWN0LmNyZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluXG5cdFx0aWYgKCAhcHJvdG8gKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBPYmplY3RzIHdpdGggcHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIGJ5IGEgZ2xvYmFsIE9iamVjdCBmdW5jdGlvblxuXHRcdEN0b3IgPSBoYXNPd24uY2FsbCggcHJvdG8sIFwiY29uc3RydWN0b3JcIiApICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIGZuVG9TdHJpbmcuY2FsbCggQ3RvciApID09PSBPYmplY3RGdW5jdGlvblN0cmluZztcblx0fSxcblxuXHRpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBuYW1lO1xuXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0XG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9ICk7XG5cdH0sXG5cblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XG5cblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHtcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcblx0dHJpbTogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XHRcIlwiIDpcblx0XHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5mdW5jdGlvbiggaSwgbmFtZSApIHtcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjRcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuICpcbiAqIERhdGU6IDIwMTktMDQtMDhcbiAqL1xuKGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG5cbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICh7fSkuaGFzT3duUHJvcGVydHksXG5cdGFyciA9IFtdLFxuXHRwb3AgPSBhcnIucG9wLFxuXHRwdXNoX25hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIGxpc3RbaV0gPT09IGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcLnxbXFxcXHctXXxbXlxcMC1cXFxceGEwXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIFwiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgd2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJkZXNjZW5kID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwifD5cIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJodG1sID0gL0hUTUwkL2ksXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cblx0Ly8gQ1NTIGVzY2FwZXNcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3woXCIgKyB3aGl0ZXNwYWNlICsgXCIpfC4pXCIsIFwiaWdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGVkIC0gMHgxMDAwMDtcblx0XHQvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjRcblx0XHQvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICtcIjB4XCJcblx0XHRyZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/XG5cdFx0XHRlc2NhcGVkIDpcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0Ly8gQk1QIGNvZGVwb2ludFxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0Ly8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpXG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG5cdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tc1xuXHRyY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csXG5cdGZjc3Nlc2NhcGUgPSBmdW5jdGlvbiggY2gsIGFzQ29kZVBvaW50ICkge1xuXHRcdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdFx0aWYgKCBjaCA9PT0gXCJcXDBcIiApIHtcblx0XHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xuXHRcdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkXG5cdFx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmaWVsZHNldFwiO1xuXHRcdH0sXG5cdFx0eyBkaXI6IFwicGFyZW50Tm9kZVwiLCBuZXh0OiBcImxlZ2VuZFwiIH1cblx0KTtcblxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcbnRyeSB7XG5cdHB1c2guYXBwbHkoXG5cdFx0KGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkpLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XG5cblx0XHQvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHB1c2hfbmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoZWxzKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXG5cdFx0XHR3aGlsZSAoICh0YXJnZXRbaisrXSA9IGVsc1tpKytdKSApIHt9XG5cdFx0XHR0YXJnZXQubGVuZ3RoID0gaiAtIDE7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cblx0XHRpZiAoICggY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogcHJlZmVycmVkRG9jICkgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHR9XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoIChtID0gbWF0Y2hbMV0pICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiZcblx0XHRcdFx0XHRcdFx0Y29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmXG5cdFx0XHRcdFx0Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoIHN1cHBvcnQucXNhICYmXG5cdFx0XHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApKSAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHQobm9kZVR5cGUgIT09IDEgfHwgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdGlmICggKG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSkgKSB7XG5cdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAobmlkID0gZXhwYW5kbykgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1tpXSA9IFwiI1wiICsgbmlkICsgXCIgXCIgKyB0b1NlbGVjdG9yKCBncm91cHNbaV0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUpO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIik7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICovXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoXCJ8XCIpLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIubmV4dFNpYmxpbmcpICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIChuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIikgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRpbkRpc2FibGVkRmllbGRzZXQoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcblx0XHRcdFx0XHRzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbmFtZXNwYWNlID0gZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0ZG9jRWxlbSA9IChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OFxuXHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGUgbG9hZGluZyBpZnJhbWVzXG5cdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC80ODMzXG5cdHJldHVybiAhcmh0bWwudGVzdCggbmFtZXNwYWNlIHx8IGRvY0VsZW0gJiYgZG9jRWxlbS5ub2RlTmFtZSB8fCBcIkhUTUxcIiApO1xufTtcblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdHZhciBoYXNDb21wYXJlLCBzdWJXaW5kb3csXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdGlmICggZG9jID09PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2Vcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPT0gZG9jdW1lbnQgJiZcblx0XHQoc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcpICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExLCBFZGdlXG5cdFx0aWYgKCBzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHlcblx0XHR9IGVsc2UgaWYgKCBzdWJXaW5kb3cuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHRcdH1cblx0fVxuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmNsYXNzTmFtZSA9IFwiaVwiO1xuXHRcdHJldHVybiAhZWwuZ2V0QXR0cmlidXRlKFwiY2xhc3NOYW1lXCIpO1xuXHR9KTtcblxuXHQvKiBnZXRFbGVtZW50KHMpQnkqXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KFwiXCIpICk7XG5cdFx0cmV0dXJuICFlbC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBTdXBwb3J0OiBJRTw5XG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtbWF0aWNhbGx5LXNldCBuYW1lcyxcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XG5cdH0pO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdEV4cHIuZmluZFtcIklEXCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1zW2krK10pICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kW1wiVEFHXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/XG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0XHR9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdHRtcCA9IFtdLFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0dG1wLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdG1wO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmRbXCJDTEFTU1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7XG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2FwdHVyZV49JyddXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44K1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCJ+PVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCI6Y2hlY2tlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiLiMuK1srfl1cIik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xuXHRcdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0XHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZVxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWU9ZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZGlzYWJsZWRcIikubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiKiw6eFwiKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKFwiLC4qOlwiKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmICggKHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAobWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fFxuXHRcdGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKSApKSApIHtcblxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9KTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oXCJ8XCIpICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oXCJ8XCIpICk7XG5cblx0LyogQ29udGFpbnNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XG5cblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXG5cdC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZVxuXHQvLyBBcyBpbiwgYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZlxuXHRjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgP1xuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSxcblx0XHRcdFx0YnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0YWRvd24uY29udGFpbnMgP1xuXHRcdFx0XHRcdGFkb3duLmNvbnRhaW5zKCBidXAgKSA6XG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdFx0XHQpKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cblx0XHR2YXIgY29tcGFyZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247XG5cdFx0aWYgKCBjb21wYXJlICkge1xuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSkgKSB7XG5cblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxuXHRcdFx0aWYgKCBhID09PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGEpICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYikgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHQvLyBFeGl0IGVhcmx5IGlmIHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF1cCA9IGEucGFyZW50Tm9kZSxcblx0XHRcdGJ1cCA9IGIucGFyZW50Tm9kZSxcblx0XHRcdGFwID0gWyBhIF0sXG5cdFx0XHRicCA9IFsgYiBdO1xuXG5cdFx0Ly8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWRcblx0XHRpZiAoICFhdXAgfHwgIWJ1cCApIHtcblx0XHRcdHJldHVybiBhID09PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PT0gZG9jdW1lbnQgPyAxIDpcblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcblx0XHRcdHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvblxuXHRcdGN1ciA9IGE7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YXAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXHRcdGN1ciA9IGI7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHtcblx0XHRcdGkrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gaSA/XG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3Rcblx0XHRcdGFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAtMSA6XG5cdFx0XHRicFtpXSA9PT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQwO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn07XG5cblNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIGV4cHIsIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoc2VsICsgXCJcIikucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7XG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbM10gPSBcIiBcIiArIG1hdGNoWzNdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0Y2hbM10gPT09IFwiZXZlblwiIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByW1wiQ0hJTERcIl0udGVzdCggbWF0Y2hbMF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJlxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIiApO1xuXHRcdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WzBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgXCJcIikgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKSB8fCBlbGVtLmdldEF0dHJpYnV0ZShcImxhbmdcIikpICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQpO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zW1wiZW1wdHlcIl0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9KSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/XG5cdFx0XHRcdGFyZ3VtZW50ICsgbGVuZ3RoIDpcblx0XHRcdFx0YXJndW1lbnQgPiBsZW5ndGggP1xuXHRcdFx0XHRcdGxlbmd0aCA6XG5cdFx0XHRcdFx0YXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSlcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zW1wibnRoXCJdID0gRXhwci5wc2V1ZG9zW1wiZXFcIl07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0pO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8IChvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAobmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1swXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiZcblx0XHRcdFx0XHRcdCh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbXCIgXCJdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHRcdHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0pXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbXCJUQUdcIl0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbXCJJRFwiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByW1wibmVlZHNDb250ZXh0XCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zW2ldO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkge1xuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoXCJcIikuc29ydCggc29ydE9yZGVyICkuam9pbihcIlwiKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIikgKSAmIDE7XG59KTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIgO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSA9PSBudWxsO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdFx0KHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0pKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlO1xuXG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cbiAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn07XG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmNvbnRlbnREb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIG1hc3RlciBEZWZlcnJlZFxuXHRcdFx0bWFzdGVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGNhbGxiYWNrIGZhY3Rvcnlcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXNvbHZlQ29udGV4dHNbIGkgXSA9IHRoaXM7XG5cdFx0XHRcdFx0cmVzb2x2ZVZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlO1xuXHRcdFx0XHRcdGlmICggISggLS1yZW1haW5pbmcgKSApIHtcblx0XHRcdFx0XHRcdG1hc3Rlci5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgbWFzdGVyLmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIG1hc3Rlci5yZWplY3QsXG5cdFx0XHRcdCFyZW1haW5pbmcgKTtcblxuXHRcdFx0Ly8gVXNlIC50aGVuKCkgdG8gdW53cmFwIHNlY29uZGFyeSB0aGVuYWJsZXMgKGNmLiBnaC0zMDAwKVxuXHRcdFx0aWYgKCBtYXN0ZXIuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIG1hc3Rlci50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBtYXN0ZXIucmVqZWN0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hc3Rlci5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBhbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5hcHBseSggZWxlbSwgYXJncyB8fCBbXSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRvcHRpb246IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXSxcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG53cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKCMxNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBhdHRhY2hlZCwgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIHRvVHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG59ICkoKTtcblxuXG52YXJcblx0cmtleUV2ZW50ID0gL15rZXkvLFxuXHRybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxcblx0cnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTErXG4vLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91cywgZXhjZXB0IHdoZW4gdGhleSBhcmUgbm8tb3AuXG4vLyBTbyBleHBlY3QgZm9jdXMgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGFjdGl2ZSxcbi8vIGFuZCBibHVyIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGFscmVhZHkgYWN0aXZlLlxuLy8gKGZvY3VzIGFuZCBibHVyIGFyZSBhbHdheXMgc3luY2hyb25vdXMgaW4gb3RoZXIgc3VwcG9ydGVkIGJyb3dzZXJzLFxuLy8gdGhpcyBqdXN0IGRlZmluZXMgd2hlbiB3ZSBjYW4gY291bnQgb24gaXQpLlxuZnVuY3Rpb24gZXhwZWN0U3luYyggZWxlbSwgdHlwZSApIHtcblx0cmV0dXJuICggZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSApID09PSAoIHR5cGUgPT09IFwiZm9jdXNcIiApO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIERvbid0IGF0dGFjaCBldmVudHMgdG8gbm9EYXRhIG9yIHRleHQvY29tbWVudCBub2RlcyAoYnV0IGFsbG93IHBsYWluIG9iamVjdHMpXG5cdFx0aWYgKCAhZWxlbURhdGEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307XG5cdFx0fVxuXHRcdGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHtcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG5cblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgP1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2Vcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKVxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcblxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3Rcblx0XHRcdGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkge1xuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG5cdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwO1xuXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnNldHVwIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xuXHRcdH1cblxuXHR9LFxuXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xuXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkge1xuXG5cdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0dmFyIGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXHRcdFx0aGFuZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHtcblx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMgPSBbXTtcblx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzID0ge307XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbIG5hbWUgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsIG5hbWUsIHtcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRmaXg6IGZ1bmN0aW9uKCBvcmlnaW5hbEV2ZW50ICkge1xuXHRcdHJldHVybiBvcmlnaW5hbEV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdG9yaWdpbmFsRXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApO1xuXHR9LFxuXG5cdHNwZWNpYWw6IHtcblx0XHRsb2FkOiB7XG5cblx0XHRcdC8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWRcblx0XHRcdG5vQnViYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRjbGljazoge1xuXG5cdFx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSBmb3IgY2hlY2thYmxlIGlucHV0c1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0Ly8gZGF0YVByaXYuc2V0KCBlbCwgXCJjbGlja1wiLCAuLi4gKVxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiLCByZXR1cm5UcnVlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlcmluZyBhIGNsaWNrXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIHN1cHByZXNzIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rc1xuXHRcdFx0Ly8gQWxzbyBwcmV2ZW50IGl0IGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUgYSBsZXZlcmFnZWQgbmF0aXZlLWV2ZW50IHN0YWNrXG5cdFx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0XHRyZXR1cm4gcmNoZWNrYWJsZVR5cGUudGVzdCggdGFyZ2V0LnR5cGUgKSAmJlxuXHRcdFx0XHRcdHRhcmdldC5jbGljayAmJiBub2RlTmFtZSggdGFyZ2V0LCBcImlucHV0XCIgKSAmJlxuXHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGFyZ2V0LCBcImNsaWNrXCIgKSB8fFxuXHRcdFx0XHRcdG5vZGVOYW1lKCB0YXJnZXQsIFwiYVwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJlZm9yZXVubG9hZDoge1xuXHRcdFx0cG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAyMCtcblx0XHRcdFx0Ly8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LlxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gRW5zdXJlIHRoZSBwcmVzZW5jZSBvZiBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGhhbmRsZXMgbWFudWFsbHktdHJpZ2dlcmVkXG4vLyBzeW50aGV0aWMgZXZlbnRzIGJ5IGludGVycnVwdGluZyBwcm9ncmVzcyB1bnRpbCByZWludm9rZWQgaW4gcmVzcG9uc2UgdG9cbi8vICpuYXRpdmUqIGV2ZW50cyB0aGF0IGl0IGZpcmVzIGRpcmVjdGx5LCBlbnN1cmluZyB0aGF0IHN0YXRlIGNoYW5nZXMgaGF2ZVxuLy8gYWxyZWFkeSBvY2N1cnJlZCBiZWZvcmUgb3RoZXIgbGlzdGVuZXJzIGFyZSBpbnZva2VkLlxuZnVuY3Rpb24gbGV2ZXJhZ2VOYXRpdmUoIGVsLCB0eXBlLCBleHBlY3RTeW5jICkge1xuXG5cdC8vIE1pc3NpbmcgZXhwZWN0U3luYyBpbmRpY2F0ZXMgYSB0cmlnZ2VyIGNhbGwsIHdoaWNoIG11c3QgZm9yY2Ugc2V0dXAgdGhyb3VnaCBqUXVlcnkuZXZlbnQuYWRkXG5cdGlmICggIWV4cGVjdFN5bmMgKSB7XG5cdFx0aWYgKCBkYXRhUHJpdi5nZXQoIGVsLCB0eXBlICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCByZXR1cm5UcnVlICk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlZ2lzdGVyIHRoZSBjb250cm9sbGVyIGFzIGEgc3BlY2lhbCB1bml2ZXJzYWwgaGFuZGxlciBmb3IgYWxsIGV2ZW50IG5hbWVzcGFjZXNcblx0ZGF0YVByaXYuc2V0KCBlbCwgdHlwZSwgZmFsc2UgKTtcblx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHtcblx0XHRuYW1lc3BhY2U6IGZhbHNlLFxuXHRcdGhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBub3RBc3luYywgcmVzdWx0LFxuXHRcdFx0XHRzYXZlZCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRpZiAoICggZXZlbnQuaXNUcmlnZ2VyICYgMSApICYmIHRoaXNbIHR5cGUgXSApIHtcblxuXHRcdFx0XHQvLyBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBvZiB0aGUgb3V0ZXIgc3ludGhldGljIC50cmlnZ2VyKCllZCBldmVudFxuXHRcdFx0XHQvLyBTYXZlZCBkYXRhIHNob3VsZCBiZSBmYWxzZSBpbiBzdWNoIGNhc2VzLCBidXQgbWlnaHQgYmUgYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdFxuXHRcdFx0XHQvLyBmcm9tIGFuIGFzeW5jIG5hdGl2ZSBoYW5kbGVyIChnaC00MzUwKVxuXHRcdFx0XHRpZiAoICFzYXZlZC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBhcmd1bWVudHMgZm9yIHVzZSB3aGVuIGhhbmRsaW5nIHRoZSBpbm5lciBuYXRpdmUgZXZlbnRcblx0XHRcdFx0XHQvLyBUaGVyZSB3aWxsIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKGFuIGV2ZW50IG9iamVjdCksIHNvIHRoaXMgYXJyYXlcblx0XHRcdFx0XHQvLyB3aWxsIG5vdCBiZSBjb25mdXNlZCB3aXRoIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3QuXG5cdFx0XHRcdFx0c2F2ZWQgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHNhdmVkICk7XG5cblx0XHRcdFx0XHQvLyBUcmlnZ2VyIHRoZSBuYXRpdmUgZXZlbnQgYW5kIGNhcHR1cmUgaXRzIHJlc3VsdFxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdFx0XHRcdC8vIGZvY3VzKCkgYW5kIGJsdXIoKSBhcmUgYXN5bmNocm9ub3VzXG5cdFx0XHRcdFx0bm90QXN5bmMgPSBleHBlY3RTeW5jKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0dGhpc1sgdHlwZSBdKCk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0IHx8IG5vdEFzeW5jICkge1xuXHRcdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBmYWxzZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0ICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYW5jZWwgdGhlIG91dGVyIHN5bnRoZXRpYyBldmVudFxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdC52YWx1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhpcyBpcyBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgZm9yIGFuIGV2ZW50IHdpdGggYSBidWJibGluZyBzdXJyb2dhdGVcblx0XHRcdFx0Ly8gKGZvY3VzIG9yIGJsdXIpLCBhc3N1bWUgdGhhdCB0aGUgc3Vycm9nYXRlIGFscmVhZHkgcHJvcGFnYXRlZCBmcm9tIHRyaWdnZXJpbmcgdGhlXG5cdFx0XHRcdC8vIG5hdGl2ZSBldmVudCBhbmQgcHJldmVudCB0aGF0IGZyb20gaGFwcGVuaW5nIGFnYWluIGhlcmUuXG5cdFx0XHRcdC8vIFRoaXMgdGVjaG5pY2FsbHkgZ2V0cyB0aGUgb3JkZXJpbmcgd3Jvbmcgdy5yLnQuIHRvIGAudHJpZ2dlcigpYCAoaW4gd2hpY2ggdGhlXG5cdFx0XHRcdC8vIGJ1YmJsaW5nIHN1cnJvZ2F0ZSBwcm9wYWdhdGVzICphZnRlciogdGhlIG5vbi1idWJibGluZyBiYXNlKSwgYnV0IHRoYXQgc2VlbXNcblx0XHRcdFx0Ly8gbGVzcyBiYWQgdGhhbiBkdXBsaWNhdGlvbi5cblx0XHRcdFx0fSBlbHNlIGlmICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9ICkuZGVsZWdhdGVUeXBlICkge1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBuYXRpdmUgZXZlbnQgdHJpZ2dlcmVkIGFib3ZlLCBldmVyeXRoaW5nIGlzIG5vdyBpbiBvcmRlclxuXHRcdFx0Ly8gRmlyZSBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgd2l0aCB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBzYXZlZC5sZW5ndGggKSB7XG5cblx0XHRcdFx0Ly8gLi4uYW5kIGNhcHR1cmUgdGhlIHJlc3VsdFxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHtcblx0XHRcdFx0XHR2YWx1ZTogalF1ZXJ5LmV2ZW50LnRyaWdnZXIoXG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdFx0XHRcdFx0Ly8gRXh0ZW5kIHdpdGggdGhlIHByb3RvdHlwZSB0byByZXNldCB0aGUgYWJvdmUgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdGpRdWVyeS5leHRlbmQoIHNhdmVkWyAwIF0sIGpRdWVyeS5FdmVudC5wcm90b3R5cGUgKSxcblx0XHRcdFx0XHRcdHNhdmVkLnNsaWNlKCAxICksXG5cdFx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gQWJvcnQgaGFuZGxpbmcgb2YgdGhlIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXG5qUXVlcnkuZWFjaCgge1xuXHRhbHRLZXk6IHRydWUsXG5cdGJ1YmJsZXM6IHRydWUsXG5cdGNhbmNlbGFibGU6IHRydWUsXG5cdGNoYW5nZWRUb3VjaGVzOiB0cnVlLFxuXHRjdHJsS2V5OiB0cnVlLFxuXHRkZXRhaWw6IHRydWUsXG5cdGV2ZW50UGhhc2U6IHRydWUsXG5cdG1ldGFLZXk6IHRydWUsXG5cdHBhZ2VYOiB0cnVlLFxuXHRwYWdlWTogdHJ1ZSxcblx0c2hpZnRLZXk6IHRydWUsXG5cdHZpZXc6IHRydWUsXG5cdFwiY2hhclwiOiB0cnVlLFxuXHRjb2RlOiB0cnVlLFxuXHRjaGFyQ29kZTogdHJ1ZSxcblx0a2V5OiB0cnVlLFxuXHRrZXlDb2RlOiB0cnVlLFxuXHRidXR0b246IHRydWUsXG5cdGJ1dHRvbnM6IHRydWUsXG5cdGNsaWVudFg6IHRydWUsXG5cdGNsaWVudFk6IHRydWUsXG5cdG9mZnNldFg6IHRydWUsXG5cdG9mZnNldFk6IHRydWUsXG5cdHBvaW50ZXJJZDogdHJ1ZSxcblx0cG9pbnRlclR5cGU6IHRydWUsXG5cdHNjcmVlblg6IHRydWUsXG5cdHNjcmVlblk6IHRydWUsXG5cdHRhcmdldFRvdWNoZXM6IHRydWUsXG5cdHRvRWxlbWVudDogdHJ1ZSxcblx0dG91Y2hlczogdHJ1ZSxcblxuXHR3aGljaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBidXR0b24gPSBldmVudC5idXR0b247XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHNcblx0XHRpZiAoIGV2ZW50LndoaWNoID09IG51bGwgJiYgcmtleUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHtcblx0XHRcdHJldHVybiBldmVudC5jaGFyQ29kZSAhPSBudWxsID8gZXZlbnQuY2hhckNvZGUgOiBldmVudC5rZXlDb2RlO1xuXHRcdH1cblxuXHRcdC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHRcblx0XHRpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCAmJiBybW91c2VFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDEgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDIgKSB7XG5cdFx0XHRcdHJldHVybiAzO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJ1dHRvbiAmIDQgKSB7XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQud2hpY2g7XG5cdH1cbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XG5cbmpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCB0eXBlLCBkZWxlZ2F0ZVR5cGUgKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7XG5cblx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiZm9jdXNcIiwgLi4uIClcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJibHVyXCIsIC4uLiApXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSwgZXhwZWN0U3luYyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSApO1xuXG5cdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy8zMjI5XG5cdHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLFxuXG5cdC8qIGVzbGludC1lbmFibGUgKi9cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCBwZGF0YUN1ciwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3MoIHNyYyApO1xuXHRcdHBkYXRhQ3VyID0gZGF0YVByaXYuc2V0KCBkZXN0LCBwZGF0YU9sZCApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTtcblx0XHRcdHBkYXRhQ3VyLmV2ZW50cyA9IHt9O1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gY29uY2F0LmFwcGx5KCBbXSwgYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYywge1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9uY2U6IG5vZGUubm9uY2UgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoIFwibm9uY2VcIiApXG5cdFx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgXCI8JDE+PC8kMj5cIiApO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxuXHRcdC8vIERvbid0IGdldCB0cmlja2VkIHdoZW4gem9vbSBhZmZlY3RzIG9mZnNldFdpZHRoIChnaC00MDI5KVxuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxuXHRcdC8vIEZha2UgY29udGVudC1ib3ggdW50aWwgd2Uga25vdyBpdCdzIG5lZWRlZCB0byBrbm93IHRoZSB0cnVlIHZhbHVlLlxuXHRcdGJveFNpemluZ05lZWRlZCA9ICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZXh0cmEsXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LFxuXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdG9mZnNldFByb3AgPSBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApO1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cblx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEgb25seVxuXHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlXG5cdC8vIFdlIHVzZSBnZXRDbGllbnRSZWN0cygpIHRvIGNoZWNrIGZvciBoaWRkZW4vZGlzY29ubmVjdGVkLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3hcblx0aWYgKCAoICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgJiYgaXNCb3JkZXJCb3ggfHxcblx0XHR2YWwgPT09IFwiYXV0b1wiIHx8XG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXHRcdGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0XHQvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxuXHRcdC8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi5cblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtO1xuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcblx0XHRcdHZhbCA9IGVsZW1bIG9mZnNldFByb3AgXTtcblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgXCJcIiBhbmQgYXV0b1xuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIEFkanVzdCBmb3IgdGhlIGVsZW1lbnQncyBib3ggbW9kZWxcblx0cmV0dXJuICggdmFsICtcblx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlcyxcblxuXHRcdFx0Ly8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSlcblx0XHRcdHZhbFxuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwiZ3JpZEFyZWFcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5cIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5FbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5TdGFydFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1wiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd0VuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1N0YXJ0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHQvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBpLCBkaW1lbnNpb24gKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xuXHRcdFx0XHRcdC8vIFRhYmxlIGNvbHVtbnMgaW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvXG5cdFx0XHRcdFx0Ly8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHRcdFx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlXG5cdFx0XHRcdFx0Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLlxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XG5cdFx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0XHQpICsgXCJweFwiO1xuXHRcdH1cblx0fVxuKTtcblxuLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllc1xualF1ZXJ5LmVhY2goIHtcblx0bWFyZ2luOiBcIlwiLFxuXHRwYWRkaW5nOiBcIlwiLFxuXHRib3JkZXI6IFwiV2lkdGhcIlxufSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0ge1xuXHRcdGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGkgPSAwLFxuXHRcdFx0XHRleHBhbmRlZCA9IHt9LFxuXG5cdFx0XHRcdC8vIEFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZ1xuXHRcdFx0XHRwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnNwbGl0KCBcIiBcIiApIDogWyB2YWx1ZSBdO1xuXG5cdFx0XHRmb3IgKCA7IGkgPCA0OyBpKysgKSB7XG5cdFx0XHRcdGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID1cblx0XHRcdFx0XHRwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBleHBhbmRlZDtcblx0XHR9XG5cdH07XG5cblx0aWYgKCBwcmVmaXggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdHZhciBzdHlsZXMsIGxlbixcblx0XHRcdFx0bWFwID0ge30sXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG5hbWUgKSApIHtcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7XG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtYXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDpcblx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9XG59ICk7XG5cblxuZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkge1xuXHRyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApO1xufVxualF1ZXJ5LlR3ZWVuID0gVHdlZW47XG5cblR3ZWVuLnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IFR3ZWVuLFxuXHRpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7XG5cdFx0dGhpcy5lbGVtID0gZWxlbTtcblx0XHR0aGlzLnByb3AgPSBwcm9wO1xuXHRcdHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpO1xuXHRcdHRoaXMuZW5kID0gZW5kO1xuXHRcdHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdH0sXG5cdGN1cjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdHJldHVybiBob29rcyAmJiBob29rcy5nZXQgP1xuXHRcdFx0aG9va3MuZ2V0KCB0aGlzICkgOlxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApO1xuXHR9LFxuXHRydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkge1xuXHRcdHZhciBlYXNlZCxcblx0XHRcdGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oXG5cdFx0XHRcdHBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7XG5cdFx0fVxuXHRcdHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7XG5cdFx0XHRob29rcy5zZXQoIHRoaXMgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufTtcblxuVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlO1xuXG5Ud2Vlbi5wcm9wSG9va3MgPSB7XG5cdF9kZWZhdWx0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXG5cdFx0XHQvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVtZW50LFxuXHRcdFx0Ly8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy5cblx0XHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fFxuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5XG5cdFx0XHQvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLlxuXHRcdFx0Ly8gU2ltcGxlIHZhbHVlcyBzdWNoIGFzIFwiMTBweFwiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7XG5cdFx0XHQvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzIFwicm90YXRlKDFyYWQpXCIgYXJlIHJldHVybmVkIGFzLWlzLlxuXHRcdFx0cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgXCJcIiApO1xuXG5cdFx0XHQvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kIFwiYXV0b1wiIGFyZSBjb252ZXJ0ZWQgdG8gMC5cblx0XHRcdHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gXCJhdXRvXCIgPyAwIDogcmVzdWx0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cblx0XHRcdC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LlxuXHRcdFx0Ly8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLlxuXHRcdFx0Ly8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS5cblx0XHRcdGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHtcblx0XHRcdFx0alF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSggdHdlZW4gKTtcblx0XHRcdH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdIHx8XG5cdFx0XHRcdFx0dHdlZW4uZWxlbS5zdHlsZVsgZmluYWxQcm9wTmFtZSggdHdlZW4ucHJvcCApIF0gIT0gbnVsbCApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgaW5Qcm9ncmVzcyxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG5mdW5jdGlvbiBzY2hlZHVsZSgpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdGlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkge1xuXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggc2NoZWR1bGUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHNjaGVkdWxlLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0XHR9XG5cblx0XHRqUXVlcnkuZngudGljaygpO1xuXHR9XG59XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBEYXRlLm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksXG5cdFx0aXNCb3ggPSBcIndpZHRoXCIgaW4gcHJvcHMgfHwgXCJoZWlnaHRcIiBpbiBwcm9wcyxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3Ncblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJldGVuZCB0byBiZSBoaWRkZW4gaWYgdGhpcyBpcyBhIFwic2hvd1wiIGFuZFxuXHRcdFx0XHQvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZVxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcblx0cHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wcyApO1xuXHRpZiAoICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcblx0aWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZFxuXHRcdC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZIGFuZCBFZGdlIGp1c3QgbWlycm9yc1xuXHRcdC8vIHRoZSBvdmVyZmxvd1ggdmFsdWUgdGhlcmUuXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcblx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7XG5cdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0fVxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ICkge1xuXHRcdFx0XHRkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHlcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcImlubGluZVwiIHx8IGRpc3BsYXkgPT09IFwiaW5saW5lLWJsb2NrXCIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhlIGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0cHJvcFR3ZWVuID0gZmFsc2U7XG5cdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXG5cdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCBcInJldmVyc2VzXCJcblx0XHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0XHQvLyBUaGUgZmluYWwgc3RlcCBvZiBhIFwiaGlkZVwiIGFuaW1hdGlvbiBpcyBhY3R1YWxseSBoaWRpbmcgdGhlIGVsZW1lbnRcblx0XHRcdFx0aWYgKCAhaGlkZGVuICkge1xuXHRcdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJmeHNob3dcIiApO1xuXHRcdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdC8vIFBlci1wcm9wZXJ0eSBzZXR1cFxuXHRcdHByb3BUd2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApO1xuXHRcdGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkge1xuXHRcdFx0ZGF0YVNob3dbIHByb3AgXSA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRwcm9wVHdlZW4uZW5kID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0XHRwcm9wVHdlZW4uc3RhcnQgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHtcblx0dmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rcztcblxuXHQvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3Ncblx0Zm9yICggaW5kZXggaW4gcHJvcHMgKSB7XG5cdFx0bmFtZSA9IGNhbWVsQ2FzZSggaW5kZXggKTtcblx0XHRlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07XG5cdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRlYXNpbmcgPSB2YWx1ZVsgMSBdO1xuXHRcdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCAhPT0gbmFtZSApIHtcblx0XHRcdHByb3BzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgaW5kZXggXTtcblx0XHR9XG5cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xuXHRcdGlmICggaG9va3MgJiYgXCJleHBhbmRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBuYW1lIF07XG5cblx0XHRcdC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy5cblx0XHRcdC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgXCJuYW1lXCJcblx0XHRcdGZvciAoIGluZGV4IGluIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTtcblx0XHRcdFx0XHRzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkge1xuXHR2YXIgcmVzdWx0LFxuXHRcdHN0b3BwZWQsXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCxcblx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxuXHRcdFx0ZGVsZXRlIHRpY2suZWxlbTtcblx0XHR9ICksXG5cdFx0dGljayA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0XHRyZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjMgb25seVxuXHRcdFx0XHQvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpXG5cdFx0XHRcdHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCxcblx0XHRcdFx0cGVyY2VudCA9IDEgLSB0ZW1wLFxuXHRcdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRcdGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcblxuXHRcdFx0Ly8gSWYgdGhlcmUncyBtb3JlIHRvIGRvLCB5aWVsZFxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiByZW1haW5pbmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgd2FzIGFuIGVtcHR5IGFuaW1hdGlvbiwgc3ludGhlc2l6ZSBhIGZpbmFsIHByb2dyZXNzIG5vdGlmaWNhdGlvblxuXHRcdFx0aWYgKCAhbGVuZ3RoICkge1xuXHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGFuaW1hdGlvbiBhbmQgcmVwb3J0IGl0cyBjb25jbHVzaW9uXG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSgge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxuXHRcdFx0b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0XHRzcGVjaWFsRWFzaW5nOiB7fSxcblx0XHRcdFx0ZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0XG5cdFx0XHR9LCBvcHRpb25zICksXG5cdFx0XHRvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdHR3ZWVuczogW10sXG5cdFx0XHRjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHtcblx0XHRcdFx0dmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLFxuXHRcdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7XG5cblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cdFx0XHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG4vLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG4vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0gRGF0ZS5ub3coKTtcblxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcblxuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0eG1sID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiICkubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyBkYXRhICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApXG5cdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKVxuXHRcdC5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXHRvcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgIzk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSA9XG5cdFx0XHRcdFx0XHRcdFx0XHQoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSB8fCBbXSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2guam9pbiggXCIsIFwiICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCBcIiQxXCIgKTtcblx0XHRcdFx0dW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgKCBub25jZSsrICkgKyB1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucyApO1xuXHRcdH1cblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluIHx8IHMuc2NyaXB0QXR0cnMgKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKVxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcblx0XHRcdFx0XHQucHJvcCggeyBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsIHNyYzogcy51cmwgfSApXG5cdFx0XHRcdFx0Lm9uKCBcImxvYWQgZXJyb3JcIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XG4vLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50XG4vLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzdcbnN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHtcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xuXHRib2R5LmlubmVySFRNTCA9IFwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIjtcblx0cmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7XG59ICkoKTtcblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cblx0dmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0cztcblxuXHRpZiAoICFjb250ZXh0ICkge1xuXG5cdFx0Ly8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5XG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cblx0XHRpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ICkge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApO1xuXG5cdFx0XHQvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxuXHRcdFx0YmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJiYXNlXCIgKTtcblx0XHRcdGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xuXHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbi8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcblx0XHRcdFx0XHRjb21wdXRlZDtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsIFwiXCI6IFwib3V0ZXJcIiArIG5hbWUgfSxcblx0XHRmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5lYWNoKCAoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cblx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cblxuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG4vLyBhcmd1bWVudHMuXG4vLyBqUXVlcnkucHJveHkgaXMgZGVwcmVjYXRlZCB0byBwcm9tb3RlIHN0YW5kYXJkcyAoc3BlY2lmaWNhbGx5IEZ1bmN0aW9uI2JpbmQpXG4vLyBIb3dldmVyLCBpdCBpcyBub3Qgc2xhdGVkIGZvciByZW1vdmFsIGFueSB0aW1lIHNvb25cbmpRdWVyeS5wcm94eSA9IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdGNvbnRleHQgPSBmbjtcblx0XHRmbiA9IHRtcDtcblx0fVxuXG5cdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdGlmICggIWlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFNpbXVsYXRlZCBiaW5kXG5cdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0fTtcblxuXHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0cmV0dXJuIHByb3h5O1xufTtcblxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xuXHRpZiAoIGhvbGQgKSB7XG5cdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHR9XG59O1xualF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xualF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7XG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcbmpRdWVyeS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmpRdWVyeS5pc1dpbmRvdyA9IGlzV2luZG93O1xualF1ZXJ5LmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbmpRdWVyeS50eXBlID0gdG9UeXBlO1xuXG5qUXVlcnkubm93ID0gRGF0ZS5ub3c7XG5cbmpRdWVyeS5pc051bWVyaWMgPSBmdW5jdGlvbiggb2JqICkge1xuXG5cdC8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvXG5cdC8vIHN0cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cylcblx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2Milcblx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cdHJldHVybiAoIHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiApICYmXG5cblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoXCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0IWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApO1xufTtcblxuXG5cblxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Rcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXG5cbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxuXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5O1xuXHR9ICk7XG59XG5cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcbmlmICggIW5vR2xvYmFsICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/jquery/dist/jquery.js\n') },
vendor: 2,192 bytes, line 1
1"./node_modules/just-debounce/index.js": function (module, exports) { eval("module.exports = debounce\n\nfunction debounce (fn, delay, at_start, guarantee) {\n var timeout\n var args\n var self\n\n return function debounced () {\n self = this\n args = Array.prototype.slice.call(arguments)\n\n if (timeout && (at_start || guarantee)) {\n return\n } else if (!at_start) {\n clear()\n\n timeout = setTimeout(run, delay)\n return timeout\n }\n\n timeout = setTimeout(clear, delay)\n fn.apply(self, args)\n\n function run () {\n clear()\n fn.apply(self, args)\n }\n\n function clear () {\n clearTimeout(timeout)\n timeout = null\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanVzdC1kZWJvdW5jZS9pbmRleC5qcz80NzIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9qdXN0LWRlYm91bmNlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBkZWJvdW5jZVxuXG5mdW5jdGlvbiBkZWJvdW5jZSAoZm4sIGRlbGF5LCBhdF9zdGFydCwgZ3VhcmFudGVlKSB7XG4gIHZhciB0aW1lb3V0XG4gIHZhciBhcmdzXG4gIHZhciBzZWxmXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGRlYm91bmNlZCAoKSB7XG4gICAgc2VsZiA9IHRoaXNcbiAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuXG4gICAgaWYgKHRpbWVvdXQgJiYgKGF0X3N0YXJ0IHx8IGd1YXJhbnRlZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSBpZiAoIWF0X3N0YXJ0KSB7XG4gICAgICBjbGVhcigpXG5cbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KHJ1biwgZGVsYXkpXG4gICAgICByZXR1cm4gdGltZW91dFxuICAgIH1cblxuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGNsZWFyLCBkZWxheSlcbiAgICBmbi5hcHBseShzZWxmLCBhcmdzKVxuXG4gICAgZnVuY3Rpb24gcnVuICgpIHtcbiAgICAgIGNsZWFyKClcbiAgICAgIGZuLmFwcGx5KHNlbGYsIGFyZ3MpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXIgKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgICB0aW1lb3V0ID0gbnVsbFxuICAgIH1cbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/just-debounce/index.js\n") },
vendor: 59,946 bytes, line 1
1"./node_modules/pixelzoom/dist/index.es.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n\n/*!\n * pixelzoom v1.0.1\n * (c) 2018 Pixel Union\n */\n\n// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\n(function () {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n var ce = new window.CustomEvent('test', { cancelable: true });\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n } catch (e) {\n var CustomEvent = function CustomEvent(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n } catch (e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n }\n})();\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar Pixelzoom = function () {\n function Pixelzoom(container, options) {\n classCallCheck(this, Pixelzoom);\n\n this.options = _extends({\n imageClass: 'pixelzoom--image',\n imageSource: options.imageSource || container.querySelector('img').src,\n initialZoom: 1,\n dragPan: false,\n naturalPan: false,\n maxZoom: 9999,\n zoomSensitivity: 1,\n zoomSteps: 1,\n overflowContainer: null\n }, options);\n\n // Overflow container\n this.overflowContainer = this.options.overflowContainer;\n\n // Image container\n this.container = container;\n this.container.style.cursor = this.options.maxZoom > this.options.initialZoom ? 'zoom-in' : 'zoom-out';\n this.containerWidth = null;\n this.containerHeight = null;\n\n // Image\n this.image = new Image();\n this.imageSrc = this.options.imageSource;\n this.imageWidth = null;\n this.imageHeight = null;\n\n // State\n this.x = 0;\n this.y = 0;\n this.lastX = 0;\n this.lastY = 0;\n this.dragX = null;\n this.dragY = null;\n this.lastDragX = null;\n this.lastDragY = null;\n this.zoom = Math.min(this.options.maxZoom, this.options.initialZoom);\n this.zoomMax = this.options.maxZoom;\n this.zoomMin = 1;\n this.zoomSensitivity = this.options.zoomSensitivity;\n this.zoomSteps = Math.min(this.options.maxZoom, this.options.zoomSteps);\n this.distance = 0;\n this.cursor = this.container.style.cursor;\n this.panning = false;\n this.mouseDown = false;\n this.dragging = false;\n this.touched = false;\n\n this._triggerEvent('loading');\n this._loadImage();\n }\n\n /**\n * Load image\n *\n * @private\n */\n\n\n createClass(Pixelzoom, [{\n key: '_loadImage',\n value: function _loadImage() {\n var _this = this;\n\n this.image.addEventListener('load', function () {\n _this._appendImage();\n });\n\n this.image.classList.add(this.options.imageClass);\n this.image.src = this.imageSrc;\n\n this.image.style.position = 'absolute';\n this.image.style.top = '100%';\n this.image.style.left = '100%';\n this.image.style.maxWidth = '100%';\n this.image.style.maxHeight = '100%';\n this.image.style.transformOrigin = 'top left';\n }\n\n /**\n * Append image to the DOM\n *\n * @private\n */\n\n }, {\n key: '_appendImage',\n value: function _appendImage() {\n this._triggerEvent('loaded');\n this.container.appendChild(this.image);\n\n this.refresh();\n this._bindEvents();\n\n if (this.zoom > this.zoomMin) {\n this.x = -(this.imageWidth * this.zoom) + (this.imageWidth * this.zoom - this.imageWidth) / 2;\n this.y = -(this.imageHeight * this.zoom) + (this.imageHeight * this.zoom - this.imageHeight) / 2;\n\n if (this.lastDragX === null && this.lastDragY == null) {\n var offset = this.container.getBoundingClientRect();\n var dragX = this.overflowContainer && this.overflowContainer.offsetWidth >= this.imageWidth * this.zoom ? this.overflowContainer.offsetWidth : this.containerWidth;\n var dragY = this.overflowContainer && this.overflowContainer.offsetWidth >= this.imageHeight * this.zoom ? this.overflowContainer.offsetHeight : this.containerHeight;\n\n var scrollLeft = window.pageXOffset ? window.pageXOffset : document.body.scrollLeft;\n var scrollTop = window.pageYOffset ? window.pageYOffset : document.body.scrollTop;\n\n this.lastDragX = dragX / 2 + offset.left + scrollLeft;\n this.lastDragY = dragY / 2 + offset.top + scrollTop;\n }\n } else {\n this.x = -this.imageWidth;\n this.y = -this.imageHeight;\n }\n\n this.lastX = this.x;\n this.lastY = this.y;\n\n this._update();\n }\n\n /**\n * Bind mouse and touch events\n *\n * @private\n */\n\n }, {\n key: '_bindEvents',\n value: function _bindEvents() {\n var _this2 = this;\n\n this.container.addEventListener('mousedown', function (event) {\n event.stopPropagation();\n\n var pointer = _this2._getPointerBounds(event);\n\n _this2._initializeDrag(pointer[0]);\n });\n\n this.container.addEventListener('mouseenter', function () {\n event.stopPropagation();\n\n _this2._initializeMouse();\n });\n\n this.container.addEventListener('touchstart', function (event) {\n event.stopPropagation();\n\n var pointers = _this2._getPointerBounds(event);\n\n _this2._initializeTouch(pointers[0], pointers[1]);\n });\n\n this.container.addEventListener('dragstart', function (event) {\n event.stopPropagation();\n\n _this2._preventDrag(event);\n });\n\n ['mousemove', 'touchmove'].forEach(function (eventType) {\n _this2.container.addEventListener(eventType, function (event) {\n var pointers = _this2._getPointerBounds(event);\n\n _this2._pan(eventType, pointers[0], pointers[1]);\n });\n });\n\n this.container.addEventListener('mouseup', function (event) {\n event.stopPropagation();\n\n _this2._tap({\n x: event.pageX,\n y: event.pageY\n });\n });\n\n ['mouseleave', 'touchend'].forEach(function (eventType) {\n _this2.container.addEventListener(eventType, function (event) {\n event.stopPropagation();\n\n _this2._release();\n });\n });\n\n this.container.addEventListener('wheel', function (event) {\n event.stopPropagation();\n\n _this2._scroll(event.deltaY, {\n x: event.pageX,\n y: event.pageY\n });\n });\n\n document.body.addEventListener('touchmove', function (event) {\n _this2._preventScroll(event);\n });\n }\n\n /**\n * Increment or decrement zoom\n *\n * @param {number} adjustment\n * @private\n */\n\n }, {\n key: '_setZoom',\n value: function _setZoom(adjustment) {\n this._triggerEvent('zoom');\n\n var zoom = this.zoom + adjustment;\n\n zoom = Math.min(this.zoomMax, zoom);\n zoom = Math.max(this.zoomMin, zoom);\n this.zoom = zoom;\n\n if (this.zoom === this.zoomMax) {\n this.container.style.cursor = 'zoom-out';\n this.cursor = 'zoom-out';\n\n this._triggerEvent('zoomMax');\n } else {\n this.container.style.cursor = 'zoom-in';\n this.cursor = 'zoom-in';\n }\n\n if (this.zoom === this.zoomMin) {\n this.lastDragX = null;\n this.lastDragY = null;\n\n this._triggerEvent('zoomMin');\n }\n }\n\n /**\n * Set image center position\n *\n * @param {object} pointer\n * @private\n */\n\n }, {\n key: '_setCenter',\n value: function _setCenter(pointer, event) {\n if (this.zoom !== this.zoomMin) {\n var offset = this.container.getBoundingClientRect();\n var zoomWidth = this.imageWidth * this.zoom - this.containerWidth;\n var zoomHeight = this.imageHeight * this.zoom - this.containerHeight;\n\n var scrollLeft = window.pageXOffset ? window.pageXOffset : document.body.scrollLeft;\n var scrollTop = window.pageYOffset ? window.pageYOffset : document.body.scrollTop;\n\n if (!(this.zoom - 1 > this.zoomMin && event === 'tap') || event === 'tap' && this.zoomSteps >= this.zoomMax) {\n this.lastX = pointer.x;\n this.lastY = pointer.y;\n }\n\n var currentX = (offset.left - this.lastX) * (zoomWidth / this.containerWidth) - this.containerWidth + scrollLeft * this.zoom - scrollLeft;\n var currentY = (offset.top - this.lastY) * (zoomHeight / this.containerHeight) - this.containerHeight + scrollTop * this.zoom - scrollTop;\n\n currentX = Math.max(-this.imageWidth * this.zoom, currentX);\n currentY = Math.max(-this.imageHeight * this.zoom, currentY);\n\n if (this.overflowContainer) {\n currentX = Math.max(-this.imageWidth * this.zoom + offset.left, currentX);\n currentY = Math.max(-this.imageHeight * this.zoom + offset.top, currentY);\n\n currentX = Math.min(-this.imageWidth - offset.left, currentX);\n currentY = Math.min(-this.imageHeight - offset.top, currentY);\n }\n\n if (this.overflowContainer && this.overflowContainer.offsetWidth >= this.imageWidth * this.zoom) {\n this.x = -(this.imageWidth * this.zoom) + (this.imageWidth * this.zoom - this.imageWidth) / 2;\n } else {\n this.x = Math.min(-this.imageWidth, currentX);\n }\n\n if (this.overflowContainer && this.overflowContainer.offsetHeight >= this.imageHeight * this.zoom) {\n this.y = -(this.imageHeight * this.zoom) + (this.imageHeight * this.zoom - this.imageHeight) / 2;\n } else {\n this.y = Math.min(-this.imageHeight, currentY);\n }\n } else {\n this.x = -this.imageWidth;\n this.y = -this.imageHeight;\n this.lastX = 0;\n this.lastY = 0;\n this.lastDragX = null;\n this.lastDragY = null;\n }\n }\n\n /**\n * Initialize zoom for non-touch devices\n *\n * @private\n */\n\n }, {\n key: '_initializeMouse',\n value: function _initializeMouse() {\n this._triggerEvent('touch');\n this.refresh();\n }\n\n /**\n * Initialize drag\n *\n * @private\n */\n\n }, {\n key: '_initializeDrag',\n value: function _initializeDrag(pointer) {\n if (this.options.dragPan) {\n this.mouseDown = true;\n\n if (this.lastDragX === null && this.lastDragY === null) {\n this.lastDragX = pointer.x;\n this.lastDragY = pointer.y;\n }\n }\n }\n\n /**\n * Initialize zoom for touch devices\n *\n * @param {object} touches\n * @param {object} pointerOne\n * @param {object} pointerTwo\n * @private\n */\n\n }, {\n key: '_initializeTouch',\n value: function _initializeTouch(pointerOne, pointerTwo) {\n this._triggerEvent('touch');\n\n this.touched = true;\n\n if (this.lastDragX === null && this.lastDragY == null) {\n this.lastDragX = pointerOne.x;\n this.lastDragY = pointerOne.y;\n }\n\n if (pointerTwo && pointerTwo.x && pointerTwo.y) {\n this.distance = Math.hypot(pointerOne.x - pointerTwo.x, pointerOne.y - pointerTwo.y);\n }\n }\n\n /**\n * Pan image\n *\n * @param {string} eventType\n * @param {object} touches\n * @param {object} pointerOne\n * @param {object} pointerTwo\n * @private\n */\n\n }, {\n key: '_pan',\n value: function _pan(eventType, pointerOne, pointerTwo) {\n if (pointerTwo && pointerTwo.x && pointerTwo.y) {\n if (this.panning || !this.touched) {\n this._pinch({\n x: pointerOne.x,\n y: pointerOne.y\n }, {\n x: pointerTwo.x,\n y: pointerTwo.y\n });\n }\n } else {\n if (this.options.dragPan && this.mouseDown === false && eventType !== 'touchmove') {\n return;\n } else if (this.options.dragPan && this.mouseDown || eventType === 'touchmove') {\n this.dragging = true;\n this.container.style.cursor = 'move';\n }\n\n if (this.panning || !this.touched) {\n if (this.dragging) {\n this._drag({\n x: pointerOne.x,\n y: pointerOne.y\n });\n } else {\n this._setCenter({\n x: pointerOne.x,\n y: pointerOne.y\n });\n\n this._update();\n }\n } else {\n if (!this.dragging) {\n this._setCenter({\n x: this.lastX,\n y: this.lastY\n });\n\n this._update();\n }\n }\n }\n\n if (eventType === 'touchmove' && !this.panning) {\n this.panning = true;\n this._triggerEvent('pan');\n }\n }\n\n /**\n * Zoom into the image on pinch\n *\n * @param {object} touchOne\n * @param {object} touchTwo\n * @private\n */\n\n }, {\n key: '_pinch',\n value: function _pinch(touchOne, touchTwo) {\n this._triggerEvent('pinch');\n\n var distance = Math.hypot(touchOne.x - touchTwo.x, touchOne.y - touchTwo.y);\n\n var zoomAdjustment = this.zoom / (this.zoomSensitivity * 2);\n var difference = Math.abs(distance) - Math.abs(this.distance);\n\n if (difference > 0.5 || difference < -0.5) {\n this._setZoom(distance > this.distance ? +zoomAdjustment : -zoomAdjustment);\n }\n\n this.refresh();\n\n if (this.zoom < this.zoomMax) {\n if (distance > this.distance) {\n touchOne.x -= (touchOne.x - touchTwo.x) / 2;\n touchOne.y -= (touchOne.y - touchTwo.y) / 2;\n } else {\n touchOne.x = this.lastDragX;\n touchOne.y = this.lastDragY;\n }\n\n this.lastDragX = touchOne.x;\n this.lastDragY = touchOne.y;\n this.dragX = 0;\n this.dragY = 0;\n\n this._setCenter({\n x: touchOne.x,\n y: touchOne.y\n });\n\n this.distance = distance;\n\n this._update();\n }\n }\n\n /**\n * Drag image\n *\n * @param {object} pointer\n * @private\n */\n\n }, {\n key: '_drag',\n value: function _drag(pointer) {\n if (this.dragX && this.dragY && this.lastDragX !== null && this.lastDragY !== null) {\n var differenceX = (this.dragX - pointer.x) / (this.zoom / 2);\n var differenceY = (this.dragY - pointer.y) / (this.zoom / 2);\n var dragX = this.lastDragX;\n var dragY = this.lastDragY;\n\n if (this.options.naturalPan) {\n dragX += differenceX;\n dragY += differenceY;\n } else {\n dragX -= differenceX;\n dragY -= differenceY;\n }\n\n dragX = Math.min(this.imageWidth * this.zoom, dragX);\n this.lastDragX = Math.max(0, dragX);\n\n dragY = Math.min(this.imageHeight * this.zoom, dragY);\n this.lastDragY = Math.max(0, dragY);\n\n this.lastX = this.lastDragX;\n this.lastY = this.lastDragY;\n\n this._setCenter({\n x: this.lastDragX,\n y: this.lastDragY\n });\n\n this._update();\n }\n\n this.dragX = pointer.x;\n this.dragY = pointer.y;\n }\n\n /**\n * Zoom into the image on tap/click\n *\n * @param {object} pointer\n * @private\n */\n\n }, {\n key: '_tap',\n value: function _tap(pointer) {\n this._triggerEvent('tap');\n\n if (!this.panning && !this.dragging) {\n this._setZoom(this.zoomMax > this.zoom ? +this.zoomSteps : -this.zoomMax);\n\n this.refresh();\n\n this._setCenter(pointer, 'tap');\n\n this.lastDragX = this.lastX;\n this.lastDragY = this.lastY;\n\n this._update();\n }\n\n this.panning = false;\n this.mouseDown = false;\n this.dragging = false;\n this.touched = false;\n this.distance = 0;\n this.dragX = 0;\n this.dragY = 0;\n\n this.container.style.cursor = this.cursor;\n }\n\n /**\n * Zoom into the image on scroll\n *\n * @param {int} scale\n * @param {object} pointer\n * @private\n */\n\n }, {\n key: '_scroll',\n value: function _scroll(scale, pointer) {\n if (!this.dragging) {\n this._triggerEvent('scroll');\n\n var zoomAdjustment = this.zoom / this.zoomSensitivity;\n\n if (this.options.dragPan && this.zoom > this.zoomMin) {\n pointer.x = this.lastDragX;\n pointer.y = this.lastDragY;\n }\n\n this.lastDragX = pointer.x;\n this.lastDragY = pointer.y;\n this.dragX = 0;\n this.dragY = 0;\n\n this._setZoom(scale < 0 ? +zoomAdjustment : -zoomAdjustment);\n\n this.refresh();\n\n this._setCenter(pointer);\n this._update();\n }\n }\n\n /**\n * Set panning to false\n *\n * @private\n */\n\n }, {\n key: '_release',\n value: function _release() {\n this._triggerEvent('release');\n this.panning = false;\n this.mouseDown = false;\n this.dragging = false;\n this.dragX = 0;\n this.dragY = 0;\n\n this.container.style.cursor = this.cursor;\n }\n\n /**\n * Prevent images from being dragged\n *\n * @param {object} event\n * @private\n */\n\n }, {\n key: '_preventDrag',\n value: function _preventDrag(event) {\n event.preventDefault();\n }\n\n /**\n * Prevent body from scrolling when image is being panned\n *\n * @param {object} event\n * @private\n */\n\n }, {\n key: '_preventScroll',\n value: function _preventScroll(event) {\n if (this.panning) {\n event.preventDefault();\n }\n }\n\n /**\n * Get the pointer bounds from the event\n *\n * @param {object} event\n * @private\n */\n\n }, {\n key: '_getPointerBounds',\n value: function _getPointerBounds(event) {\n var pointers = [{\n x: event.pageX ? event.pageX : event.touches[0].clientX,\n y: event.pageY ? event.pageY : event.touches[0].clientY\n }, {\n x: event.targetTouches && event.targetTouches.length > 1 ? event.touches[1].clientX : null,\n y: event.targetTouches && event.targetTouches.length > 1 ? event.touches[1].clientY : null\n }];\n\n return pointers;\n }\n\n /**\n * Create an event and trigger it\n *\n * @param {string} name\n * @private\n */\n\n }, {\n key: '_triggerEvent',\n value: function _triggerEvent(name) {\n var event = new CustomEvent('pixelzoom:' + name, { 'bubbles': true, 'cancelable': false });\n this.container.dispatchEvent(event);\n }\n\n /**\n * Update the image position by adjustng the CSS\n *\n * @private\n */\n\n }, {\n key: '_update',\n value: function _update() {\n var _this3 = this;\n\n requestAnimationFrame(function () {\n _this3.image.style.transform = 'translate(' + _this3.x + 'px, ' + _this3.y + 'px) scale(' + _this3.zoom + ')';\n });\n }\n\n /**\n * Refresh variables\n *\n * @public\n */\n\n }, {\n key: 'refresh',\n value: function refresh() {\n this.containerWidth = this.container.offsetWidth;\n this.containerHeight = this.container.offsetHeight;\n this.imageWidth = Math.min(this.containerWidth, this.image.naturalWidth);\n this.imageHeight = Math.min(this.containerHeight, this.image.naturalHeight);\n\n var maxZoom = Math.floor(this.image.naturalWidth / this.containerWidth);\n this.zoomMax = this.options.maxZoom < maxZoom ? this.options.maxZoom : maxZoom;\n this.zoom = Math.min(this.zoomMax, this.zoom);\n this.zoomSteps = Math.min(this.zoomMax, this.zoomSteps);\n\n if (this.zoomMax <= 1) {\n this.container.style.cursor = 'default';\n this.cursor = 'default';\n }\n }\n\n /**\n * Update the image position by adjustng the CSS\n *\n * @public\n */\n\n }, {\n key: 'unload',\n value: function unload() {\n var _this4 = this;\n\n this.image.removeEventListener('load', this._appendImage);\n document.body.removeEventListener('touchmove', this._preventScroll);\n\n [['mouseenter', this._initializeMouse], ['touchstart', this._initializeTouch], ['mousedown', this._initializeDrag], ['dragstart', this._preventDrag], ['mousemove', this._pan], ['touchmove', this._pan], ['mouseup', this._tap], ['touchend', this._release], ['mouseleave', this._release], ['wheel', this._scroll]].forEach(function (eventType) {\n _this4.container.removeEventListener(eventType[0], eventType[1]);\n });\n\n if (this.image.parentNode) {\n this.image.parentNode.removeChild(this.image);\n }\n }\n }]);\n return Pixelzoom;\n}();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Pixelzoom);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGl4ZWx6b29tL2Rpc3QvaW5kZXguZXMuanM/MTRiOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QyxtQkFBbUI7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7OztBQVFEO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNULE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1QsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPOztBQUVQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCLGdCQUFnQixPQUFPO0FBQ3ZCLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QixnQkFBZ0IsT0FBTztBQUN2QixnQkFBZ0IsT0FBTztBQUN2QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQixnQkFBZ0IsT0FBTztBQUN2QjtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0Esd0RBQXdELHVDQUF1QztBQUMvRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFYyx3RUFBUyxFQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3BpeGVsem9vbS9kaXN0L2luZGV4LmVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKiFcbiAqIHBpeGVsem9vbSB2MS4wLjFcbiAqIChjKSAyMDE4IFBpeGVsIFVuaW9uXG4gKi9cblxuLy8gUG9seWZpbGwgZm9yIGNyZWF0aW5nIEN1c3RvbUV2ZW50cyBvbiBJRTkvMTAvMTFcblxuLy8gY29kZSBwdWxsZWQgZnJvbTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kNHRvY2NoaW5pL2N1c3RvbWV2ZW50LXBvbHlmaWxsXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3VzdG9tRXZlbnQjUG9seWZpbGxcblxuKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICB2YXIgY2UgPSBuZXcgd2luZG93LkN1c3RvbUV2ZW50KCd0ZXN0JywgeyBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgIGNlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGNlLmRlZmF1bHRQcmV2ZW50ZWQgIT09IHRydWUpIHtcbiAgICAgIC8vIElFIGhhcyBwcm9ibGVtcyB3aXRoIC5wcmV2ZW50RGVmYXVsdCgpIG9uIGN1c3RvbSBldmVudHNcbiAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjMzNDkxOTFcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHByZXZlbnQgZGVmYXVsdCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciBDdXN0b21FdmVudCA9IGZ1bmN0aW9uIEN1c3RvbUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHZhciBldnQsIG9yaWdQcmV2ZW50O1xuICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHtcbiAgICAgICAgYnViYmxlczogZmFsc2UsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBkZXRhaWw6IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7XG4gICAgICBldnQuaW5pdEN1c3RvbUV2ZW50KGV2ZW50LCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUsIHBhcmFtcy5kZXRhaWwpO1xuICAgICAgb3JpZ1ByZXZlbnQgPSBldnQucHJldmVudERlZmF1bHQ7XG4gICAgICBldnQucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9yaWdQcmV2ZW50LmNhbGwodGhpcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdkZWZhdWx0UHJldmVudGVkJywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBldnQ7XG4gICAgfTtcblxuICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IHdpbmRvdy5FdmVudC5wcm90b3R5cGU7XG4gICAgd2luZG93LkN1c3RvbUV2ZW50ID0gQ3VzdG9tRXZlbnQ7IC8vIGV4cG9zZSBkZWZpbml0aW9uIHRvIHdpbmRvd1xuICB9XG59KSgpO1xuXG52YXIgY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG5cblxuXG5cblxuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxudmFyIFBpeGVsem9vbSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUGl4ZWx6b29tKGNvbnRhaW5lciwgb3B0aW9ucykge1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIFBpeGVsem9vbSk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7XG4gICAgICBpbWFnZUNsYXNzOiAncGl4ZWx6b29tLS1pbWFnZScsXG4gICAgICBpbWFnZVNvdXJjZTogb3B0aW9ucy5pbWFnZVNvdXJjZSB8fCBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW1nJykuc3JjLFxuICAgICAgaW5pdGlhbFpvb206IDEsXG4gICAgICBkcmFnUGFuOiBmYWxzZSxcbiAgICAgIG5hdHVyYWxQYW46IGZhbHNlLFxuICAgICAgbWF4Wm9vbTogOTk5OSxcbiAgICAgIHpvb21TZW5zaXRpdml0eTogMSxcbiAgICAgIHpvb21TdGVwczogMSxcbiAgICAgIG92ZXJmbG93Q29udGFpbmVyOiBudWxsXG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICAvLyBPdmVyZmxvdyBjb250YWluZXJcbiAgICB0aGlzLm92ZXJmbG93Q29udGFpbmVyID0gdGhpcy5vcHRpb25zLm92ZXJmbG93Q29udGFpbmVyO1xuXG4gICAgLy8gSW1hZ2UgY29udGFpbmVyXG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUuY3Vyc29yID0gdGhpcy5vcHRpb25zLm1heFpvb20gPiB0aGlzLm9wdGlvbnMuaW5pdGlhbFpvb20gPyAnem9vbS1pbicgOiAnem9vbS1vdXQnO1xuICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSBudWxsO1xuICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gbnVsbDtcblxuICAgIC8vIEltYWdlXG4gICAgdGhpcy5pbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIHRoaXMuaW1hZ2VTcmMgPSB0aGlzLm9wdGlvbnMuaW1hZ2VTb3VyY2U7XG4gICAgdGhpcy5pbWFnZVdpZHRoID0gbnVsbDtcbiAgICB0aGlzLmltYWdlSGVpZ2h0ID0gbnVsbDtcblxuICAgIC8vIFN0YXRlXG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xuICAgIHRoaXMubGFzdFggPSAwO1xuICAgIHRoaXMubGFzdFkgPSAwO1xuICAgIHRoaXMuZHJhZ1ggPSBudWxsO1xuICAgIHRoaXMuZHJhZ1kgPSBudWxsO1xuICAgIHRoaXMubGFzdERyYWdYID0gbnVsbDtcbiAgICB0aGlzLmxhc3REcmFnWSA9IG51bGw7XG4gICAgdGhpcy56b29tID0gTWF0aC5taW4odGhpcy5vcHRpb25zLm1heFpvb20sIHRoaXMub3B0aW9ucy5pbml0aWFsWm9vbSk7XG4gICAgdGhpcy56b29tTWF4ID0gdGhpcy5vcHRpb25zLm1heFpvb207XG4gICAgdGhpcy56b29tTWluID0gMTtcbiAgICB0aGlzLnpvb21TZW5zaXRpdml0eSA9IHRoaXMub3B0aW9ucy56b29tU2Vuc2l0aXZpdHk7XG4gICAgdGhpcy56b29tU3RlcHMgPSBNYXRoLm1pbih0aGlzLm9wdGlvbnMubWF4Wm9vbSwgdGhpcy5vcHRpb25zLnpvb21TdGVwcyk7XG4gICAgdGhpcy5kaXN0YW5jZSA9IDA7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmNvbnRhaW5lci5zdHlsZS5jdXJzb3I7XG4gICAgdGhpcy5wYW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5tb3VzZURvd24gPSBmYWxzZTtcbiAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG4gICAgdGhpcy50b3VjaGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLl90cmlnZ2VyRXZlbnQoJ2xvYWRpbmcnKTtcbiAgICB0aGlzLl9sb2FkSW1hZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgICogTG9hZCBpbWFnZVxuICAgICpcbiAgICAqIEBwcml2YXRlXG4gICAgKi9cblxuXG4gIGNyZWF0ZUNsYXNzKFBpeGVsem9vbSwgW3tcbiAgICBrZXk6ICdfbG9hZEltYWdlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2xvYWRJbWFnZSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuX2FwcGVuZEltYWdlKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pbWFnZS5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5pbWFnZUNsYXNzKTtcbiAgICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWFnZVNyYztcblxuICAgICAgdGhpcy5pbWFnZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICB0aGlzLmltYWdlLnN0eWxlLnRvcCA9ICcxMDAlJztcbiAgICAgIHRoaXMuaW1hZ2Uuc3R5bGUubGVmdCA9ICcxMDAlJztcbiAgICAgIHRoaXMuaW1hZ2Uuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XG4gICAgICB0aGlzLmltYWdlLnN0eWxlLm1heEhlaWdodCA9ICcxMDAlJztcbiAgICAgIHRoaXMuaW1hZ2Uuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gJ3RvcCBsZWZ0JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICogQXBwZW5kIGltYWdlIHRvIHRoZSBET01cbiAgICAgICpcbiAgICAgICogQHByaXZhdGVcbiAgICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ19hcHBlbmRJbWFnZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9hcHBlbmRJbWFnZSgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXJFdmVudCgnbG9hZGVkJyk7XG4gICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmltYWdlKTtcblxuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB0aGlzLl9iaW5kRXZlbnRzKCk7XG5cbiAgICAgIGlmICh0aGlzLnpvb20gPiB0aGlzLnpvb21NaW4pIHtcbiAgICAgICAgdGhpcy54ID0gLSh0aGlzLmltYWdlV2lkdGggKiB0aGlzLnpvb20pICsgKHRoaXMuaW1hZ2VXaWR0aCAqIHRoaXMuem9vbSAtIHRoaXMuaW1hZ2VXaWR0aCkgLyAyO1xuICAgICAgICB0aGlzLnkgPSAtKHRoaXMuaW1hZ2VIZWlnaHQgKiB0aGlzLnpvb20pICsgKHRoaXMuaW1hZ2VIZWlnaHQgKiB0aGlzLnpvb20gLSB0aGlzLmltYWdlSGVpZ2h0KSAvIDI7XG5cbiAgICAgICAgaWYgKHRoaXMubGFzdERyYWdYID09PSBudWxsICYmIHRoaXMubGFzdERyYWdZID09IG51bGwpIHtcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgdmFyIGRyYWdYID0gdGhpcy5vdmVyZmxvd0NvbnRhaW5lciAmJiB0aGlzLm92ZXJmbG93Q29udGFpbmVyLm9mZnNldFdpZHRoID49IHRoaXMuaW1hZ2VXaWR0aCAqIHRoaXMuem9vbSA/IHRoaXMub3ZlcmZsb3dDb250YWluZXIub2Zmc2V0V2lkdGggOiB0aGlzLmNvbnRhaW5lcldpZHRoO1xuICAgICAgICAgIHZhciBkcmFnWSA9IHRoaXMub3ZlcmZsb3dDb250YWluZXIgJiYgdGhpcy5vdmVyZmxvd0NvbnRhaW5lci5vZmZzZXRXaWR0aCA+PSB0aGlzLmltYWdlSGVpZ2h0ICogdGhpcy56b29tID8gdGhpcy5vdmVyZmxvd0NvbnRhaW5lci5vZmZzZXRIZWlnaHQgOiB0aGlzLmNvbnRhaW5lckhlaWdodDtcblxuICAgICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0ID8gd2luZG93LnBhZ2VYT2Zmc2V0IDogZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0O1xuICAgICAgICAgIHZhciBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgPyB3aW5kb3cucGFnZVlPZmZzZXQgOiBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDtcblxuICAgICAgICAgIHRoaXMubGFzdERyYWdYID0gZHJhZ1ggLyAyICsgb2Zmc2V0LmxlZnQgKyBzY3JvbGxMZWZ0O1xuICAgICAgICAgIHRoaXMubGFzdERyYWdZID0gZHJhZ1kgLyAyICsgb2Zmc2V0LnRvcCArIHNjcm9sbFRvcDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy54ID0gLXRoaXMuaW1hZ2VXaWR0aDtcbiAgICAgICAgdGhpcy55ID0gLXRoaXMuaW1hZ2VIZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGFzdFggPSB0aGlzLng7XG4gICAgICB0aGlzLmxhc3RZID0gdGhpcy55O1xuXG4gICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICogQmluZCBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzXG4gICAgICAqXG4gICAgICAqIEBwcml2YXRlXG4gICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfYmluZEV2ZW50cycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9iaW5kRXZlbnRzKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB2YXIgcG9pbnRlciA9IF90aGlzMi5fZ2V0UG9pbnRlckJvdW5kcyhldmVudCk7XG5cbiAgICAgICAgX3RoaXMyLl9pbml0aWFsaXplRHJhZyhwb2ludGVyWzBdKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBfdGhpczIuX2luaXRpYWxpemVNb3VzZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdmFyIHBvaW50ZXJzID0gX3RoaXMyLl9nZXRQb2ludGVyQm91bmRzKGV2ZW50KTtcblxuICAgICAgICBfdGhpczIuX2luaXRpYWxpemVUb3VjaChwb2ludGVyc1swXSwgcG9pbnRlcnNbMV0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBfdGhpczIuX3ByZXZlbnREcmFnKGV2ZW50KTtcbiAgICAgIH0pO1xuXG4gICAgICBbJ21vdXNlbW92ZScsICd0b3VjaG1vdmUnXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudFR5cGUpIHtcbiAgICAgICAgX3RoaXMyLmNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgdmFyIHBvaW50ZXJzID0gX3RoaXMyLl9nZXRQb2ludGVyQm91bmRzKGV2ZW50KTtcblxuICAgICAgICAgIF90aGlzMi5fcGFuKGV2ZW50VHlwZSwgcG9pbnRlcnNbMF0sIHBvaW50ZXJzWzFdKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBfdGhpczIuX3RhcCh7XG4gICAgICAgICAgeDogZXZlbnQucGFnZVgsXG4gICAgICAgICAgeTogZXZlbnQucGFnZVlcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgWydtb3VzZWxlYXZlJywgJ3RvdWNoZW5kJ10uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnRUeXBlKSB7XG4gICAgICAgIF90aGlzMi5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgX3RoaXMyLl9yZWxlYXNlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIF90aGlzMi5fc2Nyb2xsKGV2ZW50LmRlbHRhWSwge1xuICAgICAgICAgIHg6IGV2ZW50LnBhZ2VYLFxuICAgICAgICAgIHk6IGV2ZW50LnBhZ2VZXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIF90aGlzMi5fcHJldmVudFNjcm9sbChldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICogSW5jcmVtZW50IG9yIGRlY3JlbWVudCB6b29tXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhZGp1c3RtZW50XG4gICAgICAqIEBwcml2YXRlXG4gICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfc2V0Wm9vbScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXRab29tKGFkanVzdG1lbnQpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXJFdmVudCgnem9vbScpO1xuXG4gICAgICB2YXIgem9vbSA9IHRoaXMuem9vbSArIGFkanVzdG1lbnQ7XG5cbiAgICAgIHpvb20gPSBNYXRoLm1pbih0aGlzLnpvb21NYXgsIHpvb20pO1xuICAgICAgem9vbSA9IE1hdGgubWF4KHRoaXMuem9vbU1pbiwgem9vbSk7XG4gICAgICB0aGlzLnpvb20gPSB6b29tO1xuXG4gICAgICBpZiAodGhpcy56b29tID09PSB0aGlzLnpvb21NYXgpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuY3Vyc29yID0gJ3pvb20tb3V0JztcbiAgICAgICAgdGhpcy5jdXJzb3IgPSAnem9vbS1vdXQnO1xuXG4gICAgICAgIHRoaXMuX3RyaWdnZXJFdmVudCgnem9vbU1heCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuY3Vyc29yID0gJ3pvb20taW4nO1xuICAgICAgICB0aGlzLmN1cnNvciA9ICd6b29tLWluJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuem9vbSA9PT0gdGhpcy56b29tTWluKSB7XG4gICAgICAgIHRoaXMubGFzdERyYWdYID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0RHJhZ1kgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3RyaWdnZXJFdmVudCgnem9vbU1pbicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAgKiBTZXQgaW1hZ2UgY2VudGVyIHBvc2l0aW9uXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwb2ludGVyXG4gICAgICAqIEBwcml2YXRlXG4gICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfc2V0Q2VudGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3NldENlbnRlcihwb2ludGVyLCBldmVudCkge1xuICAgICAgaWYgKHRoaXMuem9vbSAhPT0gdGhpcy56b29tTWluKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdmFyIHpvb21XaWR0aCA9IHRoaXMuaW1hZ2VXaWR0aCAqIHRoaXMuem9vbSAtIHRoaXMuY29udGFpbmVyV2lkdGg7XG4gICAgICAgIHZhciB6b29tSGVpZ2h0ID0gdGhpcy5pbWFnZUhlaWdodCAqIHRoaXMuem9vbSAtIHRoaXMuY29udGFpbmVySGVpZ2h0O1xuXG4gICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0ID8gd2luZG93LnBhZ2VYT2Zmc2V0IDogZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0O1xuICAgICAgICB2YXIgc2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0ID8gd2luZG93LnBhZ2VZT2Zmc2V0IDogZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XG5cbiAgICAgICAgaWYgKCEodGhpcy56b29tIC0gMSA+IHRoaXMuem9vbU1pbiAmJiBldmVudCA9PT0gJ3RhcCcpIHx8IGV2ZW50ID09PSAndGFwJyAmJiB0aGlzLnpvb21TdGVwcyA+PSB0aGlzLnpvb21NYXgpIHtcbiAgICAgICAgICB0aGlzLmxhc3RYID0gcG9pbnRlci54O1xuICAgICAgICAgIHRoaXMubGFzdFkgPSBwb2ludGVyLnk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudFggPSAob2Zmc2V0LmxlZnQgLSB0aGlzLmxhc3RYKSAqICh6b29tV2lkdGggLyB0aGlzLmNvbnRhaW5lcldpZHRoKSAtIHRoaXMuY29udGFpbmVyV2lkdGggKyBzY3JvbGxMZWZ0ICogdGhpcy56b29tIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgdmFyIGN1cnJlbnRZID0gKG9mZnNldC50b3AgLSB0aGlzLmxhc3RZKSAqICh6b29tSGVpZ2h0IC8gdGhpcy5jb250YWluZXJIZWlnaHQpIC0gdGhpcy5jb250YWluZXJIZWlnaHQgKyBzY3JvbGxUb3AgKiB0aGlzLnpvb20gLSBzY3JvbGxUb3A7XG5cbiAgICAgICAgY3VycmVudFggPSBNYXRoLm1heCgtdGhpcy5pbWFnZVdpZHRoICogdGhpcy56b29tLCBjdXJyZW50WCk7XG4gICAgICAgIGN1cnJlbnRZID0gTWF0aC5tYXgoLXRoaXMuaW1hZ2VIZWlnaHQgKiB0aGlzLnpvb20sIGN1cnJlbnRZKTtcblxuICAgICAgICBpZiAodGhpcy5vdmVyZmxvd0NvbnRhaW5lcikge1xuICAgICAgICAgIGN1cnJlbnRYID0gTWF0aC5tYXgoLXRoaXMuaW1hZ2VXaWR0aCAqIHRoaXMuem9vbSArIG9mZnNldC5sZWZ0LCBjdXJyZW50WCk7XG4gICAgICAgICAgY3VycmVudFkgPSBNYXRoLm1heCgtdGhpcy5pbWFnZUhlaWdodCAqIHRoaXMuem9vbSArIG9mZnNldC50b3AsIGN1cnJlbnRZKTtcblxuICAgICAgICAgIGN1cnJlbnRYID0gTWF0aC5taW4oLXRoaXMuaW1hZ2VXaWR0aCAtIG9mZnNldC5sZWZ0LCBjdXJyZW50WCk7XG4gICAgICAgICAgY3VycmVudFkgPSBNYXRoLm1pbigtdGhpcy5pbWFnZUhlaWdodCAtIG9mZnNldC50b3AsIGN1cnJlbnRZKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm92ZXJmbG93Q29udGFpbmVyICYmIHRoaXMub3ZlcmZsb3dDb250YWluZXIub2Zmc2V0V2lkdGggPj0gdGhpcy5pbWFnZVdpZHRoICogdGhpcy56b29tKSB7XG4gICAgICAgICAgdGhpcy54ID0gLSh0aGlzLmltYWdlV2lkdGggKiB0aGlzLnpvb20pICsgKHRoaXMuaW1hZ2VXaWR0aCAqIHRoaXMuem9vbSAtIHRoaXMuaW1hZ2VXaWR0aCkgLyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueCA9IE1hdGgubWluKC10aGlzLmltYWdlV2lkdGgsIGN1cnJlbnRYKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm92ZXJmbG93Q29udGFpbmVyICYmIHRoaXMub3ZlcmZsb3dDb250YWluZXIub2Zmc2V0SGVpZ2h0ID49IHRoaXMuaW1hZ2VIZWlnaHQgKiB0aGlzLnpvb20pIHtcbiAgICAgICAgICB0aGlzLnkgPSAtKHRoaXMuaW1hZ2VIZWlnaHQgKiB0aGlzLnpvb20pICsgKHRoaXMuaW1hZ2VIZWlnaHQgKiB0aGlzLnpvb20gLSB0aGlzLmltYWdlSGVpZ2h0KSAvIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55ID0gTWF0aC5taW4oLXRoaXMuaW1hZ2VIZWlnaHQsIGN1cnJlbnRZKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy54ID0gLXRoaXMuaW1hZ2VXaWR0aDtcbiAgICAgICAgdGhpcy55ID0gLXRoaXMuaW1hZ2VIZWlnaHQ7XG4gICAgICAgIHRoaXMubGFzdFggPSAwO1xuICAgICAgICB0aGlzLmxhc3RZID0gMDtcbiAgICAgICAgdGhpcy5sYXN0RHJhZ1ggPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3REcmFnWSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICAqIEluaXRpYWxpemUgem9vbSBmb3Igbm9uLXRvdWNoIGRldmljZXNcbiAgICAgICpcbiAgICAgICogQHByaXZhdGVcbiAgICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ19pbml0aWFsaXplTW91c2UnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdGlhbGl6ZU1vdXNlKCkge1xuICAgICAgdGhpcy5fdHJpZ2dlckV2ZW50KCd0b3VjaCcpO1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICAqIEluaXRpYWxpemUgZHJhZ1xuICAgICAgKlxuICAgICAgKiBAcHJpdmF0ZVxuICAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnX2luaXRpYWxpemVEcmFnJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRpYWxpemVEcmFnKHBvaW50ZXIpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZHJhZ1Bhbikge1xuICAgICAgICB0aGlzLm1vdXNlRG93biA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMubGFzdERyYWdYID09PSBudWxsICYmIHRoaXMubGFzdERyYWdZID09PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5sYXN0RHJhZ1ggPSBwb2ludGVyLng7XG4gICAgICAgICAgdGhpcy5sYXN0RHJhZ1kgPSBwb2ludGVyLnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgICogSW5pdGlhbGl6ZSB6b29tIGZvciB0b3VjaCBkZXZpY2VzXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0b3VjaGVzXG4gICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwb2ludGVyT25lXG4gICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwb2ludGVyVHdvXG4gICAgICAqIEBwcml2YXRlXG4gICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfaW5pdGlhbGl6ZVRvdWNoJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRpYWxpemVUb3VjaChwb2ludGVyT25lLCBwb2ludGVyVHdvKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRXZlbnQoJ3RvdWNoJyk7XG5cbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG5cbiAgICAgIGlmICh0aGlzLmxhc3REcmFnWCA9PT0gbnVsbCAmJiB0aGlzLmxhc3REcmFnWSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubGFzdERyYWdYID0gcG9pbnRlck9uZS54O1xuICAgICAgICB0aGlzLmxhc3REcmFnWSA9IHBvaW50ZXJPbmUueTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBvaW50ZXJUd28gJiYgcG9pbnRlclR3by54ICYmIHBvaW50ZXJUd28ueSkge1xuICAgICAgICB0aGlzLmRpc3RhbmNlID0gTWF0aC5oeXBvdChwb2ludGVyT25lLnggLSBwb2ludGVyVHdvLngsIHBvaW50ZXJPbmUueSAtIHBvaW50ZXJUd28ueSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICAqIFBhbiBpbWFnZVxuICAgICAgKlxuICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlXG4gICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0b3VjaGVzXG4gICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwb2ludGVyT25lXG4gICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwb2ludGVyVHdvXG4gICAgICAqIEBwcml2YXRlXG4gICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfcGFuJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3BhbihldmVudFR5cGUsIHBvaW50ZXJPbmUsIHBvaW50ZXJUd28pIHtcbiAgICAgIGlmIChwb2ludGVyVHdvICYmIHBvaW50ZXJUd28ueCAmJiBwb2ludGVyVHdvLnkpIHtcbiAgICAgICAgaWYgKHRoaXMucGFubmluZyB8fCAhdGhpcy50b3VjaGVkKSB7XG4gICAgICAgICAgdGhpcy5fcGluY2goe1xuICAgICAgICAgICAgeDogcG9pbnRlck9uZS54LFxuICAgICAgICAgICAgeTogcG9pbnRlck9uZS55XG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgeDogcG9pbnRlclR3by54LFxuICAgICAgICAgICAgeTogcG9pbnRlclR3by55XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZHJhZ1BhbiAmJiB0aGlzLm1vdXNlRG93biA9PT0gZmFsc2UgJiYgZXZlbnRUeXBlICE9PSAndG91Y2htb3ZlJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZHJhZ1BhbiAmJiB0aGlzLm1vdXNlRG93biB8fCBldmVudFR5cGUgPT09ICd0b3VjaG1vdmUnKSB7XG4gICAgICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuY3Vyc29yID0gJ21vdmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGFubmluZyB8fCAhdGhpcy50b3VjaGVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RyYWcoe1xuICAgICAgICAgICAgICB4OiBwb2ludGVyT25lLngsXG4gICAgICAgICAgICAgIHk6IHBvaW50ZXJPbmUueVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NldENlbnRlcih7XG4gICAgICAgICAgICAgIHg6IHBvaW50ZXJPbmUueCxcbiAgICAgICAgICAgICAgeTogcG9pbnRlck9uZS55XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghdGhpcy5kcmFnZ2luZykge1xuICAgICAgICAgICAgdGhpcy5fc2V0Q2VudGVyKHtcbiAgICAgICAgICAgICAgeDogdGhpcy5sYXN0WCxcbiAgICAgICAgICAgICAgeTogdGhpcy5sYXN0WVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRUeXBlID09PSAndG91Y2htb3ZlJyAmJiAhdGhpcy5wYW5uaW5nKSB7XG4gICAgICAgIHRoaXMucGFubmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJFdmVudCgncGFuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICAqIFpvb20gaW50byB0aGUgaW1hZ2Ugb24gcGluY2hcbiAgICAgICpcbiAgICAgICogQHBhcmFtIHtvYmplY3R9IHRvdWNoT25lXG4gICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0b3VjaFR3b1xuICAgICAgKiBAcHJpdmF0ZVxuICAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnX3BpbmNoJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3BpbmNoKHRvdWNoT25lLCB0b3VjaFR3bykge1xuICAgICAgdGhpcy5fdHJpZ2dlckV2ZW50KCdwaW5jaCcpO1xuXG4gICAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLmh5cG90KHRvdWNoT25lLnggLSB0b3VjaFR3by54LCB0b3VjaE9uZS55IC0gdG91Y2hUd28ueSk7XG5cbiAgICAgIHZhciB6b29tQWRqdXN0bWVudCA9IHRoaXMuem9vbSAvICh0aGlzLnpvb21TZW5zaXRpdml0eSAqIDIpO1xuICAgICAgdmFyIGRpZmZlcmVuY2UgPSBNYXRoLmFicyhkaXN0YW5jZSkgLSBNYXRoLmFicyh0aGlzLmRpc3RhbmNlKTtcblxuICAgICAgaWYgKGRpZmZlcmVuY2UgPiAwLjUgfHwgZGlmZmVyZW5jZSA8IC0wLjUpIHtcbiAgICAgICAgdGhpcy5fc2V0Wm9vbShkaXN0YW5jZSA+IHRoaXMuZGlzdGFuY2UgPyArem9vbUFkanVzdG1lbnQgOiAtem9vbUFkanVzdG1lbnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlZnJlc2goKTtcblxuICAgICAgaWYgKHRoaXMuem9vbSA8IHRoaXMuem9vbU1heCkge1xuICAgICAgICBpZiAoZGlzdGFuY2UgPiB0aGlzLmRpc3RhbmNlKSB7XG4gICAgICAgICAgdG91Y2hPbmUueCAtPSAodG91Y2hPbmUueCAtIHRvdWNoVHdvLngpIC8gMjtcbiAgICAgICAgICB0b3VjaE9uZS55IC09ICh0b3VjaE9uZS55IC0gdG91Y2hUd28ueSkgLyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvdWNoT25lLnggPSB0aGlzLmxhc3REcmFnWDtcbiAgICAgICAgICB0b3VjaE9uZS55ID0gdGhpcy5sYXN0RHJhZ1k7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3REcmFnWCA9IHRvdWNoT25lLng7XG4gICAgICAgIHRoaXMubGFzdERyYWdZID0gdG91Y2hPbmUueTtcbiAgICAgICAgdGhpcy5kcmFnWCA9IDA7XG4gICAgICAgIHRoaXMuZHJhZ1kgPSAwO1xuXG4gICAgICAgIHRoaXMuX3NldENlbnRlcih7XG4gICAgICAgICAgeDogdG91Y2hPbmUueCxcbiAgICAgICAgICB5OiB0b3VjaE9uZS55XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcblxuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgICogRHJhZyBpbWFnZVxuICAgICAgKlxuICAgICAgKiBAcGFyYW0ge29iamVjdH0gcG9pbnRlclxuICAgICAgKiBAcHJpdmF0ZVxuICAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnX2RyYWcnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZHJhZyhwb2ludGVyKSB7XG4gICAgICBpZiAodGhpcy5kcmFnWCAmJiB0aGlzLmRyYWdZICYmIHRoaXMubGFzdERyYWdYICE9PSBudWxsICYmIHRoaXMubGFzdERyYWdZICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBkaWZmZXJlbmNlWCA9ICh0aGlzLmRyYWdYIC0gcG9pbnRlci54KSAvICh0aGlzLnpvb20gLyAyKTtcbiAgICAgICAgdmFyIGRpZmZlcmVuY2VZID0gKHRoaXMuZHJhZ1kgLSBwb2ludGVyLnkpIC8gKHRoaXMuem9vbSAvIDIpO1xuICAgICAgICB2YXIgZHJhZ1ggPSB0aGlzLmxhc3REcmFnWDtcbiAgICAgICAgdmFyIGRyYWdZID0gdGhpcy5sYXN0RHJhZ1k7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5uYXR1cmFsUGFuKSB7XG4gICAgICAgICAgZHJhZ1ggKz0gZGlmZmVyZW5jZVg7XG4gICAgICAgICAgZHJhZ1kgKz0gZGlmZmVyZW5jZVk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZHJhZ1ggLT0gZGlmZmVyZW5jZVg7XG4gICAgICAgICAgZHJhZ1kgLT0gZGlmZmVyZW5jZVk7XG4gICAgICAgIH1cblxuICAgICAgICBkcmFnWCA9IE1hdGgubWluKHRoaXMuaW1hZ2VXaWR0aCAqIHRoaXMuem9vbSwgZHJhZ1gpO1xuICAgICAgICB0aGlzLmxhc3REcmFnWCA9IE1hdGgubWF4KDAsIGRyYWdYKTtcblxuICAgICAgICBkcmFnWSA9IE1hdGgubWluKHRoaXMuaW1hZ2VIZWlnaHQgKiB0aGlzLnpvb20sIGRyYWdZKTtcbiAgICAgICAgdGhpcy5sYXN0RHJhZ1kgPSBNYXRoLm1heCgwLCBkcmFnWSk7XG5cbiAgICAgICAgdGhpcy5sYXN0WCA9IHRoaXMubGFzdERyYWdYO1xuICAgICAgICB0aGlzLmxhc3RZID0gdGhpcy5sYXN0RHJhZ1k7XG5cbiAgICAgICAgdGhpcy5fc2V0Q2VudGVyKHtcbiAgICAgICAgICB4OiB0aGlzLmxhc3REcmFnWCxcbiAgICAgICAgICB5OiB0aGlzLmxhc3REcmFnWVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kcmFnWCA9IHBvaW50ZXIueDtcbiAgICAgIHRoaXMuZHJhZ1kgPSBwb2ludGVyLnk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICAqIFpvb20gaW50byB0aGUgaW1hZ2Ugb24gdGFwL2NsaWNrXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwb2ludGVyXG4gICAgICAqIEBwcml2YXRlXG4gICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfdGFwJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3RhcChwb2ludGVyKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRXZlbnQoJ3RhcCcpO1xuXG4gICAgICBpZiAoIXRoaXMucGFubmluZyAmJiAhdGhpcy5kcmFnZ2luZykge1xuICAgICAgICB0aGlzLl9zZXRab29tKHRoaXMuem9vbU1heCA+IHRoaXMuem9vbSA/ICt0aGlzLnpvb21TdGVwcyA6IC10aGlzLnpvb21NYXgpO1xuXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuXG4gICAgICAgIHRoaXMuX3NldENlbnRlcihwb2ludGVyLCAndGFwJyk7XG5cbiAgICAgICAgdGhpcy5sYXN0RHJhZ1ggPSB0aGlzLmxhc3RYO1xuICAgICAgICB0aGlzLmxhc3REcmFnWSA9IHRoaXMubGFzdFk7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGFubmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tb3VzZURvd24gPSBmYWxzZTtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5kaXN0YW5jZSA9IDA7XG4gICAgICB0aGlzLmRyYWdYID0gMDtcbiAgICAgIHRoaXMuZHJhZ1kgPSAwO1xuXG4gICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICogWm9vbSBpbnRvIHRoZSBpbWFnZSBvbiBzY3JvbGxcbiAgICAgICpcbiAgICAgICogQHBhcmFtIHtpbnR9IHNjYWxlXG4gICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwb2ludGVyXG4gICAgICAqIEBwcml2YXRlXG4gICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfc2Nyb2xsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3Njcm9sbChzY2FsZSwgcG9pbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRyYWdnaW5nKSB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJFdmVudCgnc2Nyb2xsJyk7XG5cbiAgICAgICAgdmFyIHpvb21BZGp1c3RtZW50ID0gdGhpcy56b29tIC8gdGhpcy56b29tU2Vuc2l0aXZpdHk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kcmFnUGFuICYmIHRoaXMuem9vbSA+IHRoaXMuem9vbU1pbikge1xuICAgICAgICAgIHBvaW50ZXIueCA9IHRoaXMubGFzdERyYWdYO1xuICAgICAgICAgIHBvaW50ZXIueSA9IHRoaXMubGFzdERyYWdZO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXN0RHJhZ1ggPSBwb2ludGVyLng7XG4gICAgICAgIHRoaXMubGFzdERyYWdZID0gcG9pbnRlci55O1xuICAgICAgICB0aGlzLmRyYWdYID0gMDtcbiAgICAgICAgdGhpcy5kcmFnWSA9IDA7XG5cbiAgICAgICAgdGhpcy5fc2V0Wm9vbShzY2FsZSA8IDAgPyArem9vbUFkanVzdG1lbnQgOiAtem9vbUFkanVzdG1lbnQpO1xuXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuXG4gICAgICAgIHRoaXMuX3NldENlbnRlcihwb2ludGVyKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICAqIFNldCBwYW5uaW5nIHRvIGZhbHNlXG4gICAgICAqXG4gICAgICAqIEBwcml2YXRlXG4gICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfcmVsZWFzZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9yZWxlYXNlKCkge1xuICAgICAgdGhpcy5fdHJpZ2dlckV2ZW50KCdyZWxlYXNlJyk7XG4gICAgICB0aGlzLnBhbm5pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubW91c2VEb3duID0gZmFsc2U7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmRyYWdYID0gMDtcbiAgICAgIHRoaXMuZHJhZ1kgPSAwO1xuXG4gICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5jdXJzb3IgPSB0aGlzLmN1cnNvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICogUHJldmVudCBpbWFnZXMgZnJvbSBiZWluZyBkcmFnZ2VkXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudFxuICAgICAgKiBAcHJpdmF0ZVxuICAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnX3ByZXZlbnREcmFnJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3ByZXZlbnREcmFnKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAgKiBQcmV2ZW50IGJvZHkgZnJvbSBzY3JvbGxpbmcgd2hlbiBpbWFnZSBpcyBiZWluZyBwYW5uZWRcbiAgICAgICpcbiAgICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50XG4gICAgICAqIEBwcml2YXRlXG4gICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfcHJldmVudFNjcm9sbCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9wcmV2ZW50U2Nyb2xsKGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5wYW5uaW5nKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICAqIEdldCB0aGUgcG9pbnRlciBib3VuZHMgZnJvbSB0aGUgZXZlbnRcbiAgICAgICpcbiAgICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50XG4gICAgICAqIEBwcml2YXRlXG4gICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfZ2V0UG9pbnRlckJvdW5kcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRQb2ludGVyQm91bmRzKGV2ZW50KSB7XG4gICAgICB2YXIgcG9pbnRlcnMgPSBbe1xuICAgICAgICB4OiBldmVudC5wYWdlWCA/IGV2ZW50LnBhZ2VYIDogZXZlbnQudG91Y2hlc1swXS5jbGllbnRYLFxuICAgICAgICB5OiBldmVudC5wYWdlWSA/IGV2ZW50LnBhZ2VZIDogZXZlbnQudG91Y2hlc1swXS5jbGllbnRZXG4gICAgICB9LCB7XG4gICAgICAgIHg6IGV2ZW50LnRhcmdldFRvdWNoZXMgJiYgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggPiAxID8gZXZlbnQudG91Y2hlc1sxXS5jbGllbnRYIDogbnVsbCxcbiAgICAgICAgeTogZXZlbnQudGFyZ2V0VG91Y2hlcyAmJiBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCA+IDEgPyBldmVudC50b3VjaGVzWzFdLmNsaWVudFkgOiBudWxsXG4gICAgICB9XTtcblxuICAgICAgcmV0dXJuIHBvaW50ZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAgKiBDcmVhdGUgYW4gZXZlbnQgYW5kIHRyaWdnZXIgaXRcbiAgICAgICpcbiAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgICogQHByaXZhdGVcbiAgICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ190cmlnZ2VyRXZlbnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdHJpZ2dlckV2ZW50KG5hbWUpIHtcbiAgICAgIHZhciBldmVudCA9IG5ldyBDdXN0b21FdmVudCgncGl4ZWx6b29tOicgKyBuYW1lLCB7ICdidWJibGVzJzogdHJ1ZSwgJ2NhbmNlbGFibGUnOiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuY29udGFpbmVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAgKiBVcGRhdGUgdGhlIGltYWdlIHBvc2l0aW9uIGJ5IGFkanVzdG5nIHRoZSBDU1NcbiAgICAgICpcbiAgICAgICogQHByaXZhdGVcbiAgICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ191cGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdXBkYXRlKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5pbWFnZS5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlKCcgKyBfdGhpczMueCArICdweCwgJyArIF90aGlzMy55ICsgJ3B4KSBzY2FsZSgnICsgX3RoaXMzLnpvb20gKyAnKSc7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICogUmVmcmVzaCB2YXJpYWJsZXNcbiAgICAgICpcbiAgICAgICogQHB1YmxpY1xuICAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAncmVmcmVzaCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlZnJlc2goKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICAgIHRoaXMuaW1hZ2VXaWR0aCA9IE1hdGgubWluKHRoaXMuY29udGFpbmVyV2lkdGgsIHRoaXMuaW1hZ2UubmF0dXJhbFdpZHRoKTtcbiAgICAgIHRoaXMuaW1hZ2VIZWlnaHQgPSBNYXRoLm1pbih0aGlzLmNvbnRhaW5lckhlaWdodCwgdGhpcy5pbWFnZS5uYXR1cmFsSGVpZ2h0KTtcblxuICAgICAgdmFyIG1heFpvb20gPSBNYXRoLmZsb29yKHRoaXMuaW1hZ2UubmF0dXJhbFdpZHRoIC8gdGhpcy5jb250YWluZXJXaWR0aCk7XG4gICAgICB0aGlzLnpvb21NYXggPSB0aGlzLm9wdGlvbnMubWF4Wm9vbSA8IG1heFpvb20gPyB0aGlzLm9wdGlvbnMubWF4Wm9vbSA6IG1heFpvb207XG4gICAgICB0aGlzLnpvb20gPSBNYXRoLm1pbih0aGlzLnpvb21NYXgsIHRoaXMuem9vbSk7XG4gICAgICB0aGlzLnpvb21TdGVwcyA9IE1hdGgubWluKHRoaXMuem9vbU1heCwgdGhpcy56b29tU3RlcHMpO1xuXG4gICAgICBpZiAodGhpcy56b29tTWF4IDw9IDEpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnO1xuICAgICAgICB0aGlzLmN1cnNvciA9ICdkZWZhdWx0JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgICogVXBkYXRlIHRoZSBpbWFnZSBwb3NpdGlvbiBieSBhZGp1c3RuZyB0aGUgQ1NTXG4gICAgICAqXG4gICAgICAqIEBwdWJsaWNcbiAgICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ3VubG9hZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVubG9hZCgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB0aGlzLmltYWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9hcHBlbmRJbWFnZSk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX3ByZXZlbnRTY3JvbGwpO1xuXG4gICAgICBbWydtb3VzZWVudGVyJywgdGhpcy5faW5pdGlhbGl6ZU1vdXNlXSwgWyd0b3VjaHN0YXJ0JywgdGhpcy5faW5pdGlhbGl6ZVRvdWNoXSwgWydtb3VzZWRvd24nLCB0aGlzLl9pbml0aWFsaXplRHJhZ10sIFsnZHJhZ3N0YXJ0JywgdGhpcy5fcHJldmVudERyYWddLCBbJ21vdXNlbW92ZScsIHRoaXMuX3Bhbl0sIFsndG91Y2htb3ZlJywgdGhpcy5fcGFuXSwgWydtb3VzZXVwJywgdGhpcy5fdGFwXSwgWyd0b3VjaGVuZCcsIHRoaXMuX3JlbGVhc2VdLCBbJ21vdXNlbGVhdmUnLCB0aGlzLl9yZWxlYXNlXSwgWyd3aGVlbCcsIHRoaXMuX3Njcm9sbF1dLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50VHlwZSkge1xuICAgICAgICBfdGhpczQuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlWzBdLCBldmVudFR5cGVbMV0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmltYWdlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgdGhpcy5pbWFnZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuaW1hZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUGl4ZWx6b29tO1xufSgpO1xuXG5leHBvcnQgZGVmYXVsdCBQaXhlbHpvb207XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/pixelzoom/dist/index.es.js\n") },
vendor: 9,529 bytes, line 1
1"./node_modules/rimg-shopify/dist/index.es.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var rimg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rimg */ \"./node_modules/rimg/dist/index.es.js\");\n/*!\n * rimg-shopify v2.4.0\n * (c) 2019 Pixel Union\n */\n\n\n/**\n * Polyfill for Element.matches().\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\n */\nif (!Element.prototype.matches) {\n Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) {\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\n i = matches.length;\n while (--i >= 0 && matches.item(i) !== this) {}\n return i > -1;\n };\n}\n\nvar state = {\n init: init,\n watch: watch,\n unwatch: unwatch\n};\n\nfunction init() {\n var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '[data-rimg=\"lazy\"]';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n state.selector = selector;\n state.instance = Object(rimg__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(selector, options);\n state.loadedWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n\n // Listen for Shopify theme editor events\n document.addEventListener('shopify:section:load', function (event) {\n return watch(event.target);\n });\n\n window.addEventListener('resize', function () {\n return _update();\n });\n\n document.addEventListener('shopify:section:unload', function (event) {\n return unwatch(event.target);\n });\n\n // Listen for custom events to allow themes to hook into rimg\n document.addEventListener('theme:rimg:watch', function (event) {\n return watch(event.target);\n });\n\n document.addEventListener('theme:rimg:unwatch', function (event) {\n return unwatch(event.target);\n });\n\n // Support custom events triggered through jQuery\n // See: https://github.com/jquery/jquery/issues/3347\n if (window.jQuery) {\n jQuery(document).on({\n 'theme:rimg:watch': function themeRimgWatch(event) {\n return watch(event.target);\n },\n 'theme:rimg:unwatch': function themeRimgUnwatch(event) {\n return unwatch(event.target);\n }\n });\n }\n}\n\n/**\n * Track an element, and its children.\n *\n * @param {HTMLElement} el\n */\nfunction watch(el) {\n // Track element\n if (typeof el.matches === 'function' && el.matches(state.selector)) {\n state.instance.track(el);\n }\n\n // Track element's children\n state.instance.track(el.querySelectorAll(state.selector));\n}\n\n/**\n * Untrack an element, and its children\n *\n * @param {HTMLElement} el\n * @private\n */\nfunction unwatch(el) {\n // Untrack element's children\n state.instance.untrack(el.querySelectorAll(state.selector));\n\n // Untrack element\n if (typeof el.matches === 'function' && el.matches(state.selector)) {\n state.instance.untrack(el);\n }\n}\n\n/**\n * Update an element, and its children.\n *\n * @param {HTMLElement} el\n */\nfunction _update() {\n var currentWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n\n // Return if we're not 2x smaller, or larger than the existing loading size\n if (currentWidth / state.loadedWidth > 0.5 && currentWidth / state.loadedWidth < 2) {\n return;\n }\n\n state.loadedWidth = currentWidth;\n state.instance.update();\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (state);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmltZy1zaG9waWZ5L2Rpc3QvaW5kZXguZXMuanM/OWYwYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLG9EQUFJO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFZSxvRUFBSyxFQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3JpbWctc2hvcGlmeS9kaXN0L2luZGV4LmVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiByaW1nLXNob3BpZnkgdjIuNC4wXG4gKiAoYykgMjAxOSBQaXhlbCBVbmlvblxuICovXG5pbXBvcnQgcmltZyBmcm9tICdyaW1nJztcblxuLyoqXG4gKiBQb2x5ZmlsbCBmb3IgRWxlbWVudC5tYXRjaGVzKCkuXG4gKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9tYXRjaGVzXG4gKi9cbmlmICghRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcykge1xuICBFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzID0gRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlc1NlbGVjdG9yIHx8IEVsZW1lbnQucHJvdG90eXBlLm1vek1hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS5vTWF0Y2hlc1NlbGVjdG9yIHx8IEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBmdW5jdGlvbiAocykge1xuICAgIHZhciBtYXRjaGVzID0gKHRoaXMuZG9jdW1lbnQgfHwgdGhpcy5vd25lckRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKHMpLFxuICAgICAgICBpID0gbWF0Y2hlcy5sZW5ndGg7XG4gICAgd2hpbGUgKC0taSA+PSAwICYmIG1hdGNoZXMuaXRlbShpKSAhPT0gdGhpcykge31cbiAgICByZXR1cm4gaSA+IC0xO1xuICB9O1xufVxuXG52YXIgc3RhdGUgPSB7XG4gIGluaXQ6IGluaXQsXG4gIHdhdGNoOiB3YXRjaCxcbiAgdW53YXRjaDogdW53YXRjaFxufTtcblxuZnVuY3Rpb24gaW5pdCgpIHtcbiAgdmFyIHNlbGVjdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnW2RhdGEtcmltZz1cImxhenlcIl0nO1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgc3RhdGUuc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgc3RhdGUuaW5zdGFuY2UgPSByaW1nKHNlbGVjdG9yLCBvcHRpb25zKTtcbiAgc3RhdGUubG9hZGVkV2lkdGggPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuXG4gIC8vIExpc3RlbiBmb3IgU2hvcGlmeSB0aGVtZSBlZGl0b3IgZXZlbnRzXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Nob3BpZnk6c2VjdGlvbjpsb2FkJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuIHdhdGNoKGV2ZW50LnRhcmdldCk7XG4gIH0pO1xuXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91cGRhdGUoKTtcbiAgfSk7XG5cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2hvcGlmeTpzZWN0aW9uOnVubG9hZCcsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiB1bndhdGNoKGV2ZW50LnRhcmdldCk7XG4gIH0pO1xuXG4gIC8vIExpc3RlbiBmb3IgY3VzdG9tIGV2ZW50cyB0byBhbGxvdyB0aGVtZXMgdG8gaG9vayBpbnRvIHJpbWdcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndGhlbWU6cmltZzp3YXRjaCcsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiB3YXRjaChldmVudC50YXJnZXQpO1xuICB9KTtcblxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0aGVtZTpyaW1nOnVud2F0Y2gnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gdW53YXRjaChldmVudC50YXJnZXQpO1xuICB9KTtcblxuICAvLyBTdXBwb3J0IGN1c3RvbSBldmVudHMgdHJpZ2dlcmVkIHRocm91Z2ggalF1ZXJ5XG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvaXNzdWVzLzMzNDdcbiAgaWYgKHdpbmRvdy5qUXVlcnkpIHtcbiAgICBqUXVlcnkoZG9jdW1lbnQpLm9uKHtcbiAgICAgICd0aGVtZTpyaW1nOndhdGNoJzogZnVuY3Rpb24gdGhlbWVSaW1nV2F0Y2goZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIHdhdGNoKGV2ZW50LnRhcmdldCk7XG4gICAgICB9LFxuICAgICAgJ3RoZW1lOnJpbWc6dW53YXRjaCc6IGZ1bmN0aW9uIHRoZW1lUmltZ1Vud2F0Y2goZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIHVud2F0Y2goZXZlbnQudGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYWNrIGFuIGVsZW1lbnQsIGFuZCBpdHMgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcbiAqL1xuZnVuY3Rpb24gd2F0Y2goZWwpIHtcbiAgLy8gVHJhY2sgZWxlbWVudFxuICBpZiAodHlwZW9mIGVsLm1hdGNoZXMgPT09ICdmdW5jdGlvbicgJiYgZWwubWF0Y2hlcyhzdGF0ZS5zZWxlY3RvcikpIHtcbiAgICBzdGF0ZS5pbnN0YW5jZS50cmFjayhlbCk7XG4gIH1cblxuICAvLyBUcmFjayBlbGVtZW50J3MgY2hpbGRyZW5cbiAgc3RhdGUuaW5zdGFuY2UudHJhY2soZWwucXVlcnlTZWxlY3RvckFsbChzdGF0ZS5zZWxlY3RvcikpO1xufVxuXG4vKipcbiAqIFVudHJhY2sgYW4gZWxlbWVudCwgYW5kIGl0cyBjaGlsZHJlblxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1bndhdGNoKGVsKSB7XG4gIC8vIFVudHJhY2sgZWxlbWVudCdzIGNoaWxkcmVuXG4gIHN0YXRlLmluc3RhbmNlLnVudHJhY2soZWwucXVlcnlTZWxlY3RvckFsbChzdGF0ZS5zZWxlY3RvcikpO1xuXG4gIC8vIFVudHJhY2sgZWxlbWVudFxuICBpZiAodHlwZW9mIGVsLm1hdGNoZXMgPT09ICdmdW5jdGlvbicgJiYgZWwubWF0Y2hlcyhzdGF0ZS5zZWxlY3RvcikpIHtcbiAgICBzdGF0ZS5pbnN0YW5jZS51bnRyYWNrKGVsKTtcbiAgfVxufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBlbGVtZW50LCBhbmQgaXRzIGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGUoKSB7XG4gIHZhciBjdXJyZW50V2lkdGggPSBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuXG4gIC8vIFJldHVybiBpZiB3ZSdyZSBub3QgMnggc21hbGxlciwgb3IgbGFyZ2VyIHRoYW4gdGhlIGV4aXN0aW5nIGxvYWRpbmcgc2l6ZVxuICBpZiAoY3VycmVudFdpZHRoIC8gc3RhdGUubG9hZGVkV2lkdGggPiAwLjUgJiYgY3VycmVudFdpZHRoIC8gc3RhdGUubG9hZGVkV2lkdGggPCAyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUubG9hZGVkV2lkdGggPSBjdXJyZW50V2lkdGg7XG4gIHN0YXRlLmluc3RhbmNlLnVwZGF0ZSgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdGF0ZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/rimg-shopify/dist/index.es.js\n") },
vendor: 43,394 bytes, line 1
1"./node_modules/rimg/dist/index.es.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/*!\n * rimg v2.1.7\n * (c) 2018 Pixel Union\n */\n/**\n * The default template render function. Turns a template string into an image\n * URL.\n *\n * @param {String} template\n * @param {Size} size\n * @returns {String}\n */\nfunction defaultTemplateRender(template, size) {\n return template.replace('{size}', size.width + 'x' + size.height);\n}\n\n/**\n * @type Settings\n */\nvar defaults = {\n scale: 1,\n template: false,\n templateRender: defaultTemplateRender,\n max: { width: Infinity, height: Infinity },\n round: 32,\n placeholder: false,\n crop: null\n};\n\n/**\n * Get a data attribute value from an element, with a default fallback and\n * sanitization step.\n *\n * @param {Element} el\n *\n * @param {String} name\n * The data attribute name.\n *\n * @param {Object} options\n * An object holding fallback values if the data attribute does not\n * exist. If this object doesn't have the property, we further fallback\n * to our defaults.\n *\n * @param {Function} [sanitize]\n * A function to sanitize the data attribute value with.\n *\n * @returns {String|*}\n */\nfunction getData(el, name, options, sanitize) {\n var attr = 'data-rimg-' + name;\n if (!el.hasAttribute(attr)) return options[name] || defaults[name];\n\n var value = el.getAttribute(attr);\n\n return sanitize ? sanitize(value) : value;\n}\n\n/**\n * Sanitize data attributes that represent a size (in the form of `10x10`).\n *\n * @param {String} value\n * @returns {Object} An object with `width` and `height` properties.\n */\nfunction parseSize(value) {\n value = value.split('x');\n return { width: parseInt(value[0], 10), height: parseInt(value[1], 10) };\n}\n\n/**\n * Loads information about an element.\n *\n * Options can be set on the element itself using data attributes, or through\n * the `options` parameter. Data attributes take priority.\n *\n * @param {HTMLElement} el\n * @param {Settings} options\n * @returns {Item}\n */\nfunction parseItem(el) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var isImage = el.hasAttribute('data-rimg-template');\n\n /**\n * @typedef {Settings} Item\n */\n return {\n el: el,\n\n // Type of element\n isImage: isImage,\n isBackgroundImage: isImage && el.tagName !== 'IMG',\n\n // Image scale\n scale: getData(el, 'scale', options),\n\n // Device density\n density: window.devicePixelRatio || 1,\n\n // Image template URL\n template: getData(el, 'template', options),\n templateRender: options.templateRender || defaults.templateRender,\n\n // Maximum image dimensions\n max: getData(el, 'max', options, parseSize),\n\n // Round image dimensions to the nearest multiple\n round: getData(el, 'round', options),\n\n // Placeholder image dimensions\n placeholder: getData(el, 'placeholder', options, parseSize),\n\n // Crop value; null if image is uncropped, otherwise equal to the Shopify crop parameter ('center', 'top', etc.)\n crop: getData(el, 'crop', options, function (value) {\n return value === '' ? null : value;\n })\n };\n}\n\n/**\n * Round to the nearest multiple.\n *\n * This is so we don't tax the image server too much.\n *\n * @param {Number} size The size, in pixels.\n * @param {Number} [multiple] The multiple to round to the nearest.\n * @param {Number} [maxLimit] Maximum allowed value - value to return if rounded multiple is above this limit\n * @returns {Number}\n */\nfunction roundSize(size) {\n var multiple = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 32;\n var maxLimit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Infinity;\n\n return size === 0 ? multiple : Math.min(Math.ceil(size / multiple) * multiple, maxLimit);\n}\n\n/**\n * Get the size of an element.\n *\n * If it is too small, it's parent element is checked, and so on. This helps\n * avoid the situation where an element doesn't have a size yet or is positioned\n * out of the layout.\n *\n * @param {HTMLElement} el\n * @return {Object} size\n * @return {Number} size.width The width, in pixels.\n * @return {Number} size.height The height, in pixels.\n */\nfunction getElementSize(el) {\n var size = { width: 0, height: 0 };\n\n while (el) {\n size.width = el.offsetWidth;\n size.height = el.offsetHeight;\n if (size.width > 20 && size.height > 20) break;\n el = el.parentNode;\n }\n\n return size;\n}\n\n/**\n * Trigger a custom event.\n *\n * Note: this approach is deprecated, but still required to support older\n * browsers such as IE 10.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events\n *\n * @param {HTMLElement} el\n * The element to trigger the event on.\n *\n * @param {String} name\n * The event name.\n *\n * @returns {Boolean}\n * True if the event was canceled.\n */\nfunction trigger(el, name) {\n var event = document.createEvent('Event');\n event.initEvent(name, true, true);\n return !el.dispatchEvent(event);\n}\n\n/**\n * Return the maximum supported density of the image, given the container.\n *\n * @param {Item} item\n * @param {Size} size\n */\nfunction supportedDensity(item, size) {\n return Math.min(Math.min(Math.max(item.max.width / size.width, 1), item.density), Math.min(Math.max(item.max.height / size.height, 1), item.density)).toFixed(2);\n}\n\n/**\n * Set the image URL on the element. Supports background images and `srcset`.\n *\n * @param {Item} item\n * @param {Size} size\n * @param {Boolean} isPlaceholder\n */\nfunction setImage(item, size, isPlaceholder, onLoad) {\n var render = item.templateRender;\n var density = isPlaceholder ? 1 : supportedDensity(item, size);\n var round = isPlaceholder ? 1 : item.round;\n\n // Calculate the final display size, taking into account the image's\n // maximum dimensions.\n var targetWidth = size.width * density;\n var targetHeight = size.height * density;\n\n var displaySize = void 0;\n\n if (item.crop) {\n displaySize = {\n width: roundSize(targetWidth, round, item.max.width),\n height: roundSize(targetHeight, round, item.max.height)\n };\n } else {\n // Shopify serves images clamped by the requested dimensions (fitted to the smallest dimension).\n // To get the desired and expected pixel density we need to request cover dimensions (fitted to largest dimension).\n // This isn't a problem with cropped images which are served at the exact dimension requested.\n var containerAspectRatio = size.width / size.height;\n var imageAspectRatio = item.max.width / item.max.height;\n\n if (containerAspectRatio > imageAspectRatio) {\n // fit width\n displaySize = {\n width: roundSize(targetWidth, round, item.max.width),\n height: roundSize(targetWidth / imageAspectRatio, round, item.max.height)\n };\n } else {\n // fit height\n displaySize = {\n width: roundSize(targetHeight * imageAspectRatio, round, item.max.width),\n height: roundSize(targetHeight, round, item.max.height)\n };\n }\n }\n\n var url = render(item.template, displaySize);\n\n // On load callback\n var image = new Image();\n image.onload = onLoad;\n image.src = url;\n\n // Set image\n if (item.isBackgroundImage) {\n item.el.style.backgroundImage = 'url(\\'' + url + '\\')';\n } else {\n item.el.setAttribute('srcset', url + ' ' + density + 'x');\n }\n}\n\n/**\n * Load the image, set loaded status, and trigger the load event.\n *\n * @fires rimg:load\n * @fires rimg:error\n * @param {Item} item\n * @param {Size} size\n */\nfunction loadFullImage(item, size) {\n var el = item.el;\n\n setImage(item, size, false, function (event) {\n if (event.type === 'load') {\n el.setAttribute('data-rimg', 'loaded');\n } else {\n el.setAttribute('data-rimg', 'error');\n trigger(el, 'rimg:error');\n }\n\n trigger(el, 'rimg:load');\n });\n}\n\n/**\n * Load in a responsive image.\n *\n * Sets the image's `srcset` attribute to the final image URLs, calculated based\n * on the actual size the image is being shown at.\n *\n * @fires rimg:loading\n * The image URLs have been set and we are waiting for them to load.\n *\n * @fires rimg:loaded\n * The final image has loaded.\n *\n * @fires rimg:error\n * The final image failed loading.\n *\n * @param {Item} item\n */\nfunction loadImage(item) {\n var el = item.el;\n\n // Already loaded?\n var status = el.getAttribute('data-rimg');\n if (status === 'loading' || status === 'loaded') return;\n\n // Is the SVG loaded?\n if (!el.complete && !item.isBackgroundImage) {\n // Wait for the load event, then call load image\n el.addEventListener('load', function cb() {\n el.removeEventListener('load', cb);\n loadImage(item);\n });\n\n return;\n }\n\n // Trigger loading event, and stop if cancelled\n if (trigger(el, 'rimg:loading')) return;\n\n // Mark as loading\n el.setAttribute('data-rimg', 'loading');\n\n // Get element size. This is used as the ideal display size.\n var size = getElementSize(item.el);\n\n size.width *= item.scale;\n size.height *= item.scale;\n\n if (item.placeholder) {\n // Load a placeholder image first, followed by the full image. Force the\n // element to keep its dimensions while it loads. If the image is smaller\n // than the element size, use the image's size. Density is taken into account\n // for HiDPI devices to avoid blurry images.\n if (!item.isBackgroundImage) {\n el.setAttribute('width', Math.min(Math.floor(item.max.width / item.density), size.width));\n el.setAttribute('height', Math.min(Math.floor(item.max.height / item.density), size.height));\n }\n\n setImage(item, item.placeholder, true, function () {\n return loadFullImage(item, size);\n });\n } else {\n loadFullImage(item, size);\n }\n}\n\n/**\n * Prepare an element to be displayed on the screen.\n *\n * Images have special logic applied to them to swap out the different sources.\n *\n * @fires rimg:enter\n * The element is entering the viewport.\n *\n * @param {HTMLElement} el\n * @param {Settings} options\n */\nfunction load(el, options) {\n if (!el) return;\n trigger(el, 'rimg:enter');\n\n var item = parseItem(el, options);\n\n if (item.isImage) {\n if (!item.isBackgroundImage) {\n el.setAttribute('data-rimg-template-svg', el.getAttribute('srcset'));\n }\n\n loadImage(item);\n }\n}\n\n/**\n * Reset an element's state so that its image can be recalculated.\n *\n * @fires rimg:update\n * The element is being updated.\n *\n * @param {HTMLElement} el\n * @param {Settings} options\n */\nfunction update(el, options) {\n if (!el) return;\n trigger(el, 'rimg:update');\n\n var item = parseItem(el, options);\n\n if (item.isImage) {\n if (!item.isBackgroundImage) {\n el.setAttribute('data-rimg', 'lazy');\n el.setAttribute('srcset', el.getAttribute('data-rimg-template-svg'));\n }\n\n loadImage(item);\n }\n}\n\n/**\n * Returns true if the element is within the viewport.\n * @param {HTMLElement} el\n * @returns {Boolean}\n */\nfunction inViewport(el) {\n if (!el.offsetWidth || !el.offsetHeight || !el.getClientRects().length) {\n return false;\n }\n\n var root = document.documentElement;\n var width = Math.min(root.clientWidth, window.innerWidth);\n var height = Math.min(root.clientHeight, window.innerHeight);\n var rect = el.getBoundingClientRect();\n\n return rect.bottom >= 0 && rect.right >= 0 && rect.top <= height && rect.left <= width;\n}\n\n/**\n * @typedef {Object} Size\n * @property {Number} width\n * @property {Number} height\n */\n\n/**\n * A function to turn a template string into a URL.\n *\n * @callback TemplateRenderer\n * @param {String} template\n * @param {Size} size\n * @returns {String}\n */\n\n/**\n * @typedef {Object} Settings\n *\n * @property {String} [template]\n * A template string used to generate URLs for an image. This allows us to\n * dynamically load images with sizes to match the container's size.\n *\n * @property {TemplateRenderer} [templateRender]\n * A function to turn a template string into a URL.\n *\n * @property {Size} [max]\n * The maximum available size for the image. This ensures we don't\n * try to load an image larger than is possible.\n *\n * @property {Number} [scale]\n * A number to scale the final image dimensions by.\n * Only applies to lazy-loaded images. Defaults to 1.\n *\n * @property {Number} [round]\n * Round image dimensions to the nearest multiple. This is intended to\n * tax the image server less by lowering the number of possible image\n * sizes requested.\n *\n * @property {Size} [placeholder]\n * The size of the lo-fi image to load before the full image.\n *\n * @property {String} [crop]\n * Crop value; null if image is uncropped, otherwise equal\n * to the Shopify crop parameter ('center', 'top', etc.).\n */\n\n/**\n * Initialize the responsive image handler.\n *\n * @param {String|HTMLElement|NodeList} selector\n * The CSS selector, element, or elements to track for lazy-loading.\n *\n * @param {Settings} options\n *\n * @returns {PublicApi}\n */\nfunction rimg() {\n var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '[data-rimg=\"lazy\"]';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // Intersections\n var io = new IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(entry.target);\n load(entry.target, options);\n }\n });\n }, {\n // Watch the viewport, with 20% vertical margins\n rootMargin: '20% 0px'\n });\n\n /**\n * @typedef {Object} PublicApi\n */\n var api = {\n /**\n * Track a new selector, element, or nodelist for lazy-loading.\n * @type Function\n * @param {String|HTMLElement|NodeList} selector\n */\n track: function track() {\n var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '[data-rimg=\"lazy\"]';\n\n var els = querySelector(selector);\n\n for (var i = 0; i < els.length; i++) {\n // If an element is already in the viewport, load it right away. This\n // fixes a race-condition with dynamically added elements.\n if (inViewport(els[i])) {\n load(els[i], options);\n } else {\n io.observe(els[i]);\n }\n }\n },\n\n\n /**\n * Update element(s) that have already been loaded to force their images\n * to be recalculated.\n * @type Function\n * @param {String|HTMLElement|NodeList} selector\n */\n update: function update$$1() {\n var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '[data-rimg=\"loaded\"]';\n\n var els = querySelector(selector);\n for (var i = 0; i < els.length; i++) {\n update(els[i], options);\n }\n },\n\n\n /**\n * Stop tracking element(s) for lazy-loading.\n * @type Function\n * @param {String|HTMLElement|NodeList} selector\n */\n untrack: function untrack() {\n var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '[data-rimg]';\n\n var els = querySelector(selector);\n for (var i = 0; i < els.length; i++) {\n io.unobserve(els[i]);\n }\n },\n\n\n /**\n * Unload all event handlers and observers.\n * @type Function\n */\n unload: function unload() {\n io.disconnect();\n }\n };\n\n // Add initial elements\n api.track(selector);\n\n return api;\n}\n\n/**\n * Finds a group of elements on the page.\n *\n * @param {String|HTMLElement|NodeList} selector\n * @returns {Object} An array-like object.\n */\nfunction querySelector(selector) {\n if (typeof selector === 'string') {\n return document.querySelectorAll(selector);\n }\n\n if (selector instanceof HTMLElement) {\n return [selector];\n }\n\n if (selector instanceof NodeList) {\n return selector;\n }\n\n return [];\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (rimg);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmltZy9kaXN0L2luZGV4LmVzLmpzPzM2OTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQixhQUFhO0FBQ2I7QUFDQTtBQUNBLDRCQUE0QixLQUFLO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxvQ0FBb0M7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCLFdBQVcsU0FBUztBQUNwQixhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixhQUFhO0FB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QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLEtBQUs7QUFDbkI7QUFDQTtBQUNBLGNBQWMsT0FBTztBQUNyQix3QkFBd0I7QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QztBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0M7QUFDQTtBQUNBOztBQUVBOztBQUVBLHFCQUFxQixnQkFBZ0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsZ0JBQWdCO0FBQ3JDO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsZ0JBQWdCO0FBQ3JDO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRCQUE0QjtBQUN2QyxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRWUsbUVBQUksRUFBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9yaW1nL2Rpc3QvaW5kZXguZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIHJpbWcgdjIuMS43XG4gKiAoYykgMjAxOCBQaXhlbCBVbmlvblxuICovXG4vKipcbiAqIFRoZSBkZWZhdWx0IHRlbXBsYXRlIHJlbmRlciBmdW5jdGlvbi4gVHVybnMgYSB0ZW1wbGF0ZSBzdHJpbmcgaW50byBhbiBpbWFnZVxuICogVVJMLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtTaXplfSBzaXplXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBkZWZhdWx0VGVtcGxhdGVSZW5kZXIodGVtcGxhdGUsIHNpemUpIHtcbiAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoJ3tzaXplfScsIHNpemUud2lkdGggKyAneCcgKyBzaXplLmhlaWdodCk7XG59XG5cbi8qKlxuICogQHR5cGUgU2V0dGluZ3NcbiAqL1xudmFyIGRlZmF1bHRzID0ge1xuICBzY2FsZTogMSxcbiAgdGVtcGxhdGU6IGZhbHNlLFxuICB0ZW1wbGF0ZVJlbmRlcjogZGVmYXVsdFRlbXBsYXRlUmVuZGVyLFxuICBtYXg6IHsgd2lkdGg6IEluZmluaXR5LCBoZWlnaHQ6IEluZmluaXR5IH0sXG4gIHJvdW5kOiAzMixcbiAgcGxhY2Vob2xkZXI6IGZhbHNlLFxuICBjcm9wOiBudWxsXG59O1xuXG4vKipcbiAqIEdldCBhIGRhdGEgYXR0cmlidXRlIHZhbHVlIGZyb20gYW4gZWxlbWVudCwgd2l0aCBhIGRlZmF1bHQgZmFsbGJhY2sgYW5kXG4gKiBzYW5pdGl6YXRpb24gc3RlcC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqICAgICAgICBUaGUgZGF0YSBhdHRyaWJ1dGUgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogICAgICAgIEFuIG9iamVjdCBob2xkaW5nIGZhbGxiYWNrIHZhbHVlcyBpZiB0aGUgZGF0YSBhdHRyaWJ1dGUgZG9lcyBub3RcbiAqICAgICAgICBleGlzdC4gSWYgdGhpcyBvYmplY3QgZG9lc24ndCBoYXZlIHRoZSBwcm9wZXJ0eSwgd2UgZnVydGhlciBmYWxsYmFja1xuICogICAgICAgIHRvIG91ciBkZWZhdWx0cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc2FuaXRpemVdXG4gKiAgICAgICAgQSBmdW5jdGlvbiB0byBzYW5pdGl6ZSB0aGUgZGF0YSBhdHRyaWJ1dGUgdmFsdWUgd2l0aC5cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfCp9XG4gKi9cbmZ1bmN0aW9uIGdldERhdGEoZWwsIG5hbWUsIG9wdGlvbnMsIHNhbml0aXplKSB7XG4gIHZhciBhdHRyID0gJ2RhdGEtcmltZy0nICsgbmFtZTtcbiAgaWYgKCFlbC5oYXNBdHRyaWJ1dGUoYXR0cikpIHJldHVybiBvcHRpb25zW25hbWVdIHx8IGRlZmF1bHRzW25hbWVdO1xuXG4gIHZhciB2YWx1ZSA9IGVsLmdldEF0dHJpYnV0ZShhdHRyKTtcblxuICByZXR1cm4gc2FuaXRpemUgPyBzYW5pdGl6ZSh2YWx1ZSkgOiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBkYXRhIGF0dHJpYnV0ZXMgdGhhdCByZXByZXNlbnQgYSBzaXplIChpbiB0aGUgZm9ybSBvZiBgMTB4MTBgKS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCB3aXRoIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2l6ZSh2YWx1ZSkge1xuICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCd4Jyk7XG4gIHJldHVybiB7IHdpZHRoOiBwYXJzZUludCh2YWx1ZVswXSwgMTApLCBoZWlnaHQ6IHBhcnNlSW50KHZhbHVlWzFdLCAxMCkgfTtcbn1cblxuLyoqXG4gKiBMb2FkcyBpbmZvcm1hdGlvbiBhYm91dCBhbiBlbGVtZW50LlxuICpcbiAqIE9wdGlvbnMgY2FuIGJlIHNldCBvbiB0aGUgZWxlbWVudCBpdHNlbGYgdXNpbmcgZGF0YSBhdHRyaWJ1dGVzLCBvciB0aHJvdWdoXG4gKiB0aGUgYG9wdGlvbnNgIHBhcmFtZXRlci4gRGF0YSBhdHRyaWJ1dGVzIHRha2UgcHJpb3JpdHkuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcbiAqIEBwYXJhbSB7U2V0dGluZ3N9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtJdGVtfVxuICovXG5mdW5jdGlvbiBwYXJzZUl0ZW0oZWwpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIHZhciBpc0ltYWdlID0gZWwuaGFzQXR0cmlidXRlKCdkYXRhLXJpbWctdGVtcGxhdGUnKTtcblxuICAvKipcbiAgICogQHR5cGVkZWYge1NldHRpbmdzfSBJdGVtXG4gICAqL1xuICByZXR1cm4ge1xuICAgIGVsOiBlbCxcblxuICAgIC8vIFR5cGUgb2YgZWxlbWVudFxuICAgIGlzSW1hZ2U6IGlzSW1hZ2UsXG4gICAgaXNCYWNrZ3JvdW5kSW1hZ2U6IGlzSW1hZ2UgJiYgZWwudGFnTmFtZSAhPT0gJ0lNRycsXG5cbiAgICAvLyBJbWFnZSBzY2FsZVxuICAgIHNjYWxlOiBnZXREYXRhKGVsLCAnc2NhbGUnLCBvcHRpb25zKSxcblxuICAgIC8vIERldmljZSBkZW5zaXR5XG4gICAgZGVuc2l0eTogd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSxcblxuICAgIC8vIEltYWdlIHRlbXBsYXRlIFVSTFxuICAgIHRlbXBsYXRlOiBnZXREYXRhKGVsLCAndGVtcGxhdGUnLCBvcHRpb25zKSxcbiAgICB0ZW1wbGF0ZVJlbmRlcjogb3B0aW9ucy50ZW1wbGF0ZVJlbmRlciB8fCBkZWZhdWx0cy50ZW1wbGF0ZVJlbmRlcixcblxuICAgIC8vIE1heGltdW0gaW1hZ2UgZGltZW5zaW9uc1xuICAgIG1heDogZ2V0RGF0YShlbCwgJ21heCcsIG9wdGlvbnMsIHBhcnNlU2l6ZSksXG5cbiAgICAvLyBSb3VuZCBpbWFnZSBkaW1lbnNpb25zIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlXG4gICAgcm91bmQ6IGdldERhdGEoZWwsICdyb3VuZCcsIG9wdGlvbnMpLFxuXG4gICAgLy8gUGxhY2Vob2xkZXIgaW1hZ2UgZGltZW5zaW9uc1xuICAgIHBsYWNlaG9sZGVyOiBnZXREYXRhKGVsLCAncGxhY2Vob2xkZXInLCBvcHRpb25zLCBwYXJzZVNpemUpLFxuXG4gICAgLy8gQ3JvcCB2YWx1ZTsgbnVsbCBpZiBpbWFnZSBpcyB1bmNyb3BwZWQsIG90aGVyd2lzZSBlcXVhbCB0byB0aGUgU2hvcGlmeSBjcm9wIHBhcmFtZXRlciAoJ2NlbnRlcicsICd0b3AnLCBldGMuKVxuICAgIGNyb3A6IGdldERhdGEoZWwsICdjcm9wJywgb3B0aW9ucywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09ICcnID8gbnVsbCA6IHZhbHVlO1xuICAgIH0pXG4gIH07XG59XG5cbi8qKlxuICogUm91bmQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUuXG4gKlxuICogVGhpcyBpcyBzbyB3ZSBkb24ndCB0YXggdGhlIGltYWdlIHNlcnZlciB0b28gbXVjaC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gc2l6ZSBUaGUgc2l6ZSwgaW4gcGl4ZWxzLlxuICogQHBhcmFtIHtOdW1iZXJ9IFttdWx0aXBsZV0gVGhlIG11bHRpcGxlIHRvIHJvdW5kIHRvIHRoZSBuZWFyZXN0LlxuICogQHBhcmFtIHtOdW1iZXJ9IFttYXhMaW1pdF0gTWF4aW11bSBhbGxvd2VkIHZhbHVlIC0gdmFsdWUgdG8gcmV0dXJuIGlmIHJvdW5kZWQgbXVsdGlwbGUgaXMgYWJvdmUgdGhpcyBsaW1pdFxuICogQHJldHVybnMge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gcm91bmRTaXplKHNpemUpIHtcbiAgdmFyIG11bHRpcGxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAzMjtcbiAgdmFyIG1heExpbWl0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBJbmZpbml0eTtcblxuICByZXR1cm4gc2l6ZSA9PT0gMCA/IG11bHRpcGxlIDogTWF0aC5taW4oTWF0aC5jZWlsKHNpemUgLyBtdWx0aXBsZSkgKiBtdWx0aXBsZSwgbWF4TGltaXQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgc2l6ZSBvZiBhbiBlbGVtZW50LlxuICpcbiAqIElmIGl0IGlzIHRvbyBzbWFsbCwgaXQncyBwYXJlbnQgZWxlbWVudCBpcyBjaGVja2VkLCBhbmQgc28gb24uIFRoaXMgaGVscHNcbiAqIGF2b2lkIHRoZSBzaXR1YXRpb24gd2hlcmUgYW4gZWxlbWVudCBkb2Vzbid0IGhhdmUgYSBzaXplIHlldCBvciBpcyBwb3NpdGlvbmVkXG4gKiBvdXQgb2YgdGhlIGxheW91dC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbFxuICogQHJldHVybiB7T2JqZWN0fSBzaXplXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHNpemUud2lkdGggVGhlIHdpZHRoLCBpbiBwaXhlbHMuXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHNpemUuaGVpZ2h0IFRoZSBoZWlnaHQsIGluIHBpeGVscy5cbiAqL1xuZnVuY3Rpb24gZ2V0RWxlbWVudFNpemUoZWwpIHtcbiAgdmFyIHNpemUgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcblxuICB3aGlsZSAoZWwpIHtcbiAgICBzaXplLndpZHRoID0gZWwub2Zmc2V0V2lkdGg7XG4gICAgc2l6ZS5oZWlnaHQgPSBlbC5vZmZzZXRIZWlnaHQ7XG4gICAgaWYgKHNpemUud2lkdGggPiAyMCAmJiBzaXplLmhlaWdodCA+IDIwKSBicmVhaztcbiAgICBlbCA9IGVsLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gc2l6ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGEgY3VzdG9tIGV2ZW50LlxuICpcbiAqIE5vdGU6IHRoaXMgYXBwcm9hY2ggaXMgZGVwcmVjYXRlZCwgYnV0IHN0aWxsIHJlcXVpcmVkIHRvIHN1cHBvcnQgb2xkZXJcbiAqIGJyb3dzZXJzIHN1Y2ggYXMgSUUgMTAuXG4gKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9HdWlkZS9FdmVudHMvQ3JlYXRpbmdfYW5kX3RyaWdnZXJpbmdfZXZlbnRzXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxcbiAqICAgICAgICBUaGUgZWxlbWVudCB0byB0cmlnZ2VyIHRoZSBldmVudCBvbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogICAgICAgIFRoZSBldmVudCBuYW1lLlxuICpcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICogICAgICAgICAgVHJ1ZSBpZiB0aGUgZXZlbnQgd2FzIGNhbmNlbGVkLlxuICovXG5mdW5jdGlvbiB0cmlnZ2VyKGVsLCBuYW1lKSB7XG4gIHZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICBldmVudC5pbml0RXZlbnQobmFtZSwgdHJ1ZSwgdHJ1ZSk7XG4gIHJldHVybiAhZWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBkZW5zaXR5IG9mIHRoZSBpbWFnZSwgZ2l2ZW4gdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0ge0l0ZW19IGl0ZW1cbiAqIEBwYXJhbSB7U2l6ZX0gc2l6ZVxuICovXG5mdW5jdGlvbiBzdXBwb3J0ZWREZW5zaXR5KGl0ZW0sIHNpemUpIHtcbiAgcmV0dXJuIE1hdGgubWluKE1hdGgubWluKE1hdGgubWF4KGl0ZW0ubWF4LndpZHRoIC8gc2l6ZS53aWR0aCwgMSksIGl0ZW0uZGVuc2l0eSksIE1hdGgubWluKE1hdGgubWF4KGl0ZW0ubWF4LmhlaWdodCAvIHNpemUuaGVpZ2h0LCAxKSwgaXRlbS5kZW5zaXR5KSkudG9GaXhlZCgyKTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGltYWdlIFVSTCBvbiB0aGUgZWxlbWVudC4gU3VwcG9ydHMgYmFja2dyb3VuZCBpbWFnZXMgYW5kIGBzcmNzZXRgLlxuICpcbiAqIEBwYXJhbSB7SXRlbX0gaXRlbVxuICogQHBhcmFtIHtTaXplfSBzaXplXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGlzUGxhY2Vob2xkZXJcbiAqL1xuZnVuY3Rpb24gc2V0SW1hZ2UoaXRlbSwgc2l6ZSwgaXNQbGFjZWhvbGRlciwgb25Mb2FkKSB7XG4gIHZhciByZW5kZXIgPSBpdGVtLnRlbXBsYXRlUmVuZGVyO1xuICB2YXIgZGVuc2l0eSA9IGlzUGxhY2Vob2xkZXIgPyAxIDogc3VwcG9ydGVkRGVuc2l0eShpdGVtLCBzaXplKTtcbiAgdmFyIHJvdW5kID0gaXNQbGFjZWhvbGRlciA/IDEgOiBpdGVtLnJvdW5kO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZmluYWwgZGlzcGxheSBzaXplLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBpbWFnZSdzXG4gIC8vIG1heGltdW0gZGltZW5zaW9ucy5cbiAgdmFyIHRhcmdldFdpZHRoID0gc2l6ZS53aWR0aCAqIGRlbnNpdHk7XG4gIHZhciB0YXJnZXRIZWlnaHQgPSBzaXplLmhlaWdodCAqIGRlbnNpdHk7XG5cbiAgdmFyIGRpc3BsYXlTaXplID0gdm9pZCAwO1xuXG4gIGlmIChpdGVtLmNyb3ApIHtcbiAgICBkaXNwbGF5U2l6ZSA9IHtcbiAgICAgIHdpZHRoOiByb3VuZFNpemUodGFyZ2V0V2lkdGgsIHJvdW5kLCBpdGVtLm1heC53aWR0aCksXG4gICAgICBoZWlnaHQ6IHJvdW5kU2l6ZSh0YXJnZXRIZWlnaHQsIHJvdW5kLCBpdGVtLm1heC5oZWlnaHQpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTaG9waWZ5IHNlcnZlcyBpbWFnZXMgY2xhbXBlZCBieSB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnMgKGZpdHRlZCB0byB0aGUgc21hbGxlc3QgZGltZW5zaW9uKS5cbiAgICAvLyBUbyBnZXQgdGhlIGRlc2lyZWQgYW5kIGV4cGVjdGVkIHBpeGVsIGRlbnNpdHkgd2UgbmVlZCB0byByZXF1ZXN0IGNvdmVyIGRpbWVuc2lvbnMgKGZpdHRlZCB0byBsYXJnZXN0IGRpbWVuc2lvbikuXG4gICAgLy8gVGhpcyBpc24ndCBhIHByb2JsZW0gd2l0aCBjcm9wcGVkIGltYWdlcyB3aGljaCBhcmUgc2VydmVkIGF0IHRoZSBleGFjdCBkaW1lbnNpb24gcmVxdWVzdGVkLlxuICAgIHZhciBjb250YWluZXJBc3BlY3RSYXRpbyA9IHNpemUud2lkdGggLyBzaXplLmhlaWdodDtcbiAgICB2YXIgaW1hZ2VBc3BlY3RSYXRpbyA9IGl0ZW0ubWF4LndpZHRoIC8gaXRlbS5tYXguaGVpZ2h0O1xuXG4gICAgaWYgKGNvbnRhaW5lckFzcGVjdFJhdGlvID4gaW1hZ2VBc3BlY3RSYXRpbykge1xuICAgICAgLy8gZml0IHdpZHRoXG4gICAgICBkaXNwbGF5U2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IHJvdW5kU2l6ZSh0YXJnZXRXaWR0aCwgcm91bmQsIGl0ZW0ubWF4LndpZHRoKSxcbiAgICAgICAgaGVpZ2h0OiByb3VuZFNpemUodGFyZ2V0V2lkdGggLyBpbWFnZUFzcGVjdFJhdGlvLCByb3VuZCwgaXRlbS5tYXguaGVpZ2h0KVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZml0IGhlaWdodFxuICAgICAgZGlzcGxheVNpemUgPSB7XG4gICAgICAgIHdpZHRoOiByb3VuZFNpemUodGFyZ2V0SGVpZ2h0ICogaW1hZ2VBc3BlY3RSYXRpbywgcm91bmQsIGl0ZW0ubWF4LndpZHRoKSxcbiAgICAgICAgaGVpZ2h0OiByb3VuZFNpemUodGFyZ2V0SGVpZ2h0LCByb3VuZCwgaXRlbS5tYXguaGVpZ2h0KVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgdXJsID0gcmVuZGVyKGl0ZW0udGVtcGxhdGUsIGRpc3BsYXlTaXplKTtcblxuICAvLyBPbiBsb2FkIGNhbGxiYWNrXG4gIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICBpbWFnZS5vbmxvYWQgPSBvbkxvYWQ7XG4gIGltYWdlLnNyYyA9IHVybDtcblxuICAvLyBTZXQgaW1hZ2VcbiAgaWYgKGl0ZW0uaXNCYWNrZ3JvdW5kSW1hZ2UpIHtcbiAgICBpdGVtLmVsLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICd1cmwoXFwnJyArIHVybCArICdcXCcpJztcbiAgfSBlbHNlIHtcbiAgICBpdGVtLmVsLnNldEF0dHJpYnV0ZSgnc3Jjc2V0JywgdXJsICsgJyAnICsgZGVuc2l0eSArICd4Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkIHRoZSBpbWFnZSwgc2V0IGxvYWRlZCBzdGF0dXMsIGFuZCB0cmlnZ2VyIHRoZSBsb2FkIGV2ZW50LlxuICpcbiAqIEBmaXJlcyByaW1nOmxvYWRcbiAqIEBmaXJlcyByaW1nOmVycm9yXG4gKiBAcGFyYW0ge0l0ZW19IGl0ZW1cbiAqIEBwYXJhbSB7U2l6ZX0gc2l6ZVxuICovXG5mdW5jdGlvbiBsb2FkRnVsbEltYWdlKGl0ZW0sIHNpemUpIHtcbiAgdmFyIGVsID0gaXRlbS5lbDtcblxuICBzZXRJbWFnZShpdGVtLCBzaXplLCBmYWxzZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdsb2FkJykge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLXJpbWcnLCAnbG9hZGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS1yaW1nJywgJ2Vycm9yJyk7XG4gICAgICB0cmlnZ2VyKGVsLCAncmltZzplcnJvcicpO1xuICAgIH1cblxuICAgIHRyaWdnZXIoZWwsICdyaW1nOmxvYWQnKTtcbiAgfSk7XG59XG5cbi8qKlxuICogTG9hZCBpbiBhIHJlc3BvbnNpdmUgaW1hZ2UuXG4gKlxuICogU2V0cyB0aGUgaW1hZ2UncyBgc3Jjc2V0YCBhdHRyaWJ1dGUgdG8gdGhlIGZpbmFsIGltYWdlIFVSTHMsIGNhbGN1bGF0ZWQgYmFzZWRcbiAqIG9uIHRoZSBhY3R1YWwgc2l6ZSB0aGUgaW1hZ2UgaXMgYmVpbmcgc2hvd24gYXQuXG4gKlxuICogQGZpcmVzIHJpbWc6bG9hZGluZ1xuICogICAgICAgIFRoZSBpbWFnZSBVUkxzIGhhdmUgYmVlbiBzZXQgYW5kIHdlIGFyZSB3YWl0aW5nIGZvciB0aGVtIHRvIGxvYWQuXG4gKlxuICogQGZpcmVzIHJpbWc6bG9hZGVkXG4gKiAgICAgICAgVGhlIGZpbmFsIGltYWdlIGhhcyBsb2FkZWQuXG4gKlxuICogQGZpcmVzIHJpbWc6ZXJyb3JcbiAqICAgICAgICBUaGUgZmluYWwgaW1hZ2UgZmFpbGVkIGxvYWRpbmcuXG4gKlxuICogQHBhcmFtIHtJdGVtfSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGxvYWRJbWFnZShpdGVtKSB7XG4gIHZhciBlbCA9IGl0ZW0uZWw7XG5cbiAgLy8gQWxyZWFkeSBsb2FkZWQ/XG4gIHZhciBzdGF0dXMgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmltZycpO1xuICBpZiAoc3RhdHVzID09PSAnbG9hZGluZycgfHwgc3RhdHVzID09PSAnbG9hZGVkJykgcmV0dXJuO1xuXG4gIC8vIElzIHRoZSBTVkcgbG9hZGVkP1xuICBpZiAoIWVsLmNvbXBsZXRlICYmICFpdGVtLmlzQmFja2dyb3VuZEltYWdlKSB7XG4gICAgLy8gV2FpdCBmb3IgdGhlIGxvYWQgZXZlbnQsIHRoZW4gY2FsbCBsb2FkIGltYWdlXG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uIGNiKCkge1xuICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNiKTtcbiAgICAgIGxvYWRJbWFnZShpdGVtKTtcbiAgICB9KTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRyaWdnZXIgbG9hZGluZyBldmVudCwgYW5kIHN0b3AgaWYgY2FuY2VsbGVkXG4gIGlmICh0cmlnZ2VyKGVsLCAncmltZzpsb2FkaW5nJykpIHJldHVybjtcblxuICAvLyBNYXJrIGFzIGxvYWRpbmdcbiAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLXJpbWcnLCAnbG9hZGluZycpO1xuXG4gIC8vIEdldCBlbGVtZW50IHNpemUuIFRoaXMgaXMgdXNlZCBhcyB0aGUgaWRlYWwgZGlzcGxheSBzaXplLlxuICB2YXIgc2l6ZSA9IGdldEVsZW1lbnRTaXplKGl0ZW0uZWwpO1xuXG4gIHNpemUud2lkdGggKj0gaXRlbS5zY2FsZTtcbiAgc2l6ZS5oZWlnaHQgKj0gaXRlbS5zY2FsZTtcblxuICBpZiAoaXRlbS5wbGFjZWhvbGRlcikge1xuICAgIC8vIExvYWQgYSBwbGFjZWhvbGRlciBpbWFnZSBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlIGZ1bGwgaW1hZ2UuIEZvcmNlIHRoZVxuICAgIC8vIGVsZW1lbnQgdG8ga2VlcCBpdHMgZGltZW5zaW9ucyB3aGlsZSBpdCBsb2Fkcy4gSWYgdGhlIGltYWdlIGlzIHNtYWxsZXJcbiAgICAvLyB0aGFuIHRoZSBlbGVtZW50IHNpemUsIHVzZSB0aGUgaW1hZ2UncyBzaXplLiBEZW5zaXR5IGlzIHRha2VuIGludG8gYWNjb3VudFxuICAgIC8vIGZvciBIaURQSSBkZXZpY2VzIHRvIGF2b2lkIGJsdXJyeSBpbWFnZXMuXG4gICAgaWYgKCFpdGVtLmlzQmFja2dyb3VuZEltYWdlKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgTWF0aC5taW4oTWF0aC5mbG9vcihpdGVtLm1heC53aWR0aCAvIGl0ZW0uZGVuc2l0eSksIHNpemUud2lkdGgpKTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgTWF0aC5taW4oTWF0aC5mbG9vcihpdGVtLm1heC5oZWlnaHQgLyBpdGVtLmRlbnNpdHkpLCBzaXplLmhlaWdodCkpO1xuICAgIH1cblxuICAgIHNldEltYWdlKGl0ZW0sIGl0ZW0ucGxhY2Vob2xkZXIsIHRydWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBsb2FkRnVsbEltYWdlKGl0ZW0sIHNpemUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGxvYWRGdWxsSW1hZ2UoaXRlbSwgc2l6ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcmVwYXJlIGFuIGVsZW1lbnQgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4uXG4gKlxuICogSW1hZ2VzIGhhdmUgc3BlY2lhbCBsb2dpYyBhcHBsaWVkIHRvIHRoZW0gdG8gc3dhcCBvdXQgdGhlIGRpZmZlcmVudCBzb3VyY2VzLlxuICpcbiAqIEBmaXJlcyByaW1nOmVudGVyXG4gKiAgICAgICAgVGhlIGVsZW1lbnQgaXMgZW50ZXJpbmcgdGhlIHZpZXdwb3J0LlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1NldHRpbmdzfSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGxvYWQoZWwsIG9wdGlvbnMpIHtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICB0cmlnZ2VyKGVsLCAncmltZzplbnRlcicpO1xuXG4gIHZhciBpdGVtID0gcGFyc2VJdGVtKGVsLCBvcHRpb25zKTtcblxuICBpZiAoaXRlbS5pc0ltYWdlKSB7XG4gICAgaWYgKCFpdGVtLmlzQmFja2dyb3VuZEltYWdlKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmltZy10ZW1wbGF0ZS1zdmcnLCBlbC5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpKTtcbiAgICB9XG5cbiAgICBsb2FkSW1hZ2UoaXRlbSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldCBhbiBlbGVtZW50J3Mgc3RhdGUgc28gdGhhdCBpdHMgaW1hZ2UgY2FuIGJlIHJlY2FsY3VsYXRlZC5cbiAqXG4gKiBAZmlyZXMgcmltZzp1cGRhdGVcbiAqICAgICAgICBUaGUgZWxlbWVudCBpcyBiZWluZyB1cGRhdGVkLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXG4gKiBAcGFyYW0ge1NldHRpbmdzfSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZShlbCwgb3B0aW9ucykge1xuICBpZiAoIWVsKSByZXR1cm47XG4gIHRyaWdnZXIoZWwsICdyaW1nOnVwZGF0ZScpO1xuXG4gIHZhciBpdGVtID0gcGFyc2VJdGVtKGVsLCBvcHRpb25zKTtcblxuICBpZiAoaXRlbS5pc0ltYWdlKSB7XG4gICAgaWYgKCFpdGVtLmlzQmFja2dyb3VuZEltYWdlKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmltZycsICdsYXp5Jyk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3NyY3NldCcsIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1yaW1nLXRlbXBsYXRlLXN2ZycpKTtcbiAgICB9XG5cbiAgICBsb2FkSW1hZ2UoaXRlbSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgd2l0aGluIHRoZSB2aWV3cG9ydC5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaW5WaWV3cG9ydChlbCkge1xuICBpZiAoIWVsLm9mZnNldFdpZHRoIHx8ICFlbC5vZmZzZXRIZWlnaHQgfHwgIWVsLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciB3aWR0aCA9IE1hdGgubWluKHJvb3QuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoKTtcbiAgdmFyIGhlaWdodCA9IE1hdGgubWluKHJvb3QuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQpO1xuICB2YXIgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIHJldHVybiByZWN0LmJvdHRvbSA+PSAwICYmIHJlY3QucmlnaHQgPj0gMCAmJiByZWN0LnRvcCA8PSBoZWlnaHQgJiYgcmVjdC5sZWZ0IDw9IHdpZHRoO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNpemVcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSB3aWR0aFxuICogQHByb3BlcnR5IHtOdW1iZXJ9IGhlaWdodFxuICovXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0byB0dXJuIGEgdGVtcGxhdGUgc3RyaW5nIGludG8gYSBVUkwuXG4gKlxuICogQGNhbGxiYWNrIFRlbXBsYXRlUmVuZGVyZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtTaXplfSBzaXplXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2V0dGluZ3NcbiAqXG4gKiBAcHJvcGVydHkge1N0cmluZ30gW3RlbXBsYXRlXVxuICogICAgICAgICAgIEEgdGVtcGxhdGUgc3RyaW5nIHVzZWQgdG8gZ2VuZXJhdGUgVVJMcyBmb3IgYW4gaW1hZ2UuIFRoaXMgYWxsb3dzIHVzIHRvXG4gKiAgICAgICAgICAgZHluYW1pY2FsbHkgbG9hZCBpbWFnZXMgd2l0aCBzaXplcyB0byBtYXRjaCB0aGUgY29udGFpbmVyJ3Mgc2l6ZS5cbiAqXG4gKiBAcHJvcGVydHkge1RlbXBsYXRlUmVuZGVyZXJ9IFt0ZW1wbGF0ZVJlbmRlcl1cbiAqICAgICAgICAgICBBIGZ1bmN0aW9uIHRvIHR1cm4gYSB0ZW1wbGF0ZSBzdHJpbmcgaW50byBhIFVSTC5cbiAqXG4gKiBAcHJvcGVydHkge1NpemV9IFttYXhdXG4gKiAgICAgICAgICAgVGhlIG1heGltdW0gYXZhaWxhYmxlIHNpemUgZm9yIHRoZSBpbWFnZS4gVGhpcyBlbnN1cmVzIHdlIGRvbid0XG4gKiAgICAgICAgICAgdHJ5IHRvIGxvYWQgYW4gaW1hZ2UgbGFyZ2VyIHRoYW4gaXMgcG9zc2libGUuXG4gKlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IFtzY2FsZV1cbiAqICAgICAgICAgICBBIG51bWJlciB0byBzY2FsZSB0aGUgZmluYWwgaW1hZ2UgZGltZW5zaW9ucyBieS5cbiAqICAgICAgICAgICBPbmx5IGFwcGxpZXMgdG8gbGF6eS1sb2FkZWQgaW1hZ2VzLiBEZWZhdWx0cyB0byAxLlxuICpcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBbcm91bmRdXG4gKiAgICAgICAgICAgUm91bmQgaW1hZ2UgZGltZW5zaW9ucyB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZS4gVGhpcyBpcyBpbnRlbmRlZCB0b1xuICogICAgICAgICAgIHRheCB0aGUgaW1hZ2Ugc2VydmVyIGxlc3MgYnkgbG93ZXJpbmcgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBpbWFnZVxuICogICAgICAgICAgIHNpemVzIHJlcXVlc3RlZC5cbiAqXG4gKiBAcHJvcGVydHkge1NpemV9IFtwbGFjZWhvbGRlcl1cbiAqICAgICAgICAgICBUaGUgc2l6ZSBvZiB0aGUgbG8tZmkgaW1hZ2UgdG8gbG9hZCBiZWZvcmUgdGhlIGZ1bGwgaW1hZ2UuXG4gKlxuICogQHByb3BlcnR5IHtTdHJpbmd9IFtjcm9wXVxuICogICAgICAgICAgIENyb3AgdmFsdWU7IG51bGwgaWYgaW1hZ2UgaXMgdW5jcm9wcGVkLCBvdGhlcndpc2UgZXF1YWxcbiAqICAgICAgICAgICB0byB0aGUgU2hvcGlmeSBjcm9wIHBhcmFtZXRlciAoJ2NlbnRlcicsICd0b3AnLCBldGMuKS5cbiAqL1xuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIHJlc3BvbnNpdmUgaW1hZ2UgaGFuZGxlci5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudHxOb2RlTGlzdH0gc2VsZWN0b3JcbiAqICAgICAgICBUaGUgQ1NTIHNlbGVjdG9yLCBlbGVtZW50LCBvciBlbGVtZW50cyB0byB0cmFjayBmb3IgbGF6eS1sb2FkaW5nLlxuICpcbiAqIEBwYXJhbSB7U2V0dGluZ3N9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7UHVibGljQXBpfVxuICovXG5mdW5jdGlvbiByaW1nKCkge1xuICB2YXIgc2VsZWN0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdbZGF0YS1yaW1nPVwibGF6eVwiXSc7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAvLyBJbnRlcnNlY3Rpb25zXG4gIHZhciBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbiAoZW50cmllcykge1xuICAgIGVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZyB8fCBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA+IDApIHtcbiAgICAgICAgaW8udW5vYnNlcnZlKGVudHJ5LnRhcmdldCk7XG4gICAgICAgIGxvYWQoZW50cnkudGFyZ2V0LCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwge1xuICAgIC8vIFdhdGNoIHRoZSB2aWV3cG9ydCwgd2l0aCAyMCUgdmVydGljYWwgbWFyZ2luc1xuICAgIHJvb3RNYXJnaW46ICcyMCUgMHB4J1xuICB9KTtcblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gUHVibGljQXBpXG4gICAqL1xuICB2YXIgYXBpID0ge1xuICAgIC8qKlxuICAgICAqIFRyYWNrIGEgbmV3IHNlbGVjdG9yLCBlbGVtZW50LCBvciBub2RlbGlzdCBmb3IgbGF6eS1sb2FkaW5nLlxuICAgICAqIEB0eXBlIEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR8Tm9kZUxpc3R9IHNlbGVjdG9yXG4gICAgICovXG4gICAgdHJhY2s6IGZ1bmN0aW9uIHRyYWNrKCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnW2RhdGEtcmltZz1cImxhenlcIl0nO1xuXG4gICAgICB2YXIgZWxzID0gcXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIElmIGFuIGVsZW1lbnQgaXMgYWxyZWFkeSBpbiB0aGUgdmlld3BvcnQsIGxvYWQgaXQgcmlnaHQgYXdheS4gVGhpc1xuICAgICAgICAvLyBmaXhlcyBhIHJhY2UtY29uZGl0aW9uIHdpdGggZHluYW1pY2FsbHkgYWRkZWQgZWxlbWVudHMuXG4gICAgICAgIGlmIChpblZpZXdwb3J0KGVsc1tpXSkpIHtcbiAgICAgICAgICBsb2FkKGVsc1tpXSwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW8ub2JzZXJ2ZShlbHNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGVsZW1lbnQocykgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQgdG8gZm9yY2UgdGhlaXIgaW1hZ2VzXG4gICAgICogdG8gYmUgcmVjYWxjdWxhdGVkLlxuICAgICAqIEB0eXBlIEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR8Tm9kZUxpc3R9IHNlbGVjdG9yXG4gICAgICovXG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUkJDEoKSB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdbZGF0YS1yaW1nPVwibG9hZGVkXCJdJztcblxuICAgICAgdmFyIGVscyA9IHF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdXBkYXRlKGVsc1tpXSwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogU3RvcCB0cmFja2luZyBlbGVtZW50KHMpIGZvciBsYXp5LWxvYWRpbmcuXG4gICAgICogQHR5cGUgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudHxOb2RlTGlzdH0gc2VsZWN0b3JcbiAgICAgKi9cbiAgICB1bnRyYWNrOiBmdW5jdGlvbiB1bnRyYWNrKCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnW2RhdGEtcmltZ10nO1xuXG4gICAgICB2YXIgZWxzID0gcXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpby51bm9ic2VydmUoZWxzW2ldKTtcbiAgICAgIH1cbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBVbmxvYWQgYWxsIGV2ZW50IGhhbmRsZXJzIGFuZCBvYnNlcnZlcnMuXG4gICAgICogQHR5cGUgRnVuY3Rpb25cbiAgICAgKi9cbiAgICB1bmxvYWQ6IGZ1bmN0aW9uIHVubG9hZCgpIHtcbiAgICAgIGlvLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gQWRkIGluaXRpYWwgZWxlbWVudHNcbiAgYXBpLnRyYWNrKHNlbGVjdG9yKTtcblxuICByZXR1cm4gYXBpO1xufVxuXG4vKipcbiAqIEZpbmRzIGEgZ3JvdXAgb2YgZWxlbWVudHMgb24gdGhlIHBhZ2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR8Tm9kZUxpc3R9IHNlbGVjdG9yXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBhcnJheS1saWtlIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gcXVlcnlTZWxlY3RvcihzZWxlY3Rvcikge1xuICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIFtzZWxlY3Rvcl07XG4gIH1cblxuICBpZiAoc2VsZWN0b3IgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuICAgIHJldHVybiBzZWxlY3RvcjtcbiAgfVxuXG4gIHJldHVybiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmltZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/rimg/dist/index.es.js\n") },
vendor: 10,152 bytes, line 1
1"./node_modules/scriptjs/dist/script.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * $script.js JS loader & dependency manager\n * https://github.com/ded/script.js\n * (c) Dustin Diaz 2014 | License MIT\n */\n\n(function (name, definition) {\n if ( true && module.exports) module.exports = definition()\n else if (true) !(__WEBPACK_AMD_DEFINE_FACTORY__ = (definition),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))\n else {}\n})('$script', function () {\n var doc = document\n , head = doc.getElementsByTagName('head')[0]\n , s = 'string'\n , f = false\n , push = 'push'\n , readyState = 'readyState'\n , onreadystatechange = 'onreadystatechange'\n , list = {}\n , ids = {}\n , delay = {}\n , scripts = {}\n , scriptpath\n , urlArgs\n\n function every(ar, fn) {\n for (var i = 0, j = ar.length; i < j; ++i) if (!fn(ar[i])) return f\n return 1\n }\n function each(ar, fn) {\n every(ar, function (el) {\n fn(el)\n return 1\n })\n }\n\n function $script(paths, idOrDone, optDone) {\n paths = paths[push] ? paths : [paths]\n var idOrDoneIsDone = idOrDone && idOrDone.call\n , done = idOrDoneIsDone ? idOrDone : optDone\n , id = idOrDoneIsDone ? paths.join('') : idOrDone\n , queue = paths.length\n function loopFn(item) {\n return item.call ? item() : list[item]\n }\n function callback() {\n if (!--queue) {\n list[id] = 1\n done && done()\n for (var dset in delay) {\n every(dset.split('|'), loopFn) && !each(delay[dset], loopFn) && (delay[dset] = [])\n }\n }\n }\n setTimeout(function () {\n each(paths, function loading(path, force) {\n if (path === null) return callback()\n \n if (!force && !/^https?:\\/\\//.test(path) && scriptpath) {\n path = (path.indexOf('.js') === -1) ? scriptpath + path + '.js' : scriptpath + path;\n }\n \n if (scripts[path]) {\n if (id) ids[id] = 1\n return (scripts[path] == 2) ? callback() : setTimeout(function () { loading(path, true) }, 0)\n }\n\n scripts[path] = 1\n if (id) ids[id] = 1\n create(path, callback)\n })\n }, 0)\n return $script\n }\n\n function create(path, fn) {\n var el = doc.createElement('script'), loaded\n el.onload = el.onerror = el[onreadystatechange] = function () {\n if ((el[readyState] && !(/^c|loade/.test(el[readyState]))) || loaded) return;\n el.onload = el[onreadystatechange] = null\n loaded = 1\n scripts[path] = 2\n fn()\n }\n el.async = 1\n el.src = urlArgs ? path + (path.indexOf('?') === -1 ? '?' : '&') + urlArgs : path;\n head.insertBefore(el, head.lastChild)\n }\n\n $script.get = create\n\n $script.order = function (scripts, id, done) {\n (function callback(s) {\n s = scripts.shift()\n !scripts.length ? $script(s, id, done) : $script(s, callback)\n }())\n }\n\n $script.path = function (p) {\n scriptpath = p\n }\n $script.urlArgs = function (str) {\n urlArgs = str;\n }\n $script.ready = function (deps, ready, req) {\n deps = deps[push] ? deps : [deps]\n var missing = [];\n !each(deps, function (dep) {\n list[dep] || missing[push](dep);\n }) && every(deps, function (dep) {return list[dep]}) ?\n ready() : !function (key) {\n delay[key] = delay[key] || []\n delay[key][push](ready)\n req && req(missing)\n }(deps.join('|'))\n return $script\n }\n\n $script.done = function (idOrDone) {\n $script([null], idOrDone)\n }\n\n return $script\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2NyaXB0anMvZGlzdC9zY3JpcHQuanM/YTIzYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxLQUE0QjtBQUNsQyxXQUFXLElBQXlDLEVBQUUsb0NBQU8sVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLG9HQUFDO0FBQ3hFLE9BQU8sRUFBeUI7QUFDaEMsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZFQUE2RSxzQkFBc0I7QUFDbkc7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLGlDQUFpQyxpQkFBaUI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3NjcmlwdGpzL2Rpc3Qvc2NyaXB0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gICogJHNjcmlwdC5qcyBKUyBsb2FkZXIgJiBkZXBlbmRlbmN5IG1hbmFnZXJcbiAgKiBodHRwczovL2dpdGh1Yi5jb20vZGVkL3NjcmlwdC5qc1xuICAqIChjKSBEdXN0aW4gRGlheiAyMDE0IHwgTGljZW5zZSBNSVRcbiAgKi9cblxuKGZ1bmN0aW9uIChuYW1lLCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKVxuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKGRlZmluaXRpb24pXG4gIGVsc2UgdGhpc1tuYW1lXSA9IGRlZmluaXRpb24oKVxufSkoJyRzY3JpcHQnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBkb2MgPSBkb2N1bWVudFxuICAgICwgaGVhZCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdXG4gICAgLCBzID0gJ3N0cmluZydcbiAgICAsIGYgPSBmYWxzZVxuICAgICwgcHVzaCA9ICdwdXNoJ1xuICAgICwgcmVhZHlTdGF0ZSA9ICdyZWFkeVN0YXRlJ1xuICAgICwgb25yZWFkeXN0YXRlY2hhbmdlID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSdcbiAgICAsIGxpc3QgPSB7fVxuICAgICwgaWRzID0ge31cbiAgICAsIGRlbGF5ID0ge31cbiAgICAsIHNjcmlwdHMgPSB7fVxuICAgICwgc2NyaXB0cGF0aFxuICAgICwgdXJsQXJnc1xuXG4gIGZ1bmN0aW9uIGV2ZXJ5KGFyLCBmbikge1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gYXIubGVuZ3RoOyBpIDwgajsgKytpKSBpZiAoIWZuKGFyW2ldKSkgcmV0dXJuIGZcbiAgICByZXR1cm4gMVxuICB9XG4gIGZ1bmN0aW9uIGVhY2goYXIsIGZuKSB7XG4gICAgZXZlcnkoYXIsIGZ1bmN0aW9uIChlbCkge1xuICAgICAgZm4oZWwpXG4gICAgICByZXR1cm4gMVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiAkc2NyaXB0KHBhdGhzLCBpZE9yRG9uZSwgb3B0RG9uZSkge1xuICAgIHBhdGhzID0gcGF0aHNbcHVzaF0gPyBwYXRocyA6IFtwYXRoc11cbiAgICB2YXIgaWRPckRvbmVJc0RvbmUgPSBpZE9yRG9uZSAmJiBpZE9yRG9uZS5jYWxsXG4gICAgICAsIGRvbmUgPSBpZE9yRG9uZUlzRG9uZSA/IGlkT3JEb25lIDogb3B0RG9uZVxuICAgICAgLCBpZCA9IGlkT3JEb25lSXNEb25lID8gcGF0aHMuam9pbignJykgOiBpZE9yRG9uZVxuICAgICAgLCBxdWV1ZSA9IHBhdGhzLmxlbmd0aFxuICAgIGZ1bmN0aW9uIGxvb3BGbihpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5jYWxsID8gaXRlbSgpIDogbGlzdFtpdGVtXVxuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIGlmICghLS1xdWV1ZSkge1xuICAgICAgICBsaXN0W2lkXSA9IDFcbiAgICAgICAgZG9uZSAmJiBkb25lKClcbiAgICAgICAgZm9yICh2YXIgZHNldCBpbiBkZWxheSkge1xuICAgICAgICAgIGV2ZXJ5KGRzZXQuc3BsaXQoJ3wnKSwgbG9vcEZuKSAmJiAhZWFjaChkZWxheVtkc2V0XSwgbG9vcEZuKSAmJiAoZGVsYXlbZHNldF0gPSBbXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGVhY2gocGF0aHMsIGZ1bmN0aW9uIGxvYWRpbmcocGF0aCwgZm9yY2UpIHtcbiAgICAgICAgaWYgKHBhdGggPT09IG51bGwpIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIFxuICAgICAgICBpZiAoIWZvcmNlICYmICEvXmh0dHBzPzpcXC9cXC8vLnRlc3QocGF0aCkgJiYgc2NyaXB0cGF0aCkge1xuICAgICAgICAgIHBhdGggPSAocGF0aC5pbmRleE9mKCcuanMnKSA9PT0gLTEpID8gc2NyaXB0cGF0aCArIHBhdGggKyAnLmpzJyA6IHNjcmlwdHBhdGggKyBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoc2NyaXB0c1twYXRoXSkge1xuICAgICAgICAgIGlmIChpZCkgaWRzW2lkXSA9IDFcbiAgICAgICAgICByZXR1cm4gKHNjcmlwdHNbcGF0aF0gPT0gMikgPyBjYWxsYmFjaygpIDogc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGxvYWRpbmcocGF0aCwgdHJ1ZSkgfSwgMClcbiAgICAgICAgfVxuXG4gICAgICAgIHNjcmlwdHNbcGF0aF0gPSAxXG4gICAgICAgIGlmIChpZCkgaWRzW2lkXSA9IDFcbiAgICAgICAgY3JlYXRlKHBhdGgsIGNhbGxiYWNrKVxuICAgICAgfSlcbiAgICB9LCAwKVxuICAgIHJldHVybiAkc2NyaXB0XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGUocGF0aCwgZm4pIHtcbiAgICB2YXIgZWwgPSBkb2MuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIGxvYWRlZFxuICAgIGVsLm9ubG9hZCA9IGVsLm9uZXJyb3IgPSBlbFtvbnJlYWR5c3RhdGVjaGFuZ2VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKChlbFtyZWFkeVN0YXRlXSAmJiAhKC9eY3xsb2FkZS8udGVzdChlbFtyZWFkeVN0YXRlXSkpKSB8fCBsb2FkZWQpIHJldHVybjtcbiAgICAgIGVsLm9ubG9hZCA9IGVsW29ucmVhZHlzdGF0ZWNoYW5nZV0gPSBudWxsXG4gICAgICBsb2FkZWQgPSAxXG4gICAgICBzY3JpcHRzW3BhdGhdID0gMlxuICAgICAgZm4oKVxuICAgIH1cbiAgICBlbC5hc3luYyA9IDFcbiAgICBlbC5zcmMgPSB1cmxBcmdzID8gcGF0aCArIChwYXRoLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgdXJsQXJncyA6IHBhdGg7XG4gICAgaGVhZC5pbnNlcnRCZWZvcmUoZWwsIGhlYWQubGFzdENoaWxkKVxuICB9XG5cbiAgJHNjcmlwdC5nZXQgPSBjcmVhdGVcblxuICAkc2NyaXB0Lm9yZGVyID0gZnVuY3Rpb24gKHNjcmlwdHMsIGlkLCBkb25lKSB7XG4gICAgKGZ1bmN0aW9uIGNhbGxiYWNrKHMpIHtcbiAgICAgIHMgPSBzY3JpcHRzLnNoaWZ0KClcbiAgICAgICFzY3JpcHRzLmxlbmd0aCA/ICRzY3JpcHQocywgaWQsIGRvbmUpIDogJHNjcmlwdChzLCBjYWxsYmFjaylcbiAgICB9KCkpXG4gIH1cblxuICAkc2NyaXB0LnBhdGggPSBmdW5jdGlvbiAocCkge1xuICAgIHNjcmlwdHBhdGggPSBwXG4gIH1cbiAgJHNjcmlwdC51cmxBcmdzID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHVybEFyZ3MgPSBzdHI7XG4gIH1cbiAgJHNjcmlwdC5yZWFkeSA9IGZ1bmN0aW9uIChkZXBzLCByZWFkeSwgcmVxKSB7XG4gICAgZGVwcyA9IGRlcHNbcHVzaF0gPyBkZXBzIDogW2RlcHNdXG4gICAgdmFyIG1pc3NpbmcgPSBbXTtcbiAgICAhZWFjaChkZXBzLCBmdW5jdGlvbiAoZGVwKSB7XG4gICAgICBsaXN0W2RlcF0gfHwgbWlzc2luZ1twdXNoXShkZXApO1xuICAgIH0pICYmIGV2ZXJ5KGRlcHMsIGZ1bmN0aW9uIChkZXApIHtyZXR1cm4gbGlzdFtkZXBdfSkgP1xuICAgICAgcmVhZHkoKSA6ICFmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBkZWxheVtrZXldID0gZGVsYXlba2V5XSB8fCBbXVxuICAgICAgZGVsYXlba2V5XVtwdXNoXShyZWFkeSlcbiAgICAgIHJlcSAmJiByZXEobWlzc2luZylcbiAgICB9KGRlcHMuam9pbignfCcpKVxuICAgIHJldHVybiAkc2NyaXB0XG4gIH1cblxuICAkc2NyaXB0LmRvbmUgPSBmdW5jdGlvbiAoaWRPckRvbmUpIHtcbiAgICAkc2NyaXB0KFtudWxsXSwgaWRPckRvbmUpXG4gIH1cblxuICByZXR1cm4gJHNjcmlwdFxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/scriptjs/dist/script.js\n") },
vendor: 21,701 bytes, line 1
1"./node_modules/shopify-asyncview/dist/index.es.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n\n /*!\n * shopify-asyncview v2.0.3\n * (c) 2019 Pixel Union\n */\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nvar deferred = {};\n\nvar AsyncView =\n/*#__PURE__*/\nfunction () {\n function AsyncView() {\n _classCallCheck(this, AsyncView);\n }\n\n _createClass(AsyncView, null, [{\n key: \"load\",\n\n /**\n * Load the template given by the provided URL into the provided\n * view\n *\n * @param {string} url - The url to load\n * @param {object} query - An object containing additional query parameters of the URL\n * @param {string} query.view - A required query parameter indicating which view to load\n * @param {object} [options] - Config options\n * @param {string} [options.hash] - A hash of the current page content\n */\n value: function load(url) {\n var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (!('view' in query)) {\n return Promise.reject(new Error('\\'view\\' not found in \\'query\\' parameter'));\n }\n\n var querylessUrl = url.replace(/\\?[^#]+/, '');\n var queryParamsString = new RegExp(/.+\\?([^#]+)/).exec(url);\n var queryParams = query;\n\n if (queryParamsString && queryParamsString.length >= 2) {\n queryParamsString[1].split('&').forEach(function (param) {\n var _param$split = param.split('='),\n _param$split2 = _slicedToArray(_param$split, 2),\n key = _param$split2[0],\n value = _param$split2[1];\n\n queryParams[key] = value;\n });\n } // NOTE: We're adding an additional timestamp to the query.\n // This is to prevent certain browsers from returning cached\n // versions of the url we are requesting.\n // See this PR for more info: https://github.com/pixelunion/shopify-asyncview/pull/4\n\n\n var cachebustingParams = _objectSpread2({}, queryParams, {\n _: new Date().getTime()\n });\n\n var hashUrl = querylessUrl.replace(/([^#]+)(.*)/, function (match, address, hash) {\n return \"\".concat(address, \"?\").concat(Object.keys(queryParams).sort().map(function (key) {\n return \"\".concat(key, \"=\").concat(encodeURIComponent(queryParams[key]));\n }).join('&')).concat(hash);\n });\n var requestUrl = querylessUrl.replace(/([^#]+)(.*)/, function (match, address, hash) {\n return \"\".concat(address, \"?\").concat(Object.keys(cachebustingParams).sort().map(function (key) {\n return \"\".concat(key, \"=\").concat(encodeURIComponent(cachebustingParams[key]));\n }).join('&')).concat(hash);\n });\n var promise = new Promise(function (resolve, reject) {\n var data;\n\n if (hashUrl in deferred) {\n resolve(deferred[hashUrl]);\n return;\n }\n\n deferred[hashUrl] = promise;\n\n if (options.hash) {\n data = sessionStorage.getItem(hashUrl);\n\n if (data) {\n var deserialized = JSON.parse(data);\n\n if (options.hash === deserialized.options.hash) {\n delete deferred[hashUrl];\n resolve(deserialized);\n return;\n }\n }\n }\n\n var xhr = new XMLHttpRequest();\n xhr.open('GET', requestUrl, true);\n\n xhr.onload = function () {\n var el = xhr.response;\n var newOptions = {};\n var optionsEl = el.querySelector('[data-options]');\n\n if (optionsEl && optionsEl.innerHTML) {\n newOptions = JSON.parse(el.querySelector('[data-options]').innerHTML);\n }\n\n var htmlEls = el.querySelectorAll('[data-html]');\n var newHtml = {};\n\n if (htmlEls.length === 1 && htmlEls[0].getAttribute('data-html') === '') {\n newHtml = htmlEls[0].innerHTML;\n } else {\n for (var i = 0; i < htmlEls.length; i++) {\n newHtml[htmlEls[i].getAttribute('data-html')] = htmlEls[i].innerHTML;\n }\n }\n\n var dataEls = el.querySelectorAll('[data-data]');\n var newData = {};\n\n if (dataEls.length === 1 && dataEls[0].getAttribute('data-data') === '') {\n newData = JSON.parse(dataEls[0].innerHTML);\n } else {\n for (var _i = 0; _i < dataEls.length; _i++) {\n newData[dataEls[_i].getAttribute('data-data')] = JSON.parse(dataEls[_i].innerHTML);\n }\n }\n\n if (options.hash) {\n try {\n sessionStorage.setItem(hashUrl, JSON.stringify({\n options: newOptions,\n data: newData,\n html: newHtml\n }));\n } catch (error) {\n console.error(error);\n }\n }\n\n delete deferred[hashUrl];\n resolve({\n data: newData,\n html: newHtml\n });\n };\n\n xhr.onerror = function () {\n delete deferred[hashUrl];\n reject();\n };\n\n xhr.responseType = 'document';\n xhr.send();\n });\n return promise;\n }\n }]);\n\n return AsyncView;\n}();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (AsyncView);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2hvcGlmeS1hc3luY3ZpZXcvZGlzdC9pbmRleC5lcy5qcz8wODdiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QywrQkFBK0I7QUFDNUU7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBOzs7QUFHQSxnREFBZ0Q7QUFDaEQ7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsMkJBQTJCLG9CQUFvQjtBQUMvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYLDRCQUE0QixxQkFBcUI7QUFDakQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVjLHdFQUFTLEVBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc2hvcGlmeS1hc3luY3ZpZXcvZGlzdC9pbmRleC5lcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuICAvKiFcbiAgICogc2hvcGlmeS1hc3luY3ZpZXcgdjIuMC4zXG4gICAqIChjKSAyMDE5IFBpeGVsIFVuaW9uXG4gICovXG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoc291cmNlLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7XG59XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpO1xufVxuXG52YXIgZGVmZXJyZWQgPSB7fTtcblxudmFyIEFzeW5jVmlldyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEFzeW5jVmlldygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQXN5bmNWaWV3KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhBc3luY1ZpZXcsIG51bGwsIFt7XG4gICAga2V5OiBcImxvYWRcIixcblxuICAgIC8qKlxuICAgICAqIExvYWQgdGhlIHRlbXBsYXRlIGdpdmVuIGJ5IHRoZSBwcm92aWRlZCBVUkwgaW50byB0aGUgcHJvdmlkZWRcbiAgICAgKiB2aWV3XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIHVybCB0byBsb2FkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHF1ZXJ5IC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYWRkaXRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzIG9mIHRoZSBVUkxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkudmlldyAtIEEgcmVxdWlyZWQgcXVlcnkgcGFyYW1ldGVyIGluZGljYXRpbmcgd2hpY2ggdmlldyB0byBsb2FkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIENvbmZpZyBvcHRpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmhhc2hdIC0gQSBoYXNoIG9mIHRoZSBjdXJyZW50IHBhZ2UgY29udGVudFxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkKHVybCkge1xuICAgICAgdmFyIHF1ZXJ5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcblxuICAgICAgaWYgKCEoJ3ZpZXcnIGluIHF1ZXJ5KSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdcXCd2aWV3XFwnIG5vdCBmb3VuZCBpbiBcXCdxdWVyeVxcJyBwYXJhbWV0ZXInKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBxdWVyeWxlc3NVcmwgPSB1cmwucmVwbGFjZSgvXFw/W14jXSsvLCAnJyk7XG4gICAgICB2YXIgcXVlcnlQYXJhbXNTdHJpbmcgPSBuZXcgUmVnRXhwKC8uK1xcPyhbXiNdKykvKS5leGVjKHVybCk7XG4gICAgICB2YXIgcXVlcnlQYXJhbXMgPSBxdWVyeTtcblxuICAgICAgaWYgKHF1ZXJ5UGFyYW1zU3RyaW5nICYmIHF1ZXJ5UGFyYW1zU3RyaW5nLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zU3RyaW5nWzFdLnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgICAgICB2YXIgX3BhcmFtJHNwbGl0ID0gcGFyYW0uc3BsaXQoJz0nKSxcbiAgICAgICAgICAgICAgX3BhcmFtJHNwbGl0MiA9IF9zbGljZWRUb0FycmF5KF9wYXJhbSRzcGxpdCwgMiksXG4gICAgICAgICAgICAgIGtleSA9IF9wYXJhbSRzcGxpdDJbMF0sXG4gICAgICAgICAgICAgIHZhbHVlID0gX3BhcmFtJHNwbGl0MlsxXTtcblxuICAgICAgICAgIHF1ZXJ5UGFyYW1zW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIE5PVEU6IFdlJ3JlIGFkZGluZyBhbiBhZGRpdGlvbmFsIHRpbWVzdGFtcCB0byB0aGUgcXVlcnkuXG4gICAgICAvLyBUaGlzIGlzIHRvIHByZXZlbnQgY2VydGFpbiBicm93c2VycyBmcm9tIHJldHVybmluZyBjYWNoZWRcbiAgICAgIC8vIHZlcnNpb25zIG9mIHRoZSB1cmwgd2UgYXJlIHJlcXVlc3RpbmcuXG4gICAgICAvLyBTZWUgdGhpcyBQUiBmb3IgbW9yZSBpbmZvOiBodHRwczovL2dpdGh1Yi5jb20vcGl4ZWx1bmlvbi9zaG9waWZ5LWFzeW5jdmlldy9wdWxsLzRcblxuXG4gICAgICB2YXIgY2FjaGVidXN0aW5nUGFyYW1zID0gX29iamVjdFNwcmVhZDIoe30sIHF1ZXJ5UGFyYW1zLCB7XG4gICAgICAgIF86IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICB9KTtcblxuICAgICAgdmFyIGhhc2hVcmwgPSBxdWVyeWxlc3NVcmwucmVwbGFjZSgvKFteI10rKSguKikvLCBmdW5jdGlvbiAobWF0Y2gsIGFkZHJlc3MsIGhhc2gpIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGFkZHJlc3MsIFwiP1wiKS5jb25jYXQoT2JqZWN0LmtleXMocXVlcnlQYXJhbXMpLnNvcnQoKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChrZXksIFwiPVwiKS5jb25jYXQoZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5UGFyYW1zW2tleV0pKTtcbiAgICAgICAgfSkuam9pbignJicpKS5jb25jYXQoaGFzaCk7XG4gICAgICB9KTtcbiAgICAgIHZhciByZXF1ZXN0VXJsID0gcXVlcnlsZXNzVXJsLnJlcGxhY2UoLyhbXiNdKykoLiopLywgZnVuY3Rpb24gKG1hdGNoLCBhZGRyZXNzLCBoYXNoKSB7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChhZGRyZXNzLCBcIj9cIikuY29uY2F0KE9iamVjdC5rZXlzKGNhY2hlYnVzdGluZ1BhcmFtcykuc29ydCgpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGtleSwgXCI9XCIpLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQoY2FjaGVidXN0aW5nUGFyYW1zW2tleV0pKTtcbiAgICAgICAgfSkuam9pbignJicpKS5jb25jYXQoaGFzaCk7XG4gICAgICB9KTtcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgZGF0YTtcblxuICAgICAgICBpZiAoaGFzaFVybCBpbiBkZWZlcnJlZCkge1xuICAgICAgICAgIHJlc29sdmUoZGVmZXJyZWRbaGFzaFVybF0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmVycmVkW2hhc2hVcmxdID0gcHJvbWlzZTtcblxuICAgICAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICAgICAgZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oaGFzaFVybCk7XG5cbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdmFyIGRlc2VyaWFsaXplZCA9IEpTT04ucGFyc2UoZGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhhc2ggPT09IGRlc2VyaWFsaXplZC5vcHRpb25zLmhhc2gpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIGRlZmVycmVkW2hhc2hVcmxdO1xuICAgICAgICAgICAgICByZXNvbHZlKGRlc2VyaWFsaXplZCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCByZXF1ZXN0VXJsLCB0cnVlKTtcblxuICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBlbCA9IHhoci5yZXNwb25zZTtcbiAgICAgICAgICB2YXIgbmV3T3B0aW9ucyA9IHt9O1xuICAgICAgICAgIHZhciBvcHRpb25zRWwgPSBlbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1vcHRpb25zXScpO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnNFbCAmJiBvcHRpb25zRWwuaW5uZXJIVE1MKSB7XG4gICAgICAgICAgICBuZXdPcHRpb25zID0gSlNPTi5wYXJzZShlbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1vcHRpb25zXScpLmlubmVySFRNTCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGh0bWxFbHMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1odG1sXScpO1xuICAgICAgICAgIHZhciBuZXdIdG1sID0ge307XG5cbiAgICAgICAgICBpZiAoaHRtbEVscy5sZW5ndGggPT09IDEgJiYgaHRtbEVsc1swXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtaHRtbCcpID09PSAnJykge1xuICAgICAgICAgICAgbmV3SHRtbCA9IGh0bWxFbHNbMF0uaW5uZXJIVE1MO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGh0bWxFbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgbmV3SHRtbFtodG1sRWxzW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1odG1sJyldID0gaHRtbEVsc1tpXS5pbm5lckhUTUw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGRhdGFFbHMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1kYXRhXScpO1xuICAgICAgICAgIHZhciBuZXdEYXRhID0ge307XG5cbiAgICAgICAgICBpZiAoZGF0YUVscy5sZW5ndGggPT09IDEgJiYgZGF0YUVsc1swXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGF0YScpID09PSAnJykge1xuICAgICAgICAgICAgbmV3RGF0YSA9IEpTT04ucGFyc2UoZGF0YUVsc1swXS5pbm5lckhUTUwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZGF0YUVscy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgbmV3RGF0YVtkYXRhRWxzW19pXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGF0YScpXSA9IEpTT04ucGFyc2UoZGF0YUVsc1tfaV0uaW5uZXJIVE1MKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGhhc2hVcmwsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBuZXdPcHRpb25zLFxuICAgICAgICAgICAgICAgIGRhdGE6IG5ld0RhdGEsXG4gICAgICAgICAgICAgICAgaHRtbDogbmV3SHRtbFxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWxldGUgZGVmZXJyZWRbaGFzaFVybF07XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBkYXRhOiBuZXdEYXRhLFxuICAgICAgICAgICAgaHRtbDogbmV3SHRtbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGRlbGV0ZSBkZWZlcnJlZFtoYXNoVXJsXTtcbiAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2RvY3VtZW50JztcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEFzeW5jVmlldztcbn0oKTtcblxuZXhwb3J0IGRlZmF1bHQgQXN5bmNWaWV3O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/shopify-asyncview/dist/index.es.js\n") },
vendor: 74,715 bytes, line 1
1"./node_modules/shopify-currency-converter/dist/index.js": function (module, exports, __webpack_require__) { "use strict"; eval("\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar moneyFormats = {\n USD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': '${{amount}} USD'\n },\n EUR: {\n 'money_format': '€{{amount}}',\n 'money_with_currency_format': '€{{amount}} EUR'\n },\n GBP: {\n 'money_format': '£{{amount}}',\n 'money_with_currency_format': '£{{amount}} GBP'\n },\n CAD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': '${{amount}} CAD'\n },\n ALL: {\n 'money_format': 'Lek {{amount}}',\n 'money_with_currency_format': 'Lek {{amount}} ALL'\n },\n DZD: {\n 'money_format': 'DA {{amount}}',\n 'money_with_currency_format': 'DA {{amount}} DZD'\n },\n AOA: {\n 'money_format': 'Kz{{amount}}',\n 'money_with_currency_format': 'Kz{{amount}} AOA'\n },\n ARS: {\n 'money_format': '${{amount_with_comma_separator}}',\n 'money_with_currency_format': '${{amount_with_comma_separator}} ARS'\n },\n AMD: {\n 'money_format': '{{amount}} AMD',\n 'money_with_currency_format': '{{amount}} AMD'\n },\n AWG: {\n 'money_format': 'Afl{{amount}}',\n 'money_with_currency_format': 'Afl{{amount}} AWG'\n },\n AUD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': '${{amount}} AUD'\n },\n BBD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': '${{amount}} Bds'\n },\n AZN: {\n 'money_format': 'm.{{amount}}',\n 'money_with_currency_format': 'm.{{amount}} AZN'\n },\n BDT: {\n 'money_format': 'Tk {{amount}}',\n 'money_with_currency_format': 'Tk {{amount}} BDT'\n },\n BSD: {\n 'money_format': 'BS${{amount}}',\n 'money_with_currency_format': 'BS${{amount}} BSD'\n },\n BHD: {\n 'money_format': '{{amount}}0 BD',\n 'money_with_currency_format': '{{amount}}0 BHD'\n },\n BYR: {\n 'money_format': 'Br {{amount}}',\n 'money_with_currency_format': 'Br {{amount}} BYR'\n },\n BZD: {\n 'money_format': 'BZ${{amount}}',\n 'money_with_currency_format': 'BZ${{amount}} BZD'\n },\n BTN: {\n 'money_format': 'Nu {{amount}}',\n 'money_with_currency_format': 'Nu {{amount}} BTN'\n },\n BAM: {\n 'money_format': 'KM {{amount_with_comma_separator}}',\n 'money_with_currency_format': 'KM {{amount_with_comma_separator}} BAM'\n },\n BRL: {\n 'money_format': 'R$ {{amount_with_comma_separator}}',\n 'money_with_currency_format': 'R$ {{amount_with_comma_separator}} BRL'\n },\n BOB: {\n 'money_format': 'Bs{{amount_with_comma_separator}}',\n 'money_with_currency_format': 'Bs{{amount_with_comma_separator}} BOB'\n },\n BWP: {\n 'money_format': 'P{{amount}}',\n 'money_with_currency_format': 'P{{amount}} BWP'\n },\n BND: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': '${{amount}} BND'\n },\n BGN: {\n 'money_format': '{{amount}} лв',\n 'money_with_currency_format': '{{amount}} лв BGN'\n },\n MMK: {\n 'money_format': 'K{{amount}}',\n 'money_with_currency_format': 'K{{amount}} MMK'\n },\n KHR: {\n 'money_format': 'KHR{{amount}}',\n 'money_with_currency_format': 'KHR{{amount}}'\n },\n KYD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': '${{amount}} KYD'\n },\n XAF: {\n 'money_format': 'FCFA{{amount}}',\n 'money_with_currency_format': 'FCFA{{amount}} XAF'\n },\n CLP: {\n 'money_format': '${{amount_no_decimals}}',\n 'money_with_currency_format': '${{amount_no_decimals}} CLP'\n },\n CNY: {\n 'money_format': '¥{{amount}}',\n 'money_with_currency_format': '¥{{amount}} CNY'\n },\n COP: {\n 'money_format': '${{amount_with_comma_separator}}',\n 'money_with_currency_format': '${{amount_with_comma_separator}} COP'\n },\n CRC: {\n 'money_format': '₡ {{amount_with_comma_separator}}',\n 'money_with_currency_format': '₡ {{amount_with_comma_separator}} CRC'\n },\n HRK: {\n 'money_format': '{{amount_with_comma_separator}} kn',\n 'money_with_currency_format': '{{amount_with_comma_separator}} kn HRK'\n },\n CZK: {\n 'money_format': '{{amount_with_comma_separator}} Kč',\n 'money_with_currency_format': '{{amount_with_comma_separator}} Kč'\n },\n DKK: {\n 'money_format': '{{amount_with_comma_separator}}',\n 'money_with_currency_format': 'kr.{{amount_with_comma_separator}}'\n },\n DOP: {\n 'money_format': 'RD$ {{amount}}',\n 'money_with_currency_format': 'RD$ {{amount}}'\n },\n XCD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': 'EC${{amount}}'\n },\n EGP: {\n 'money_format': 'LE {{amount}}',\n 'money_with_currency_format': 'LE {{amount}} EGP'\n },\n ETB: {\n 'money_format': 'Br{{amount}}',\n 'money_with_currency_format': 'Br{{amount}} ETB'\n },\n XPF: {\n 'money_format': '{{amount_no_decimals_with_comma_separator}} XPF',\n 'money_with_currency_format': '{{amount_no_decimals_with_comma_separator}} XPF'\n },\n FJD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': 'FJ${{amount}}'\n },\n GMD: {\n 'money_format': 'D {{amount}}',\n 'money_with_currency_format': 'D {{amount}} GMD'\n },\n GHS: {\n 'money_format': 'GH₵{{amount}}',\n 'money_with_currency_format': 'GH₵{{amount}}'\n },\n GTQ: {\n 'money_format': 'Q{{amount}}',\n 'money_with_currency_format': '{{amount}} GTQ'\n },\n GYD: {\n 'money_format': 'G${{amount}}',\n 'money_with_currency_format': '${{amount}} GYD'\n },\n GEL: {\n 'money_format': '{{amount}} GEL',\n 'money_with_currency_format': '{{amount}} GEL'\n },\n HNL: {\n 'money_format': 'L {{amount}}',\n 'money_with_currency_format': 'L {{amount}} HNL'\n },\n HKD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': 'HK${{amount}}'\n },\n HUF: {\n 'money_format': '{{amount_no_decimals_with_comma_separator}}',\n 'money_with_currency_format': '{{amount_no_decimals_with_comma_separator}} Ft'\n },\n ISK: {\n 'money_format': '{{amount_no_decimals}} kr',\n 'money_with_currency_format': '{{amount_no_decimals}} kr ISK'\n },\n INR: {\n 'money_format': 'Rs. {{amount}}',\n 'money_with_currency_format': 'Rs. {{amount}}'\n },\n IDR: {\n 'money_format': '{{amount_with_comma_separator}}',\n 'money_with_currency_format': 'Rp {{amount_with_comma_separator}}'\n },\n ILS: {\n 'money_format': '{{amount}} NIS',\n 'money_with_currency_format': '{{amount}} NIS'\n },\n JMD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': '${{amount}} JMD'\n },\n JPY: {\n 'money_format': '¥{{amount_no_decimals}}',\n 'money_with_currency_format': '¥{{amount_no_decimals}} JPY'\n },\n JEP: {\n 'money_format': '£{{amount}}',\n 'money_with_currency_format': '£{{amount}} JEP'\n },\n JOD: {\n 'money_format': '{{amount}}0 JD',\n 'money_with_currency_format': '{{amount}}0 JOD'\n },\n KZT: {\n 'money_format': '{{amount}} KZT',\n 'money_with_currency_format': '{{amount}} KZT'\n },\n KES: {\n 'money_format': 'KSh{{amount}}',\n 'money_with_currency_format': 'KSh{{amount}}'\n },\n KWD: {\n 'money_format': '{{amount}}0 KD',\n 'money_with_currency_format': '{{amount}}0 KWD'\n },\n KGS: {\n 'money_format': 'лв{{amount}}',\n 'money_with_currency_format': 'лв{{amount}}'\n },\n LVL: {\n 'money_format': 'Ls {{amount}}',\n 'money_with_currency_format': 'Ls {{amount}} LVL'\n },\n LBP: {\n 'money_format': 'L£{{amount}}',\n 'money_with_currency_format': 'L£{{amount}} LBP'\n },\n LTL: {\n 'money_format': '{{amount}} Lt',\n 'money_with_currency_format': '{{amount}} Lt'\n },\n MGA: {\n 'money_format': 'Ar {{amount}}',\n 'money_with_currency_format': 'Ar {{amount}} MGA'\n },\n MKD: {\n 'money_format': 'ден {{amount}}',\n 'money_with_currency_format': 'ден {{amount}} MKD'\n },\n MOP: {\n 'money_format': 'MOP${{amount}}',\n 'money_with_currency_format': 'MOP${{amount}}'\n },\n MVR: {\n 'money_format': 'Rf{{amount}}',\n 'money_with_currency_format': 'Rf{{amount}} MRf'\n },\n MXN: {\n 'money_format': '$ {{amount}}',\n 'money_with_currency_format': '$ {{amount}} MXN'\n },\n MYR: {\n 'money_format': 'RM{{amount}} MYR',\n 'money_with_currency_format': 'RM{{amount}} MYR'\n },\n MUR: {\n 'money_format': 'Rs {{amount}}',\n 'money_with_currency_format': 'Rs {{amount}} MUR'\n },\n MDL: {\n 'money_format': '{{amount}} MDL',\n 'money_with_currency_format': '{{amount}} MDL'\n },\n MAD: {\n 'money_format': '{{amount}} dh',\n 'money_with_currency_format': 'Dh {{amount}} MAD'\n },\n MNT: {\n 'money_format': '{{amount_no_decimals}} ₮',\n 'money_with_currency_format': '{{amount_no_decimals}} MNT'\n },\n MZN: {\n 'money_format': '{{amount}} Mt',\n 'money_with_currency_format': 'Mt {{amount}} MZN'\n },\n NAD: {\n 'money_format': 'N${{amount}}',\n 'money_with_currency_format': 'N${{amount}} NAD'\n },\n NPR: {\n 'money_format': 'Rs{{amount}}',\n 'money_with_currency_format': 'Rs{{amount}} NPR'\n },\n ANG: {\n 'money_format': 'ƒ{{amount}}',\n 'money_with_currency_format': '{{amount}} NAƒ'\n },\n NZD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': '${{amount}} NZD'\n },\n NIO: {\n 'money_format': 'C${{amount}}',\n 'money_with_currency_format': 'C${{amount}} NIO'\n },\n NGN: {\n 'money_format': '₦{{amount}}',\n 'money_with_currency_format': '₦{{amount}} NGN'\n },\n NOK: {\n 'money_format': 'kr {{amount_with_comma_separator}}',\n 'money_with_currency_format': 'kr {{amount_with_comma_separator}} NOK'\n },\n OMR: {\n 'money_format': '{{amount_with_comma_separator}} OMR',\n 'money_with_currency_format': '{{amount_with_comma_separator}} OMR'\n },\n PKR: {\n 'money_format': 'Rs.{{amount}}',\n 'money_with_currency_format': 'Rs.{{amount}} PKR'\n },\n PGK: {\n 'money_format': 'K {{amount}}',\n 'money_with_currency_format': 'K {{amount}} PGK'\n },\n PYG: {\n 'money_format': 'Gs. {{amount_no_decimals_with_comma_separator}}',\n 'money_with_currency_format': 'Gs. {{amount_no_decimals_with_comma_separator}} PYG'\n },\n PEN: {\n 'money_format': 'S/. {{amount}}',\n 'money_with_currency_format': 'S/. {{amount}} PEN'\n },\n PHP: {\n 'money_format': '₱{{amount}}',\n 'money_with_currency_format': '₱{{amount}} PHP'\n },\n PLN: {\n 'money_format': '{{amount_with_comma_separator}} zl',\n 'money_with_currency_format': '{{amount_with_comma_separator}} zl PLN'\n },\n QAR: {\n 'money_format': 'QAR {{amount_with_comma_separator}}',\n 'money_with_currency_format': 'QAR {{amount_with_comma_separator}}'\n },\n RON: {\n 'money_format': '{{amount_with_comma_separator}} lei',\n 'money_with_currency_format': '{{amount_with_comma_separator}} lei RON'\n },\n RUB: {\n 'money_format': 'руб{{amount_with_comma_separator}}',\n 'money_with_currency_format': 'руб{{amount_with_comma_separator}} RUB'\n },\n RWF: {\n 'money_format': '{{amount_no_decimals}} RF',\n 'money_with_currency_format': '{{amount_no_decimals}} RWF'\n },\n WST: {\n 'money_format': 'WS$ {{amount}}',\n 'money_with_currency_format': 'WS$ {{amount}} WST'\n },\n SAR: {\n 'money_format': '{{amount}} SR',\n 'money_with_currency_format': '{{amount}} SAR'\n },\n STD: {\n 'money_format': 'Db {{amount}}',\n 'money_with_currency_format': 'Db {{amount}} STD'\n },\n RSD: {\n 'money_format': '{{amount}} RSD',\n 'money_with_currency_format': '{{amount}} RSD'\n },\n SCR: {\n 'money_format': 'Rs {{amount}}',\n 'money_with_currency_format': 'Rs {{amount}} SCR'\n },\n SGD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': '${{amount}} SGD'\n },\n SYP: {\n 'money_format': 'S£{{amount}}',\n 'money_with_currency_format': 'S£{{amount}} SYP'\n },\n ZAR: {\n 'money_format': 'R {{amount}}',\n 'money_with_currency_format': 'R {{amount}} ZAR'\n },\n KRW: {\n 'money_format': '₩{{amount_no_decimals}}',\n 'money_with_currency_format': '₩{{amount_no_decimals}} KRW'\n },\n LKR: {\n 'money_format': 'Rs {{amount}}',\n 'money_with_currency_format': 'Rs {{amount}} LKR'\n },\n SEK: {\n 'money_format': '{{amount_no_decimals}} kr',\n 'money_with_currency_format': '{{amount_no_decimals}} kr SEK'\n },\n CHF: {\n 'money_format': 'SFr. {{amount}}',\n 'money_with_currency_format': 'SFr. {{amount}} CHF'\n },\n TWD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': '${{amount}} TWD'\n },\n THB: {\n 'money_format': '{{amount}} ฿',\n 'money_with_currency_format': '{{amount}} ฿ THB'\n },\n TZS: {\n 'money_format': '{{amount}} TZS',\n 'money_with_currency_format': '{{amount}} TZS'\n },\n TTD: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': '${{amount}} TTD'\n },\n TND: {\n 'money_format': '{{amount}}',\n 'money_with_currency_format': '{{amount}} DT'\n },\n TRY: {\n 'money_format': '{{amount}}TL',\n 'money_with_currency_format': '{{amount}}TL'\n },\n UGX: {\n 'money_format': 'Ush {{amount_no_decimals}}',\n 'money_with_currency_format': 'Ush {{amount_no_decimals}} UGX'\n },\n UAH: {\n 'money_format': 'â´{{amount}}',\n 'money_with_currency_format': 'â´{{amount}} UAH'\n },\n AED: {\n 'money_format': 'Dhs. {{amount}}',\n 'money_with_currency_format': 'Dhs. {{amount}} AED'\n },\n UYU: {\n 'money_format': '${{amount_with_comma_separator}}',\n 'money_with_currency_format': '${{amount_with_comma_separator}} UYU'\n },\n VUV: {\n 'money_format': '${{amount}}',\n 'money_with_currency_format': '${{amount}}VT'\n },\n VEF: {\n 'money_format': 'Bs. {{amount_with_comma_separator}}',\n 'money_with_currency_format': 'Bs. {{amount_with_comma_separator}} VEF'\n },\n VND: {\n 'money_format': '{{amount_no_decimals_with_comma_separator}}₫',\n 'money_with_currency_format': '{{amount_no_decimals_with_comma_separator}} VND'\n },\n XBT: {\n 'money_format': '{{amount_no_decimals}} BTC',\n 'money_with_currency_format': '{{amount_no_decimals}} BTC'\n },\n XOF: {\n 'money_format': 'CFA{{amount}}',\n 'money_with_currency_format': 'CFA{{amount}} XOF'\n },\n ZMW: {\n 'money_format': 'K{{amount_no_decimals_with_comma_separator}}',\n 'money_with_currency_format': 'ZMW{{amount_no_decimals_with_comma_separator}}'\n }\n};\n\n/**\n * Format a number to a specific format\n *\n * @param {Number} number - Value to format\n * @param {Number} precision - Amount of decimal points to show\n * @param {String} thousands - Thousands delimiter\n * @param {String} decimal - Decimal delimiter\n * @returns {String|Number}\n */\nfunction formatWithDelimiters(number) {\n var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n var thousands = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ',';\n var decimal = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n\n if (isNaN(number) || !number) {\n return 0;\n }\n\n var preciseNumber = (number / 100.0).toFixed(precision);\n\n var parts = preciseNumber.split(thousands);\n var dollarsAmount = parts[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1' + thousands);\n var centsAmount = parts[1] ? decimal + parts[1] : '';\n\n return dollarsAmount + centsAmount;\n}\n\n/**\n * Convert a money value in cents to a formatted currency string\n *\n * @param {Number|String} cents\n * @param {String} format\n * @returns {String}\n */\nfunction formatMoney(cents, format) {\n if (typeof cents === 'string') {\n cents = cents.replace('.', '');\n }\n\n var value = '';\n var placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\n\n switch (format.match(placeholderRegex)[1]) {\n case 'amount':\n value = formatWithDelimiters(cents, 2, ',', '.');\n break;\n case 'amount_with_space_separator':\n value = formatWithDelimiters(cents, 2, ' ', '.');\n break;\n case 'amount_with_comma_separator':\n value = formatWithDelimiters(cents, 2, '.', ',');\n break;\n case 'amount_with_apostrophe_separator':\n value = formatWithDelimiters(cents, 2, '\\'', '.');\n break;\n case 'amount_no_decimals':\n value = formatWithDelimiters(cents, 0, ',', '.');\n break;\n case 'amount_no_decimals_with_space_separator':\n value = formatWithDelimiters(cents, 0, ' ', '.');\n break;\n case 'amount_no_decimals_with_comma_separator':\n value = formatWithDelimiters(cents, 0, ',', '.');\n break;\n }\n\n return format.replace(placeholderRegex, value);\n}\n\n/**\n * Return the value of money in cents value\n *\n * @param {Number} moneyAmount - Money value of a price\n * eg: 1000\n * @param {String} format - Shop formatting of a price\n * eg: {{amount}}\n * @param {String} currency - Currency of a price\n * eg: 'CAD'\n * @returns {Number}\n * @private\n */\nfunction getCentsValue(moneyAmount, format, currency) {\n var cents = 0;\n // Convert prices from float values to integers if needed, then convert\n if (format.indexOf('amount_no_decimals') !== -1) {\n cents = moneyAmount * 100;\n } else if (currency === 'JOD' || currency === 'KWD' || currency === 'BHD') {\n cents = moneyAmount / 10;\n } else {\n cents = moneyAmount;\n }\n\n return cents;\n}\n\n/**\n * Converts formatted money to a number\n *\n * @param {Element} priceEl\n * @returns {Number|String}\n */\nfunction getMoneyValue(priceEl) {\n var price = priceEl.getAttribute('data-currency-original') || priceEl.textContent;\n var value = parseInt(price.replace(/[^0-9]/g, ''), 10);\n\n return !isNaN(value) ? value : '';\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar CurrencyConverter = function () {\n function CurrencyConverter() {\n classCallCheck(this, CurrencyConverter);\n\n this.defaults = {\n switcherSelector: '[data-currency-converter]',\n priceSelector: '.money',\n shopCurrency: '',\n defaultCurrency: '',\n displayFormat: '',\n moneyFormat: '',\n moneyFormatNoCurrency: '',\n moneyFormatCurrency: ''\n };\n\n this.options = {};\n this.moneyFormats = moneyFormats;\n this.storage = 'currency';\n this.currentCurrency = null;\n this.isInitialised = false;\n }\n\n /**\n * Initialize CurrencyConverter\n *\n * @param settings\n * @property {Object} settings\n * Configuration for CurrencyConverter\n * @property {String} settings.switcherSelector\n * CSS Selector for dropdown(s) which controls currency conversion\n * @property {String} settings.priceSelector\n * CSS Selector for elements containing prices\n * @property {String} settings.shopCurrency\n * Shop's currency (The currency used to process transactions)\n * @property {String} settings.defaultCurrency\n * Theme's currency setting, or initial currency to show on the page\n * @property {String} settings.displayFormat\n * `money_with_currency_format` or `money_format`\n * @property {String} settings.moneyFormat\n * Shop's currency formatted using the selected display format\n * @property {String} settings.moneyFormatNoCurrency\n * Shop's currency formatted without showing currency code\n * @property {String} settings.moneyFormatCurrency\n * Shop's currency formatted showing currency code\n */\n\n\n createClass(CurrencyConverter, [{\n key: 'init',\n value: function init(settings) {\n var _this = this;\n\n if (!window.Currency || this.isInitialised) return;\n\n Object.keys(this.defaults).forEach(function (key) {\n _this.options[key] = settings[key] || _this.defaults[key];\n });\n\n this.currentCurrency = this._getStoredCurrency() || this.options.defaultCurrency;\n this.moneyFormats[this.options.shopCurrency].money_with_currency_format = this.options.moneyFormatCurrency;\n this.moneyFormats[this.options.shopCurrency].money_format = this.options.moneyFormatNoCurrency;\n\n this.isInitialised = true;\n this._current();\n }\n\n /**\n * Change the currency to a new currency using an ISO currency code\n *\n * @param {String} newCurrency - New currency to convert prices to\n */\n\n }, {\n key: 'setCurrency',\n value: function setCurrency(newCurrency) {\n if (!this.isInitialised) return;\n\n this._convertAll(newCurrency);\n }\n\n /**\n * Update a price on the page from shop currency to the active currency, and formatting\n *\n * @param priceEl {HTMLElement} - element containing price text, in the shop currency\n */\n\n }, {\n key: 'update',\n value: function update(priceEl) {\n if (!this.isInitialised) return;\n\n // unset any stored previous conversions and the data-currency attribute itself\n var attributes = priceEl.attributes;\n for (var attr = 0; attr < attributes.length; attr++) {\n var attribute = attributes[attr];\n\n if (attribute.name.indexOf('data-currency') === 0) {\n priceEl.setAttribute(attribute.name, '');\n }\n }\n\n this._convertEl(priceEl, this.currentCurrency);\n }\n\n /**\n * Return the stored currency from the client's browser\n * @returns {String}\n * @private\n */\n\n }, {\n key: '_getStoredCurrency',\n value: function _getStoredCurrency() {\n try {\n return localStorage.getItem(this.storage);\n } catch (error) {\n console.warn(error);\n return this.options.defaultCurrency;\n }\n }\n\n /**\n * Save the client's currency in localstorage for persistence across pages\n * and sessions\n * @param {String} currency\n * @private\n */\n\n }, {\n key: '_setStoredCurrency',\n value: function _setStoredCurrency(currency) {\n try {\n localStorage.setItem(this.storage, currency);\n } catch (error) {\n console.warn(error);\n }\n }\n\n /**\n * Update the currency switcher to the current currency\n * @private\n */\n\n }, {\n key: '_current',\n value: function _current() {\n var switchers = document.querySelectorAll(this.options.switcherSelector);\n for (var i = 0; i < switchers.length; i += 1) {\n var switcher = switchers[i];\n var childrenEls = switcher.querySelectorAll('option');\n\n for (var j = 0; j < childrenEls.length; j += 1) {\n var optionEl = childrenEls[j];\n\n if (optionEl.selected && optionEl.value !== this.currentCurrency) {\n optionEl.selected = false;\n }\n\n if (optionEl.value === this.currentCurrency) {\n optionEl.selected = true;\n }\n }\n }\n\n this._convertAll(this.currentCurrency);\n }\n\n /**\n * Converts an individual price to the new format\n *\n * @param {Element} priceEl - Node element containing price\n * @param {String} oldCurrency - Currency of element converting from\n * @param {String} newCurrency - Currency to convert to\n * @private\n */\n\n }, {\n key: '_convertEl',\n value: function _convertEl(priceEl, newCurrency) {\n var oldCurrency = this.options.shopCurrency;\n // If the amount has already been converted, we leave it alone.\n if (priceEl.getAttribute('data-currency') === newCurrency) {\n return;\n }\n\n // If we are converting to a currency that we have saved, we will use the saved amount.\n if (priceEl.getAttribute('data-currency-' + newCurrency)) {\n priceEl.innerHTML = priceEl.getAttribute('data-currency-' + newCurrency);\n } else {\n var oldFormat = this.moneyFormats[oldCurrency][this.options.displayFormat];\n var newFormat = this.moneyFormats[newCurrency][this.options.displayFormat];\n\n var moneyValue = getMoneyValue(priceEl);\n var centsValue = getCentsValue(moneyValue, oldFormat, oldCurrency);\n\n // Cents value is empty, but not 0. 0$ is a valid price, while empty is not\n if (centsValue === '') return;\n\n var cents = window.Currency.convert(centsValue, oldCurrency, newCurrency);\n var oldPriceFormatted = formatMoney(centsValue, oldFormat);\n var priceFormatted = formatMoney(cents, newFormat);\n\n if (!priceEl.getAttribute('data-currency-original')) {\n priceEl.setAttribute('data-currency-original', oldPriceFormatted);\n }\n\n priceEl.setAttribute('data-currency-' + oldCurrency, oldPriceFormatted);\n priceEl.setAttribute('data-currency-' + newCurrency, priceFormatted);\n priceEl.innerHTML = priceFormatted;\n }\n\n priceEl.setAttribute('data-currency', newCurrency);\n }\n\n /**\n * Convert all prices on the page to the new currency\n *\n * @param {String} oldCurrency - Currency of element converting from\n * @param {String} newCurrency - Currency to convert to\n * @private\n */\n\n }, {\n key: '_convertAll',\n value: function _convertAll(newCurrency) {\n var priceEls = document.querySelectorAll(this.options.priceSelector);\n if (!priceEls) return;\n\n this.currentCurrency = newCurrency;\n this._setStoredCurrency(newCurrency);\n\n for (var i = 0; i < priceEls.length; i += 1) {\n this._convertEl(priceEls[i], newCurrency);\n }\n }\n }]);\n return CurrencyConverter;\n}();\n\nvar singletonInstance = new CurrencyConverter();\n\nexports['default'] = singletonInstance;\nexports.CurrencyConverter = CurrencyConverter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2hvcGlmeS1jdXJyZW5jeS1jb252ZXJ0ZXIvZGlzdC9pbmRleC5qcz9hNjNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLDhDQUE4QyxjQUFjOztBQUU1RDtBQUNBO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEMsc0NBQXNDLFFBQVE7QUFDOUMsR0FBRztBQUNIO0FBQ0EsNkJBQTZCLFFBQVE7QUFDckMsMkNBQTJDLFFBQVE7QUFDbkQsR0FBRztBQUNIO0FBQ0EsOEJBQThCLFFBQVE7QUFDdEMsNENBQTRDLFFBQVE7QUFDcEQsR0FBRztBQUNIO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEMsc0NBQXNDLFFBQVE7QUFDOUMsR0FBRztBQUNIO0FBQ0EsMkJBQTJCLFFBQVE7QUFDbkMseUNBQXlDLFFBQVE7QUFDakQsR0FBRztBQUNIO0FBQ0EsMEJBQTBCLFFBQVE7QUFDbEMsd0NBQXdDLFFBQVE7QUFDaEQsR0FBRztBQUNIO0FBQ0EseUJBQXlCLFFBQVE7QUFDakMsdUNBQXVDLFFBQVE7QUFDL0MsR0FBRztBQUNIO0FBQ0Esd0JBQXdCLDZCQUE2QjtBQUNyRCxzQ0FBc0MsNkJBQTZCO0FBQ25FLEdBQUc7QUFDSDtBQUNBLHVCQUF1QixRQUFRO0FBQy9CLHFDQUFxQyxRQUFRO0FBQzdDLEdBQUc7QUFDSDtBQUNBLDBCQUEwQixRQUFRO0FBQ2xDLHdDQUF3QyxRQUFRO0FBQ2hELEdBQUc7QUFDSDtBQUNBLHdCQUF3QixRQUFRO0FBQ2hDLHNDQUFzQyxRQUFRO0FBQzlDLEdBQUc7QUFDSDtBQUNBLHdCQUF3QixRQUFRO0FBQ2hDLHNDQUFzQyxRQUFRO0FBQzlDLEdBQUc7QUFDSDtBQUNBLHlCQUF5QixRQUFRO0FBQ2pDLHVDQUF1QyxRQUFRO0FBQy9DLEdBQUc7QUFDSDtBQUNBLDBCQUEwQixRQUFRO0FBQ2xDLHdDQUF3QyxRQUFRO0FBQ2hELEdBQUc7QUFDSDtBQUNBLDBCQUEwQixRQUFRO0FBQ2xDLHdD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QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsc0JBQXNCO0FBQzNDO0FBQ0E7O0FBRUEsdUJBQXVCLHdCQUF3QjtBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QjtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHFCQUFxQixxQkFBcUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3Nob3BpZnktY3VycmVuY3ktY29udmVydGVyL2Rpc3QvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBtb25leUZvcm1hdHMgPSB7XG4gIFVTRDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnJHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICcke3thbW91bnR9fSBVU0QnXG4gIH0sXG4gIEVVUjoge1xuICAgICdtb25leV9mb3JtYXQnOiAnJmV1cm87e3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJyZldXJvO3t7YW1vdW50fX0gRVVSJ1xuICB9LFxuICBHQlA6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJyZwb3VuZDt7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnJnBvdW5kO3t7YW1vdW50fX0gR0JQJ1xuICB9LFxuICBDQUQ6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJyR7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnJHt7YW1vdW50fX0gQ0FEJ1xuICB9LFxuICBBTEw6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ0xlayB7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnTGVrIHt7YW1vdW50fX0gQUxMJ1xuICB9LFxuICBEWkQ6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ0RBIHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdEQSB7e2Ftb3VudH19IERaRCdcbiAgfSxcbiAgQU9BOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdLent7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdLent7YW1vdW50fX0gQU9BJ1xuICB9LFxuICBBUlM6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJyR7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnJHt7YW1vdW50X3dpdGhfY29tbWFfc2VwYXJhdG9yfX0gQVJTJ1xuICB9LFxuICBBTUQ6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ3t7YW1vdW50fX0gQU1EJyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnR9fSBBTUQnXG4gIH0sXG4gIEFXRzoge1xuICAgICdtb25leV9mb3JtYXQnOiAnQWZse3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0FmbHt7YW1vdW50fX0gQVdHJ1xuICB9LFxuICBBVUQ6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJyR7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnJHt7YW1vdW50fX0gQVVEJ1xuICB9LFxuICBCQkQ6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJyR7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnJHt7YW1vdW50fX0gQmRzJ1xuICB9LFxuICBBWk46IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ20ue3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ20ue3thbW91bnR9fSBBWk4nXG4gIH0sXG4gIEJEVDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnVGsge3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ1RrIHt7YW1vdW50fX0gQkRUJ1xuICB9LFxuICBCU0Q6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ0JTJHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdCUyR7e2Ftb3VudH19IEJTRCdcbiAgfSxcbiAgQkhEOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudH19MCBCRCcsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ3t7YW1vdW50fX0wIEJIRCdcbiAgfSxcbiAgQllSOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdCciB7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnQnIge3thbW91bnR9fSBCWVInXG4gIH0sXG4gIEJaRDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnQloke3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0JaJHt7YW1vdW50fX0gQlpEJ1xuICB9LFxuICBCVE46IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ051IHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdOdSB7e2Ftb3VudH19IEJUTidcbiAgfSxcbiAgQkFNOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdLTSB7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnS00ge3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSBCQU0nXG4gIH0sXG4gIEJSTDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnUiQge3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ1IkIHt7YW1vdW50X3dpdGhfY29tbWFfc2VwYXJhdG9yfX0gQlJMJ1xuICB9LFxuICBCT0I6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ0Jze3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0Jze3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSBCT0InXG4gIH0sXG4gIEJXUDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnUHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdQe3thbW91bnR9fSBCV1AnXG4gIH0sXG4gIEJORDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnJHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICcke3thbW91bnR9fSBCTkQnXG4gIH0sXG4gIEJHTjoge1xuICAgICdtb25leV9mb3JtYXQnOiAne3thbW91bnR9fSDQu9CyJyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnR9fSDQu9CyIEJHTidcbiAgfSxcbiAgTU1LOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdLe3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0t7e2Ftb3VudH19IE1NSydcbiAgfSxcbiAgS0hSOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdLSFJ7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnS0hSe3thbW91bnR9fSdcbiAgfSxcbiAgS1lEOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICcke3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJyR7e2Ftb3VudH19IEtZRCdcbiAgfSxcbiAgWEFGOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdGQ0ZBe3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0ZDRkF7e2Ftb3VudH19IFhBRidcbiAgfSxcbiAgQ0xQOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICcke3thbW91bnRfbm9fZGVjaW1hbHN9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJyR7e2Ftb3VudF9ub19kZWNpbWFsc319IENMUCdcbiAgfSxcbiAgQ05ZOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICcmIzE2NTt7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnJiMxNjU7e3thbW91bnR9fSBDTlknXG4gIH0sXG4gIENPUDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnJHt7YW1vdW50X3dpdGhfY29tbWFfc2VwYXJhdG9yfX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICcke3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSBDT1AnXG4gIH0sXG4gIENSQzoge1xuICAgICdtb25leV9mb3JtYXQnOiAnJiM4MzUzOyB7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnJiM4MzUzOyB7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19IENSQydcbiAgfSxcbiAgSFJLOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19IGtuJyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSBrbiBIUksnXG4gIH0sXG4gIENaSzoge1xuICAgICdtb25leV9mb3JtYXQnOiAne3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSBLJiMyNjk7JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSBLJiMyNjk7J1xuICB9LFxuICBES0s6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ3t7YW1vdW50X3dpdGhfY29tbWFfc2VwYXJhdG9yfX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdrci57e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19J1xuICB9LFxuICBET1A6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ1JEJCB7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnUkQkIHt7YW1vdW50fX0nXG4gIH0sXG4gIFhDRDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnJHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdFQyR7e2Ftb3VudH19J1xuICB9LFxuICBFR1A6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ0xFIHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdMRSB7e2Ftb3VudH19IEVHUCdcbiAgfSxcbiAgRVRCOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdCcnt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdCcnt7YW1vdW50fX0gRVRCJ1xuICB9LFxuICBYUEY6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ3t7YW1vdW50X25vX2RlY2ltYWxzX3dpdGhfY29tbWFfc2VwYXJhdG9yfX0gWFBGJyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnRfbm9fZGVjaW1hbHNfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSBYUEYnXG4gIH0sXG4gIEZKRDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnJHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdGSiR7e2Ftb3VudH19J1xuICB9LFxuICBHTUQ6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ0Qge3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0Qge3thbW91bnR9fSBHTUQnXG4gIH0sXG4gIEdIUzoge1xuICAgICdtb25leV9mb3JtYXQnOiAnR0gmIzgzNzM7e3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0dIJiM4MzczO3t7YW1vdW50fX0nXG4gIH0sXG4gIEdUUToge1xuICAgICdtb25leV9mb3JtYXQnOiAnUXt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICd7e2Ftb3VudH19IEdUUSdcbiAgfSxcbiAgR1lEOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdHJHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICcke3thbW91bnR9fSBHWUQnXG4gIH0sXG4gIEdFTDoge1xuICAgICdtb25leV9mb3JtYXQnOiAne3thbW91bnR9fSBHRUwnLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICd7e2Ftb3VudH19IEdFTCdcbiAgfSxcbiAgSE5MOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdMIHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdMIHt7YW1vdW50fX0gSE5MJ1xuICB9LFxuICBIS0Q6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJyR7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnSEske3thbW91bnR9fSdcbiAgfSxcbiAgSFVGOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudF9ub19kZWNpbWFsc193aXRoX2NvbW1hX3NlcGFyYXRvcn19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnRfbm9fZGVjaW1hbHNfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSBGdCdcbiAgfSxcbiAgSVNLOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudF9ub19kZWNpbWFsc319IGtyJyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnRfbm9fZGVjaW1hbHN9fSBrciBJU0snXG4gIH0sXG4gIElOUjoge1xuICAgICdtb25leV9mb3JtYXQnOiAnUnMuIHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdScy4ge3thbW91bnR9fSdcbiAgfSxcbiAgSURSOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnUnAge3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSdcbiAgfSxcbiAgSUxTOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudH19IE5JUycsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ3t7YW1vdW50fX0gTklTJ1xuICB9LFxuICBKTUQ6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJyR7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnJHt7YW1vdW50fX0gSk1EJ1xuICB9LFxuICBKUFk6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJyYjMTY1O3t7YW1vdW50X25vX2RlY2ltYWxzfX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICcmIzE2NTt7e2Ftb3VudF9ub19kZWNpbWFsc319IEpQWSdcbiAgfSxcbiAgSkVQOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICcmcG91bmQ7e3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJyZwb3VuZDt7e2Ftb3VudH19IEpFUCdcbiAgfSxcbiAgSk9EOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudH19MCBKRCcsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ3t7YW1vdW50fX0wIEpPRCdcbiAgfSxcbiAgS1pUOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudH19IEtaVCcsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ3t7YW1vdW50fX0gS1pUJ1xuICB9LFxuICBLRVM6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ0tTaHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdLU2h7e2Ftb3VudH19J1xuICB9LFxuICBLV0Q6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ3t7YW1vdW50fX0wIEtEJyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnR9fTAgS1dEJ1xuICB9LFxuICBLR1M6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ9C70LJ7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAn0LvQsnt7YW1vdW50fX0nXG4gIH0sXG4gIExWTDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnTHMge3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0xzIHt7YW1vdW50fX0gTFZMJ1xuICB9LFxuICBMQlA6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ0wmcG91bmQ7e3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0wmcG91bmQ7e3thbW91bnR9fSBMQlAnXG4gIH0sXG4gIExUTDoge1xuICAgICdtb25leV9mb3JtYXQnOiAne3thbW91bnR9fSBMdCcsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ3t7YW1vdW50fX0gTHQnXG4gIH0sXG4gIE1HQToge1xuICAgICdtb25leV9mb3JtYXQnOiAnQXIge3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0FyIHt7YW1vdW50fX0gTUdBJ1xuICB9LFxuICBNS0Q6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ9C00LXQvSB7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAn0LTQtdC9IHt7YW1vdW50fX0gTUtEJ1xuICB9LFxuICBNT1A6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ01PUCR7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnTU9QJHt7YW1vdW50fX0nXG4gIH0sXG4gIE1WUjoge1xuICAgICdtb25leV9mb3JtYXQnOiAnUmZ7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnUmZ7e2Ftb3VudH19IE1SZidcbiAgfSxcbiAgTVhOOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICckIHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICckIHt7YW1vdW50fX0gTVhOJ1xuICB9LFxuICBNWVI6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ1JNe3thbW91bnR9fSBNWVInLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdSTXt7YW1vdW50fX0gTVlSJ1xuICB9LFxuICBNVVI6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ1JzIHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdScyB7e2Ftb3VudH19IE1VUidcbiAgfSxcbiAgTURMOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudH19IE1ETCcsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ3t7YW1vdW50fX0gTURMJ1xuICB9LFxuICBNQUQ6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ3t7YW1vdW50fX0gZGgnLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdEaCB7e2Ftb3VudH19IE1BRCdcbiAgfSxcbiAgTU5UOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudF9ub19kZWNpbWFsc319ICYjODM2NicsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ3t7YW1vdW50X25vX2RlY2ltYWxzfX0gTU5UJ1xuICB9LFxuICBNWk46IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ3t7YW1vdW50fX0gTXQnLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdNdCB7e2Ftb3VudH19IE1aTidcbiAgfSxcbiAgTkFEOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdOJHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdOJHt7YW1vdW50fX0gTkFEJ1xuICB9LFxuICBOUFI6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ1Jze3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ1Jze3thbW91bnR9fSBOUFInXG4gIH0sXG4gIEFORzoge1xuICAgICdtb25leV9mb3JtYXQnOiAnJmZub2Y7e3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ3t7YW1vdW50fX0gTkEmZm5vZjsnXG4gIH0sXG4gIE5aRDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnJHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICcke3thbW91bnR9fSBOWkQnXG4gIH0sXG4gIE5JTzoge1xuICAgICdtb25leV9mb3JtYXQnOiAnQyR7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnQyR7e2Ftb3VudH19IE5JTydcbiAgfSxcbiAgTkdOOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICcmIzgzNTg7e3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJyYjODM1ODt7e2Ftb3VudH19IE5HTidcbiAgfSxcbiAgTk9LOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdrciB7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAna3Ige3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSBOT0snXG4gIH0sXG4gIE9NUjoge1xuICAgICdtb25leV9mb3JtYXQnOiAne3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSBPTVInLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICd7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19IE9NUidcbiAgfSxcbiAgUEtSOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdScy57e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnUnMue3thbW91bnR9fSBQS1InXG4gIH0sXG4gIFBHSzoge1xuICAgICdtb25leV9mb3JtYXQnOiAnSyB7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnSyB7e2Ftb3VudH19IFBHSydcbiAgfSxcbiAgUFlHOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdHcy4ge3thbW91bnRfbm9fZGVjaW1hbHNfd2l0aF9jb21tYV9zZXBhcmF0b3J9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0dzLiB7e2Ftb3VudF9ub19kZWNpbWFsc193aXRoX2NvbW1hX3NlcGFyYXRvcn19IFBZRydcbiAgfSxcbiAgUEVOOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdTLy4ge3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ1MvLiB7e2Ftb3VudH19IFBFTidcbiAgfSxcbiAgUEhQOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICcmIzgzNjk7e3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJyYjODM2OTt7e2Ftb3VudH19IFBIUCdcbiAgfSxcbiAgUExOOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19IHpsJyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSB6bCBQTE4nXG4gIH0sXG4gIFFBUjoge1xuICAgICdtb25leV9mb3JtYXQnOiAnUUFSIHt7YW1vdW50X3dpdGhfY29tbWFfc2VwYXJhdG9yfX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdRQVIge3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSdcbiAgfSxcbiAgUk9OOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19IGxlaScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ3t7YW1vdW50X3dpdGhfY29tbWFfc2VwYXJhdG9yfX0gbGVpIFJPTidcbiAgfSxcbiAgUlVCOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICcmIzEwODg7JiMxMDkxOyYjMTA3Mzt7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnJiMxMDg4OyYjMTA5MTsmIzEwNzM7e3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSBSVUInXG4gIH0sXG4gIFJXRjoge1xuICAgICdtb25leV9mb3JtYXQnOiAne3thbW91bnRfbm9fZGVjaW1hbHN9fSBSRicsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ3t7YW1vdW50X25vX2RlY2ltYWxzfX0gUldGJ1xuICB9LFxuICBXU1Q6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ1dTJCB7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnV1MkIHt7YW1vdW50fX0gV1NUJ1xuICB9LFxuICBTQVI6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ3t7YW1vdW50fX0gU1InLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICd7e2Ftb3VudH19IFNBUidcbiAgfSxcbiAgU1REOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdEYiB7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnRGIge3thbW91bnR9fSBTVEQnXG4gIH0sXG4gIFJTRDoge1xuICAgICdtb25leV9mb3JtYXQnOiAne3thbW91bnR9fSBSU0QnLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICd7e2Ftb3VudH19IFJTRCdcbiAgfSxcbiAgU0NSOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdScyB7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnUnMge3thbW91bnR9fSBTQ1InXG4gIH0sXG4gIFNHRDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnJHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICcke3thbW91bnR9fSBTR0QnXG4gIH0sXG4gIFNZUDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnUyZwb3VuZDt7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnUyZwb3VuZDt7e2Ftb3VudH19IFNZUCdcbiAgfSxcbiAgWkFSOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdSIHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdSIHt7YW1vdW50fX0gWkFSJ1xuICB9LFxuICBLUlc6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJyYjODM2MTt7e2Ftb3VudF9ub19kZWNpbWFsc319JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnJiM4MzYxO3t7YW1vdW50X25vX2RlY2ltYWxzfX0gS1JXJ1xuICB9LFxuICBMS1I6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ1JzIHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdScyB7e2Ftb3VudH19IExLUidcbiAgfSxcbiAgU0VLOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudF9ub19kZWNpbWFsc319IGtyJyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnRfbm9fZGVjaW1hbHN9fSBrciBTRUsnXG4gIH0sXG4gIENIRjoge1xuICAgICdtb25leV9mb3JtYXQnOiAnU0ZyLiB7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnU0ZyLiB7e2Ftb3VudH19IENIRidcbiAgfSxcbiAgVFdEOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICcke3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJyR7e2Ftb3VudH19IFRXRCdcbiAgfSxcbiAgVEhCOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudH19ICYjeGUzZjsnLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICd7e2Ftb3VudH19ICYjeGUzZjsgVEhCJ1xuICB9LFxuICBUWlM6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ3t7YW1vdW50fX0gVFpTJyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnR9fSBUWlMnXG4gIH0sXG4gIFRURDoge1xuICAgICdtb25leV9mb3JtYXQnOiAnJHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICcke3thbW91bnR9fSBUVEQnXG4gIH0sXG4gIFRORDoge1xuICAgICdtb25leV9mb3JtYXQnOiAne3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ3t7YW1vdW50fX0gRFQnXG4gIH0sXG4gIFRSWToge1xuICAgICdtb25leV9mb3JtYXQnOiAne3thbW91bnR9fVRMJyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnR9fVRMJ1xuICB9LFxuICBVR1g6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ1VzaCB7e2Ftb3VudF9ub19kZWNpbWFsc319JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnVXNoIHt7YW1vdW50X25vX2RlY2ltYWxzfX0gVUdYJ1xuICB9LFxuICBVQUg6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ+KCtHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICfigrR7e2Ftb3VudH19IFVBSCdcbiAgfSxcbiAgQUVEOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdEaHMuIHt7YW1vdW50fX0nLFxuICAgICdtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdCc6ICdEaHMuIHt7YW1vdW50fX0gQUVEJ1xuICB9LFxuICBVWVU6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJyR7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnJHt7YW1vdW50X3dpdGhfY29tbWFfc2VwYXJhdG9yfX0gVVlVJ1xuICB9LFxuICBWVVY6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJyR7e2Ftb3VudH19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnJHt7YW1vdW50fX1WVCdcbiAgfSxcbiAgVkVGOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICdCcy4ge3thbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3J9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0JzLiB7e2Ftb3VudF93aXRoX2NvbW1hX3NlcGFyYXRvcn19IFZFRidcbiAgfSxcbiAgVk5EOiB7XG4gICAgJ21vbmV5X2Zvcm1hdCc6ICd7e2Ftb3VudF9ub19kZWNpbWFsc193aXRoX2NvbW1hX3NlcGFyYXRvcn19JiM4MzYzOycsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ3t7YW1vdW50X25vX2RlY2ltYWxzX3dpdGhfY29tbWFfc2VwYXJhdG9yfX0gVk5EJ1xuICB9LFxuICBYQlQ6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ3t7YW1vdW50X25vX2RlY2ltYWxzfX0gQlRDJyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAne3thbW91bnRfbm9fZGVjaW1hbHN9fSBCVEMnXG4gIH0sXG4gIFhPRjoge1xuICAgICdtb25leV9mb3JtYXQnOiAnQ0ZBe3thbW91bnR9fScsXG4gICAgJ21vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0JzogJ0NGQXt7YW1vdW50fX0gWE9GJ1xuICB9LFxuICBaTVc6IHtcbiAgICAnbW9uZXlfZm9ybWF0JzogJ0t7e2Ftb3VudF9ub19kZWNpbWFsc193aXRoX2NvbW1hX3NlcGFyYXRvcn19JyxcbiAgICAnbW9uZXlfd2l0aF9jdXJyZW5jeV9mb3JtYXQnOiAnWk1Xe3thbW91bnRfbm9fZGVjaW1hbHNfd2l0aF9jb21tYV9zZXBhcmF0b3J9fSdcbiAgfVxufTtcblxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgdG8gYSBzcGVjaWZpYyBmb3JtYXRcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbnVtYmVyIC0gVmFsdWUgdG8gZm9ybWF0XG4gKiBAcGFyYW0ge051bWJlcn0gcHJlY2lzaW9uIC0gQW1vdW50IG9mIGRlY2ltYWwgcG9pbnRzIHRvIHNob3dcbiAqIEBwYXJhbSB7U3RyaW5nfSB0aG91c2FuZHMgLSBUaG91c2FuZHMgZGVsaW1pdGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gZGVjaW1hbCAtIERlY2ltYWwgZGVsaW1pdGVyXG4gKiBAcmV0dXJucyB7U3RyaW5nfE51bWJlcn1cbiAqL1xuZnVuY3Rpb24gZm9ybWF0V2l0aERlbGltaXRlcnMobnVtYmVyKSB7XG4gIHZhciBwcmVjaXNpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDI7XG4gIHZhciB0aG91c2FuZHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICcsJztcbiAgdmFyIGRlY2ltYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6ICcuJztcblxuICBpZiAoaXNOYU4obnVtYmVyKSB8fCAhbnVtYmVyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB2YXIgcHJlY2lzZU51bWJlciA9IChudW1iZXIgLyAxMDAuMCkudG9GaXhlZChwcmVjaXNpb24pO1xuXG4gIHZhciBwYXJ0cyA9IHByZWNpc2VOdW1iZXIuc3BsaXQodGhvdXNhbmRzKTtcbiAgdmFyIGRvbGxhcnNBbW91bnQgPSBwYXJ0c1swXS5yZXBsYWNlKC8oXFxkKSg/PShcXGRcXGRcXGQpKyg/IVxcZCkpL2csICckMScgKyB0aG91c2FuZHMpO1xuICB2YXIgY2VudHNBbW91bnQgPSBwYXJ0c1sxXSA/IGRlY2ltYWwgKyBwYXJ0c1sxXSA6ICcnO1xuXG4gIHJldHVybiBkb2xsYXJzQW1vdW50ICsgY2VudHNBbW91bnQ7XG59XG5cbi8qKlxuICogQ29udmVydCBhIG1vbmV5IHZhbHVlIGluIGNlbnRzIHRvIGEgZm9ybWF0dGVkIGN1cnJlbmN5IHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gY2VudHNcbiAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXRcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdE1vbmV5KGNlbnRzLCBmb3JtYXQpIHtcbiAgaWYgKHR5cGVvZiBjZW50cyA9PT0gJ3N0cmluZycpIHtcbiAgICBjZW50cyA9IGNlbnRzLnJlcGxhY2UoJy4nLCAnJyk7XG4gIH1cblxuICB2YXIgdmFsdWUgPSAnJztcbiAgdmFyIHBsYWNlaG9sZGVyUmVnZXggPSAvXFx7XFx7XFxzKihcXHcrKVxccypcXH1cXH0vO1xuXG4gIHN3aXRjaCAoZm9ybWF0Lm1hdGNoKHBsYWNlaG9sZGVyUmVnZXgpWzFdKSB7XG4gICAgY2FzZSAnYW1vdW50JzpcbiAgICAgIHZhbHVlID0gZm9ybWF0V2l0aERlbGltaXRlcnMoY2VudHMsIDIsICcsJywgJy4nKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Ftb3VudF93aXRoX3NwYWNlX3NlcGFyYXRvcic6XG4gICAgICB2YWx1ZSA9IGZvcm1hdFdpdGhEZWxpbWl0ZXJzKGNlbnRzLCAyLCAnICcsICcuJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdhbW91bnRfd2l0aF9jb21tYV9zZXBhcmF0b3InOlxuICAgICAgdmFsdWUgPSBmb3JtYXRXaXRoRGVsaW1pdGVycyhjZW50cywgMiwgJy4nLCAnLCcpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYW1vdW50X3dpdGhfYXBvc3Ryb3BoZV9zZXBhcmF0b3InOlxuICAgICAgdmFsdWUgPSBmb3JtYXRXaXRoRGVsaW1pdGVycyhjZW50cywgMiwgJ1xcJycsICcuJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdhbW91bnRfbm9fZGVjaW1hbHMnOlxuICAgICAgdmFsdWUgPSBmb3JtYXRXaXRoRGVsaW1pdGVycyhjZW50cywgMCwgJywnLCAnLicpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYW1vdW50X25vX2RlY2ltYWxzX3dpdGhfc3BhY2Vfc2VwYXJhdG9yJzpcbiAgICAgIHZhbHVlID0gZm9ybWF0V2l0aERlbGltaXRlcnMoY2VudHMsIDAsICcgJywgJy4nKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Ftb3VudF9ub19kZWNpbWFsc193aXRoX2NvbW1hX3NlcGFyYXRvcic6XG4gICAgICB2YWx1ZSA9IGZvcm1hdFdpdGhEZWxpbWl0ZXJzKGNlbnRzLCAwLCAnLCcsICcuJyk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBmb3JtYXQucmVwbGFjZShwbGFjZWhvbGRlclJlZ2V4LCB2YWx1ZSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB2YWx1ZSBvZiBtb25leSBpbiBjZW50cyB2YWx1ZVxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtb25leUFtb3VudCAtIE1vbmV5IHZhbHVlIG9mIGEgcHJpY2VcbiAqICAgICAgICAgICAgICAgICBlZzogMTAwMFxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIFNob3AgZm9ybWF0dGluZyBvZiBhIHByaWNlXG4gKiAgICAgICAgICAgICAgICAgZWc6IHt7YW1vdW50fX1cbiAqIEBwYXJhbSB7U3RyaW5nfSBjdXJyZW5jeSAtIEN1cnJlbmN5IG9mIGEgcHJpY2VcbiAqICAgICAgICAgICAgICAgICBlZzogJ0NBRCdcbiAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRDZW50c1ZhbHVlKG1vbmV5QW1vdW50LCBmb3JtYXQsIGN1cnJlbmN5KSB7XG4gIHZhciBjZW50cyA9IDA7XG4gIC8vIENvbnZlcnQgcHJpY2VzIGZyb20gZmxvYXQgdmFsdWVzIHRvIGludGVnZXJzIGlmIG5lZWRlZCwgdGhlbiBjb252ZXJ0XG4gIGlmIChmb3JtYXQuaW5kZXhPZignYW1vdW50X25vX2RlY2ltYWxzJykgIT09IC0xKSB7XG4gICAgY2VudHMgPSBtb25leUFtb3VudCAqIDEwMDtcbiAgfSBlbHNlIGlmIChjdXJyZW5jeSA9PT0gJ0pPRCcgfHwgY3VycmVuY3kgPT09ICdLV0QnIHx8IGN1cnJlbmN5ID09PSAnQkhEJykge1xuICAgIGNlbnRzID0gbW9uZXlBbW91bnQgLyAxMDtcbiAgfSBlbHNlIHtcbiAgICBjZW50cyA9IG1vbmV5QW1vdW50O1xuICB9XG5cbiAgcmV0dXJuIGNlbnRzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGZvcm1hdHRlZCBtb25leSB0byBhIG51bWJlclxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gcHJpY2VFbFxuICogQHJldHVybnMge051bWJlcnxTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldE1vbmV5VmFsdWUocHJpY2VFbCkge1xuICB2YXIgcHJpY2UgPSBwcmljZUVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jdXJyZW5jeS1vcmlnaW5hbCcpIHx8IHByaWNlRWwudGV4dENvbnRlbnQ7XG4gIHZhciB2YWx1ZSA9IHBhcnNlSW50KHByaWNlLnJlcGxhY2UoL1teMC05XS9nLCAnJyksIDEwKTtcblxuICByZXR1cm4gIWlzTmFOKHZhbHVlKSA/IHZhbHVlIDogJyc7XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cbnZhciBDdXJyZW5jeUNvbnZlcnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ3VycmVuY3lDb252ZXJ0ZXIoKSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgQ3VycmVuY3lDb252ZXJ0ZXIpO1xuXG4gICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgIHN3aXRjaGVyU2VsZWN0b3I6ICdbZGF0YS1jdXJyZW5jeS1jb252ZXJ0ZXJdJyxcbiAgICAgIHByaWNlU2VsZWN0b3I6ICcubW9uZXknLFxuICAgICAgc2hvcEN1cnJlbmN5OiAnJyxcbiAgICAgIGRlZmF1bHRDdXJyZW5jeTogJycsXG4gICAgICBkaXNwbGF5Rm9ybWF0OiAnJyxcbiAgICAgIG1vbmV5Rm9ybWF0OiAnJyxcbiAgICAgIG1vbmV5Rm9ybWF0Tm9DdXJyZW5jeTogJycsXG4gICAgICBtb25leUZvcm1hdEN1cnJlbmN5OiAnJ1xuICAgIH07XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLm1vbmV5Rm9ybWF0cyA9IG1vbmV5Rm9ybWF0cztcbiAgICB0aGlzLnN0b3JhZ2UgPSAnY3VycmVuY3knO1xuICAgIHRoaXMuY3VycmVudEN1cnJlbmN5ID0gbnVsbDtcbiAgICB0aGlzLmlzSW5pdGlhbGlzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIEN1cnJlbmN5Q29udmVydGVyXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5nc1xuICAgKiBAcHJvcGVydHkge09iamVjdH0gc2V0dGluZ3NcbiAgICogICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZm9yIEN1cnJlbmN5Q29udmVydGVyXG4gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzZXR0aW5ncy5zd2l0Y2hlclNlbGVjdG9yXG4gICAqICAgICAgICAgICAgICAgICAgICBDU1MgU2VsZWN0b3IgZm9yIGRyb3Bkb3duKHMpIHdoaWNoIGNvbnRyb2xzIGN1cnJlbmN5IGNvbnZlcnNpb25cbiAgICogQHByb3BlcnR5IHtTdHJpbmd9IHNldHRpbmdzLnByaWNlU2VsZWN0b3JcbiAgICogICAgICAgICAgICAgICAgICAgIENTUyBTZWxlY3RvciBmb3IgZWxlbWVudHMgY29udGFpbmluZyBwcmljZXNcbiAgICogQHByb3BlcnR5IHtTdHJpbmd9IHNldHRpbmdzLnNob3BDdXJyZW5jeVxuICAgKiAgICAgICAgICAgICAgICAgICAgU2hvcCdzIGN1cnJlbmN5IChUaGUgY3VycmVuY3kgdXNlZCB0byBwcm9jZXNzIHRyYW5zYWN0aW9ucylcbiAgICogQHByb3BlcnR5IHtTdHJpbmd9IHNldHRpbmdzLmRlZmF1bHRDdXJyZW5jeVxuICAgKiAgICAgICAgICAgICAgICAgICAgVGhlbWUncyBjdXJyZW5jeSBzZXR0aW5nLCBvciBpbml0aWFsIGN1cnJlbmN5IHRvIHNob3cgb24gdGhlIHBhZ2VcbiAgICogQHByb3BlcnR5IHtTdHJpbmd9IHNldHRpbmdzLmRpc3BsYXlGb3JtYXRcbiAgICogICAgICAgICAgICAgICAgICAgIGBtb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdGAgb3IgYG1vbmV5X2Zvcm1hdGBcbiAgICogQHByb3BlcnR5IHtTdHJpbmd9IHNldHRpbmdzLm1vbmV5Rm9ybWF0XG4gICAqICAgICAgICAgICAgICAgICAgICBTaG9wJ3MgY3VycmVuY3kgZm9ybWF0dGVkIHVzaW5nIHRoZSBzZWxlY3RlZCBkaXNwbGF5IGZvcm1hdFxuICAgKiBAcHJvcGVydHkge1N0cmluZ30gc2V0dGluZ3MubW9uZXlGb3JtYXROb0N1cnJlbmN5XG4gICAqICAgICAgICAgICAgICAgICAgICBTaG9wJ3MgY3VycmVuY3kgZm9ybWF0dGVkIHdpdGhvdXQgc2hvd2luZyBjdXJyZW5jeSBjb2RlXG4gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzZXR0aW5ncy5tb25leUZvcm1hdEN1cnJlbmN5XG4gICAqICAgICAgICAgICAgICAgICAgICBTaG9wJ3MgY3VycmVuY3kgZm9ybWF0dGVkIHNob3dpbmcgY3VycmVuY3kgY29kZVxuICAgKi9cblxuXG4gIGNyZWF0ZUNsYXNzKEN1cnJlbmN5Q29udmVydGVyLCBbe1xuICAgIGtleTogJ2luaXQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KHNldHRpbmdzKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoIXdpbmRvdy5DdXJyZW5jeSB8fCB0aGlzLmlzSW5pdGlhbGlzZWQpIHJldHVybjtcblxuICAgICAgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF90aGlzLm9wdGlvbnNba2V5XSA9IHNldHRpbmdzW2tleV0gfHwgX3RoaXMuZGVmYXVsdHNba2V5XTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmN1cnJlbnRDdXJyZW5jeSA9IHRoaXMuX2dldFN0b3JlZEN1cnJlbmN5KCkgfHwgdGhpcy5vcHRpb25zLmRlZmF1bHRDdXJyZW5jeTtcbiAgICAgIHRoaXMubW9uZXlGb3JtYXRzW3RoaXMub3B0aW9ucy5zaG9wQ3VycmVuY3ldLm1vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0ID0gdGhpcy5vcHRpb25zLm1vbmV5Rm9ybWF0Q3VycmVuY3k7XG4gICAgICB0aGlzLm1vbmV5Rm9ybWF0c1t0aGlzLm9wdGlvbnMuc2hvcEN1cnJlbmN5XS5tb25leV9mb3JtYXQgPSB0aGlzLm9wdGlvbnMubW9uZXlGb3JtYXROb0N1cnJlbmN5O1xuXG4gICAgICB0aGlzLmlzSW5pdGlhbGlzZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fY3VycmVudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgY3VycmVuY3kgdG8gYSBuZXcgY3VycmVuY3kgdXNpbmcgYW4gSVNPIGN1cnJlbmN5IGNvZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuZXdDdXJyZW5jeSAtIE5ldyBjdXJyZW5jeSB0byBjb252ZXJ0IHByaWNlcyB0b1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdzZXRDdXJyZW5jeScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldEN1cnJlbmN5KG5ld0N1cnJlbmN5KSB7XG4gICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXNlZCkgcmV0dXJuO1xuXG4gICAgICB0aGlzLl9jb252ZXJ0QWxsKG5ld0N1cnJlbmN5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYSBwcmljZSBvbiB0aGUgcGFnZSBmcm9tIHNob3AgY3VycmVuY3kgdG8gdGhlIGFjdGl2ZSBjdXJyZW5jeSwgYW5kIGZvcm1hdHRpbmdcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcmljZUVsIHtIVE1MRWxlbWVudH0gLSBlbGVtZW50IGNvbnRhaW5pbmcgcHJpY2UgdGV4dCwgaW4gdGhlIHNob3AgY3VycmVuY3lcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAndXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlKHByaWNlRWwpIHtcbiAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpc2VkKSByZXR1cm47XG5cbiAgICAgIC8vIHVuc2V0IGFueSBzdG9yZWQgcHJldmlvdXMgY29udmVyc2lvbnMgYW5kIHRoZSBkYXRhLWN1cnJlbmN5IGF0dHJpYnV0ZSBpdHNlbGZcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gcHJpY2VFbC5hdHRyaWJ1dGVzO1xuICAgICAgZm9yICh2YXIgYXR0ciA9IDA7IGF0dHIgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgYXR0cisrKSB7XG4gICAgICAgIHZhciBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2F0dHJdO1xuXG4gICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZS5pbmRleE9mKCdkYXRhLWN1cnJlbmN5JykgPT09IDApIHtcbiAgICAgICAgICBwcmljZUVsLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUubmFtZSwgJycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbnZlcnRFbChwcmljZUVsLCB0aGlzLmN1cnJlbnRDdXJyZW5jeSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBzdG9yZWQgY3VycmVuY3kgZnJvbSB0aGUgY2xpZW50J3MgYnJvd3NlclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnX2dldFN0b3JlZEN1cnJlbmN5JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2dldFN0b3JlZEN1cnJlbmN5KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oZXJyb3IpO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRlZmF1bHRDdXJyZW5jeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlIHRoZSBjbGllbnQncyBjdXJyZW5jeSBpbiBsb2NhbHN0b3JhZ2UgZm9yIHBlcnNpc3RlbmNlIGFjcm9zcyBwYWdlc1xuICAgICAqIGFuZCBzZXNzaW9uc1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjdXJyZW5jeVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ19zZXRTdG9yZWRDdXJyZW5jeScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXRTdG9yZWRDdXJyZW5jeShjdXJyZW5jeSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlLCBjdXJyZW5jeSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgY3VycmVuY3kgc3dpdGNoZXIgdG8gdGhlIGN1cnJlbnQgY3VycmVuY3lcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfY3VycmVudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jdXJyZW50KCkge1xuICAgICAgdmFyIHN3aXRjaGVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5vcHRpb25zLnN3aXRjaGVyU2VsZWN0b3IpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2l0Y2hlcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyIHN3aXRjaGVyID0gc3dpdGNoZXJzW2ldO1xuICAgICAgICB2YXIgY2hpbGRyZW5FbHMgPSBzd2l0Y2hlci5xdWVyeVNlbGVjdG9yQWxsKCdvcHRpb24nKTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkcmVuRWxzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgdmFyIG9wdGlvbkVsID0gY2hpbGRyZW5FbHNbal07XG5cbiAgICAgICAgICBpZiAob3B0aW9uRWwuc2VsZWN0ZWQgJiYgb3B0aW9uRWwudmFsdWUgIT09IHRoaXMuY3VycmVudEN1cnJlbmN5KSB7XG4gICAgICAgICAgICBvcHRpb25FbC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcHRpb25FbC52YWx1ZSA9PT0gdGhpcy5jdXJyZW50Q3VycmVuY3kpIHtcbiAgICAgICAgICAgIG9wdGlvbkVsLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY29udmVydEFsbCh0aGlzLmN1cnJlbnRDdXJyZW5jeSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYW4gaW5kaXZpZHVhbCBwcmljZSB0byB0aGUgbmV3IGZvcm1hdFxuICAgICAqXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBwcmljZUVsIC0gTm9kZSBlbGVtZW50IGNvbnRhaW5pbmcgcHJpY2VcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb2xkQ3VycmVuY3kgLSBDdXJyZW5jeSBvZiBlbGVtZW50IGNvbnZlcnRpbmcgZnJvbVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuZXdDdXJyZW5jeSAtIEN1cnJlbmN5IHRvIGNvbnZlcnQgdG9cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6ICdfY29udmVydEVsJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NvbnZlcnRFbChwcmljZUVsLCBuZXdDdXJyZW5jeSkge1xuICAgICAgdmFyIG9sZEN1cnJlbmN5ID0gdGhpcy5vcHRpb25zLnNob3BDdXJyZW5jeTtcbiAgICAgIC8vIElmIHRoZSBhbW91bnQgaGFzIGFscmVhZHkgYmVlbiBjb252ZXJ0ZWQsIHdlIGxlYXZlIGl0IGFsb25lLlxuICAgICAgaWYgKHByaWNlRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWN1cnJlbmN5JykgPT09IG5ld0N1cnJlbmN5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgYXJlIGNvbnZlcnRpbmcgdG8gYSBjdXJyZW5jeSB0aGF0IHdlIGhhdmUgc2F2ZWQsIHdlIHdpbGwgdXNlIHRoZSBzYXZlZCBhbW91bnQuXG4gICAgICBpZiAocHJpY2VFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY3VycmVuY3ktJyArIG5ld0N1cnJlbmN5KSkge1xuICAgICAgICBwcmljZUVsLmlubmVySFRNTCA9IHByaWNlRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWN1cnJlbmN5LScgKyBuZXdDdXJyZW5jeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb2xkRm9ybWF0ID0gdGhpcy5tb25leUZvcm1hdHNbb2xkQ3VycmVuY3ldW3RoaXMub3B0aW9ucy5kaXNwbGF5Rm9ybWF0XTtcbiAgICAgICAgdmFyIG5ld0Zvcm1hdCA9IHRoaXMubW9uZXlGb3JtYXRzW25ld0N1cnJlbmN5XVt0aGlzLm9wdGlvbnMuZGlzcGxheUZvcm1hdF07XG5cbiAgICAgICAgdmFyIG1vbmV5VmFsdWUgPSBnZXRNb25leVZhbHVlKHByaWNlRWwpO1xuICAgICAgICB2YXIgY2VudHNWYWx1ZSA9IGdldENlbnRzVmFsdWUobW9uZXlWYWx1ZSwgb2xkRm9ybWF0LCBvbGRDdXJyZW5jeSk7XG5cbiAgICAgICAgLy8gQ2VudHMgdmFsdWUgaXMgZW1wdHksIGJ1dCBub3QgMC4gMCQgaXMgYSB2YWxpZCBwcmljZSwgd2hpbGUgZW1wdHkgaXMgbm90XG4gICAgICAgIGlmIChjZW50c1ZhbHVlID09PSAnJykgcmV0dXJuO1xuXG4gICAgICAgIHZhciBjZW50cyA9IHdpbmRvdy5DdXJyZW5jeS5jb252ZXJ0KGNlbnRzVmFsdWUsIG9sZEN1cnJlbmN5LCBuZXdDdXJyZW5jeSk7XG4gICAgICAgIHZhciBvbGRQcmljZUZvcm1hdHRlZCA9IGZvcm1hdE1vbmV5KGNlbnRzVmFsdWUsIG9sZEZvcm1hdCk7XG4gICAgICAgIHZhciBwcmljZUZvcm1hdHRlZCA9IGZvcm1hdE1vbmV5KGNlbnRzLCBuZXdGb3JtYXQpO1xuXG4gICAgICAgIGlmICghcHJpY2VFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY3VycmVuY3ktb3JpZ2luYWwnKSkge1xuICAgICAgICAgIHByaWNlRWwuc2V0QXR0cmlidXRlKCdkYXRhLWN1cnJlbmN5LW9yaWdpbmFsJywgb2xkUHJpY2VGb3JtYXR0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpY2VFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY3VycmVuY3ktJyArIG9sZEN1cnJlbmN5LCBvbGRQcmljZUZvcm1hdHRlZCk7XG4gICAgICAgIHByaWNlRWwuc2V0QXR0cmlidXRlKCdkYXRhLWN1cnJlbmN5LScgKyBuZXdDdXJyZW5jeSwgcHJpY2VGb3JtYXR0ZWQpO1xuICAgICAgICBwcmljZUVsLmlubmVySFRNTCA9IHByaWNlRm9ybWF0dGVkO1xuICAgICAgfVxuXG4gICAgICBwcmljZUVsLnNldEF0dHJpYnV0ZSgnZGF0YS1jdXJyZW5jeScsIG5ld0N1cnJlbmN5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGFsbCBwcmljZXMgb24gdGhlIHBhZ2UgdG8gdGhlIG5ldyBjdXJyZW5jeVxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG9sZEN1cnJlbmN5IC0gQ3VycmVuY3kgb2YgZWxlbWVudCBjb252ZXJ0aW5nIGZyb21cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmV3Q3VycmVuY3kgLSBDdXJyZW5jeSB0byBjb252ZXJ0IHRvXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiAnX2NvbnZlcnRBbGwnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY29udmVydEFsbChuZXdDdXJyZW5jeSkge1xuICAgICAgdmFyIHByaWNlRWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMucHJpY2VTZWxlY3Rvcik7XG4gICAgICBpZiAoIXByaWNlRWxzKSByZXR1cm47XG5cbiAgICAgIHRoaXMuY3VycmVudEN1cnJlbmN5ID0gbmV3Q3VycmVuY3k7XG4gICAgICB0aGlzLl9zZXRTdG9yZWRDdXJyZW5jeShuZXdDdXJyZW5jeSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJpY2VFbHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdGhpcy5fY29udmVydEVsKHByaWNlRWxzW2ldLCBuZXdDdXJyZW5jeSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBDdXJyZW5jeUNvbnZlcnRlcjtcbn0oKTtcblxudmFyIHNpbmdsZXRvbkluc3RhbmNlID0gbmV3IEN1cnJlbmN5Q29udmVydGVyKCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHNpbmdsZXRvbkluc3RhbmNlO1xuZXhwb3J0cy5DdXJyZW5jeUNvbnZlcnRlciA9IEN1cnJlbmN5Q29udmVydGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/shopify-currency-converter/dist/index.js\n") },
vendor: 36,596 bytes, line 1
1"./node_modules/shopify-variants/dist/shopify-variants.es.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n\n/*!\n * shopify-variants v1.4.1\n * (c) 2019 Pixel Union\n */\n\n\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError("Invalid attempt to spread non-iterable instance");\n}\n\nvar Node =\n/*#__PURE__*/\nfunction () {\n function Node(variant) {\n _classCallCheck(this, Node);\n\n this.variant = variant;\n this.optionsCount = this.variant.options.length;\n this.neighbors = [];\n\n for (var i = 0; i < this.optionsCount; i++) {\n this.neighbors.push([]);\n }\n }\n\n _createClass(Node, [{\n key: "addNeighbor",\n value: function addNeighbor(variant) {\n for (var i = 0; i < this.optionsCount; i++) {\n if (this.variant.options[i] !== variant.options[i]) {\n this.neighbors[i].push(variant);\n break;\n }\n }\n }\n }, {\n key: "getValidOptions",\n value: function getValidOptions() {\n var _this = this;\n\n var options = [];\n\n var _loop = function _loop(i) {\n var variants = [_this.variant].concat(_toConsumableArray(_this.neighbors[i]));\n options[i] = {};\n variants.forEach(function (item) {\n var variant = item;\n var option = variant.options[i];\n options[i][option] = {\n available: options[i][option] && options[i][option].available || variant.available\n };\n });\n };\n\n for (var i = 0; i < this.optionsCount; i++) {\n _loop(i);\n }\n\n return options;\n }\n }]);\n\n return Node;\n}();\n\nfunction getVariantFromOptions(variants, options) {\n var variant = null;\n variants.forEach(function (potentialVariant) {\n var found = true;\n\n for (var i = 0; i < potentialVariant.options.length; i++) {\n if (options[i] !== potentialVariant.options[i]) {\n found = false;\n }\n }\n\n if (found) {\n variant = potentialVariant;\n }\n });\n return variant || false;\n}\n\nfunction getClosestVariantFromOptions(variants, options) {\n var closestVariant = null;\n var matchingValues = 0;\n variants.forEach(function (variant) {\n var tempMatchingValues = 0;\n\n for (var i = 0; i < variant.options.length; i++) {\n if (options[i] === variant.options[i]) {\n tempMatchingValues++;\n } else {\n break;\n }\n }\n\n if (tempMatchingValues >= matchingValues) {\n closestVariant = variant;\n matchingValues = tempMatchingValues;\n }\n });\n return closestVariant || false;\n}\n\nfunction getVariantOrClosestFromOptions(variants, options) {\n return getVariantFromOptions(variants, options) || getClosestVariantFromOptions(variants, options);\n}\n\nfunction getAvailableOptionsFromVariant(variants, variant) {\n var nodeMap = {};\n variants.forEach(function (v) {\n nodeMap[v.id] = new Node(v);\n variants.forEach(function (v2) {\n nodeMap[v.id].addNeighbor(v2);\n });\n });\n return nodeMap[variant.id].getValidOptions();\n}\n\nvar Variants =\n/*#__PURE__*/\nfunction () {\n function Variants(product, $variants, $options, config) {\n var _this = this;\n\n _classCallCheck(this, Variants);\n\n var defaultConfig = {\n disableUnavailableVariants: false,\n switchCallback: function switchCallback() {},\n mixedControls: false,\n optionDataAttribute: \'data-product-option\'\n };\n this.optionsTypes = {\n select: \'select\',\n radio: \'input[type="radio"]\'\n };\n this.events = [];\n this.product = product;\n this.optionsCount = this.product.options.length;\n this.variants = $variants.get(0);\n this.options = $options.get();\n this.selectOptions = this.options.filter(function (option) {\n return option.matches(_this.optionsTypes.select);\n });\n this.radioOptions = this.options.filter(function (option) {\n return option.matches(_this.optionsTypes.radio);\n });\n this.config = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(defaultConfig, config);\n\n if (this.selectOptions.length === 0 && this.radioOptions.length === 0) {\n console.warn(\'Shopify Variants: Option set is not a valid type\');\n }\n\n this._bindEvents();\n\n this._switchVariant(this._getSelectedOptions(), true);\n }\n\n _createClass(Variants, [{\n key: "isDefault",\n value: function isDefault() {\n return this.product.variants[0].public_title === null;\n }\n }, {\n key: "getSelectedVariant",\n value: function getSelectedVariant() {\n if (this.isDefault()) {\n return this.product.variants[0];\n }\n\n return getVariantFromOptions(this.product.variants, this._getSelectedOptions());\n }\n }, {\n key: "unload",\n value: function unload() {\n this._unbindEvents();\n }\n }, {\n key: "_bindEvents",\n value: function _bindEvents() {\n var _this2 = this;\n\n for (var i = 0; i < this.options.length; i++) {\n var option = this.options[i];\n\n var fn = function fn(event) {\n var target = event.target;\n\n if (_this2.config.mixedControls) {\n _this2._switchVariant(_this2._getSelectedOptionsMixed());\n } else if (target.matches(_this2.optionsTypes.select)) {\n _this2._switchVariant(_this2._getSelectedOptionsSelect());\n } else if (target.matches(_this2.optionsTypes.radio)) {\n _this2._switchVariant(_this2._getSelectedOptionsRadio());\n }\n };\n\n option.addEventListener(\'change\', fn);\n this.events.push({\n el: option,\n fn: fn\n });\n }\n }\n }, {\n key: "_unbindEvents",\n value: function _unbindEvents() {\n this.events.forEach(function (_ref) {\n var el = _ref.el,\n fn = _ref.fn;\n return el.removeEventListener(\'change\', fn);\n });\n }\n }, {\n key: "_getSelectedOptions",\n value: function _getSelectedOptions() {\n // Note that we only support 1 mixed set of controls, or multiple complete sets\n // of selects and/or radios but not multiple mixed sets.\n if (this.config.mixedControls) {\n return this._getSelectedOptionsMixed();\n } // If multiple complete sets are present, we can can/do assume that all controls\n // are in sync, because shopify-variants keeps them that way.\n\n\n if (this.selectOptions.length > 0) {\n return this._getSelectedOptionsSelect();\n }\n\n if (this.radioOptions.length > 0) {\n return this._getSelectedOptionsRadio();\n }\n\n return [];\n }\n }, {\n key: "_getSelectedOptionsMixed",\n value: function _getSelectedOptionsMixed() {\n var options = [];\n this.selectOptions.forEach(function (option) {\n var optionNumber = parseInt(option.dataset.productOption, 10);\n options[optionNumber] = option.value;\n });\n this.radioOptions.forEach(function (option) {\n if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(option).is(\':checked\')) {\n var optionNumber = parseInt(option.dataset.productOption, 10);\n options[optionNumber] = option.value;\n }\n });\n return options;\n }\n }, {\n key: "_getSelectedOptionsSelect",\n value: function _getSelectedOptionsSelect() {\n var options = [];\n\n for (var i = 0; i < this.selectOptions.length; i++) {\n var option = this.selectOptions[i];\n options.push(option.value);\n }\n\n return options;\n }\n }, {\n key: "_getSelectedOptionsRadio",\n value: function _getSelectedOptionsRadio() {\n var options = [];\n\n for (var i = 0; i < this.radioOptions.length; i++) {\n var option = this.radioOptions[i];\n\n if (option.checked) {\n options.push(option.value);\n }\n }\n\n return options;\n }\n }, {\n key: "selectVariant",\n value: function selectVariant(id) {\n var targetVariant = this.product.variants.filter(function (variant) {\n return variant.id === id;\n })[0];\n\n if (targetVariant) {\n this._switchVariant(targetVariant.options);\n }\n }\n }, {\n key: "_switchVariant",\n value: function _switchVariant() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._getSelectedOptions();\n var firstLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var product = this.product;\n var variant = null;\n var availableOptions = null;\n variant = getVariantOrClosestFromOptions(product.variants, options);\n\n if (!variant) {\n return;\n }\n\n availableOptions = getAvailableOptionsFromVariant(product.variants, variant);\n\n this._switchVariantSelect(variant, availableOptions);\n\n this._switchVariantRadio(variant, availableOptions);\n\n this.variants.value = variant.id; // Trigger event, IE11 compatible but could be deprecated in the future\n\n var event = document.createEvent(\'Event\');\n event.initEvent(\'change\', true, false);\n this.variants.dispatchEvent(event);\n var data = {\n product: product,\n variant: variant,\n firstLoad: firstLoad\n };\n this.config.switchCallback(data);\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).trigger(\'shopify-variants:switch-variant\', data);\n }\n }, {\n key: "_switchVariantSelect",\n value: function _switchVariantSelect(variant, availableOptions) {\n if (this.selectOptions.length === 0) {\n return;\n } // Iterate over each option type\n\n\n for (var i = 0; i < this.product.options.length; i++) {\n // Corresponding select dropdown, if it exists\n var input = null;\n\n if (this.config.mixedControls) {\n for (var j = 0; j < this.selectOptions.length; j++) {\n var option = this.selectOptions[j];\n\n if (option.matches("[".concat(this.config.optionDataAttribute, "=\\"").concat(i, "\\"]"))) {\n input = option;\n break;\n }\n }\n } else {\n // For non-mixed controls, we assume select elements match the order and number of options\n input = this.selectOptions[i];\n }\n\n if (input) {\n // Iterate over each option on dropdown\n var options = input.querySelectorAll(\'option\');\n\n for (var _j = 0; _j < options.length; _j++) {\n var _option = options[_j];\n var value = _option.value; // Not an available option\n\n _option.disabled = !availableOptions[i][value] || !availableOptions[i][value].available && this.config.disableUnavailableVariants;\n _option.selected = false; // Dropdown option matches variant option\n\n if (variant.options[i] === value) {\n _option.disabled = false;\n _option.selected = true;\n }\n }\n }\n }\n }\n }, {\n key: "_switchVariantRadio",\n value: function _switchVariantRadio(variant, availableOptions) {\n var _this3 = this;\n\n if (this.radioOptions.length === 0) {\n return;\n }\n\n for (var i = 0; i < this.radioOptions.length; i++) {\n var option = this.radioOptions[i];\n option.disabled = true;\n option.checked = false;\n option.setAttribute(\'data-soldout\', false);\n }\n\n var _loop = function _loop(_i) {\n var selector = encodeURIComponent(_this3.product.options[_i]).replace(/%20/g, \'+\').replace(/[!\'()*]/g, function (_char) {\n return "%".concat(_char.charCodeAt(0).toString(16).toUpperCase());\n });\n\n var options = _this3.radioOptions.filter(function (option) {\n return option.matches("[name=\\"".concat(selector, "\\"]"));\n });\n\n for (var j = 0; j < options.length; j++) {\n var _option2 = options[j];\n\n if (variant.options[_i] === _option2.value) {\n _option2.checked = true;\n }\n\n if (availableOptions[_i][_option2.value]) {\n _option2.disabled = false;\n\n if (!availableOptions[_i][_option2.value].available && _this3.config.disableUnavailableVariants) {\n _option2.disabled = true;\n\n _option2.setAttribute(\'data-soldout\', true);\n }\n }\n }\n };\n\n for (var _i = 0; _i < this.product.options.length; _i++) {\n _loop(_i);\n }\n }\n }]);\n\n return Variants;\n}();\n\n/* harmony default export */ __webpack_exports__["default"] = (Variants);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2hvcGlmeS12YXJpYW50cy9kaXN0L3Nob3BpZnktdmFyaWFudHMuZXMuanM/NWFmZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXVCOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaURBQWlELGdCQUFnQjs7QUFFakU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHVCQUF1QjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHVCQUF1QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQSxxQkFBcUIsdUJBQXVCO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixxQ0FBcUM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsNEJBQTRCO0FBQy9DO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFD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YXJpYW50cy5lcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyohXG4gKiBzaG9waWZ5LXZhcmlhbnRzIHYxLjQuMVxuICogKGMpIDIwMTkgUGl4ZWwgVW5pb25cbiAqL1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfVxufVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXIpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG59XG5cbnZhciBOb2RlID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTm9kZSh2YXJpYW50KSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE5vZGUpO1xuXG4gICAgdGhpcy52YXJpYW50ID0gdmFyaWFudDtcbiAgICB0aGlzLm9wdGlvbnNDb3VudCA9IHRoaXMudmFyaWFudC5vcHRpb25zLmxlbmd0aDtcbiAgICB0aGlzLm5laWdoYm9ycyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnNDb3VudDsgaSsrKSB7XG4gICAgICB0aGlzLm5laWdoYm9ycy5wdXNoKFtdKTtcbiAgICB9XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTm9kZSwgW3tcbiAgICBrZXk6IFwiYWRkTmVpZ2hib3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkTmVpZ2hib3IodmFyaWFudCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnNDb3VudDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLnZhcmlhbnQub3B0aW9uc1tpXSAhPT0gdmFyaWFudC5vcHRpb25zW2ldKSB7XG4gICAgICAgICAgdGhpcy5uZWlnaGJvcnNbaV0ucHVzaCh2YXJpYW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRWYWxpZE9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsaWRPcHRpb25zKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIG9wdGlvbnMgPSBbXTtcblxuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgdmFyaWFudHMgPSBbX3RoaXMudmFyaWFudF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShfdGhpcy5uZWlnaGJvcnNbaV0pKTtcbiAgICAgICAgb3B0aW9uc1tpXSA9IHt9O1xuICAgICAgICB2YXJpYW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgdmFyIHZhcmlhbnQgPSBpdGVtO1xuICAgICAgICAgIHZhciBvcHRpb24gPSB2YXJpYW50Lm9wdGlvbnNbaV07XG4gICAgICAgICAgb3B0aW9uc1tpXVtvcHRpb25dID0ge1xuICAgICAgICAgICAgYXZhaWxhYmxlOiBvcHRpb25zW2ldW29wdGlvbl0gJiYgb3B0aW9uc1tpXVtvcHRpb25dLmF2YWlsYWJsZSB8fCB2YXJpYW50LmF2YWlsYWJsZVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnNDb3VudDsgaSsrKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTm9kZTtcbn0oKTtcblxuZnVuY3Rpb24gZ2V0VmFyaWFudEZyb21PcHRpb25zKHZhcmlhbnRzLCBvcHRpb25zKSB7XG4gIHZhciB2YXJpYW50ID0gbnVsbDtcbiAgdmFyaWFudHMuZm9yRWFjaChmdW5jdGlvbiAocG90ZW50aWFsVmFyaWFudCkge1xuICAgIHZhciBmb3VuZCA9IHRydWU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvdGVudGlhbFZhcmlhbnQub3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9wdGlvbnNbaV0gIT09IHBvdGVudGlhbFZhcmlhbnQub3B0aW9uc1tpXSkge1xuICAgICAgICBmb3VuZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmb3VuZCkge1xuICAgICAgdmFyaWFudCA9IHBvdGVudGlhbFZhcmlhbnQ7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHZhcmlhbnQgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldENsb3Nlc3RWYXJpYW50RnJvbU9wdGlvbnModmFyaWFudHMsIG9wdGlvbnMpIHtcbiAgdmFyIGNsb3Nlc3RWYXJpYW50ID0gbnVsbDtcbiAgdmFyIG1hdGNoaW5nVmFsdWVzID0gMDtcbiAgdmFyaWFudHMuZm9yRWFjaChmdW5jdGlvbiAodmFyaWFudCkge1xuICAgIHZhciB0ZW1wTWF0Y2hpbmdWYWx1ZXMgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YXJpYW50Lm9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChvcHRpb25zW2ldID09PSB2YXJpYW50Lm9wdGlvbnNbaV0pIHtcbiAgICAgICAgdGVtcE1hdGNoaW5nVmFsdWVzKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGVtcE1hdGNoaW5nVmFsdWVzID49IG1hdGNoaW5nVmFsdWVzKSB7XG4gICAgICBjbG9zZXN0VmFyaWFudCA9IHZhcmlhbnQ7XG4gICAgICBtYXRjaGluZ1ZhbHVlcyA9IHRlbXBNYXRjaGluZ1ZhbHVlcztcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2xvc2VzdFZhcmlhbnQgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFZhcmlhbnRPckNsb3Nlc3RGcm9tT3B0aW9ucyh2YXJpYW50cywgb3B0aW9ucykge1xuICByZXR1cm4gZ2V0VmFyaWFudEZyb21PcHRpb25zKHZhcmlhbnRzLCBvcHRpb25zKSB8fCBnZXRDbG9zZXN0VmFyaWFudEZyb21PcHRpb25zKHZhcmlhbnRzLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gZ2V0QXZhaWxhYmxlT3B0aW9uc0Zyb21WYXJpYW50KHZhcmlhbnRzLCB2YXJpYW50KSB7XG4gIHZhciBub2RlTWFwID0ge307XG4gIHZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICBub2RlTWFwW3YuaWRdID0gbmV3IE5vZGUodik7XG4gICAgdmFyaWFudHMuZm9yRWFjaChmdW5jdGlvbiAodjIpIHtcbiAgICAgIG5vZGVNYXBbdi5pZF0uYWRkTmVpZ2hib3IodjIpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG5vZGVNYXBbdmFyaWFudC5pZF0uZ2V0VmFsaWRPcHRpb25zKCk7XG59XG5cbnZhciBWYXJpYW50cyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFZhcmlhbnRzKHByb2R1Y3QsICR2YXJpYW50cywgJG9wdGlvbnMsIGNvbmZpZykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVmFyaWFudHMpO1xuXG4gICAgdmFyIGRlZmF1bHRDb25maWcgPSB7XG4gICAgICBkaXNhYmxlVW5hdmFpbGFibGVWYXJpYW50czogdHJ1ZSxcbiAgICAgIHN3aXRjaENhbGxiYWNrOiBmdW5jdGlvbiBzd2l0Y2hDYWxsYmFjaygpIHt9LFxuICAgICAgbWl4ZWRDb250cm9sczogZmFsc2UsXG4gICAgICBvcHRpb25EYXRhQXR0cmlidXRlOiAnZGF0YS1wcm9kdWN0LW9wdGlvbidcbiAgICB9O1xuICAgIHRoaXMub3B0aW9uc1R5cGVzID0ge1xuICAgICAgc2VsZWN0OiAnc2VsZWN0JyxcbiAgICAgIHJhZGlvOiAnaW5wdXRbdHlwZT1cInJhZGlvXCJdJ1xuICAgIH07XG4gICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICB0aGlzLnByb2R1Y3QgPSBwcm9kdWN0O1xuICAgIHRoaXMub3B0aW9uc0NvdW50ID0gdGhpcy5wcm9kdWN0Lm9wdGlvbnMubGVuZ3RoO1xuICAgIHRoaXMudmFyaWFudHMgPSAkdmFyaWFudHMuZ2V0KDApO1xuICAgIHRoaXMub3B0aW9ucyA9ICRvcHRpb25zLmdldCgpO1xuICAgIHRoaXMuc2VsZWN0T3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgcmV0dXJuIG9wdGlvbi5tYXRjaGVzKF90aGlzLm9wdGlvbnNUeXBlcy5zZWxlY3QpO1xuICAgIH0pO1xuICAgIHRoaXMucmFkaW9PcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLm1hdGNoZXMoX3RoaXMub3B0aW9uc1R5cGVzLnJhZGlvKTtcbiAgICB9KTtcbiAgICB0aGlzLmNvbmZpZyA9ICQuZXh0ZW5kKGRlZmF1bHRDb25maWcsIGNvbmZpZyk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RPcHRpb25zLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnJhZGlvT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUud2FybignU2hvcGlmeSBWYXJpYW50czogT3B0aW9uIHNldCBpcyBub3QgYSB2YWxpZCB0eXBlJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fYmluZEV2ZW50cygpO1xuXG4gICAgdGhpcy5fc3dpdGNoVmFyaWFudCh0aGlzLl9nZXRTZWxlY3RlZE9wdGlvbnMoKSwgdHJ1ZSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVmFyaWFudHMsIFt7XG4gICAga2V5OiBcImlzRGVmYXVsdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0RlZmF1bHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9kdWN0LnZhcmlhbnRzWzBdLnB1YmxpY190aXRsZSA9PT0gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U2VsZWN0ZWRWYXJpYW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNlbGVjdGVkVmFyaWFudCgpIHtcbiAgICAgIGlmICh0aGlzLmlzRGVmYXVsdCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3QudmFyaWFudHNbMF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnZXRWYXJpYW50RnJvbU9wdGlvbnModGhpcy5wcm9kdWN0LnZhcmlhbnRzLCB0aGlzLl9nZXRTZWxlY3RlZE9wdGlvbnMoKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVubG9hZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1bmxvYWQoKSB7XG4gICAgICB0aGlzLl91bmJpbmRFdmVudHMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2JpbmRFdmVudHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2JpbmRFdmVudHMoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG9wdGlvbiA9IHRoaXMub3B0aW9uc1tpXTtcblxuICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiBmbihldmVudCkge1xuICAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICBpZiAoX3RoaXMyLmNvbmZpZy5taXhlZENvbnRyb2xzKSB7XG4gICAgICAgICAgICBfdGhpczIuX3N3aXRjaFZhcmlhbnQoX3RoaXMyLl9nZXRTZWxlY3RlZE9wdGlvbnNNaXhlZCgpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC5tYXRjaGVzKF90aGlzMi5vcHRpb25zVHlwZXMuc2VsZWN0KSkge1xuICAgICAgICAgICAgX3RoaXMyLl9zd2l0Y2hWYXJpYW50KF90aGlzMi5fZ2V0U2VsZWN0ZWRPcHRpb25zU2VsZWN0KCkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0Lm1hdGNoZXMoX3RoaXMyLm9wdGlvbnNUeXBlcy5yYWRpbykpIHtcbiAgICAgICAgICAgIF90aGlzMi5fc3dpdGNoVmFyaWFudChfdGhpczIuX2dldFNlbGVjdGVkT3B0aW9uc1JhZGlvKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBvcHRpb24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZm4pO1xuICAgICAgICB0aGlzLmV2ZW50cy5wdXNoKHtcbiAgICAgICAgICBlbDogb3B0aW9uLFxuICAgICAgICAgIGZuOiBmblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3VuYmluZEV2ZW50c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdW5iaW5kRXZlbnRzKCkge1xuICAgICAgdGhpcy5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgZWwgPSBfcmVmLmVsLFxuICAgICAgICAgICAgZm4gPSBfcmVmLmZuO1xuICAgICAgICByZXR1cm4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZm4pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9nZXRTZWxlY3RlZE9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2dldFNlbGVjdGVkT3B0aW9ucygpIHtcbiAgICAgIC8vIE5vdGUgdGhhdCB3ZSBvbmx5IHN1cHBvcnQgMSBtaXhlZCBzZXQgb2YgY29udHJvbHMsIG9yIG11bHRpcGxlIGNvbXBsZXRlIHNldHNcbiAgICAgIC8vIG9mIHNlbGVjdHMgYW5kL29yIHJhZGlvcyBidXQgbm90IG11bHRpcGxlIG1peGVkIHNldHMuXG4gICAgICBpZiAodGhpcy5jb25maWcubWl4ZWRDb250cm9scykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2VsZWN0ZWRPcHRpb25zTWl4ZWQoKTtcbiAgICAgIH0gLy8gSWYgbXVsdGlwbGUgY29tcGxldGUgc2V0cyBhcmUgcHJlc2VudCwgd2UgY2FuIGNhbi9kbyBhc3N1bWUgdGhhdCBhbGwgY29udHJvbHNcbiAgICAgIC8vIGFyZSBpbiBzeW5jLCBiZWNhdXNlIHNob3BpZnktdmFyaWFudHMga2VlcHMgdGhlbSB0aGF0IHdheS5cblxuXG4gICAgICBpZiAodGhpcy5zZWxlY3RPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNlbGVjdGVkT3B0aW9uc1NlbGVjdCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5yYWRpb09wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2VsZWN0ZWRPcHRpb25zUmFkaW8oKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0U2VsZWN0ZWRPcHRpb25zTWl4ZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2dldFNlbGVjdGVkT3B0aW9uc01peGVkKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0T3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbk51bWJlciA9IHBhcnNlSW50KG9wdGlvbi5kYXRhc2V0LnByb2R1Y3RPcHRpb24sIDEwKTtcbiAgICAgICAgb3B0aW9uc1tvcHRpb25OdW1iZXJdID0gb3B0aW9uLnZhbHVlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJhZGlvT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgaWYgKCQob3B0aW9uKS5pcygnOmNoZWNrZWQnKSkge1xuICAgICAgICAgIHZhciBvcHRpb25OdW1iZXIgPSBwYXJzZUludChvcHRpb24uZGF0YXNldC5wcm9kdWN0T3B0aW9uLCAxMCk7XG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25OdW1iZXJdID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0U2VsZWN0ZWRPcHRpb25zU2VsZWN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRTZWxlY3RlZE9wdGlvbnNTZWxlY3QoKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2VsZWN0T3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgb3B0aW9uID0gdGhpcy5zZWxlY3RPcHRpb25zW2ldO1xuICAgICAgICBvcHRpb25zLnB1c2gob3B0aW9uLnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9nZXRTZWxlY3RlZE9wdGlvbnNSYWRpb1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0U2VsZWN0ZWRPcHRpb25zUmFkaW8oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFkaW9PcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBvcHRpb24gPSB0aGlzLnJhZGlvT3B0aW9uc1tpXTtcblxuICAgICAgICBpZiAob3B0aW9uLmNoZWNrZWQpIHtcbiAgICAgICAgICBvcHRpb25zLnB1c2gob3B0aW9uLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2VsZWN0VmFyaWFudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZWxlY3RWYXJpYW50KGlkKSB7XG4gICAgICB2YXIgdGFyZ2V0VmFyaWFudCA9IHRoaXMucHJvZHVjdC52YXJpYW50cy5maWx0ZXIoZnVuY3Rpb24gKHZhcmlhbnQpIHtcbiAgICAgICAgcmV0dXJuIHZhcmlhbnQuaWQgPT09IGlkO1xuICAgICAgfSlbMF07XG5cbiAgICAgIGlmICh0YXJnZXRWYXJpYW50KSB7XG4gICAgICAgIHRoaXMuX3N3aXRjaFZhcmlhbnQodGFyZ2V0VmFyaWFudC5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3N3aXRjaFZhcmlhbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3N3aXRjaFZhcmlhbnQoKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdGhpcy5fZ2V0U2VsZWN0ZWRPcHRpb25zKCk7XG4gICAgICB2YXIgZmlyc3RMb2FkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICAgIHZhciBwcm9kdWN0ID0gdGhpcy5wcm9kdWN0O1xuICAgICAgdmFyIHZhcmlhbnQgPSBudWxsO1xuICAgICAgdmFyIGF2YWlsYWJsZU9wdGlvbnMgPSBudWxsO1xuICAgICAgdmFyaWFudCA9IGdldFZhcmlhbnRPckNsb3Nlc3RGcm9tT3B0aW9ucyhwcm9kdWN0LnZhcmlhbnRzLCBvcHRpb25zKTtcblxuICAgICAgaWYgKCF2YXJpYW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXZhaWxhYmxlT3B0aW9ucyA9IGdldEF2YWlsYWJsZU9wdGlvbnNGcm9tVmFyaWFudChwcm9kdWN0LnZhcmlhbnRzLCB2YXJpYW50KTtcblxuICAgICAgdGhpcy5fc3dpdGNoVmFyaWFudFNlbGVjdCh2YXJpYW50LCBhdmFpbGFibGVPcHRpb25zKTtcblxuICAgICAgdGhpcy5fc3dpdGNoVmFyaWFudFJhZGlvKHZhcmlhbnQsIGF2YWlsYWJsZU9wdGlvbnMpO1xuXG4gICAgICB0aGlzLnZhcmlhbnRzLnZhbHVlID0gdmFyaWFudC5pZDsgLy8gVHJpZ2dlciBldmVudCwgSUUxMSBjb21wYXRpYmxlIGJ1dCBjb3VsZCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmVcblxuICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICBldmVudC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIGZhbHNlKTtcbiAgICAgIHRoaXMudmFyaWFudHMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgcHJvZHVjdDogcHJvZHVjdCxcbiAgICAgICAgdmFyaWFudDogdmFyaWFudCxcbiAgICAgICAgZmlyc3RMb2FkOiBmaXJzdExvYWRcbiAgICAgIH07XG4gICAgICB0aGlzLmNvbmZpZy5zd2l0Y2hDYWxsYmFjayhkYXRhKTtcbiAgICAgICQod2luZG93KS50cmlnZ2VyKCdzaG9waWZ5LXZhcmlhbnRzOnN3aXRjaC12YXJpYW50JywgZGF0YSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9zd2l0Y2hWYXJpYW50U2VsZWN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9zd2l0Y2hWYXJpYW50U2VsZWN0KHZhcmlhbnQsIGF2YWlsYWJsZU9wdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gSXRlcmF0ZSBvdmVyIGVhY2ggb3B0aW9uIHR5cGVcblxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucHJvZHVjdC5vcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIENvcnJlc3BvbmRpbmcgc2VsZWN0IGRyb3Bkb3duLCBpZiBpdCBleGlzdHNcbiAgICAgICAgdmFyIGlucHV0ID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcubWl4ZWRDb250cm9scykge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5zZWxlY3RPcHRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgb3B0aW9uID0gdGhpcy5zZWxlY3RPcHRpb25zW2pdO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9uLm1hdGNoZXMoXCJbXCIuY29uY2F0KHRoaXMuY29uZmlnLm9wdGlvbkRhdGFBdHRyaWJ1dGUsIFwiPVxcXCJcIikuY29uY2F0KGksIFwiXFxcIl1cIikpKSB7XG4gICAgICAgICAgICAgIGlucHV0ID0gb3B0aW9uO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9yIG5vbi1taXhlZCBjb250cm9scywgd2UgYXNzdW1lIHNlbGVjdCBlbGVtZW50cyBtYXRjaCB0aGUgb3JkZXIgYW5kIG51bWJlciBvZiBvcHRpb25zXG4gICAgICAgICAgaW5wdXQgPSB0aGlzLnNlbGVjdE9wdGlvbnNbaV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBvcHRpb24gb24gZHJvcGRvd25cbiAgICAgICAgICB2YXIgb3B0aW9ucyA9IGlucHV0LnF1ZXJ5U2VsZWN0b3JBbGwoJ29wdGlvbicpO1xuXG4gICAgICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IG9wdGlvbnMubGVuZ3RoOyBfaisrKSB7XG4gICAgICAgICAgICB2YXIgX29wdGlvbiA9IG9wdGlvbnNbX2pdO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gX29wdGlvbi52YWx1ZTsgLy8gTm90IGFuIGF2YWlsYWJsZSBvcHRpb25cblxuICAgICAgICAgICAgX29wdGlvbi5kaXNhYmxlZCA9ICFhdmFpbGFibGVPcHRpb25zW2ldW3ZhbHVlXSB8fCAhYXZhaWxhYmxlT3B0aW9uc1tpXVt2YWx1ZV0uYXZhaWxhYmxlICYmIHRoaXMuY29uZmlnLmRpc2FibGVVbmF2YWlsYWJsZVZhcmlhbnRzO1xuICAgICAgICAgICAgX29wdGlvbi5zZWxlY3RlZCA9IGZhbHNlOyAvLyBEcm9wZG93biBvcHRpb24gbWF0Y2hlcyB2YXJpYW50IG9wdGlvblxuXG4gICAgICAgICAgICBpZiAodmFyaWFudC5vcHRpb25zW2ldID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICBfb3B0aW9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIF9vcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfc3dpdGNoVmFyaWFudFJhZGlvXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9zd2l0Y2hWYXJpYW50UmFkaW8odmFyaWFudCwgYXZhaWxhYmxlT3B0aW9ucykge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLnJhZGlvT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFkaW9PcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBvcHRpb24gPSB0aGlzLnJhZGlvT3B0aW9uc1tpXTtcbiAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgb3B0aW9uLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgnZGF0YS1zb2xkb3V0JywgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfaSkge1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSBlbmNvZGVVUklDb21wb25lbnQoX3RoaXMzLnByb2R1Y3Qub3B0aW9uc1tfaV0pLnJlcGxhY2UoLyUyMC9nLCAnKycpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24gKF9jaGFyKSB7XG4gICAgICAgICAgcmV0dXJuIFwiJVwiLmNvbmNhdChfY2hhci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIG9wdGlvbnMgPSBfdGhpczMucmFkaW9PcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbi5tYXRjaGVzKFwiW25hbWU9XFxcIlwiLmNvbmNhdChzZWxlY3RvciwgXCJcXFwiXVwiKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb3B0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHZhciBfb3B0aW9uMiA9IG9wdGlvbnNbal07XG5cbiAgICAgICAgICBpZiAodmFyaWFudC5vcHRpb25zW19pXSA9PT0gX29wdGlvbjIudmFsdWUpIHtcbiAgICAgICAgICAgIF9vcHRpb24yLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhdmFpbGFibGVPcHRpb25zW19pXVtfb3B0aW9uMi52YWx1ZV0pIHtcbiAgICAgICAgICAgIF9vcHRpb24yLmRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICghYXZhaWxhYmxlT3B0aW9uc1tfaV1bX29wdGlvbjIudmFsdWVdLmF2YWlsYWJsZSAmJiBfdGhpczMuY29uZmlnLmRpc2FibGVVbmF2YWlsYWJsZVZhcmlhbnRzKSB7XG4gICAgICAgICAgICAgIF9vcHRpb24yLmRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBfb3B0aW9uMi5zZXRBdHRyaWJ1dGUoJ2RhdGEtc29sZG91dCcsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRoaXMucHJvZHVjdC5vcHRpb25zLmxlbmd0aDsgX2krKykge1xuICAgICAgICBfbG9vcChfaSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFZhcmlhbnRzO1xufSgpO1xuXG5leHBvcnQgZGVmYXVsdCBWYXJpYW50cztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/shopify-variants/dist/shopify-variants.es.js\n') },
vendor: 20,240 bytes, line 1
1"./node_modules/twitter-fetcher/js/twitterFetcher_min.js": function (module, exports, __webpack_require__) { eval('var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*********************************************************************\n * @license\n* #### Twitter Post Fetcher v17.1.0 ####\n* Coded by Jason Mayes 2015. A present to all the developers out there.\n* www.jasonmayes.com\n* Please keep this disclaimer with my code if you use it. Thanks. :-)\n* Got feedback or questions, ask here:\n* http://www.jasonmayes.com/projects/twitterApi/\n* Github: https://github.com/jasonmayes/Twitter-Post-Fetcher\n* Updates will be posted to this site.\n*********************************************************************/\n!function(e,t){ true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (t),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === \'function\' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):undefined}(0,function(){var _="",y=20,T=!0,k=[],C=!1,x=!0,E=!0,N=null,A=!0,I=!0,B=null,L=!0,M=!1,i=!1,R=!1,H=!0,a="en",j=!0,q=!1,n=null;function P(e){return e.replace(/<b[^>]*>(.*?)<\\/b>/gi,function(e,t){return t}).replace(/class="(?!(tco-hidden|tco-display|tco-ellipsis))+.*?"|data-query-source=".*?"|dir=".*?"|rel=".*?"/gi,"")}function S(e){for(var t=e.getElementsByTagName("a"),i=t.length-1;0<=i;i--)t[i].setAttribute("target","_blank")}function U(e,t){for(var i=[],a=new RegExp("(^| )"+t+"( |$)"),n=e.getElementsByTagName("*"),s=0,l=n.length;s<l;s++)a.test(n[s].className)&&i.push(n[s]);return i}function F(e){if(void 0!==e&&0<=e.innerHTML.indexOf("data-image")){var t=e.innerHTML.split(\'data-image="\')[1].split(\'"\')[0];return decodeURIComponent(t)+".jpg"}}var O={fetch:function(e){if(void 0===e.maxTweets&&(e.maxTweets=20),void 0===e.enableLinks&&(e.enableLinks=!0),void 0===e.showUser&&(e.showUser=!0),void 0===e.showTime&&(e.showTime=!0),void 0===e.dateFunction&&(e.dateFunction="default"),void 0===e.showRetweet&&(e.showRetweet=!0),void 0===e.customCallback&&(e.customCallback=null),void 0===e.showInteraction&&(e.showInteraction=!0),void 0===e.showImages&&(e.showImages=!1),void 0===e.showReplies&&(e.showReplies=!1),void 0===e.useEmoji&&(e.useEmoji=!1),void 0===e.linksInNewWindow&&(e.linksInNewWindow=!0),void 0===e.showPermalinks&&(e.showPermalinks=!0),void 0===e.dataOnly&&(e.dataOnly=!1),C)k.push(e);else{C=!0,_=e.domId,y=e.maxTweets,T=e.enableLinks,E=e.showUser,x=e.showTime,I=e.showRetweet,N=e.dateFunction,B=e.customCallback,L=e.showInteraction,M=e.showImages,i=e.showReplies,R=e.useEmoji,H=e.linksInNewWindow,j=e.showPermalinks,q=e.dataOnly;var t=document.getElementsByTagName("head")[0];null!==n&&t.removeChild(n),(n=document.createElement("script")).type="text/javascript",void 0!==e.list?n.src="https://syndication.twitter.com/timeline/list?callback=__twttrf.callback&dnt=false&list_slug="+e.list.listSlug+"&screen_name="+e.list.screenName+"&suppress_response_codes=true&lang="+(e.lang||a)+"&rnd="+Math.random():void 0!==e.profile?n.src="https://syndication.twitter.com/timeline/profile?callback=__twttrf.callback&dnt=false&screen_name="+e.profile.screenName+"&with_replies="+i+"&suppress_response_codes=true&lang="+(e.lang||a)+"&rnd="+Math.random():void 0!==e.likes?n.src="https://syndication.twitter.com/timeline/likes?callback=__twttrf.callback&dnt=false&screen_name="+e.likes.screenName+"&suppress_response_codes=true&lang="+(e.lang||a)+"&rnd="+Math.random():n.src="https://cdn.syndication.twimg.com/widgets/timelines/"+e.id+"?&lang="+(e.lang||a)+"&callback=__twttrf.callback&suppress_response_codes=true&rnd="+Math.random(),t.appendChild(n)}},callback:function(e){if(void 0===e||void 0===e.body)return C=!1,void(0<k.length&&(O.fetch(k[0]),k.splice(0,1)));R||(e.body=e.body.replace(/(<img[^c]*class="Emoji[^>]*>)|(<img[^c]*class="u-block[^>]*>)/g,"")),M||(e.body=e.body.replace(/(<img[^c]*class="NaturalImage-image[^>]*>|(<img[^c]*class="CroppedImage-image[^>]*>))/g,"")),E||(e.body=e.body.replace(/(<img[^c]*class="Avatar"[^>]*>)/g,""));var t=document.createElement("div");function i(e){var t=e.getElementsByTagName("img")[0];return t&&t.length&&(t.src=t.getAttribute("data-src-2x")),e}t.innerHTML=e.body,void 0===t.getElementsByClassName&&(A=!1);var a=[],n=[],s=[],l=[],r=[],o=[],c=[],d=0;if(A)for(var m=t.getElementsByClassName("timeline-Tweet");d<m.length;)0<m[d].getElementsByClassName("timeline-Tweet-retweetCredit").length?r.push(!0):r.push(!1),(!r[d]||r[d]&&I)&&(a.push(m[d].getElementsByClassName("timeline-Tweet-text")[0]),o.push(m[d].getAttribute("data-tweet-id")),E&&n.push(i(m[d].getElementsByClassName("timeline-Tweet-author")[0])),s.push(m[d].getElementsByClassName("dt-updated")[0]),c.push(m[d].getElementsByClassName("timeline-Tweet-timestamp")[0]),void 0!==m[d].getElementsByClassName("timeline-Tweet-media")[0]?l.push(m[d].getElementsByClassName("timeline-Tweet-media")[0]):l.push(void 0)),d++;else for(m=U(t,"timeline-Tweet");d<m.length;)0<U(m[d],"timeline-Tweet-retweetCredit").length?r.push(!0):r.push(!1),(!r[d]||r[d]&&I)&&(a.push(U(m[d],"timeline-Tweet-text")[0]),o.push(m[d].getAttribute("data-tweet-id")),E&&n.push(i(U(m[d],"timeline-Tweet-author")[0])),s.push(U(m[d],"dt-updated")[0]),c.push(U(m[d],"timeline-Tweet-timestamp")[0]),void 0!==U(m[d],"timeline-Tweet-media")[0]?l.push(U(m[d],"timeline-Tweet-media")[0]):l.push(void 0)),d++;a.length>y&&(a.splice(y,a.length-y),n.splice(y,n.length-y),s.splice(y,s.length-y),r.splice(y,r.length-y),l.splice(y,l.length-y),c.splice(y,c.length-y));var p=[],u=(d=a.length,0);if(q)for(;u<d;)p.push({tweet:a[u].innerHTML,author:n[u]?n[u].innerHTML:"Unknown Author",author_data:{profile_url:n[u]?n[u].querySelector(\'[data-scribe="element:user_link"]\').href:null,profile_image:n[u]?n[u].querySelector(\'[data-scribe="element:avatar"]\').getAttribute("data-src-1x"):null,profile_image_2x:n[u]?n[u].querySelector(\'[data-scribe="element:avatar"]\').getAttribute("data-src-2x"):null,screen_name:n[u]?n[u].querySelector(\'[data-scribe="element:screen_name"]\').title:null,name:n[u]?n[u].querySelector(\'[data-scribe="element:name"]\').title:null},time:s[u].textContent,timestamp:s[u].getAttribute("datetime").replace("+0000","Z").replace(/([\\+\\-])(\\d\\d)(\\d\\d)/,"$1$2:$3"),image:F(l[u]),rt:r[u],tid:o[u],permalinkURL:void 0===c[u]?"":c[u].href}),u++;else for(;u<d;){if("string"!=typeof N){var h=s[u].getAttribute("datetime"),g=new Date(s[u].getAttribute("datetime").replace(/-/g,"/").replace("T"," ").split("+")[0]),w=N(g,h);if(s[u].setAttribute("aria-label",w),a[u].textContent)if(A)s[u].textContent=w;else{var f=document.createElement("p"),v=document.createTextNode(w);f.appendChild(v),f.setAttribute("aria-label",w),s[u]=f}else s[u].textContent=w}var b="";T?(H&&(S(a[u]),E&&S(n[u])),E&&(b+=\'<div class="user">\'+P(n[u].innerHTML)+"</div>"),b+=\'<p class="tweet">\'+P(a[u].innerHTML)+"</p>",x&&(b+=j?\'<p class="timePosted"><a href="\'+c[u]+\'">\'+s[u].getAttribute("aria-label")+"</a></p>":\'<p class="timePosted">\'+s[u].getAttribute("aria-label")+"</p>")):(a[u].textContent,E&&(b+=\'<p class="user">\'+n[u].textContent+"</p>"),b+=\'<p class="tweet">\'+a[u].textContent+"</p>",x&&(b+=\'<p class="timePosted">\'+s[u].textContent+"</p>")),L&&(b+=\'<p class="interact"><a href="https://twitter.com/intent/tweet?in_reply_to=\'+o[u]+\'" class="twitter_reply_icon"\'+(H?\' target="_blank">\':">")+\'Reply</a><a href="https://twitter.com/intent/retweet?tweet_id=\'+o[u]+\'" class="twitter_retweet_icon"\'+(H?\' target="_blank">\':">")+\'Retweet</a><a href="https://twitter.com/intent/favorite?tweet_id=\'+o[u]+\'" class="twitter_fav_icon"\'+(H?\' target="_blank">\':">")+"Favorite</a></p>"),M&&void 0!==l[u]&&void 0!==F(l[u])&&(b+=\'<div class="media"><img src="\'+F(l[u])+\'" alt="Image from tweet" /></div>\'),M?p.push(b):!M&&a[u].textContent.length&&p.push(b),u++}!function(e){if(null===B){for(var t=e.length,i=0,a=document.getElementById(_),n="<ul>";i<t;)n+="<li>"+e[i]+"</li>",i++;n+="</ul>",a.innerHTML=n}else B(e)}(p),C=!1,0<k.length&&(O.fetch(k[0]),k.splice(0,1))}};return window.__twttrf=O,window.twitterFetcher=O});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHdpdHRlci1mZXRjaGVyL2pzL3R3aXR0ZXJGZXRjaGVyX21pbi5qcz80NjZjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQXFDLENBQUMsaUNBQU8sRUFBRSxvQ0FBQyxDQUFDO0FBQUE7QUFBQTtBQUFBLG9HQUFDLENBQUMsU0FBK0MsQ0FBQyxjQUFjLGdIQUFnSCxjQUFjLHNEQUFzRCxTQUFTLG9IQUFvSCxjQUFjLG1EQUFtRCxLQUFLLHlDQUF5QyxnQkFBZ0IsMEZBQTBGLElBQUkseUNBQXlDLFNBQVMsY0FBYyxxREFBcUQseURBQXlELHFDQUFxQyxPQUFPLGtCQUFrQixvbkJBQW9uQixLQUFLLGdQQUFnUCwrQ0FBK0MsazhCQUFrOEIsc0JBQXNCLDJGQUEyRiwwUkFBMFIsb0NBQW9DLGNBQWMsdUNBQXVDLDREQUE0RCw2REFBNkQsMkNBQTJDLDBEQUEwRCxXQUFXLHlpQkFBeWlCLGlDQUFpQyxXQUFXLHNaQUFzWix3SkFBd0osMEJBQTBCLFVBQVUsSUFBSSxTQUFTLDhFQUE4RSxzY0FBc2MscU1BQXFNLE1BQU0sVUFBVSxJQUFJLEVBQUUsdUJBQXVCLHdJQUF3SSw4RUFBOEUsS0FBSywrREFBK0QsdURBQXVELHdCQUF3QixTQUFTLDRpQ0FBNGlDLGFBQWEsYUFBYSw2REFBNkQsSUFBSSw0QkFBNEIseUJBQXlCLFVBQVUscURBQXFELGlEQUFpRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy90d2l0dGVyLWZldGNoZXIvanMvdHdpdHRlckZldGNoZXJfbWluLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQGxpY2Vuc2VcbiogICMjIyMgVHdpdHRlciBQb3N0IEZldGNoZXIgdjE3LjEuMCAjIyMjXG4qICBDb2RlZCBieSBKYXNvbiBNYXllcyAyMDE1LiBBIHByZXNlbnQgdG8gYWxsIHRoZSBkZXZlbG9wZXJzIG91dCB0aGVyZS5cbiogIHd3dy5qYXNvbm1heWVzLmNvbVxuKiAgUGxlYXNlIGtlZXAgdGhpcyBkaXNjbGFpbWVyIHdpdGggbXkgY29kZSBpZiB5b3UgdXNlIGl0LiBUaGFua3MuIDotKVxuKiAgR290IGZlZWRiYWNrIG9yIHF1ZXN0aW9ucywgYXNrIGhlcmU6XG4qICBodHRwOi8vd3d3Lmphc29ubWF5ZXMuY29tL3Byb2plY3RzL3R3aXR0ZXJBcGkvXG4qICBHaXRodWI6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNvbm1heWVzL1R3aXR0ZXItUG9zdC1GZXRjaGVyXG4qICBVcGRhdGVzIHdpbGwgYmUgcG9zdGVkIHRvIHRoaXMgc2l0ZS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiFmdW5jdGlvbihlLHQpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9dCgpOnQoKX0oMCxmdW5jdGlvbigpe3ZhciBfPVwiXCIseT0yMCxUPSEwLGs9W10sQz0hMSx4PSEwLEU9ITAsTj1udWxsLEE9ITAsST0hMCxCPW51bGwsTD0hMCxNPSExLGk9ITEsUj0hMSxIPSEwLGE9XCJlblwiLGo9ITAscT0hMSxuPW51bGw7ZnVuY3Rpb24gUChlKXtyZXR1cm4gZS5yZXBsYWNlKC88YltePl0qPiguKj8pPFxcL2I+L2dpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KS5yZXBsYWNlKC9jbGFzcz1cIig/ISh0Y28taGlkZGVufHRjby1kaXNwbGF5fHRjby1lbGxpcHNpcykpKy4qP1wifGRhdGEtcXVlcnktc291cmNlPVwiLio/XCJ8ZGlyPVwiLio/XCJ8cmVsPVwiLio/XCIvZ2ksXCJcIil9ZnVuY3Rpb24gUyhlKXtmb3IodmFyIHQ9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImFcIiksaT10Lmxlbmd0aC0xOzA8PWk7aS0tKXRbaV0uc2V0QXR0cmlidXRlKFwidGFyZ2V0XCIsXCJfYmxhbmtcIil9ZnVuY3Rpb24gVShlLHQpe2Zvcih2YXIgaT1bXSxhPW5ldyBSZWdFeHAoXCIoXnwgKVwiK3QrXCIoIHwkKVwiKSxuPWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLHM9MCxsPW4ubGVuZ3RoO3M8bDtzKyspYS50ZXN0KG5bc10uY2xhc3NOYW1lKSYmaS5wdXNoKG5bc10pO3JldHVybiBpfWZ1bmN0aW9uIEYoZSl7aWYodm9pZCAwIT09ZSYmMDw9ZS5pbm5lckhUTUwuaW5kZXhPZihcImRhdGEtaW1hZ2VcIikpe3ZhciB0PWUuaW5uZXJIVE1MLnNwbGl0KCdkYXRhLWltYWdlPVwiJylbMV0uc3BsaXQoJ1wiJylbMF07cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KStcIi5qcGdcIn19dmFyIE89e2ZldGNoOmZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUubWF4VHdlZXRzJiYoZS5tYXhUd2VldHM9MjApLHZvaWQgMD09PWUuZW5hYmxlTGlua3MmJihlLmVuYWJsZUxpbmtzPSEwKSx2b2lkIDA9PT1lLnNob3dVc2VyJiYoZS5zaG93VXNlcj0hMCksdm9pZCAwPT09ZS5zaG93VGltZSYmKGUuc2hvd1RpbWU9ITApLHZvaWQgMD09PWUuZGF0ZUZ1bmN0aW9uJiYoZS5kYXRlRnVuY3Rpb249XCJkZWZhdWx0XCIpLHZvaWQgMD09PWUuc2hvd1JldHdlZXQmJihlLnNob3dSZXR3ZWV0PSEwKSx2b2lkIDA9PT1lLmN1c3RvbUNhbGxiYWNrJiYoZS5jdXN0b21DYWxsYmFjaz1udWxsKSx2b2lkIDA9PT1lLnNob3dJbnRlcmFjdGlvbiYmKGUuc2hvd0ludGVyYWN0aW9uPSEwKSx2b2lkIDA9PT1lLnNob3dJbWFnZXMmJihlLnNob3dJbWFnZXM9ITEpLHZvaWQgMD09PWUuc2hvd1JlcGxpZXMmJihlLnNob3dSZXBsaWVzPSExKSx2b2lkIDA9PT1lLnVzZUVtb2ppJiYoZS51c2VFbW9qaT0hMSksdm9pZCAwPT09ZS5saW5rc0luTmV3V2luZG93JiYoZS5saW5rc0luTmV3V2luZG93PSEwKSx2b2lkIDA9PT1lLnNob3dQZXJtYWxpbmtzJiYoZS5zaG93UGVybWFsaW5rcz0hMCksdm9pZCAwPT09ZS5kYXRhT25seSYmKGUuZGF0YU9ubHk9ITEpLEMpay5wdXNoKGUpO2Vsc2V7Qz0hMCxfPWUuZG9tSWQseT1lLm1heFR3ZWV0cyxUPWUuZW5hYmxlTGlua3MsRT1lLnNob3dVc2VyLHg9ZS5zaG93VGltZSxJPWUuc2hvd1JldHdlZXQsTj1lLmRhdGVGdW5jdGlvbixCPWUuY3VzdG9tQ2FsbGJhY2ssTD1lLnNob3dJbnRlcmFjdGlvbixNPWUuc2hvd0ltYWdlcyxpPWUuc2hvd1JlcGxpZXMsUj1lLnVzZUVtb2ppLEg9ZS5saW5rc0luTmV3V2luZG93LGo9ZS5zaG93UGVybWFsaW5rcyxxPWUuZGF0YU9ubHk7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdO251bGwhPT1uJiZ0LnJlbW92ZUNoaWxkKG4pLChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpLnR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIix2b2lkIDAhPT1lLmxpc3Q/bi5zcmM9XCJodHRwczovL3N5bmRpY2F0aW9uLnR3aXR0ZXIuY29tL3RpbWVsaW5lL2xpc3Q/Y2FsbGJhY2s9X190d3R0cmYuY2FsbGJhY2smZG50PWZhbHNlJmxpc3Rfc2x1Zz1cIitlLmxpc3QubGlzdFNsdWcrXCImc2NyZWVuX25hbWU9XCIrZS5saXN0LnNjcmVlbk5hbWUrXCImc3VwcHJlc3NfcmVzcG9uc2VfY29kZXM9dHJ1ZSZsYW5nPVwiKyhlLmxhbmd8fGEpK1wiJnJuZD1cIitNYXRoLnJhbmRvbSgpOnZvaWQgMCE9PWUucHJvZmlsZT9uLnNyYz1cImh0dHBzOi8vc3luZGljYXRpb24udHdpdHRlci5jb20vdGltZWxpbmUvcHJvZmlsZT9jYWxsYmFjaz1fX3R3dHRyZi5jYWxsYmFjayZkbnQ9ZmFsc2Umc2NyZWVuX25hbWU9XCIrZS5wcm9maWxlLnNjcmVlbk5hbWUrXCImd2l0aF9yZXBsaWVzPVwiK2krXCImc3VwcHJlc3NfcmVzcG9uc2VfY29kZXM9dHJ1ZSZsYW5nPVwiKyhlLmxhbmd8fGEpK1wiJnJuZD1cIitNYXRoLnJhbmRvbSgpOnZvaWQgMCE9PWUubGlrZXM/bi5zcmM9XCJodHRwczovL3N5bmRpY2F0aW9uLnR3aXR0ZXIuY29tL3RpbWVsaW5lL2xpa2VzP2NhbGxiYWNrPV9fdHd0dHJmLmNhbGxiYWNrJmRudD1mYWxzZSZzY3JlZW5fbmFtZT1cIitlLmxpa2VzLnNjcmVlbk5hbWUrXCImc3VwcHJlc3NfcmVzcG9uc2VfY29kZXM9dHJ1ZSZsYW5nPVwiKyhlLmxhbmd8fGEpK1wiJnJuZD1cIitNYXRoLnJhbmRvbSgpOm4uc3JjPVwiaHR0cHM6Ly9jZG4uc3luZGljYXRpb24udHdpbWcuY29tL3dpZGdldHMvdGltZWxpbmVzL1wiK2UuaWQrXCI/Jmxhbmc9XCIrKGUubGFuZ3x8YSkrXCImY2FsbGJhY2s9X190d3R0cmYuY2FsbGJhY2smc3VwcHJlc3NfcmVzcG9uc2VfY29kZXM9dHJ1ZSZybmQ9XCIrTWF0aC5yYW5kb20oKSx0LmFwcGVuZENoaWxkKG4pfX0sY2FsbGJhY2s6ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZXx8dm9pZCAwPT09ZS5ib2R5KXJldHVybiBDPSExLHZvaWQoMDxrLmxlbmd0aCYmKE8uZmV0Y2goa1swXSksay5zcGxpY2UoMCwxKSkpO1J8fChlLmJvZHk9ZS5ib2R5LnJlcGxhY2UoLyg8aW1nW15jXSpjbGFzcz1cIkVtb2ppW14+XSo+KXwoPGltZ1teY10qY2xhc3M9XCJ1LWJsb2NrW14+XSo+KS9nLFwiXCIpKSxNfHwoZS5ib2R5PWUuYm9keS5yZXBsYWNlKC8oPGltZ1teY10qY2xhc3M9XCJOYXR1cmFsSW1hZ2UtaW1hZ2VbXj5dKj58KDxpbWdbXmNdKmNsYXNzPVwiQ3JvcHBlZEltYWdlLWltYWdlW14+XSo+KSkvZyxcIlwiKSksRXx8KGUuYm9keT1lLmJvZHkucmVwbGFjZSgvKDxpbWdbXmNdKmNsYXNzPVwiQXZhdGFyXCJbXj5dKj4pL2csXCJcIikpO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZnVuY3Rpb24gaShlKXt2YXIgdD1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW1nXCIpWzBdO3JldHVybiB0JiZ0Lmxlbmd0aCYmKHQuc3JjPXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1zcmMtMnhcIikpLGV9dC5pbm5lckhUTUw9ZS5ib2R5LHZvaWQgMD09PXQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmKEE9ITEpO3ZhciBhPVtdLG49W10scz1bXSxsPVtdLHI9W10sbz1bXSxjPVtdLGQ9MDtpZihBKWZvcih2YXIgbT10LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ0aW1lbGluZS1Ud2VldFwiKTtkPG0ubGVuZ3RoOykwPG1bZF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInRpbWVsaW5lLVR3ZWV0LXJldHdlZXRDcmVkaXRcIikubGVuZ3RoP3IucHVzaCghMCk6ci5wdXNoKCExKSwoIXJbZF18fHJbZF0mJkkpJiYoYS5wdXNoKG1bZF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInRpbWVsaW5lLVR3ZWV0LXRleHRcIilbMF0pLG8ucHVzaChtW2RdLmdldEF0dHJpYnV0ZShcImRhdGEtdHdlZXQtaWRcIikpLEUmJm4ucHVzaChpKG1bZF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInRpbWVsaW5lLVR3ZWV0LWF1dGhvclwiKVswXSkpLHMucHVzaChtW2RdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJkdC11cGRhdGVkXCIpWzBdKSxjLnB1c2gobVtkXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwidGltZWxpbmUtVHdlZXQtdGltZXN0YW1wXCIpWzBdKSx2b2lkIDAhPT1tW2RdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ0aW1lbGluZS1Ud2VldC1tZWRpYVwiKVswXT9sLnB1c2gobVtkXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwidGltZWxpbmUtVHdlZXQtbWVkaWFcIilbMF0pOmwucHVzaCh2b2lkIDApKSxkKys7ZWxzZSBmb3IobT1VKHQsXCJ0aW1lbGluZS1Ud2VldFwiKTtkPG0ubGVuZ3RoOykwPFUobVtkXSxcInRpbWVsaW5lLVR3ZWV0LXJldHdlZXRDcmVkaXRcIikubGVuZ3RoP3IucHVzaCghMCk6ci5wdXNoKCExKSwoIXJbZF18fHJbZF0mJkkpJiYoYS5wdXNoKFUobVtkXSxcInRpbWVsaW5lLVR3ZWV0LXRleHRcIilbMF0pLG8ucHVzaChtW2RdLmdldEF0dHJpYnV0ZShcImRhdGEtdHdlZXQtaWRcIikpLEUmJm4ucHVzaChpKFUobVtkXSxcInRpbWVsaW5lLVR3ZWV0LWF1dGhvclwiKVswXSkpLHMucHVzaChVKG1bZF0sXCJkdC11cGRhdGVkXCIpWzBdKSxjLnB1c2goVShtW2RdLFwidGltZWxpbmUtVHdlZXQtdGltZXN0YW1wXCIpWzBdKSx2b2lkIDAhPT1VKG1bZF0sXCJ0aW1lbGluZS1Ud2VldC1tZWRpYVwiKVswXT9sLnB1c2goVShtW2RdLFwidGltZWxpbmUtVHdlZXQtbWVkaWFcIilbMF0pOmwucHVzaCh2b2lkIDApKSxkKys7YS5sZW5ndGg+eSYmKGEuc3BsaWNlKHksYS5sZW5ndGgteSksbi5zcGxpY2UoeSxuLmxlbmd0aC15KSxzLnNwbGljZSh5LHMubGVuZ3RoLXkpLHIuc3BsaWNlKHksci5sZW5ndGgteSksbC5zcGxpY2UoeSxsLmxlbmd0aC15KSxjLnNwbGljZSh5LGMubGVuZ3RoLXkpKTt2YXIgcD1bXSx1PShkPWEubGVuZ3RoLDApO2lmKHEpZm9yKDt1PGQ7KXAucHVzaCh7dHdlZXQ6YVt1XS5pbm5lckhUTUwsYXV0aG9yOm5bdV0/blt1XS5pbm5lckhUTUw6XCJVbmtub3duIEF1dGhvclwiLGF1dGhvcl9kYXRhOntwcm9maWxlX3VybDpuW3VdP25bdV0ucXVlcnlTZWxlY3RvcignW2RhdGEtc2NyaWJlPVwiZWxlbWVudDp1c2VyX2xpbmtcIl0nKS5ocmVmOm51bGwscHJvZmlsZV9pbWFnZTpuW3VdP25bdV0ucXVlcnlTZWxlY3RvcignW2RhdGEtc2NyaWJlPVwiZWxlbWVudDphdmF0YXJcIl0nKS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXNyYy0xeFwiKTpudWxsLHByb2ZpbGVfaW1hZ2VfMng6blt1XT9uW3VdLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXNjcmliZT1cImVsZW1lbnQ6YXZhdGFyXCJdJykuZ2V0QXR0cmlidXRlKFwiZGF0YS1zcmMtMnhcIik6bnVsbCxzY3JlZW5fbmFtZTpuW3VdP25bdV0ucXVlcnlTZWxlY3RvcignW2RhdGEtc2NyaWJlPVwiZWxlbWVudDpzY3JlZW5fbmFtZVwiXScpLnRpdGxlOm51bGwsbmFtZTpuW3VdP25bdV0ucXVlcnlTZWxlY3RvcignW2RhdGEtc2NyaWJlPVwiZWxlbWVudDpuYW1lXCJdJykudGl0bGU6bnVsbH0sdGltZTpzW3VdLnRleHRDb250ZW50LHRpbWVzdGFtcDpzW3VdLmdldEF0dHJpYnV0ZShcImRhdGV0aW1lXCIpLnJlcGxhY2UoXCIrMDAwMFwiLFwiWlwiKS5yZXBsYWNlKC8oW1xcK1xcLV0pKFxcZFxcZCkoXFxkXFxkKS8sXCIkMSQyOiQzXCIpLGltYWdlOkYobFt1XSkscnQ6clt1XSx0aWQ6b1t1XSxwZXJtYWxpbmtVUkw6dm9pZCAwPT09Y1t1XT9cIlwiOmNbdV0uaHJlZn0pLHUrKztlbHNlIGZvcig7dTxkOyl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIE4pe3ZhciBoPXNbdV0uZ2V0QXR0cmlidXRlKFwiZGF0ZXRpbWVcIiksZz1uZXcgRGF0ZShzW3VdLmdldEF0dHJpYnV0ZShcImRhdGV0aW1lXCIpLnJlcGxhY2UoLy0vZyxcIi9cIikucmVwbGFjZShcIlRcIixcIiBcIikuc3BsaXQoXCIrXCIpWzBdKSx3PU4oZyxoKTtpZihzW3VdLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIix3KSxhW3VdLnRleHRDb250ZW50KWlmKEEpc1t1XS50ZXh0Q29udGVudD13O2Vsc2V7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIiksdj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh3KTtmLmFwcGVuZENoaWxkKHYpLGYuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLHcpLHNbdV09Zn1lbHNlIHNbdV0udGV4dENvbnRlbnQ9d312YXIgYj1cIlwiO1Q/KEgmJihTKGFbdV0pLEUmJlMoblt1XSkpLEUmJihiKz0nPGRpdiBjbGFzcz1cInVzZXJcIj4nK1Aoblt1XS5pbm5lckhUTUwpK1wiPC9kaXY+XCIpLGIrPSc8cCBjbGFzcz1cInR3ZWV0XCI+JytQKGFbdV0uaW5uZXJIVE1MKStcIjwvcD5cIix4JiYoYis9aj8nPHAgY2xhc3M9XCJ0aW1lUG9zdGVkXCI+PGEgaHJlZj1cIicrY1t1XSsnXCI+JytzW3VdLmdldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIikrXCI8L2E+PC9wPlwiOic8cCBjbGFzcz1cInRpbWVQb3N0ZWRcIj4nK3NbdV0uZ2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKStcIjwvcD5cIikpOihhW3VdLnRleHRDb250ZW50LEUmJihiKz0nPHAgY2xhc3M9XCJ1c2VyXCI+JytuW3VdLnRleHRDb250ZW50K1wiPC9wPlwiKSxiKz0nPHAgY2xhc3M9XCJ0d2VldFwiPicrYVt1XS50ZXh0Q29udGVudCtcIjwvcD5cIix4JiYoYis9JzxwIGNsYXNzPVwidGltZVBvc3RlZFwiPicrc1t1XS50ZXh0Q29udGVudCtcIjwvcD5cIikpLEwmJihiKz0nPHAgY2xhc3M9XCJpbnRlcmFjdFwiPjxhIGhyZWY9XCJodHRwczovL3R3aXR0ZXIuY29tL2ludGVudC90d2VldD9pbl9yZXBseV90bz0nK29bdV0rJ1wiIGNsYXNzPVwidHdpdHRlcl9yZXBseV9pY29uXCInKyhIPycgdGFyZ2V0PVwiX2JsYW5rXCI+JzpcIj5cIikrJ1JlcGx5PC9hPjxhIGhyZWY9XCJodHRwczovL3R3aXR0ZXIuY29tL2ludGVudC9yZXR3ZWV0P3R3ZWV0X2lkPScrb1t1XSsnXCIgY2xhc3M9XCJ0d2l0dGVyX3JldHdlZXRfaWNvblwiJysoSD8nIHRhcmdldD1cIl9ibGFua1wiPic6XCI+XCIpKydSZXR3ZWV0PC9hPjxhIGhyZWY9XCJodHRwczovL3R3aXR0ZXIuY29tL2ludGVudC9mYXZvcml0ZT90d2VldF9pZD0nK29bdV0rJ1wiIGNsYXNzPVwidHdpdHRlcl9mYXZfaWNvblwiJysoSD8nIHRhcmdldD1cIl9ibGFua1wiPic6XCI+XCIpK1wiRmF2b3JpdGU8L2E+PC9wPlwiKSxNJiZ2b2lkIDAhPT1sW3VdJiZ2b2lkIDAhPT1GKGxbdV0pJiYoYis9JzxkaXYgY2xhc3M9XCJtZWRpYVwiPjxpbWcgc3JjPVwiJytGKGxbdV0pKydcIiBhbHQ9XCJJbWFnZSBmcm9tIHR3ZWV0XCIgLz48L2Rpdj4nKSxNP3AucHVzaChiKTohTSYmYVt1XS50ZXh0Q29udGVudC5sZW5ndGgmJnAucHVzaChiKSx1Kyt9IWZ1bmN0aW9uKGUpe2lmKG51bGw9PT1CKXtmb3IodmFyIHQ9ZS5sZW5ndGgsaT0wLGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXyksbj1cIjx1bD5cIjtpPHQ7KW4rPVwiPGxpPlwiK2VbaV0rXCI8L2xpPlwiLGkrKztuKz1cIjwvdWw+XCIsYS5pbm5lckhUTUw9bn1lbHNlIEIoZSl9KHApLEM9ITEsMDxrLmxlbmd0aCYmKE8uZmV0Y2goa1swXSksay5zcGxpY2UoMCwxKSl9fTtyZXR1cm4gd2luZG93Ll9fdHd0dHJmPU8sd2luZG93LnR3aXR0ZXJGZXRjaGVyPU99KTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/twitter-fetcher/js/twitterFetcher_min.js\n') },
vendor: 18,838 bytes, line 1
1"./node_modules/unidragger/unidragger.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * Unidragger v2.3.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! unipointer/unipointer */ \"./node_modules/unipointer/unipointer.js\")\n ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( Unipointer ) {\n return factory( window, Unipointer );\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n this.pointerDownPointer = pointer;\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5pZHJhZ2dlci91bmlkcmFnZ2VyLmpzP2VmNjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTyxJQUF5QztBQUNoRDtBQUNBLElBQUksaUNBQVE7QUFDWixNQUFNLDJGQUF1QjtBQUM3QixLQUFLLG1DQUFFO0FBQ1A7QUFDQSxLQUFLO0FBQUEsb0dBQUM7QUFDTixHQUFHLE1BQU0sRUFZTjs7QUFFSCxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHlCQUF5QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsZUFBZTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxlQUFlO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLGVBQWU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3VuaWRyYWdnZXIvdW5pZHJhZ2dlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogVW5pZHJhZ2dlciB2Mi4zLjBcbiAqIERyYWdnYWJsZSBiYXNlIGNsYXNzXG4gKiBNSVQgbGljZW5zZVxuICovXG5cbi8qanNoaW50IGJyb3dzZXI6IHRydWUsIHVudXNlZDogdHJ1ZSwgdW5kZWY6IHRydWUsIHN0cmljdDogdHJ1ZSAqL1xuXG4oIGZ1bmN0aW9uKCB3aW5kb3csIGZhY3RvcnkgKSB7XG4gIC8vIHVuaXZlcnNhbCBtb2R1bGUgZGVmaW5pdGlvblxuICAvKmpzaGludCBzdHJpY3Q6IGZhbHNlICovIC8qZ2xvYmFscyBkZWZpbmUsIG1vZHVsZSwgcmVxdWlyZSAqL1xuXG4gIGlmICggdHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgLy8gQU1EXG4gICAgZGVmaW5lKCBbXG4gICAgICAndW5pcG9pbnRlci91bmlwb2ludGVyJ1xuICAgIF0sIGZ1bmN0aW9uKCBVbmlwb2ludGVyICkge1xuICAgICAgcmV0dXJuIGZhY3RvcnkoIHdpbmRvdywgVW5pcG9pbnRlciApO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgcmVxdWlyZSgndW5pcG9pbnRlcicpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIHdpbmRvdy5VbmlkcmFnZ2VyID0gZmFjdG9yeShcbiAgICAgIHdpbmRvdyxcbiAgICAgIHdpbmRvdy5Vbmlwb2ludGVyXG4gICAgKTtcbiAgfVxuXG59KCB3aW5kb3csIGZ1bmN0aW9uIGZhY3RvcnkoIHdpbmRvdywgVW5pcG9pbnRlciApIHtcblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVbmlkcmFnZ2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbmZ1bmN0aW9uIFVuaWRyYWdnZXIoKSB7fVxuXG4vLyBpbmhlcml0IFVuaXBvaW50ZXIgJiBFdkVtaXR0ZXJcbnZhciBwcm90byA9IFVuaWRyYWdnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggVW5pcG9pbnRlci5wcm90b3R5cGUgKTtcblxuLy8gLS0tLS0gYmluZCBzdGFydCAtLS0tLSAvL1xuXG5wcm90by5iaW5kSGFuZGxlcyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9iaW5kSGFuZGxlcyggdHJ1ZSApO1xufTtcblxucHJvdG8udW5iaW5kSGFuZGxlcyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9iaW5kSGFuZGxlcyggZmFsc2UgKTtcbn07XG5cbi8qKlxuICogQWRkIG9yIHJlbW92ZSBzdGFydCBldmVudFxuICogQHBhcmFtIHtCb29sZWFufSBpc0FkZFxuICovXG5wcm90by5fYmluZEhhbmRsZXMgPSBmdW5jdGlvbiggaXNBZGQgKSB7XG4gIC8vIG11bmdlIGlzQWRkLCBkZWZhdWx0IHRvIHRydWVcbiAgaXNBZGQgPSBpc0FkZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGlzQWRkO1xuICAvLyBiaW5kIGVhY2ggaGFuZGxlXG4gIHZhciBiaW5kTWV0aG9kID0gaXNBZGQgPyAnYWRkRXZlbnRMaXN0ZW5lcicgOiAncmVtb3ZlRXZlbnRMaXN0ZW5lcic7XG4gIHZhciB0b3VjaEFjdGlvbiA9IGlzQWRkID8gdGhpcy5fdG91Y2hBY3Rpb25WYWx1ZSA6ICcnO1xuICBmb3IgKCB2YXIgaT0wOyBpIDwgdGhpcy5oYW5kbGVzLmxlbmd0aDsgaSsrICkge1xuICAgIHZhciBoYW5kbGUgPSB0aGlzLmhhbmRsZXNbaV07XG4gICAgdGhpcy5fYmluZFN0YXJ0RXZlbnQoIGhhbmRsZSwgaXNBZGQgKTtcbiAgICBoYW5kbGVbIGJpbmRNZXRob2QgXSggJ2NsaWNrJywgdGhpcyApO1xuICAgIC8vIHRvdWNoLWFjdGlvbjogbm9uZSB0byBvdmVycmlkZSBicm93c2VyIHRvdWNoIGdlc3R1cmVzLiBtZXRhZml6enkvZmxpY2tpdHkjNTQwXG4gICAgaWYgKCB3aW5kb3cuUG9pbnRlckV2ZW50ICkge1xuICAgICAgaGFuZGxlLnN0eWxlLnRvdWNoQWN0aW9uID0gdG91Y2hBY3Rpb247XG4gICAgfVxuICB9XG59O1xuXG4vLyBwcm90b3R5cGUgc28gaXQgY2FuIGJlIG92ZXJ3cml0ZWFibGUgYnkgRmxpY2tpdHlcbnByb3RvLl90b3VjaEFjdGlvblZhbHVlID0gJ25vbmUnO1xuXG4vLyAtLS0tLSBzdGFydCBldmVudCAtLS0tLSAvL1xuXG4vKipcbiAqIHBvaW50ZXIgc3RhcnRcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKiBAcGFyYW0ge0V2ZW50IG9yIFRvdWNofSBwb2ludGVyXG4gKi9cbnByb3RvLnBvaW50ZXJEb3duID0gZnVuY3Rpb24oIGV2ZW50LCBwb2ludGVyICkge1xuICB2YXIgaXNPa2F5ID0gdGhpcy5va2F5UG9pbnRlckRvd24oIGV2ZW50ICk7XG4gIGlmICggIWlzT2theSApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gdHJhY2sgc3RhcnQgZXZlbnQgcG9zaXRpb25cbiAgdGhpcy5wb2ludGVyRG93blBvaW50ZXIgPSBwb2ludGVyO1xuXG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIHRoaXMucG9pbnRlckRvd25CbHVyKCk7XG4gIC8vIGJpbmQgbW92ZSBhbmQgZW5kIGV2ZW50c1xuICB0aGlzLl9iaW5kUG9zdFN0YXJ0RXZlbnRzKCBldmVudCApO1xuICB0aGlzLmVtaXRFdmVudCggJ3BvaW50ZXJEb3duJywgWyBldmVudCwgcG9pbnRlciBdICk7XG59O1xuXG4vLyBub2RlcyB0aGF0IGhhdmUgdGV4dCBmaWVsZHNcbnZhciBjdXJzb3JOb2RlcyA9IHtcbiAgVEVYVEFSRUE6IHRydWUsXG4gIElOUFVUOiB0cnVlLFxuICBTRUxFQ1Q6IHRydWUsXG4gIE9QVElPTjogdHJ1ZSxcbn07XG5cbi8vIGlucHV0IHR5cGVzIHRoYXQgZG8gbm90IGhhdmUgdGV4dCBmaWVsZHNcbnZhciBjbGlja1R5cGVzID0ge1xuICByYWRpbzogdHJ1ZSxcbiAgY2hlY2tib3g6IHRydWUsXG4gIGJ1dHRvbjogdHJ1ZSxcbiAgc3VibWl0OiB0cnVlLFxuICBpbWFnZTogdHJ1ZSxcbiAgZmlsZTogdHJ1ZSxcbn07XG5cbi8vIGRpc21pc3MgaW5wdXRzIHdpdGggdGV4dCBmaWVsZHMuIGZsaWNraXR5IzQwMywgZmxpY2tpdHkjNDA0XG5wcm90by5va2F5UG9pbnRlckRvd24gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gIHZhciBpc0N1cnNvck5vZGUgPSBjdXJzb3JOb2Rlc1sgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lIF07XG4gIHZhciBpc0NsaWNrVHlwZSA9IGNsaWNrVHlwZXNbIGV2ZW50LnRhcmdldC50eXBlIF07XG4gIHZhciBpc09rYXkgPSAhaXNDdXJzb3JOb2RlIHx8IGlzQ2xpY2tUeXBlO1xuICBpZiAoICFpc09rYXkgKSB7XG4gICAgdGhpcy5fcG9pbnRlclJlc2V0KCk7XG4gIH1cbiAgcmV0dXJuIGlzT2theTtcbn07XG5cbi8vIGtsdWRnZSB0byBibHVyIHByZXZpb3VzbHkgZm9jdXNlZCBpbnB1dFxucHJvdG8ucG9pbnRlckRvd25CbHVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBmb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgLy8gZG8gbm90IGJsdXIgYm9keSBmb3IgSUUxMCwgbWV0YWZpenp5L2ZsaWNraXR5IzExN1xuICB2YXIgY2FuQmx1ciA9IGZvY3VzZWQgJiYgZm9jdXNlZC5ibHVyICYmIGZvY3VzZWQgIT0gZG9jdW1lbnQuYm9keTtcbiAgaWYgKCBjYW5CbHVyICkge1xuICAgIGZvY3VzZWQuYmx1cigpO1xuICB9XG59O1xuXG4vLyAtLS0tLSBtb3ZlIGV2ZW50IC0tLS0tIC8vXG5cbi8qKlxuICogZHJhZyBtb3ZlXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHBhcmFtIHtFdmVudCBvciBUb3VjaH0gcG9pbnRlclxuICovXG5wcm90by5wb2ludGVyTW92ZSA9IGZ1bmN0aW9uKCBldmVudCwgcG9pbnRlciApIHtcbiAgdmFyIG1vdmVWZWN0b3IgPSB0aGlzLl9kcmFnUG9pbnRlck1vdmUoIGV2ZW50LCBwb2ludGVyICk7XG4gIHRoaXMuZW1pdEV2ZW50KCAncG9pbnRlck1vdmUnLCBbIGV2ZW50LCBwb2ludGVyLCBtb3ZlVmVjdG9yIF0gKTtcbiAgdGhpcy5fZHJhZ01vdmUoIGV2ZW50LCBwb2ludGVyLCBtb3ZlVmVjdG9yICk7XG59O1xuXG4vLyBiYXNlIHBvaW50ZXIgbW92ZSBsb2dpY1xucHJvdG8uX2RyYWdQb2ludGVyTW92ZSA9IGZ1bmN0aW9uKCBldmVudCwgcG9pbnRlciApIHtcbiAgdmFyIG1vdmVWZWN0b3IgPSB7XG4gICAgeDogcG9pbnRlci5wYWdlWCAtIHRoaXMucG9pbnRlckRvd25Qb2ludGVyLnBhZ2VYLFxuICAgIHk6IHBvaW50ZXIucGFnZVkgLSB0aGlzLnBvaW50ZXJEb3duUG9pbnRlci5wYWdlWVxuICB9O1xuICAvLyBzdGFydCBkcmFnIGlmIHBvaW50ZXIgaGFzIG1vdmVkIGZhciBlbm91Z2ggdG8gc3RhcnQgZHJhZ1xuICBpZiAoICF0aGlzLmlzRHJhZ2dpbmcgJiYgdGhpcy5oYXNEcmFnU3RhcnRlZCggbW92ZVZlY3RvciApICkge1xuICAgIHRoaXMuX2RyYWdTdGFydCggZXZlbnQsIHBvaW50ZXIgKTtcbiAgfVxuICByZXR1cm4gbW92ZVZlY3Rvcjtcbn07XG5cbi8vIGNvbmRpdGlvbiBpZiBwb2ludGVyIGhhcyBtb3ZlZCBmYXIgZW5vdWdoIHRvIHN0YXJ0IGRyYWdcbnByb3RvLmhhc0RyYWdTdGFydGVkID0gZnVuY3Rpb24oIG1vdmVWZWN0b3IgKSB7XG4gIHJldHVybiBNYXRoLmFicyggbW92ZVZlY3Rvci54ICkgPiAzIHx8IE1hdGguYWJzKCBtb3ZlVmVjdG9yLnkgKSA+IDM7XG59O1xuXG4vLyAtLS0tLSBlbmQgZXZlbnQgLS0tLS0gLy9cblxuLyoqXG4gKiBwb2ludGVyIHVwXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHBhcmFtIHtFdmVudCBvciBUb3VjaH0gcG9pbnRlclxuICovXG5wcm90by5wb2ludGVyVXAgPSBmdW5jdGlvbiggZXZlbnQsIHBvaW50ZXIgKSB7XG4gIHRoaXMuZW1pdEV2ZW50KCAncG9pbnRlclVwJywgWyBldmVudCwgcG9pbnRlciBdICk7XG4gIHRoaXMuX2RyYWdQb2ludGVyVXAoIGV2ZW50LCBwb2ludGVyICk7XG59O1xuXG5wcm90by5fZHJhZ1BvaW50ZXJVcCA9IGZ1bmN0aW9uKCBldmVudCwgcG9pbnRlciApIHtcbiAgaWYgKCB0aGlzLmlzRHJhZ2dpbmcgKSB7XG4gICAgdGhpcy5fZHJhZ0VuZCggZXZlbnQsIHBvaW50ZXIgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBwb2ludGVyIGRpZG4ndCBtb3ZlIGVub3VnaCBmb3IgZHJhZyB0byBzdGFydFxuICAgIHRoaXMuX3N0YXRpY0NsaWNrKCBldmVudCwgcG9pbnRlciApO1xuICB9XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkcmFnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbi8vIGRyYWdTdGFydFxucHJvdG8uX2RyYWdTdGFydCA9IGZ1bmN0aW9uKCBldmVudCwgcG9pbnRlciApIHtcbiAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgLy8gcHJldmVudCBjbGlja3NcbiAgdGhpcy5pc1ByZXZlbnRpbmdDbGlja3MgPSB0cnVlO1xuICB0aGlzLmRyYWdTdGFydCggZXZlbnQsIHBvaW50ZXIgKTtcbn07XG5cbnByb3RvLmRyYWdTdGFydCA9IGZ1bmN0aW9uKCBldmVudCwgcG9pbnRlciApIHtcbiAgdGhpcy5lbWl0RXZlbnQoICdkcmFnU3RhcnQnLCBbIGV2ZW50LCBwb2ludGVyIF0gKTtcbn07XG5cbi8vIGRyYWdNb3ZlXG5wcm90by5fZHJhZ01vdmUgPSBmdW5jdGlvbiggZXZlbnQsIHBvaW50ZXIsIG1vdmVWZWN0b3IgKSB7XG4gIC8vIGRvIG5vdCBkcmFnIGlmIG5vdCBkcmFnZ2luZyB5ZXRcbiAgaWYgKCAhdGhpcy5pc0RyYWdnaW5nICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuZHJhZ01vdmUoIGV2ZW50LCBwb2ludGVyLCBtb3ZlVmVjdG9yICk7XG59O1xuXG5wcm90by5kcmFnTW92ZSA9IGZ1bmN0aW9uKCBldmVudCwgcG9pbnRlciwgbW92ZVZlY3RvciApIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgdGhpcy5lbWl0RXZlbnQoICdkcmFnTW92ZScsIFsgZXZlbnQsIHBvaW50ZXIsIG1vdmVWZWN0b3IgXSApO1xufTtcblxuLy8gZHJhZ0VuZFxucHJvdG8uX2RyYWdFbmQgPSBmdW5jdGlvbiggZXZlbnQsIHBvaW50ZXIgKSB7XG4gIC8vIHNldCBmbGFnc1xuICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgLy8gcmUtZW5hYmxlIGNsaWNraW5nIGFzeW5jXG4gIHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzLmlzUHJldmVudGluZ0NsaWNrcztcbiAgfS5iaW5kKCB0aGlzICkgKTtcblxuICB0aGlzLmRyYWdFbmQoIGV2ZW50LCBwb2ludGVyICk7XG59O1xuXG5wcm90by5kcmFnRW5kID0gZnVuY3Rpb24oIGV2ZW50LCBwb2ludGVyICkge1xuICB0aGlzLmVtaXRFdmVudCggJ2RyYWdFbmQnLCBbIGV2ZW50LCBwb2ludGVyIF0gKTtcbn07XG5cbi8vIC0tLS0tIG9uY2xpY2sgLS0tLS0gLy9cblxuLy8gaGFuZGxlIGFsbCBjbGlja3MgYW5kIHByZXZlbnQgY2xpY2tzIHdoZW4gZHJhZ2dpbmdcbnByb3RvLm9uY2xpY2sgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gIGlmICggdGhpcy5pc1ByZXZlbnRpbmdDbGlja3MgKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufTtcblxuLy8gLS0tLS0gc3RhdGljQ2xpY2sgLS0tLS0gLy9cblxuLy8gdHJpZ2dlcmVkIGFmdGVyIHBvaW50ZXIgZG93biAmIHVwIHdpdGggbm8vdGlueSBtb3ZlbWVudFxucHJvdG8uX3N0YXRpY0NsaWNrID0gZnVuY3Rpb24oIGV2ZW50LCBwb2ludGVyICkge1xuICAvLyBpZ25vcmUgZW11bGF0ZWQgbW91c2UgdXAgY2xpY2tzXG4gIGlmICggdGhpcy5pc0lnbm9yaW5nTW91c2VVcCAmJiBldmVudC50eXBlID09ICdtb3VzZXVwJyApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnN0YXRpY0NsaWNrKCBldmVudCwgcG9pbnRlciApO1xuXG4gIC8vIHNldCBmbGFnIGZvciBlbXVsYXRlZCBjbGlja3MgMzAwbXMgYWZ0ZXIgdG91Y2hlbmRcbiAgaWYgKCBldmVudC50eXBlICE9ICdtb3VzZXVwJyApIHtcbiAgICB0aGlzLmlzSWdub3JpbmdNb3VzZVVwID0gdHJ1ZTtcbiAgICAvLyByZXNldCBmbGFnIGFmdGVyIDMwMG1zXG4gICAgc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG4gICAgICBkZWxldGUgdGhpcy5pc0lnbm9yaW5nTW91c2VVcDtcbiAgICB9LmJpbmQoIHRoaXMgKSwgNDAwICk7XG4gIH1cbn07XG5cbnByb3RvLnN0YXRpY0NsaWNrID0gZnVuY3Rpb24oIGV2ZW50LCBwb2ludGVyICkge1xuICB0aGlzLmVtaXRFdmVudCggJ3N0YXRpY0NsaWNrJywgWyBldmVudCwgcG9pbnRlciBdICk7XG59O1xuXG4vLyAtLS0tLSB1dGlscyAtLS0tLSAvL1xuXG5VbmlkcmFnZ2VyLmdldFBvaW50ZXJQb2ludCA9IFVuaXBvaW50ZXIuZ2V0UG9pbnRlclBvaW50O1xuXG4vLyAtLS0tLSAgLS0tLS0gLy9cblxucmV0dXJuIFVuaWRyYWdnZXI7XG5cbn0pKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/unidragger/unidragger.js\n") },
vendor: 19,417 bytes, line 1
1"./node_modules/unipointer/unipointer.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * Unipointer v2.3.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( true ) {\n // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n __webpack_require__(/*! ev-emitter/ev-emitter */ \"./node_modules/ev-emitter/ev-emitter.js\")\n ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( EvEmitter ) {\n return factory( window, EvEmitter );\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n } else if ( 'ontouchstart' in window ) {\n // Touch Events. iOS Safari\n startEvent = 'touchstart';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5pcG9pbnRlci91bmlwb2ludGVyLmpzP2UwZjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQXlDO0FBQ2hEO0FBQ0EsSUFBSSxpQ0FBUTtBQUNaLE1BQU0sMkZBQXVCO0FBQzdCLEtBQUssbUNBQUU7QUFDUDtBQUNBLEtBQUs7QUFBQSxvR0FBQztBQUNOLEdBQUcsTUFBTSxFQVlOOztBQUVILENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsZUFBZTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxlQUFlO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsZUFBZTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLGVBQWU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdW5pcG9pbnRlci91bmlwb2ludGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBVbmlwb2ludGVyIHYyLjMuMFxuICogYmFzZSBjbGFzcyBmb3IgZG9pbmcgb25lIHRoaW5nIHdpdGggcG9pbnRlciBldmVudFxuICogTUlUIGxpY2Vuc2VcbiAqL1xuXG4vKmpzaGludCBicm93c2VyOiB0cnVlLCB1bmRlZjogdHJ1ZSwgdW51c2VkOiB0cnVlLCBzdHJpY3Q6IHRydWUgKi9cblxuKCBmdW5jdGlvbiggd2luZG93LCBmYWN0b3J5ICkge1xuICAvLyB1bml2ZXJzYWwgbW9kdWxlIGRlZmluaXRpb25cbiAgLyoganNoaW50IHN0cmljdDogZmFsc2UgKi8gLypnbG9iYWwgZGVmaW5lLCBtb2R1bGUsIHJlcXVpcmUgKi9cbiAgaWYgKCB0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCApIHtcbiAgICAvLyBBTURcbiAgICBkZWZpbmUoIFtcbiAgICAgICdldi1lbWl0dGVyL2V2LWVtaXR0ZXInXG4gICAgXSwgZnVuY3Rpb24oIEV2RW1pdHRlciApIHtcbiAgICAgIHJldHVybiBmYWN0b3J5KCB3aW5kb3csIEV2RW1pdHRlciApO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKCB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzICkge1xuICAgIC8vIENvbW1vbkpTXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KFxuICAgICAgd2luZG93LFxuICAgICAgcmVxdWlyZSgnZXYtZW1pdHRlcicpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBicm93c2VyIGdsb2JhbFxuICAgIHdpbmRvdy5Vbmlwb2ludGVyID0gZmFjdG9yeShcbiAgICAgIHdpbmRvdyxcbiAgICAgIHdpbmRvdy5FdkVtaXR0ZXJcbiAgICApO1xuICB9XG5cbn0oIHdpbmRvdywgZnVuY3Rpb24gZmFjdG9yeSggd2luZG93LCBFdkVtaXR0ZXIgKSB7XG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmZ1bmN0aW9uIFVuaXBvaW50ZXIoKSB7fVxuXG4vLyBpbmhlcml0IEV2RW1pdHRlclxudmFyIHByb3RvID0gVW5pcG9pbnRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBFdkVtaXR0ZXIucHJvdG90eXBlICk7XG5cbnByb3RvLmJpbmRTdGFydEV2ZW50ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG4gIHRoaXMuX2JpbmRTdGFydEV2ZW50KCBlbGVtLCB0cnVlICk7XG59O1xuXG5wcm90by51bmJpbmRTdGFydEV2ZW50ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG4gIHRoaXMuX2JpbmRTdGFydEV2ZW50KCBlbGVtLCBmYWxzZSApO1xufTtcblxuLyoqXG4gKiBBZGQgb3IgcmVtb3ZlIHN0YXJ0IGV2ZW50XG4gKiBAcGFyYW0ge0Jvb2xlYW59IGlzQWRkIC0gcmVtb3ZlIGlmIGZhbHNleVxuICovXG5wcm90by5fYmluZFN0YXJ0RXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgaXNBZGQgKSB7XG4gIC8vIG11bmdlIGlzQWRkLCBkZWZhdWx0IHRvIHRydWVcbiAgaXNBZGQgPSBpc0FkZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGlzQWRkO1xuICB2YXIgYmluZE1ldGhvZCA9IGlzQWRkID8gJ2FkZEV2ZW50TGlzdGVuZXInIDogJ3JlbW92ZUV2ZW50TGlzdGVuZXInO1xuXG4gIC8vIGRlZmF1bHQgdG8gbW91c2UgZXZlbnRzXG4gIHZhciBzdGFydEV2ZW50ID0gJ21vdXNlZG93bic7XG4gIGlmICggd2luZG93LlBvaW50ZXJFdmVudCApIHtcbiAgICAvLyBQb2ludGVyIEV2ZW50c1xuICAgIHN0YXJ0RXZlbnQgPSAncG9pbnRlcmRvd24nO1xuICB9IGVsc2UgaWYgKCAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgKSB7XG4gICAgLy8gVG91Y2ggRXZlbnRzLiBpT1MgU2FmYXJpXG4gICAgc3RhcnRFdmVudCA9ICd0b3VjaHN0YXJ0JztcbiAgfVxuICBlbGVtWyBiaW5kTWV0aG9kIF0oIHN0YXJ0RXZlbnQsIHRoaXMgKTtcbn07XG5cbi8vIHRyaWdnZXIgaGFuZGxlciBtZXRob2RzIGZvciBldmVudHNcbnByb3RvLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuICB2YXIgbWV0aG9kID0gJ29uJyArIGV2ZW50LnR5cGU7XG4gIGlmICggdGhpc1sgbWV0aG9kIF0gKSB7XG4gICAgdGhpc1sgbWV0aG9kIF0oIGV2ZW50ICk7XG4gIH1cbn07XG5cbi8vIHJldHVybnMgdGhlIHRvdWNoIHRoYXQgd2UncmUga2VlcGluZyB0cmFjayBvZlxucHJvdG8uZ2V0VG91Y2ggPSBmdW5jdGlvbiggdG91Y2hlcyApIHtcbiAgZm9yICggdmFyIGk9MDsgaSA8IHRvdWNoZXMubGVuZ3RoOyBpKysgKSB7XG4gICAgdmFyIHRvdWNoID0gdG91Y2hlc1tpXTtcbiAgICBpZiAoIHRvdWNoLmlkZW50aWZpZXIgPT0gdGhpcy5wb2ludGVySWRlbnRpZmllciApIHtcbiAgICAgIHJldHVybiB0b3VjaDtcbiAgICB9XG4gIH1cbn07XG5cbi8vIC0tLS0tIHN0YXJ0IGV2ZW50IC0tLS0tIC8vXG5cbnByb3RvLm9ubW91c2Vkb3duID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuICAvLyBkaXNtaXNzIGNsaWNrcyBmcm9tIHJpZ2h0IG9yIG1pZGRsZSBidXR0b25zXG4gIHZhciBidXR0b24gPSBldmVudC5idXR0b247XG4gIGlmICggYnV0dG9uICYmICggYnV0dG9uICE9PSAwICYmIGJ1dHRvbiAhPT0gMSApICkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLl9wb2ludGVyRG93biggZXZlbnQsIGV2ZW50ICk7XG59O1xuXG5wcm90by5vbnRvdWNoc3RhcnQgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gIHRoaXMuX3BvaW50ZXJEb3duKCBldmVudCwgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0gKTtcbn07XG5cbnByb3RvLm9ucG9pbnRlcmRvd24gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gIHRoaXMuX3BvaW50ZXJEb3duKCBldmVudCwgZXZlbnQgKTtcbn07XG5cbi8qKlxuICogcG9pbnRlciBzdGFydFxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqIEBwYXJhbSB7RXZlbnQgb3IgVG91Y2h9IHBvaW50ZXJcbiAqL1xucHJvdG8uX3BvaW50ZXJEb3duID0gZnVuY3Rpb24oIGV2ZW50LCBwb2ludGVyICkge1xuICAvLyBkaXNtaXNzIHJpZ2h0IGNsaWNrIGFuZCBvdGhlciBwb2ludGVyc1xuICAvLyBidXR0b24gPSAwIGlzIG9rYXksIDEtNCBub3RcbiAgaWYgKCBldmVudC5idXR0b24gfHwgdGhpcy5pc1BvaW50ZXJEb3duICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuaXNQb2ludGVyRG93biA9IHRydWU7XG4gIC8vIHNhdmUgcG9pbnRlciBpZGVudGlmaWVyIHRvIG1hdGNoIHVwIHRvdWNoIGV2ZW50c1xuICB0aGlzLnBvaW50ZXJJZGVudGlmaWVyID0gcG9pbnRlci5wb2ludGVySWQgIT09IHVuZGVmaW5lZCA/XG4gICAgLy8gcG9pbnRlcklkIGZvciBwb2ludGVyIGV2ZW50cywgdG91Y2guaW5kZW50aWZpZXIgZm9yIHRvdWNoIGV2ZW50c1xuICAgIHBvaW50ZXIucG9pbnRlcklkIDogcG9pbnRlci5pZGVudGlmaWVyO1xuXG4gIHRoaXMucG9pbnRlckRvd24oIGV2ZW50LCBwb2ludGVyICk7XG59O1xuXG5wcm90by5wb2ludGVyRG93biA9IGZ1bmN0aW9uKCBldmVudCwgcG9pbnRlciApIHtcbiAgdGhpcy5fYmluZFBvc3RTdGFydEV2ZW50cyggZXZlbnQgKTtcbiAgdGhpcy5lbWl0RXZlbnQoICdwb2ludGVyRG93bicsIFsgZXZlbnQsIHBvaW50ZXIgXSApO1xufTtcblxuLy8gaGFzaCBvZiBldmVudHMgdG8gYmUgYm91bmQgYWZ0ZXIgc3RhcnQgZXZlbnRcbnZhciBwb3N0U3RhcnRFdmVudHMgPSB7XG4gIG1vdXNlZG93bjogWyAnbW91c2Vtb3ZlJywgJ21vdXNldXAnIF0sXG4gIHRvdWNoc3RhcnQ6IFsgJ3RvdWNobW92ZScsICd0b3VjaGVuZCcsICd0b3VjaGNhbmNlbCcgXSxcbiAgcG9pbnRlcmRvd246IFsgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJ1cCcsICdwb2ludGVyY2FuY2VsJyBdLFxufTtcblxucHJvdG8uX2JpbmRQb3N0U3RhcnRFdmVudHMgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gIGlmICggIWV2ZW50ICkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBnZXQgcHJvcGVyIGV2ZW50cyB0byBtYXRjaCBzdGFydCBldmVudFxuICB2YXIgZXZlbnRzID0gcG9zdFN0YXJ0RXZlbnRzWyBldmVudC50eXBlIF07XG4gIC8vIGJpbmQgZXZlbnRzIHRvIG5vZGVcbiAgZXZlbnRzLmZvckVhY2goIGZ1bmN0aW9uKCBldmVudE5hbWUgKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIGV2ZW50TmFtZSwgdGhpcyApO1xuICB9LCB0aGlzICk7XG4gIC8vIHNhdmUgdGhlc2UgYXJndW1lbnRzXG4gIHRoaXMuX2JvdW5kUG9pbnRlckV2ZW50cyA9IGV2ZW50cztcbn07XG5cbnByb3RvLl91bmJpbmRQb3N0U3RhcnRFdmVudHMgPSBmdW5jdGlvbigpIHtcbiAgLy8gY2hlY2sgZm9yIF9ib3VuZEV2ZW50cywgaW4gY2FzZSBkcmFnRW5kIHRyaWdnZXJlZCB0d2ljZSAob2xkIElFOCBidWcpXG4gIGlmICggIXRoaXMuX2JvdW5kUG9pbnRlckV2ZW50cyApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5fYm91bmRQb2ludGVyRXZlbnRzLmZvckVhY2goIGZ1bmN0aW9uKCBldmVudE5hbWUgKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIGV2ZW50TmFtZSwgdGhpcyApO1xuICB9LCB0aGlzICk7XG5cbiAgZGVsZXRlIHRoaXMuX2JvdW5kUG9pbnRlckV2ZW50cztcbn07XG5cbi8vIC0tLS0tIG1vdmUgZXZlbnQgLS0tLS0gLy9cblxucHJvdG8ub25tb3VzZW1vdmUgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gIHRoaXMuX3BvaW50ZXJNb3ZlKCBldmVudCwgZXZlbnQgKTtcbn07XG5cbnByb3RvLm9ucG9pbnRlcm1vdmUgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gIGlmICggZXZlbnQucG9pbnRlcklkID09IHRoaXMucG9pbnRlcklkZW50aWZpZXIgKSB7XG4gICAgdGhpcy5fcG9pbnRlck1vdmUoIGV2ZW50LCBldmVudCApO1xuICB9XG59O1xuXG5wcm90by5vbnRvdWNobW92ZSA9IGZ1bmN0aW9uKCBldmVudCApIHtcbiAgdmFyIHRvdWNoID0gdGhpcy5nZXRUb3VjaCggZXZlbnQuY2hhbmdlZFRvdWNoZXMgKTtcbiAgaWYgKCB0b3VjaCApIHtcbiAgICB0aGlzLl9wb2ludGVyTW92ZSggZXZlbnQsIHRvdWNoICk7XG4gIH1cbn07XG5cbi8qKlxuICogcG9pbnRlciBtb3ZlXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHBhcmFtIHtFdmVudCBvciBUb3VjaH0gcG9pbnRlclxuICogQHByaXZhdGVcbiAqL1xucHJvdG8uX3BvaW50ZXJNb3ZlID0gZnVuY3Rpb24oIGV2ZW50LCBwb2ludGVyICkge1xuICB0aGlzLnBvaW50ZXJNb3ZlKCBldmVudCwgcG9pbnRlciApO1xufTtcblxuLy8gcHVibGljXG5wcm90by5wb2ludGVyTW92ZSA9IGZ1bmN0aW9uKCBldmVudCwgcG9pbnRlciApIHtcbiAgdGhpcy5lbWl0RXZlbnQoICdwb2ludGVyTW92ZScsIFsgZXZlbnQsIHBvaW50ZXIgXSApO1xufTtcblxuLy8gLS0tLS0gZW5kIGV2ZW50IC0tLS0tIC8vXG5cblxucHJvdG8ub25tb3VzZXVwID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuICB0aGlzLl9wb2ludGVyVXAoIGV2ZW50LCBldmVudCApO1xufTtcblxucHJvdG8ub25wb2ludGVydXAgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gIGlmICggZXZlbnQucG9pbnRlcklkID09IHRoaXMucG9pbnRlcklkZW50aWZpZXIgKSB7XG4gICAgdGhpcy5fcG9pbnRlclVwKCBldmVudCwgZXZlbnQgKTtcbiAgfVxufTtcblxucHJvdG8ub250b3VjaGVuZCA9IGZ1bmN0aW9uKCBldmVudCApIHtcbiAgdmFyIHRvdWNoID0gdGhpcy5nZXRUb3VjaCggZXZlbnQuY2hhbmdlZFRvdWNoZXMgKTtcbiAgaWYgKCB0b3VjaCApIHtcbiAgICB0aGlzLl9wb2ludGVyVXAoIGV2ZW50LCB0b3VjaCApO1xuICB9XG59O1xuXG4vKipcbiAqIHBvaW50ZXIgdXBcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKiBAcGFyYW0ge0V2ZW50IG9yIFRvdWNofSBwb2ludGVyXG4gKiBAcHJpdmF0ZVxuICovXG5wcm90by5fcG9pbnRlclVwID0gZnVuY3Rpb24oIGV2ZW50LCBwb2ludGVyICkge1xuICB0aGlzLl9wb2ludGVyRG9uZSgpO1xuICB0aGlzLnBvaW50ZXJVcCggZXZlbnQsIHBvaW50ZXIgKTtcbn07XG5cbi8vIHB1YmxpY1xucHJvdG8ucG9pbnRlclVwID0gZnVuY3Rpb24oIGV2ZW50LCBwb2ludGVyICkge1xuICB0aGlzLmVtaXRFdmVudCggJ3BvaW50ZXJVcCcsIFsgZXZlbnQsIHBvaW50ZXIgXSApO1xufTtcblxuLy8gLS0tLS0gcG9pbnRlciBkb25lIC0tLS0tIC8vXG5cbi8vIHRyaWdnZXJlZCBvbiBwb2ludGVyIHVwICYgcG9pbnRlciBjYW5jZWxcbnByb3RvLl9wb2ludGVyRG9uZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9wb2ludGVyUmVzZXQoKTtcbiAgdGhpcy5fdW5iaW5kUG9zdFN0YXJ0RXZlbnRzKCk7XG4gIHRoaXMucG9pbnRlckRvbmUoKTtcbn07XG5cbnByb3RvLl9wb2ludGVyUmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgLy8gcmVzZXQgcHJvcGVydGllc1xuICB0aGlzLmlzUG9pbnRlckRvd24gPSBmYWxzZTtcbiAgZGVsZXRlIHRoaXMucG9pbnRlcklkZW50aWZpZXI7XG59O1xuXG5wcm90by5wb2ludGVyRG9uZSA9IG5vb3A7XG5cbi8vIC0tLS0tIHBvaW50ZXIgY2FuY2VsIC0tLS0tIC8vXG5cbnByb3RvLm9ucG9pbnRlcmNhbmNlbCA9IGZ1bmN0aW9uKCBldmVudCApIHtcbiAgaWYgKCBldmVudC5wb2ludGVySWQgPT0gdGhpcy5wb2ludGVySWRlbnRpZmllciApIHtcbiAgICB0aGlzLl9wb2ludGVyQ2FuY2VsKCBldmVudCwgZXZlbnQgKTtcbiAgfVxufTtcblxucHJvdG8ub250b3VjaGNhbmNlbCA9IGZ1bmN0aW9uKCBldmVudCApIHtcbiAgdmFyIHRvdWNoID0gdGhpcy5nZXRUb3VjaCggZXZlbnQuY2hhbmdlZFRvdWNoZXMgKTtcbiAgaWYgKCB0b3VjaCApIHtcbiAgICB0aGlzLl9wb2ludGVyQ2FuY2VsKCBldmVudCwgdG91Y2ggKTtcbiAgfVxufTtcblxuLyoqXG4gKiBwb2ludGVyIGNhbmNlbFxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqIEBwYXJhbSB7RXZlbnQgb3IgVG91Y2h9IHBvaW50ZXJcbiAqIEBwcml2YXRlXG4gKi9cbnByb3RvLl9wb2ludGVyQ2FuY2VsID0gZnVuY3Rpb24oIGV2ZW50LCBwb2ludGVyICkge1xuICB0aGlzLl9wb2ludGVyRG9uZSgpO1xuICB0aGlzLnBvaW50ZXJDYW5jZWwoIGV2ZW50LCBwb2ludGVyICk7XG59O1xuXG4vLyBwdWJsaWNcbnByb3RvLnBvaW50ZXJDYW5jZWwgPSBmdW5jdGlvbiggZXZlbnQsIHBvaW50ZXIgKSB7XG4gIHRoaXMuZW1pdEV2ZW50KCAncG9pbnRlckNhbmNlbCcsIFsgZXZlbnQsIHBvaW50ZXIgXSApO1xufTtcblxuLy8gLS0tLS0gIC0tLS0tIC8vXG5cbi8vIHV0aWxpdHkgZnVuY3Rpb24gZm9yIGdldHRpbmcgeC95IGNvb3JkcyBmcm9tIGV2ZW50XG5Vbmlwb2ludGVyLmdldFBvaW50ZXJQb2ludCA9IGZ1bmN0aW9uKCBwb2ludGVyICkge1xuICByZXR1cm4ge1xuICAgIHg6IHBvaW50ZXIucGFnZVgsXG4gICAgeTogcG9pbnRlci5wYWdlWVxuICB9O1xufTtcblxuLy8gLS0tLS0gIC0tLS0tIC8vXG5cbnJldHVybiBVbmlwb2ludGVyO1xuXG59KSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/unipointer/unipointer.js\n") },
vendor: 32,918 bytes, line 1
1"./node_modules/vanilla-modal/dist/index.js": function (module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else { var mod; }\n})(this, function (exports) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n var defaults = {\n modal: '.modal',\n modalInner: '.modal-inner',\n modalContent: '.modal-content',\n open: '[data-modal-open]',\n close: '[data-modal-close]',\n page: 'body',\n class: 'modal-visible',\n loadClass: 'vanilla-modal',\n clickOutside: true,\n closeKeys: [27],\n transitions: true,\n transitionEnd: null,\n onBeforeOpen: null,\n onBeforeClose: null,\n onOpen: null,\n onClose: null\n };\n\n function throwError(message) {\n // eslint-disable-next-line no-console\n console.error('VanillaModal: ' + message);\n }\n\n function find(arr, callback) {\n return function (key) {\n var filteredArray = arr.filter(callback);\n return filteredArray[0] ? filteredArray[0][key] : undefined;\n };\n }\n\n function transitionEndVendorSniff() {\n var el = document.createElement('div');\n var transitions = [{ key: 'transition', value: 'transitionend' }, { key: 'OTransition', value: 'otransitionend' }, { key: 'MozTransition', value: 'transitionend' }, { key: 'WebkitTransition', value: 'webkitTransitionEnd' }];\n return find(transitions, function (_ref) {\n var key = _ref.key;\n return typeof el.style[key] !== 'undefined';\n })('value');\n }\n\n function isPopulatedArray(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]' && arr.length;\n }\n\n function getNode(selector, parent) {\n var targetNode = parent || document;\n var node = targetNode.querySelector(selector);\n if (!node) {\n throwError(selector + ' not found in document.');\n }\n return node;\n }\n\n function addClass(el, className) {\n if (!(el instanceof HTMLElement)) {\n throwError('Not a valid HTML element.');\n }\n el.setAttribute('class', el.className.split(' ').filter(function (cn) {\n return cn !== className;\n }).concat(className).join(' '));\n }\n\n function removeClass(el, className) {\n if (!(el instanceof HTMLElement)) {\n throwError('Not a valid HTML element.');\n }\n el.setAttribute('class', el.className.split(' ').filter(function (cn) {\n return cn !== className;\n }).join(' '));\n }\n\n function getElementContext(e) {\n if (e && typeof e.hash === 'string') {\n return document.querySelector(e.hash);\n } else if (typeof e === 'string') {\n return document.querySelector(e);\n }\n throwError('No selector supplied to open()');\n return null;\n }\n\n function applyUserSettings(settings) {\n return _extends({}, defaults, settings, {\n transitionEnd: transitionEndVendorSniff()\n });\n }\n\n function matches(e, selector) {\n var allMatches = (e.target.document || e.target.ownerDocument).querySelectorAll(selector);\n for (var i = 0; i < allMatches.length; i += 1) {\n var node = e.target;\n while (node && node !== document.body) {\n if (node === allMatches[i]) {\n return node;\n }\n node = node.parentNode;\n }\n }\n return null;\n }\n\n var VanillaModal = function () {\n function VanillaModal(settings) {\n _classCallCheck(this, VanillaModal);\n\n this.isOpen = false;\n this.current = null;\n this.isListening = false;\n\n this.settings = applyUserSettings(settings);\n this.dom = this.getDomNodes();\n\n this.open = this.open.bind(this);\n this.close = this.close.bind(this);\n this.closeKeyHandler = this.closeKeyHandler.bind(this);\n this.outsideClickHandler = this.outsideClickHandler.bind(this);\n this.delegateOpen = this.delegateOpen.bind(this);\n this.delegateClose = this.delegateClose.bind(this);\n this.listen = this.listen.bind(this);\n this.destroy = this.destroy.bind(this);\n\n this.addLoadedCssClass();\n this.listen();\n }\n\n _createClass(VanillaModal, [{\n key: 'getDomNodes',\n value: function getDomNodes() {\n var _settings = this.settings,\n modal = _settings.modal,\n page = _settings.page,\n modalInner = _settings.modalInner,\n modalContent = _settings.modalContent;\n\n return {\n modal: getNode(modal),\n page: getNode(page),\n modalInner: getNode(modalInner, getNode(modal)),\n modalContent: getNode(modalContent, getNode(modal))\n };\n }\n }, {\n key: 'addLoadedCssClass',\n value: function addLoadedCssClass() {\n addClass(this.dom.page, this.settings.loadClass);\n }\n }, {\n key: 'setOpenId',\n value: function setOpenId(id) {\n var page = this.dom.page;\n\n page.setAttribute('data-current-modal', id || 'anonymous');\n }\n }, {\n key: 'removeOpenId',\n value: function removeOpenId() {\n var page = this.dom.page;\n\n page.removeAttribute('data-current-modal');\n }\n }, {\n key: 'open',\n value: function open(allMatches, e) {\n var page = this.dom.page;\n var _settings2 = this.settings,\n onBeforeOpen = _settings2.onBeforeOpen,\n onOpen = _settings2.onOpen;\n\n if (!(this.current instanceof HTMLElement === false)) {\n throwError('VanillaModal target must exist on page.');\n return;\n }\n this.releaseNode(this.current);\n this.current = getElementContext(allMatches);\n if (typeof onBeforeOpen === 'function') {\n onBeforeOpen.call(this, e);\n }\n this.captureNode(this.current);\n addClass(page, this.settings.class);\n this.setOpenId(this.current.id);\n this.isOpen = true;\n if (typeof onOpen === 'function') {\n onOpen.call(this, e);\n }\n }\n }, {\n key: 'detectTransition',\n value: function detectTransition() {\n var modal = this.dom.modal;\n\n var css = window.getComputedStyle(modal, null);\n return Boolean(['transitionDuration', 'oTransitionDuration', 'MozTransitionDuration', 'webkitTransitionDuration'].filter(function (i) {\n return typeof css[i] === 'string' && parseFloat(css[i]) > 0;\n }).length);\n }\n }, {\n key: 'close',\n value: function close(e) {\n var _settings3 = this.settings,\n transitions = _settings3.transitions,\n transitionEnd = _settings3.transitionEnd,\n onBeforeClose = _settings3.onBeforeClose;\n\n var hasTransition = this.detectTransition();\n if (this.isOpen) {\n this.isOpen = false;\n if (typeof onBeforeClose === 'function') {\n onBeforeClose.call(this, e);\n }\n removeClass(this.dom.page, this.settings.class);\n if (transitions && transitionEnd && hasTransition) {\n this.closeModalWithTransition(e);\n } else {\n this.closeModal(e);\n }\n }\n }\n }, {\n key: 'closeModal',\n value: function closeModal(e) {\n var onClose = this.settings.onClose;\n\n this.removeOpenId(this.dom.page);\n this.releaseNode(this.current);\n this.isOpen = false;\n this.current = null;\n if (typeof onClose === 'function') {\n onClose.call(this, e);\n }\n }\n }, {\n key: 'closeModalWithTransition',\n value: function closeModalWithTransition(e) {\n var _this = this;\n\n var modal = this.dom.modal;\n var transitionEnd = this.settings.transitionEnd;\n\n var closeTransitionHandler = function closeTransitionHandler() {\n modal.removeEventListener(transitionEnd, closeTransitionHandler);\n _this.closeModal(e);\n };\n modal.addEventListener(transitionEnd, closeTransitionHandler);\n }\n }, {\n key: 'captureNode',\n value: function captureNode(node) {\n var modalContent = this.dom.modalContent;\n\n while (node.childNodes.length) {\n modalContent.appendChild(node.childNodes[0]);\n }\n }\n }, {\n key: 'releaseNode',\n value: function releaseNode(node) {\n var modalContent = this.dom.modalContent;\n\n while (modalContent.childNodes.length) {\n node.appendChild(modalContent.childNodes[0]);\n }\n }\n }, {\n key: 'closeKeyHandler',\n value: function closeKeyHandler(e) {\n var closeKeys = this.settings.closeKeys;\n\n if (isPopulatedArray(closeKeys) && closeKeys.indexOf(e.which) > -1 && this.isOpen === true) {\n e.preventDefault();\n this.close(e);\n }\n }\n }, {\n key: 'outsideClickHandler',\n value: function outsideClickHandler(e) {\n var clickOutside = this.settings.clickOutside;\n var modalInner = this.dom.modalInner;\n\n if (clickOutside) {\n var node = e.target;\n while (node && node !== document.body) {\n if (node === modalInner) {\n return;\n }\n node = node.parentNode;\n }\n this.close(e);\n }\n }\n }, {\n key: 'delegateOpen',\n value: function delegateOpen(e) {\n var open = this.settings.open;\n\n var matchedNode = matches(e, open);\n if (matchedNode) {\n e.preventDefault();\n this.open(matchedNode, e);\n }\n }\n }, {\n key: 'delegateClose',\n value: function delegateClose(e) {\n var close = this.settings.close;\n\n if (matches(e, close)) {\n e.preventDefault();\n this.close(e);\n }\n }\n }, {\n key: 'listen',\n value: function listen() {\n var modal = this.dom.modal;\n\n if (!this.isListening) {\n modal.addEventListener('click', this.outsideClickHandler, false);\n document.addEventListener('keydown', this.closeKeyHandler, false);\n document.addEventListener('click', this.delegateOpen, false);\n document.addEventListener('click', this.delegateClose, false);\n this.isListening = true;\n } else {\n throwError('Event listeners already applied.');\n }\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n var modal = this.dom.modal;\n\n if (this.isListening) {\n this.close();\n modal.removeEventListener('click', this.outsideClickHandler);\n document.removeEventListener('keydown', this.closeKeyHandler);\n document.removeEventListener('click', this.delegateOpen);\n document.removeEventListener('click', this.delegateClose);\n this.isListening = false;\n } else {\n throwError('Event listeners already removed.');\n }\n }\n }]);\n\n return VanillaModal;\n }();\n\n exports.default = VanillaModal;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdmFuaWxsYS1tb2RhbC9kaXN0L2luZGV4LmpzPzI0YjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxNQUFNLElBQTBDO0FBQ2hELElBQUksaUNBQU8sQ0FBQyxPQUFTLENBQUMsb0NBQUUsT0FBTztBQUFBO0FBQUE7QUFBQSxvR0FBQztBQUNoQyxHQUFHLE1BQU0sWUFRTjtBQUNILENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQkFBcUIsa0JBQWtCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0IsNENBQTRDLEdBQUcsOENBQThDLEdBQUcsK0NBQStDLEdBQUcsd0RBQXdEO0FBQ2xPO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsdUJBQXVCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy92YW5pbGxhLW1vZGFsL2Rpc3QvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZmFjdG9yeShleHBvcnRzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbW9kID0ge1xuICAgICAgZXhwb3J0czoge31cbiAgICB9O1xuICAgIGZhY3RvcnkobW9kLmV4cG9ydHMpO1xuICAgIGdsb2JhbC5WYW5pbGxhTW9kYWwgPSBtb2QuZXhwb3J0cztcbiAgfVxufSkodGhpcywgZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gIH1cblxuICB2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gICAgfTtcbiAgfSgpO1xuXG4gIHZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgdmFyIGRlZmF1bHRzID0ge1xuICAgIG1vZGFsOiAnLm1vZGFsJyxcbiAgICBtb2RhbElubmVyOiAnLm1vZGFsLWlubmVyJyxcbiAgICBtb2RhbENvbnRlbnQ6ICcubW9kYWwtY29udGVudCcsXG4gICAgb3BlbjogJ1tkYXRhLW1vZGFsLW9wZW5dJyxcbiAgICBjbG9zZTogJ1tkYXRhLW1vZGFsLWNsb3NlXScsXG4gICAgcGFnZTogJ2JvZHknLFxuICAgIGNsYXNzOiAnbW9kYWwtdmlzaWJsZScsXG4gICAgbG9hZENsYXNzOiAndmFuaWxsYS1tb2RhbCcsXG4gICAgY2xpY2tPdXRzaWRlOiB0cnVlLFxuICAgIGNsb3NlS2V5czogWzI3XSxcbiAgICB0cmFuc2l0aW9uczogdHJ1ZSxcbiAgICB0cmFuc2l0aW9uRW5kOiBudWxsLFxuICAgIG9uQmVmb3JlT3BlbjogbnVsbCxcbiAgICBvbkJlZm9yZUNsb3NlOiBudWxsLFxuICAgIG9uT3BlbjogbnVsbCxcbiAgICBvbkNsb3NlOiBudWxsXG4gIH07XG5cbiAgZnVuY3Rpb24gdGhyb3dFcnJvcihtZXNzYWdlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKCdWYW5pbGxhTW9kYWw6ICcgKyBtZXNzYWdlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmQoYXJyLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgZmlsdGVyZWRBcnJheSA9IGFyci5maWx0ZXIoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIGZpbHRlcmVkQXJyYXlbMF0gPyBmaWx0ZXJlZEFycmF5WzBdW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zaXRpb25FbmRWZW5kb3JTbmlmZigpIHtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgdHJhbnNpdGlvbnMgPSBbeyBrZXk6ICd0cmFuc2l0aW9uJywgdmFsdWU6ICd0cmFuc2l0aW9uZW5kJyB9LCB7IGtleTogJ09UcmFuc2l0aW9uJywgdmFsdWU6ICdvdHJhbnNpdGlvbmVuZCcgfSwgeyBrZXk6ICdNb3pUcmFuc2l0aW9uJywgdmFsdWU6ICd0cmFuc2l0aW9uZW5kJyB9LCB7IGtleTogJ1dlYmtpdFRyYW5zaXRpb24nLCB2YWx1ZTogJ3dlYmtpdFRyYW5zaXRpb25FbmQnIH1dO1xuICAgIHJldHVybiBmaW5kKHRyYW5zaXRpb25zLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGtleSA9IF9yZWYua2V5O1xuICAgICAgcmV0dXJuIHR5cGVvZiBlbC5zdHlsZVtrZXldICE9PSAndW5kZWZpbmVkJztcbiAgICB9KSgndmFsdWUnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzUG9wdWxhdGVkQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnIpID09PSAnW29iamVjdCBBcnJheV0nICYmIGFyci5sZW5ndGg7XG4gIH1cblxuICBmdW5jdGlvbiBnZXROb2RlKHNlbGVjdG9yLCBwYXJlbnQpIHtcbiAgICB2YXIgdGFyZ2V0Tm9kZSA9IHBhcmVudCB8fCBkb2N1bWVudDtcbiAgICB2YXIgbm9kZSA9IHRhcmdldE5vZGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICB0aHJvd0Vycm9yKHNlbGVjdG9yICsgJyBub3QgZm91bmQgaW4gZG9jdW1lbnQuJyk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkQ2xhc3MoZWwsIGNsYXNzTmFtZSkge1xuICAgIGlmICghKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICB0aHJvd0Vycm9yKCdOb3QgYSB2YWxpZCBIVE1MIGVsZW1lbnQuJyk7XG4gICAgfVxuICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBlbC5jbGFzc05hbWUuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKGNuKSB7XG4gICAgICByZXR1cm4gY24gIT09IGNsYXNzTmFtZTtcbiAgICB9KS5jb25jYXQoY2xhc3NOYW1lKS5qb2luKCcgJykpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWwsIGNsYXNzTmFtZSkge1xuICAgIGlmICghKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICB0aHJvd0Vycm9yKCdOb3QgYSB2YWxpZCBIVE1MIGVsZW1lbnQuJyk7XG4gICAgfVxuICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBlbC5jbGFzc05hbWUuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKGNuKSB7XG4gICAgICByZXR1cm4gY24gIT09IGNsYXNzTmFtZTtcbiAgICB9KS5qb2luKCcgJykpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RWxlbWVudENvbnRleHQoZSkge1xuICAgIGlmIChlICYmIHR5cGVvZiBlLmhhc2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlLmhhc2gpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTtcbiAgICB9XG4gICAgdGhyb3dFcnJvcignTm8gc2VsZWN0b3Igc3VwcGxpZWQgdG8gb3BlbigpJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBseVVzZXJTZXR0aW5ncyhzZXR0aW5ncykge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgZGVmYXVsdHMsIHNldHRpbmdzLCB7XG4gICAgICB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kVmVuZG9yU25pZmYoKVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF0Y2hlcyhlLCBzZWxlY3Rvcikge1xuICAgIHZhciBhbGxNYXRjaGVzID0gKGUudGFyZ2V0LmRvY3VtZW50IHx8IGUudGFyZ2V0Lm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTWF0Y2hlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIG5vZGUgPSBlLnRhcmdldDtcbiAgICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IGFsbE1hdGNoZXNbaV0pIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBWYW5pbGxhTW9kYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVmFuaWxsYU1vZGFsKHNldHRpbmdzKSB7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVmFuaWxsYU1vZGFsKTtcblxuICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuY3VycmVudCA9IG51bGw7XG4gICAgICB0aGlzLmlzTGlzdGVuaW5nID0gZmFsc2U7XG5cbiAgICAgIHRoaXMuc2V0dGluZ3MgPSBhcHBseVVzZXJTZXR0aW5ncyhzZXR0aW5ncyk7XG4gICAgICB0aGlzLmRvbSA9IHRoaXMuZ2V0RG9tTm9kZXMoKTtcblxuICAgICAgdGhpcy5vcGVuID0gdGhpcy5vcGVuLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmNsb3NlID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5jbG9zZUtleUhhbmRsZXIgPSB0aGlzLmNsb3NlS2V5SGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5vdXRzaWRlQ2xpY2tIYW5kbGVyID0gdGhpcy5vdXRzaWRlQ2xpY2tIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmRlbGVnYXRlT3BlbiA9IHRoaXMuZGVsZWdhdGVPcGVuLmJpbmQodGhpcyk7XG4gICAgICB0aGlzLmRlbGVnYXRlQ2xvc2UgPSB0aGlzLmRlbGVnYXRlQ2xvc2UuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMubGlzdGVuID0gdGhpcy5saXN0ZW4uYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZGVzdHJveSA9IHRoaXMuZGVzdHJveS5iaW5kKHRoaXMpO1xuXG4gICAgICB0aGlzLmFkZExvYWRlZENzc0NsYXNzKCk7XG4gICAgICB0aGlzLmxpc3RlbigpO1xuICAgIH1cblxuICAgIF9jcmVhdGVDbGFzcyhWYW5pbGxhTW9kYWwsIFt7XG4gICAgICBrZXk6ICdnZXREb21Ob2RlcycsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RG9tTm9kZXMoKSB7XG4gICAgICAgIHZhciBfc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLFxuICAgICAgICAgICAgbW9kYWwgPSBfc2V0dGluZ3MubW9kYWwsXG4gICAgICAgICAgICBwYWdlID0gX3NldHRpbmdzLnBhZ2UsXG4gICAgICAgICAgICBtb2RhbElubmVyID0gX3NldHRpbmdzLm1vZGFsSW5uZXIsXG4gICAgICAgICAgICBtb2RhbENvbnRlbnQgPSBfc2V0dGluZ3MubW9kYWxDb250ZW50O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kYWw6IGdldE5vZGUobW9kYWwpLFxuICAgICAgICAgIHBhZ2U6IGdldE5vZGUocGFnZSksXG4gICAgICAgICAgbW9kYWxJbm5lcjogZ2V0Tm9kZShtb2RhbElubmVyLCBnZXROb2RlKG1vZGFsKSksXG4gICAgICAgICAgbW9kYWxDb250ZW50OiBnZXROb2RlKG1vZGFsQ29udGVudCwgZ2V0Tm9kZShtb2RhbCkpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiAnYWRkTG9hZGVkQ3NzQ2xhc3MnLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZExvYWRlZENzc0NsYXNzKCkge1xuICAgICAgICBhZGRDbGFzcyh0aGlzLmRvbS5wYWdlLCB0aGlzLnNldHRpbmdzLmxvYWRDbGFzcyk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiAnc2V0T3BlbklkJyxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRPcGVuSWQoaWQpIHtcbiAgICAgICAgdmFyIHBhZ2UgPSB0aGlzLmRvbS5wYWdlO1xuXG4gICAgICAgIHBhZ2Uuc2V0QXR0cmlidXRlKCdkYXRhLWN1cnJlbnQtbW9kYWwnLCBpZCB8fCAnYW5vbnltb3VzJyk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiAncmVtb3ZlT3BlbklkJyxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVPcGVuSWQoKSB7XG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5kb20ucGFnZTtcblxuICAgICAgICBwYWdlLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1jdXJyZW50LW1vZGFsJyk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiAnb3BlbicsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gb3BlbihhbGxNYXRjaGVzLCBlKSB7XG4gICAgICAgIHZhciBwYWdlID0gdGhpcy5kb20ucGFnZTtcbiAgICAgICAgdmFyIF9zZXR0aW5nczIgPSB0aGlzLnNldHRpbmdzLFxuICAgICAgICAgICAgb25CZWZvcmVPcGVuID0gX3NldHRpbmdzMi5vbkJlZm9yZU9wZW4sXG4gICAgICAgICAgICBvbk9wZW4gPSBfc2V0dGluZ3MyLm9uT3BlbjtcblxuICAgICAgICBpZiAoISh0aGlzLmN1cnJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgdGhyb3dFcnJvcignVmFuaWxsYU1vZGFsIHRhcmdldCBtdXN0IGV4aXN0IG9uIHBhZ2UuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVsZWFzZU5vZGUodGhpcy5jdXJyZW50KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gZ2V0RWxlbWVudENvbnRleHQoYWxsTWF0Y2hlcyk7XG4gICAgICAgIGlmICh0eXBlb2Ygb25CZWZvcmVPcGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25CZWZvcmVPcGVuLmNhbGwodGhpcywgZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYXB0dXJlTm9kZSh0aGlzLmN1cnJlbnQpO1xuICAgICAgICBhZGRDbGFzcyhwYWdlLCB0aGlzLnNldHRpbmdzLmNsYXNzKTtcbiAgICAgICAgdGhpcy5zZXRPcGVuSWQodGhpcy5jdXJyZW50LmlkKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIG9uT3BlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uT3Blbi5jYWxsKHRoaXMsIGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiAnZGV0ZWN0VHJhbnNpdGlvbicsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZGV0ZWN0VHJhbnNpdGlvbigpIHtcbiAgICAgICAgdmFyIG1vZGFsID0gdGhpcy5kb20ubW9kYWw7XG5cbiAgICAgICAgdmFyIGNzcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG1vZGFsLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oWyd0cmFuc2l0aW9uRHVyYXRpb24nLCAnb1RyYW5zaXRpb25EdXJhdGlvbicsICdNb3pUcmFuc2l0aW9uRHVyYXRpb24nLCAnd2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uJ10uZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBjc3NbaV0gPT09ICdzdHJpbmcnICYmIHBhcnNlRmxvYXQoY3NzW2ldKSA+IDA7XG4gICAgICAgIH0pLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiAnY2xvc2UnLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKGUpIHtcbiAgICAgICAgdmFyIF9zZXR0aW5nczMgPSB0aGlzLnNldHRpbmdzLFxuICAgICAgICAgICAgdHJhbnNpdGlvbnMgPSBfc2V0dGluZ3MzLnRyYW5zaXRpb25zLFxuICAgICAgICAgICAgdHJhbnNpdGlvbkVuZCA9IF9zZXR0aW5nczMudHJhbnNpdGlvbkVuZCxcbiAgICAgICAgICAgIG9uQmVmb3JlQ2xvc2UgPSBfc2V0dGluZ3MzLm9uQmVmb3JlQ2xvc2U7XG5cbiAgICAgICAgdmFyIGhhc1RyYW5zaXRpb24gPSB0aGlzLmRldGVjdFRyYW5zaXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICBpZiAodHlwZW9mIG9uQmVmb3JlQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG9uQmVmb3JlQ2xvc2UuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5kb20ucGFnZSwgdGhpcy5zZXR0aW5ncy5jbGFzcyk7XG4gICAgICAgICAgaWYgKHRyYW5zaXRpb25zICYmIHRyYW5zaXRpb25FbmQgJiYgaGFzVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1vZGFsV2l0aFRyYW5zaXRpb24oZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VNb2RhbChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6ICdjbG9zZU1vZGFsJyxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZU1vZGFsKGUpIHtcbiAgICAgICAgdmFyIG9uQ2xvc2UgPSB0aGlzLnNldHRpbmdzLm9uQ2xvc2U7XG5cbiAgICAgICAgdGhpcy5yZW1vdmVPcGVuSWQodGhpcy5kb20ucGFnZSk7XG4gICAgICAgIHRoaXMucmVsZWFzZU5vZGUodGhpcy5jdXJyZW50KTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvbkNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25DbG9zZS5jYWxsKHRoaXMsIGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiAnY2xvc2VNb2RhbFdpdGhUcmFuc2l0aW9uJyxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZU1vZGFsV2l0aFRyYW5zaXRpb24oZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgIHZhciBtb2RhbCA9IHRoaXMuZG9tLm1vZGFsO1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkVuZCA9IHRoaXMuc2V0dGluZ3MudHJhbnNpdGlvbkVuZDtcblxuICAgICAgICB2YXIgY2xvc2VUcmFuc2l0aW9uSGFuZGxlciA9IGZ1bmN0aW9uIGNsb3NlVHJhbnNpdGlvbkhhbmRsZXIoKSB7XG4gICAgICAgICAgbW9kYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kLCBjbG9zZVRyYW5zaXRpb25IYW5kbGVyKTtcbiAgICAgICAgICBfdGhpcy5jbG9zZU1vZGFsKGUpO1xuICAgICAgICB9O1xuICAgICAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmQsIGNsb3NlVHJhbnNpdGlvbkhhbmRsZXIpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogJ2NhcHR1cmVOb2RlJyxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjYXB0dXJlTm9kZShub2RlKSB7XG4gICAgICAgIHZhciBtb2RhbENvbnRlbnQgPSB0aGlzLmRvbS5tb2RhbENvbnRlbnQ7XG5cbiAgICAgICAgd2hpbGUgKG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICBtb2RhbENvbnRlbnQuYXBwZW5kQ2hpbGQobm9kZS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogJ3JlbGVhc2VOb2RlJyxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlTm9kZShub2RlKSB7XG4gICAgICAgIHZhciBtb2RhbENvbnRlbnQgPSB0aGlzLmRvbS5tb2RhbENvbnRlbnQ7XG5cbiAgICAgICAgd2hpbGUgKG1vZGFsQ29udGVudC5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQobW9kYWxDb250ZW50LmNoaWxkTm9kZXNbMF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiAnY2xvc2VLZXlIYW5kbGVyJyxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZUtleUhhbmRsZXIoZSkge1xuICAgICAgICB2YXIgY2xvc2VLZXlzID0gdGhpcy5zZXR0aW5ncy5jbG9zZUtleXM7XG5cbiAgICAgICAgaWYgKGlzUG9wdWxhdGVkQXJyYXkoY2xvc2VLZXlzKSAmJiBjbG9zZUtleXMuaW5kZXhPZihlLndoaWNoKSA+IC0xICYmIHRoaXMuaXNPcGVuID09PSB0cnVlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuY2xvc2UoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6ICdvdXRzaWRlQ2xpY2tIYW5kbGVyJyxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvdXRzaWRlQ2xpY2tIYW5kbGVyKGUpIHtcbiAgICAgICAgdmFyIGNsaWNrT3V0c2lkZSA9IHRoaXMuc2V0dGluZ3MuY2xpY2tPdXRzaWRlO1xuICAgICAgICB2YXIgbW9kYWxJbm5lciA9IHRoaXMuZG9tLm1vZGFsSW5uZXI7XG5cbiAgICAgICAgaWYgKGNsaWNrT3V0c2lkZSkge1xuICAgICAgICAgIHZhciBub2RlID0gZS50YXJnZXQ7XG4gICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICAgICAgaWYgKG5vZGUgPT09IG1vZGFsSW5uZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jbG9zZShlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogJ2RlbGVnYXRlT3BlbicsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZGVsZWdhdGVPcGVuKGUpIHtcbiAgICAgICAgdmFyIG9wZW4gPSB0aGlzLnNldHRpbmdzLm9wZW47XG5cbiAgICAgICAgdmFyIG1hdGNoZWROb2RlID0gbWF0Y2hlcyhlLCBvcGVuKTtcbiAgICAgICAgaWYgKG1hdGNoZWROb2RlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMub3BlbihtYXRjaGVkTm9kZSwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6ICdkZWxlZ2F0ZUNsb3NlJyxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZWxlZ2F0ZUNsb3NlKGUpIHtcbiAgICAgICAgdmFyIGNsb3NlID0gdGhpcy5zZXR0aW5ncy5jbG9zZTtcblxuICAgICAgICBpZiAobWF0Y2hlcyhlLCBjbG9zZSkpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5jbG9zZShlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogJ2xpc3RlbicsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gbGlzdGVuKCkge1xuICAgICAgICB2YXIgbW9kYWwgPSB0aGlzLmRvbS5tb2RhbDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNMaXN0ZW5pbmcpIHtcbiAgICAgICAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub3V0c2lkZUNsaWNrSGFuZGxlciwgZmFsc2UpO1xuICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmNsb3NlS2V5SGFuZGxlciwgZmFsc2UpO1xuICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kZWxlZ2F0ZU9wZW4sIGZhbHNlKTtcbiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZGVsZWdhdGVDbG9zZSwgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuaXNMaXN0ZW5pbmcgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93RXJyb3IoJ0V2ZW50IGxpc3RlbmVycyBhbHJlYWR5IGFwcGxpZWQuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6ICdkZXN0cm95JyxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgbW9kYWwgPSB0aGlzLmRvbS5tb2RhbDtcblxuICAgICAgICBpZiAodGhpcy5pc0xpc3RlbmluZykge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICBtb2RhbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub3V0c2lkZUNsaWNrSGFuZGxlcik7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuY2xvc2VLZXlIYW5kbGVyKTtcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZGVsZWdhdGVPcGVuKTtcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZGVsZWdhdGVDbG9zZSk7XG4gICAgICAgICAgdGhpcy5pc0xpc3RlbmluZyA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93RXJyb3IoJ0V2ZW50IGxpc3RlbmVycyBhbHJlYWR5IHJlbW92ZWQuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gVmFuaWxsYU1vZGFsO1xuICB9KCk7XG5cbiAgZXhwb3J0cy5kZWZhdWx0ID0gVmFuaWxsYU1vZGFsO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/vanilla-modal/dist/index.js\n") },
1"./source/scripts/Accordion.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Accordion; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n // IE does not correctly apply CSS transforms to svg elements, which are used\n// in this theme to transform icon-chevron-down to a minus/close icon.\n// We need to manually get the calculated transform value and apply it to the\n// transform attribute, which is properly supported. Yuck.\n\nfunction fixIEsetTransformAttribute($block) {\n if (navigator.userAgent.match(/(Trident\\/7\\.)|(MSIE)/) === null) {\n return;\n }\n\n var $paths = $block.parent().find(\'path\');\n $paths.each(function (index, path) {\n var transform = window.getComputedStyle(path).getPropertyValue(\'transform\');\n path.setAttribute(\'transform\', transform);\n });\n}\n\nvar Accordion =\n/*#__PURE__*/\nfunction () {\n function Accordion($el) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Accordion);\n\n this.$el = $el;\n this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, {\n activeClass: \'accordion--active\',\n autoCollapse: false,\n content: \'[data-accordion-content]\',\n eligibleClass: \'has-accordion\'\n }, options);\n }\n\n _createClass(Accordion, [{\n key: "toggle",\n value: function toggle($block) {\n var open = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (open || !$block.hasClass(this.options.activeClass)) {\n if (this.options.autoCollapse) {\n this.closeOpen();\n }\n\n this._open($block);\n } else {\n this._close($block);\n }\n }\n }, {\n key: "closeOpen",\n value: function closeOpen() {\n var _this = this;\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.$el.find(".".concat(this.options.activeClass))).each(function (i, block) {\n var $block = jquery__WEBPACK_IMPORTED_MODULE_0___default()(block);\n\n if ($block.hasClass(_this.options.activeClass)) {\n _this._close($block);\n }\n });\n }\n }, {\n key: "openAll",\n value: function openAll() {\n var _this2 = this;\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.$el.find(".".concat(this.options.eligibleClass))).each(function (i, block) {\n _this2._open(jquery__WEBPACK_IMPORTED_MODULE_0___default()(block), 0);\n });\n }\n }, {\n key: "_open",\n value: function _open($block) {\n $block.addClass(this.options.activeClass);\n fixIEsetTransformAttribute($block);\n }\n }, {\n key: "_close",\n value: function _close($block) {\n $block.removeClass(this.options.activeClass);\n fixIEsetTransformAttribute($block);\n }\n }]);\n\n return Accordion;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9BY2NvcmRpb24uanM/NzZmMiJdLCJuYW1lcyI6WyJmaXhJRXNldFRyYW5zZm9ybUF0dHJpYnV0ZSIsIiRibG9jayIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIm1hdGNoIiwiJHBhdGhzIiwicGFyZW50Iiwi
1ZmluZCIsImVhY2giLCJpbmRleCIsInBhdGgiLCJ0cmFuc2Zvcm0iLCJ3aW5kb3ciLCJnZXRDb21wdXRlZFN0eWxlIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInNldEF0dHJpYnV0ZSIsIkFjY29yZGlvbiIsIiRlbCIsIm9wdGlvbnMiLCIkIiwiZXh0ZW5kIiwiYWN0aXZlQ2xhc3MiLCJhdXRvQ29sbGFwc2UiLCJjb250ZW50IiwiZWxpZ2libGVDbGFzcyIsIm9wZW4iLCJoYXNDbGFzcyIsImNsb3NlT3BlbiIsIl9vcGVuIiwiX2Nsb3NlIiwiaSIsImJsb2NrIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztDQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFNBQVNBLDBCQUFULENBQW9DQyxNQUFwQyxFQUE0QztBQUMxQyxNQUFJQyxTQUFTLENBQUNDLFNBQVYsQ0FBb0JDLEtBQXBCLENBQTBCLHVCQUExQixNQUF1RCxJQUEzRCxFQUFpRTtBQUMvRDtBQUNEOztBQUVELE1BQU1DLE1BQU0sR0FBR0osTUFBTSxDQUFDSyxNQUFQLEdBQWdCQyxJQUFoQixDQUFxQixNQUFyQixDQUFmO0FBRUFGLFFBQU0sQ0FBQ0csSUFBUCxDQUFZLFVBQUNDLEtBQUQsRUFBUUMsSUFBUixFQUFpQjtBQUMzQixRQUFNQyxTQUFTLEdBQUdDLE1BQU0sQ0FDckJDLGdCQURlLENBQ0VILElBREYsRUFFZkksZ0JBRmUsQ0FFRSxXQUZGLENBQWxCO0FBR0FKLFFBQUksQ0FBQ0ssWUFBTCxDQUFrQixXQUFsQixFQUErQkosU0FBL0I7QUFDRCxHQUxEO0FBTUQ7O0lBRW9CSyxTOzs7QUFDbkIscUJBQVlDLEdBQVosRUFBK0I7QUFBQSxRQUFkQyxPQUFjLHVFQUFKLEVBQUk7O0FBQUE7O0FBQzdCLFNBQUtELEdBQUwsR0FBV0EsR0FBWDtBQUVBLFNBQUtDLE9BQUwsR0FBZUMsNkNBQUMsQ0FBQ0MsTUFBRixDQUNiLEVBRGEsRUFFYjtBQUNFQyxpQkFBVyxFQUFFLG1CQURmO0FBRUVDLGtCQUFZLEVBQUUsS0FGaEI7QUFHRUMsYUFBTyxFQUFFLDBCQUhYO0FBSUVDLG1CQUFhLEVBQUU7QUFKakIsS0FGYSxFQVFiTixPQVJhLENBQWY7QUFVRDs7OzsyQkFFTWpCLE0sRUFBc0I7QUFBQSxVQUFkd0IsSUFBYyx1RUFBUCxLQUFPOztBQUMzQixVQUFJQSxJQUFJLElBQUksQ0FBQ3hCLE1BQU0sQ0FBQ3lCLFFBQVAsQ0FBZ0IsS0FBS1IsT0FBTCxDQUFhRyxXQUE3QixDQUFiLEVBQXdEO0FBQ3RELFlBQUksS0FBS0gsT0FBTCxDQUFhSSxZQUFqQixFQUErQjtBQUM3QixlQUFLSyxTQUFMO0FBQ0Q7O0FBQ0QsYUFBS0MsS0FBTCxDQUFXM0IsTUFBWDtBQUNELE9BTEQsTUFLTztBQUNMLGFBQUs0QixNQUFMLENBQVk1QixNQUFaO0FBQ0Q7QUFDRjs7O2dDQUVXO0FBQUE7O0FBQ1ZrQixtREFBQyxDQUFDLEtBQUtGLEdBQUwsQ0FBU1YsSUFBVCxZQUFrQixLQUFLVyxPQUFMLENBQWFHLFdBQS9CLEVBQUQsQ0FBRCxDQUFpRGIsSUFBakQsQ0FBc0QsVUFBQ3NCLENBQUQsRUFBSUMsS0FBSixFQUFjO0FBQ2xFLFlBQU05QixNQUFNLEdBQUdrQiw2Q0FBQyxDQUFDWSxLQUFELENBQWhCOztBQUNBLFlBQUk5QixNQUFNLENBQUN5QixRQUFQLENBQWdCLEtBQUksQ0FBQ1IsT0FBTCxDQUFhRyxXQUE3QixDQUFKLEVBQStDO0FBQzdDLGVBQUksQ0FBQ1EsTUFBTCxDQUFZNUIsTUFBWjtBQUNEO0FBQ0YsT0FMRDtBQU1EOzs7OEJBRVM7QUFBQTs7QUFDUmtCLG1EQUFDLENBQUMsS0FBS0YsR0FBTCxDQUFTVixJQUFULFlBQWtCLEtBQUtXLE9BQUwsQ0FBYU0sYUFBL0IsRUFBRCxDQUFELENBQW1EaEIsSUFBbkQsQ0FBd0QsVUFBQ3NCLENBQUQsRUFBSUMsS0FBSixFQUFjO0FBQ3BFLGNBQUksQ0FBQ0gsS0FBTCxDQUFXVCw2Q0FBQyxDQUFDWSxLQUFELENBQVosRUFBcUIsQ0FBckI7QUFDRCxPQUZEO0FBR0Q7OzswQkFFSzlCLE0sRUFBUTtBQUNaQSxZQUFNLENBQUMrQixRQUFQLENBQWdCLEtBQUtkLE9BQUwsQ0FBYUcsV0FBN0I7QUFDQXJCLGdDQUEwQixDQUFDQyxNQUFELENBQTFCO0FBQ0Q7OzsyQkFFTUEsTSxFQUFRO0FBQ2JBLFlBQU0sQ0FBQ2dDLFdBQVAsQ0FBbUIsS0FBS2YsT0FBTCxDQUFhRyxXQUFoQztBQUNBckIsZ0NBQTBCLENBQUNDLE1BQUQsQ0FBMUI7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL0FjY29yZGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbi8vIElFIGRvZXMgbm90IGNvcnJlY3RseSBhcHBseSBDU1MgdHJhbnNmb3JtcyB0byBzdmcgZWxlbWVudHMsIHdoaWNoIGFyZSB1c2VkXG4vLyBpbiB0aGlzIHRoZW1lIHRvIHRyYW5zZm9ybSAgaWNvbi1jaGV2cm9uLWRvd24gdG8gYSBtaW51cy9jbG9zZSBpY29uLlxuLy8gV2UgbmVlZCB0byBtYW51YWxseSBnZXQgdGhlIGNhbGN1bGF0ZWQgdHJhbnNmb3JtIHZhbHVlIGFuZCBhcHBseSBpdCB0byB0aGVcbi8vIHRyYW5zZm9ybSBhdHRyaWJ1dGUsIHdoaWNoIGlzIHByb3Blcmx5IHN1cHBvcnRlZC4gWXVjay5cbmZ1bmN0aW9uIGZpeElFc2V0VHJhbnNmb3JtQXR0cmlidXRlKCRibG9jaykge1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvKFRyaWRlbnRcXC83XFwuKXwoTVNJRSkvKSA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0ICRwYXRocyA9ICRibG9jay5wYXJlbnQoKS5maW5kKCdwYXRoJyk7XG5cbiAgJHBhdGhzLmVhY2goKGluZGV4LCBwYXRoKSA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gd2luZG93XG4gICAgICAuZ2V0Q29tcHV0ZWRTdHlsZShwYXRoKVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zZm9ybScpO1xuICAgIHBhdGguc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cmFuc2Zvcm0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWNjb3JkaW9uIHtcbiAgY29uc3RydWN0b3IoJGVsLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLiRlbCA9ICRlbDtcblxuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGFjdGl2ZUNsYXNzOiAnYWNjb3JkaW9uLS1hY3RpdmUnLFxuICAgICAgICBhdXRvQ29sbGFwc2U6IGZhbHNlLFxuICAgICAgICBjb250ZW50OiAnW2RhdGEtYWNjb3JkaW9uLWNvbnRlbnRdJyxcbiAgICAgICAgZWxpZ2libGVDbGFzczogJ2hhcy1hY2NvcmRpb24nLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTtcbiAgfVxuXG4gIHRvZ2dsZSgkYmxvY2ssIG9wZW4gPSBmYWxzZSkge1xuICAgIGlmIChvcGVuIHx8ICEkYmxvY2suaGFzQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvQ29sbGFwc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZU9wZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29wZW4oJGJsb2NrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2xvc2UoJGJsb2NrKTtcbiAgICB9XG4gI
1H1cblxuICBjbG9zZU9wZW4oKSB7XG4gICAgJCh0aGlzLiRlbC5maW5kKGAuJHt0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3N9YCkpLmVhY2goKGksIGJsb2NrKSA9PiB7XG4gICAgICBjb25zdCAkYmxvY2sgPSAkKGJsb2NrKTtcbiAgICAgIGlmICgkYmxvY2suaGFzQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSkge1xuICAgICAgICB0aGlzLl9jbG9zZSgkYmxvY2spO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3BlbkFsbCgpIHtcbiAgICAkKHRoaXMuJGVsLmZpbmQoYC4ke3RoaXMub3B0aW9ucy5lbGlnaWJsZUNsYXNzfWApKS5lYWNoKChpLCBibG9jaykgPT4ge1xuICAgICAgdGhpcy5fb3BlbigkKGJsb2NrKSwgMCk7XG4gICAgfSk7XG4gIH1cblxuICBfb3BlbigkYmxvY2spIHtcbiAgICAkYmxvY2suYWRkQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKTtcbiAgICBmaXhJRXNldFRyYW5zZm9ybUF0dHJpYnV0ZSgkYmxvY2spO1xuICB9XG5cbiAgX2Nsb3NlKCRibG9jaykge1xuICAgICRibG9jay5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpO1xuICAgIGZpeElFc2V0VHJhbnNmb3JtQXR0cmlidXRlKCRibG9jayk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/Accordion.js\n') },
1"./source/scripts/Forms.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Forms; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _helpers_Quantity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/Quantity */ "./source/scripts/helpers/Quantity.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar Forms =\n/*#__PURE__*/\nfunction () {\n function Forms(el) {\n var _this = this;\n\n var selector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \'.form-field-input\';\n\n _classCallCheck(this, Forms);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el);\n this.filledClass = \'form-field-filled\';\n this.fieldSelector = selector;\n this.quantityItems = [];\n this.$quantityWrapper = this.$el.find(\'[data-quantity-wrapper]\');\n this._toggleFilled = this._toggleFilled.bind(this);\n this.$el.on(\'focus.forms\', this.fieldSelector, this._toggleFilled);\n this.$el.on(\'blur.forms\', this.fieldSelector, this._toggleFilled);\n\n this._checkFilled();\n\n if (this.$quantityWrapper.length) {\n this.$quantityWrapper.each(function (i, element) {\n _this.quantityItems.push(new _helpers_Quantity__WEBPACK_IMPORTED_MODULE_1__["default"](element));\n });\n }\n }\n\n _createClass(Forms, [{\n key: "unload",\n value: function unload() {\n this.$el.off(\'.forms\');\n this.quantityItems.forEach(function (quantityItem) {\n quantityItem.unload();\n });\n }\n }, {\n key: "_checkFilled",\n value: function _checkFilled() {\n var _this2 = this;\n\n this.$el.find(this.fieldSelector).each(function (i, el) {\n if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).hasClass(_this2.filledClass)) {\n return;\n }\n\n _this2._toggleFilled(null, el);\n });\n }\n }, {\n key: "_toggleFilled",\n value: function _toggleFilled() {\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var target = event ? event.currentTarget : el;\n var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(target);\n var value = target.value;\n var isFilled = value ? value.length > 0 : false;\n\n try {\n isFilled = isFilled || $target.is(\':-webkit-autofill\');\n $target.toggleClass(this.filledClass, isFilled);\n } catch (e) {\n $target.toggleClass(this.filledClass, isFilled);\n }\n }\n }]);\n\n return Forms;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9Gb3Jtcy5qcz85MGU3Il0sIm5hbWVzIjpbIkZvcm1zIiwiZWwiLCJzZWxlY3RvciIsIiRlbCIsIiQiLCJmaWxsZWRDbGFzcyIsImZpZWxkU2VsZWN0b3IiLCJxdWFudGl0eUl0ZW1zIiwiJHF1YW50aXR5V3JhcHBlciIsImZpbmQiLCJfdG9nZ2xlRmlsbGVkIiwiYmluZCIsIm9uIiwiX2NoZWNrRmlsbGVkIiwibGVuZ3RoIiwiZWFjaCIsImkiLCJlbGVtZW50IiwicHVzaCIsIlF1YW50aXR5Iiwib2ZmIiwiZm9yRWFjaCIsInF1YW50aXR5SXRlbSIsInVubG9hZCIsImhhc0NsYXNzIiwiZXZlbnQiLCJ0YXJnZXQiLCJ
1jdXJyZW50VGFyZ2V0IiwiJHRhcmdldCIsInZhbHVlIiwiaXNGaWxsZWQiLCJpcyIsInRvZ2dsZUNsYXNzIiwiZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztJQUVxQkEsSzs7O0FBQ25CLGlCQUFZQyxFQUFaLEVBQWdEO0FBQUE7O0FBQUEsUUFBaENDLFFBQWdDLHVFQUFyQixtQkFBcUI7O0FBQUE7O0FBQzlDLFNBQUtDLEdBQUwsR0FBV0MsNkNBQUMsQ0FBQ0gsRUFBRCxDQUFaO0FBQ0EsU0FBS0ksV0FBTCxHQUFtQixtQkFBbkI7QUFDQSxTQUFLQyxhQUFMLEdBQXFCSixRQUFyQjtBQUVBLFNBQUtLLGFBQUwsR0FBcUIsRUFBckI7QUFDQSxTQUFLQyxnQkFBTCxHQUF3QixLQUFLTCxHQUFMLENBQVNNLElBQVQsQ0FBYyx5QkFBZCxDQUF4QjtBQUVBLFNBQUtDLGFBQUwsR0FBcUIsS0FBS0EsYUFBTCxDQUFtQkMsSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBckI7QUFDQSxTQUFLUixHQUFMLENBQVNTLEVBQVQsQ0FBWSxhQUFaLEVBQTJCLEtBQUtOLGFBQWhDLEVBQStDLEtBQUtJLGFBQXBEO0FBQ0EsU0FBS1AsR0FBTCxDQUFTUyxFQUFULENBQVksWUFBWixFQUEwQixLQUFLTixhQUEvQixFQUE4QyxLQUFLSSxhQUFuRDs7QUFFQSxTQUFLRyxZQUFMOztBQUVBLFFBQUksS0FBS0wsZ0JBQUwsQ0FBc0JNLE1BQTFCLEVBQWtDO0FBQ2hDLFdBQUtOLGdCQUFMLENBQXNCTyxJQUF0QixDQUEyQixVQUFDQyxDQUFELEVBQUlDLE9BQUosRUFBZ0I7QUFDekMsYUFBSSxDQUFDVixhQUFMLENBQW1CVyxJQUFuQixDQUF3QixJQUFJQyx5REFBSixDQUFhRixPQUFiLENBQXhCO0FBQ0QsT0FGRDtBQUdEO0FBQ0Y7Ozs7NkJBRVE7QUFDUCxXQUFLZCxHQUFMLENBQVNpQixHQUFULENBQWEsUUFBYjtBQUVBLFdBQUtiLGFBQUwsQ0FBbUJjLE9BQW5CLENBQTJCLFVBQUFDLFlBQVksRUFBSTtBQUN6Q0Esb0JBQVksQ0FBQ0MsTUFBYjtBQUNELE9BRkQ7QUFHRDs7O21DQUVjO0FBQUE7O0FBQ2IsV0FBS3BCLEdBQUwsQ0FBU00sSUFBVCxDQUFjLEtBQUtILGFBQW5CLEVBQWtDUyxJQUFsQyxDQUF1QyxVQUFDQyxDQUFELEVBQUlmLEVBQUosRUFBVztBQUNoRCxZQUFJRyw2Q0FBQyxDQUFDSCxFQUFELENBQUQsQ0FBTXVCLFFBQU4sQ0FBZSxNQUFJLENBQUNuQixXQUFwQixDQUFKLEVBQXNDO0FBQ3BDO0FBQ0Q7O0FBRUQsY0FBSSxDQUFDSyxhQUFMLENBQW1CLElBQW5CLEVBQXlCVCxFQUF6QjtBQUNELE9BTkQ7QUFPRDs7O29DQUV1QztBQUFBLFVBQTFCd0IsS0FBMEIsdUVBQWxCLElBQWtCO0FBQUEsVUFBWnhCLEVBQVksdUVBQVAsS0FBTztBQUN0QyxVQUFNeUIsTUFBTSxHQUFHRCxLQUFLLEdBQUdBLEtBQUssQ0FBQ0UsYUFBVCxHQUF5QjFCLEVBQTdDO0FBQ0EsVUFBTTJCLE9BQU8sR0FBR3hCLDZDQUFDLENBQUNzQixNQUFELENBQWpCO0FBRnNDLFVBRzlCRyxLQUg4QixHQUdwQkgsTUFIb0IsQ0FHOUJHLEtBSDhCO0FBS3RDLFVBQUlDLFFBQVEsR0FBR0QsS0FBSyxHQUFHQSxLQUFLLENBQUNmLE1BQU4sR0FBZSxDQUFsQixHQUFzQixLQUExQzs7QUFFQSxVQUFJO0FBQ0ZnQixnQkFBUSxHQUFHQSxRQUFRLElBQUlGLE9BQU8sQ0FBQ0csRUFBUixDQUFXLG1CQUFYLENBQXZCO0FBQ0FILGVBQU8sQ0FBQ0ksV0FBUixDQUFvQixLQUFLM0IsV0FBekIsRUFBc0N5QixRQUF0QztBQUNELE9BSEQsQ0FHRSxPQUFPRyxDQUFQLEVBQVU7QUFDVkwsZUFBTyxDQUFDSSxXQUFSLENBQW9CLEtBQUszQixXQUF6QixFQUFzQ3lCLFFBQXRDO0FBQ0Q7QUFDRiIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL0Zvcm1zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBRdWFudGl0eSBmcm9tICcuL2hlbHBlcnMvUXVhbnRpdHknO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtcyB7XG4gIGNvbnN0cnVjdG9yKGVsLCBzZWxlY3RvciA9ICcuZm9ybS1maWVsZC1pbnB1dCcpIHtcbiAgICB0aGlzLiRlbCA9ICQoZWwpO1xuICAgIHRoaXMuZmlsbGVkQ2xhc3MgPSAnZm9ybS1maWVsZC1maWxsZWQnO1xuICAgIHRoaXMuZmllbGRTZWxlY3RvciA9IHNlbGVjdG9yO1xuXG4gICAgdGhpcy5xdWFudGl0eUl0ZW1zID0gW107XG4gICAgdGhpcy4kcXVhbnRpdHlXcmFwcGVyID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtcXVhbnRpdHktd3JhcHBlcl0nKTtcblxuICAgIHRoaXMuX3RvZ2dsZUZpbGxlZCA9IHRoaXMuX3RvZ2dsZUZpbGxlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuJGVsLm9uKCdmb2N1cy5mb3JtcycsIHRoaXMuZmllbGRTZWxlY3RvciwgdGhpcy5fdG9nZ2xlRmlsbGVkKTtcbiAgICB0aGlzLiRlbC5vbignYmx1ci5mb3JtcycsIHRoaXMuZmllbGRTZWxlY3RvciwgdGhpcy5fdG9nZ2xlRmlsbGVkKTtcblxuICAgIHRoaXMuX2NoZWNrRmlsbGVkKCk7XG5cbiAgICBpZiAodGhpcy4kcXVhbnRpdHlXcmFwcGVyLmxlbmd0aCkge1xuICAgICAgdGhpcy4kcXVhbnRpdHlXcmFwcGVyLmVhY2goKGksIGVsZW1lbnQpID0+IHtcbiAgICAgICAgdGhpcy5xdWFudGl0eUl0ZW1zLnB1c2gobmV3IFF1YW50aXR5KGVsZW1lbnQpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICB0aGlzLiRlbC5vZmYoJy5mb3JtcycpO1xuXG4gICAgdGhpcy5xdWFudGl0eUl0ZW1zLmZvckVhY2gocXVhbnRpdHlJdGVtID0+IHtcbiAgICAgIHF1YW50aXR5SXRlbS51bmxvYWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jaGVja0ZpbGxlZCgpIHtcbiAgICB0aGlzLiRlbC5maW5kKHRoaXMuZmllbGRTZWxlY3RvcikuZWFjaCgoaSwgZWwpID0+IHtcbiAgICAgIGlmICgkKGVsKS5oYXNDbGFzcyh0aGlzLmZpbGxlZENsYXNzKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3RvZ2dsZUZpbGxlZChudWxsLCBlbCk7XG4gICAgfSk7XG4gIH1cblxuICBfdG9nZ2xlRmlsbGVkKGV2ZW50ID0gbnVsbCwgZWwgPSBmYWxzZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50ID8gZXZlbnQuY3VycmVudFRhcmdldCA6IGVsO1xuICAgIGNvbnN0ICR0YXJnZXQgPSAkKHRhcmdldCk7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGFyZ2V0O1xuXG4gICAgbGV0IGlzRmlsbGVkID0gdmFsdWUgPyB2YWx1ZS
15sZW5ndGggPiAwIDogZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgaXNGaWxsZWQgPSBpc0ZpbGxlZCB8fCAkdGFyZ2V0LmlzKCc6LXdlYmtpdC1hdXRvZmlsbCcpO1xuICAgICAgJHRhcmdldC50b2dnbGVDbGFzcyh0aGlzLmZpbGxlZENsYXNzLCBpc0ZpbGxlZCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgJHRhcmdldC50b2dnbGVDbGFzcyh0aGlzLmZpbGxlZENsYXNzLCBpc0ZpbGxlZCk7XG4gICAgfVxuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/Forms.js\n') },
1"./source/scripts/Layout.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\nvar eventHandlers = [];\nvar previousBreakpoint = null;\n\nfunction getBreakpoint() {\n return window.getComputedStyle(document.documentElement, ':after').getPropertyValue('content').replace(/\"/g, '');\n}\n\n$(window).on('resize', function (event) {\n var currentBreakpoint = getBreakpoint();\n\n if (previousBreakpoint !== currentBreakpoint) {\n eventHandlers.forEach(function (eventHandler) {\n eventHandler(event, {\n previous: previousBreakpoint,\n current: currentBreakpoint\n });\n });\n }\n\n previousBreakpoint = currentBreakpoint;\n});\n\nfunction isBreakpoint() {\n for (var i = 0; i < arguments.length; i++) {\n if (getBreakpoint() === (i < 0 || arguments.length <= i ? undefined : arguments[i])) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction onBreakpointChange(eventHandler) {\n if (eventHandlers.indexOf(eventHandler) === -1) {\n eventHandlers.push(eventHandler);\n }\n}\n\nfunction offBreakpointChange(eventHandler) {\n var index = eventHandlers.indexOf(eventHandler);\n\n if (index !== -1) {\n eventHandlers.splice(index, 1);\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getBreakpoint: getBreakpoint,\n isBreakpoint: isBreakpoint,\n onBreakpointChange: onBreakpointChange,\n offBreakpointChange: offBreakpointChange\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9MYXlvdXQuanM/M2EzNiJdLCJuYW1lcyI6WyJldmVudEhhbmRsZXJzIiwicHJldmlvdXNCcmVha3BvaW50IiwiZ2V0QnJlYWtwb2ludCIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJyZXBsYWNlIiwiJCIsIm9uIiwiZXZlbnQiLCJjdXJyZW50QnJlYWtwb2ludCIsImZvckVhY2giLCJldmVudEhhbmRsZXIiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJpc0JyZWFrcG9pbnQiLCJpIiwibGVuZ3RoIiwib25CcmVha3BvaW50Q2hhbmdlIiwiaW5kZXhPZiIsInB1c2giLCJvZmZCcmVha3BvaW50Q2hhbmdlIiwiaW5kZXgiLCJzcGxpY2UiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUEsSUFBTUEsYUFBYSxHQUFHLEVBQXRCO0FBQ0EsSUFBSUMsa0JBQWtCLEdBQUcsSUFBekI7O0FBRUEsU0FBU0MsYUFBVCxHQUF5QjtBQUN2QixTQUFPQyxNQUFNLENBQ1ZDLGdCQURJLENBQ2FDLFFBQVEsQ0FBQ0MsZUFEdEIsRUFDdUMsUUFEdkMsRUFFSkMsZ0JBRkksQ0FFYSxTQUZiLEVBR0pDLE9BSEksQ0FHSSxJQUhKLEVBR1UsRUFIVixDQUFQO0FBSUQ7O0FBRURDLENBQUMsQ0FBQ04sTUFBRCxDQUFELENBQVVPLEVBQVYsQ0FBYSxRQUFiLEVBQXVCLFVBQUFDLEtBQUssRUFBSTtBQUM5QixNQUFNQyxpQkFBaUIsR0FBR1YsYUFBYSxFQUF2Qzs7QUFFQSxNQUFJRCxrQkFBa0IsS0FBS1csaUJBQTNCLEVBQThDO0FBQzVDWixpQkFBYSxDQUFDYSxPQUFkLENBQXNCLFVBQUFDLFlBQVksRUFBSTtBQUNwQ0Esa0JBQVksQ0FBQ0gsS0FBRCxFQUFRO0FBQ2xCSSxnQkFBUSxFQUFFZCxrQkFEUTtBQUVsQmUsZUFBTyxFQUFFSjtBQUZTLE9BQVIsQ0FBWjtBQUlELEtBTEQ7QUFNRDs7QUFFRFgsb0JBQWtCLEdBQUdXLGlCQUFyQjtBQUNELENBYkQ7O0FBZUEsU0FBU0ssWUFBVCxHQUFzQztBQUNwQyxPQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcsVUFBWUMsTUFBaEMsRUFBd0NELENBQUMsRUFBekMsRUFBNkM7QUFDM0MsUUFBSWhCLGFBQWEsUUFBbUJnQixDQUFuQiw0QkFBbUJBLENBQW5CLHlCQUFtQkEsQ0FBbkIsRUFBakIsRUFBd0M7QUFDdEMsYUFBTyxJQUFQO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPLEtBQVA7QUFDRDs7QUFFRCxTQUFTRSxrQkFBVCxDQUE0Qk4sWUFBNUIsRUFBMEM7QUFDeEMsTUFBSWQsYUFBYSxDQUFDcUIsT0FBZCxDQUFzQlAsWUFBdEIsTUFBd0MsQ0FBQyxDQUE3QyxFQUFnRDtBQUM5Q2QsaUJBQWEsQ0FBQ3NCLElBQWQsQ0FBbUJSLFlBQW5CO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTUyxtQkFBVCxDQUE2QlQsWUFBN0IsRUFBMkM7QUFDekMsTUFBTVUsS0FBSyxHQUFHeEIsYUFBYSxDQUFDcUIsT0FBZCxDQUFzQlAsWUFBdEIsQ0FBZDs7QUFFQSxNQUFJVSxLQUFLLEtBQUssQ0FBQyxDQUFmLEVBQWtCO0FBQ2hCeEIsaUJBQWEsQ0FBQ3lCLE1BQWQsQ0FBcUJELEtBQXJCLEVBQTRCLENBQTVCO0FBQ0Q7QUFDRjs7QUFFYztBQUNidEIsZUFBYSxFQUFiQSxhQURhO0FBRWJlLGNBQVksRUFBWkEsWUFGYTtBQUdiRyxvQkFBa0IsRUFBbEJBLGtCQUhhO0FBSWJHLHFCQUFtQixFQUFuQkE7QUFKYSxDQUFmIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvTGF5b3V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXZlbnRIYW5kbGVycyA9IFtdO1xubGV0IHByZXZpb3VzQnJlYWtwb2ludCA9IG51bGw7XG5cbmZ1bmN0aW9uIGdldEJyZWFrcG9pbnQoKSB7XG4gIHJldHVybiB3aW5kb3dcbiAgICAuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICc6YWZ0ZXInKVxuICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50JylcbiAgICAucmVwbGFjZSgvXCIvZywgJycpO1xufVxuXG4kKHdpbmRvdykub24oJ3Jlc2l6ZScsIGV2ZW50ID0+IHtcbiAgY29uc3QgY3VycmVudEJyZWFrcG9pbnQgPSBnZXRCcmVha3BvaW50KCk7XG5cbiAgaWYgKHByZXZpb3VzQnJlYWtwb2ludCAhPT0gY3VycmVudEJyZWFrcG9pbnQpIHtcbiAgICBldmVudEhhbmRsZXJzLmZvckVhY2goZXZlbnRIYW5kbGVyID0+IHtcbiAgICAgIGV2ZW50SGFuZGxlcihldmVudCwge1xuICAgICAgICBwcmV2aW91czogcHJldmlvdXNCcmVha3BvaW50LFxuICAgICAgICBjdXJyZW50OiBjdXJyZW50QnJlYWtwb2ludCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJldmlvdXNCcmVha3BvaW50ID0gY3VycmVudEJyZWFrcG9pbnQ7XG59KTtcblxuZnVuY3Rpb24gaXNCcmVha3BvaW50KC4uLmJyZWFrcG9pbnRzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZ2V0QnJlYWtwb2ludCgpID09PSBicmVha3BvaW50c1tpXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbkJyZWFrcG9pbnRDaGFuZ2UoZXZlbnRIYW5kbGVyKSB7XG4gIGlmIChldmVudEhhbmRsZXJzLmluZGV4T2YoZXZlbn
1RIYW5kbGVyKSA9PT0gLTEpIHtcbiAgICBldmVudEhhbmRsZXJzLnB1c2goZXZlbnRIYW5kbGVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvZmZCcmVha3BvaW50Q2hhbmdlKGV2ZW50SGFuZGxlcikge1xuICBjb25zdCBpbmRleCA9IGV2ZW50SGFuZGxlcnMuaW5kZXhPZihldmVudEhhbmRsZXIpO1xuXG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBldmVudEhhbmRsZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRCcmVha3BvaW50LFxuICBpc0JyZWFrcG9pbnQsXG4gIG9uQnJlYWtwb2ludENoYW5nZSxcbiAgb2ZmQnJlYWtwb2ludENoYW5nZSxcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/Layout.js\n") },
1"./source/scripts/Search.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Search; });\n/* harmony import */ var eventemitter2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! eventemitter2 */ "./node_modules/eventemitter2/lib/eventemitter2.js");\n/* harmony import */ var eventemitter2__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(eventemitter2__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n/**\n * Search API Class\n */\n\nvar Search =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n _inherits(Search, _EventEmitter);\n\n /**\n * Create a new Search instance, and override defaults\n *\n * @param options\n * @property {string} options.type - Search restriction. Use \'article\', \'page\', \'product\', or \'\'\n * @property {string} options.view - Search template suffix. Specify different templates as needed\n */\n function Search() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Search);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Search).call(this));\n _this.searchType = options.type || \'\';\n _this.view = options.view || \'json\';\n _this.inProgress = false;\n _this.xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject(\'Microsoft.XMLHTTP\');\n _this._xhrLoad = _this._xhrLoad.bind(_assertThisInitialized(_this));\n _this._xhrError = _this._xhrError.bind(_assertThisInitialized(_this));\n _this._xhrAbort = _this._xhrAbort.bind(_assertThisInitialized(_this));\n\n _this._bindEvents();\n\n return _this;\n }\n\n _createClass(Search, [{\n key: "_bindEvents",\n value: function _bindEvents() {\n this.xhr.addEventListener(\'load\', this._xhrLoad);\n this.xhr.addEventListener(\'error\', this._xhrError);\n this.xhr.addEventListener(\'abort\', this._xhrAbort);\n }
1\n /**\n * XHR was successfull\n *\n * @description XHR completed successfully\n * @param {object} event\n * @fires Search#complete\n * @private\n */\n\n /* eslint-disable-next-line consistent-return */\n\n }, {\n key: "_xhrLoad",\n value: function _xhrLoad(event) {\n var response = {};\n var _event$target = event.target,\n readyState = _event$target.readyState,\n status = _event$target.status;\n\n try {\n if (readyState > 3 && status === 200) {\n response = JSON.parse(event.target.responseText);\n this.emit(\'complete\', response);\n } else {\n var message = "Invalid readyState: ".concat(readyState, ", or status: ").concat(status, ".");\n return this._xhrError(event, message);\n }\n } catch (error) {\n return this._xhrError(event, \'Invalid JSON\', error);\n }\n\n this.inProgress = false;\n }\n /**\n * XHR contains an error\n *\n * @description XHR has contained an error, and was unable to complete\n * @param {object} event\n * @param {object|string} message\n * @param {object} error\n * @fires Search#error\n * @private\n */\n\n }, {\n key: "_xhrError",\n value: function _xhrError(event) {\n var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var error = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n this.inProgress = false;\n this.emit(\'error\', {\n event: event,\n message: message,\n error: error\n });\n }\n /**\n * XHR has been aborted\n *\n * @description This event only fires if there is an active XHR request that has been terminated\n * @fires Search#aborted\n * @private\n */\n\n }, {\n key: "_xhrAbort",\n value: function _xhrAbort() {\n this.emit(\'aborted\');\n }\n /**\n * Perform the search\n *\n * @param {string} term - Search term(s)\n * @fires Search#initialized\n * @fires Search#cancelled\n */\n\n }, {\n key: "execute",\n value: function execute(term) {\n this.emit(\'initialized\', {\n term: term\n });\n\n if (this.inProgress) {\n this.emit(\'cancelled\');\n this.xhr.abort();\n }\n\n this.inProgress = true;\n var url = \'/search\';\n var params = {\n q: term,\n type: this.searchType,\n view: this.view\n };\n var searchParams = Object.keys(params).map(function (key) {\n var value = params[key];\n return "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(value));\n }).join(\'&\');\n this.xhr.open(\'get\', "".concat(url, "?").concat(searchParams));\n this.xhr.setRequestHeader(\'Accept\', \'application/json\');\n this.xhr.send();\n }\n }]);\n\n return Search;\n}(eventemitter2__WEBPACK_IMPORTED_MODULE_0___default.a);\n/**\n * @description XHR initialized\n * @event Search#initialized\n * @type {object}\n */\n\n/**\n * @description XHR completed\n * @event Search#complete\n * @property {object} response - JSON response from end point\n */\n\n/**\n * @description XHR had an error\n * @event Search#error\n */\n\n/**\n * @description XHR cancelled due to user interaction. If an XHR\n * is being processed, this does not terminate it\n * @event Search#cancelled\n */\n\n/**\n * @description XHR aborted due to user interaction, terminating previously executed XHR.\n * @event Search#aborted\n */\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9TZWFyY2guanM/NTg5ZCJdLCJuYW1lcyI6WyJTZWFyY2giLCJvcHRpb25zIiwic2VhcmNoVHlwZSIsInR5cGUiLCJ2aWV3IiwiaW5Qcm9ncmVzcyIsInhociIsIndpbmRvdyIsIlhNTEh0dHBSZXF1
1ZXN0IiwiQWN0aXZlWE9iamVjdCIsIl94aHJMb2FkIiwiYmluZCIsIl94aHJFcnJvciIsIl94aHJBYm9ydCIsIl9iaW5kRXZlbnRzIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwicmVzcG9uc2UiLCJ0YXJnZXQiLCJyZWFkeVN0YXRlIiwic3RhdHVzIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwiZW1pdCIsIm1lc3NhZ2UiLCJlcnJvciIsInRlcm0iLCJhYm9ydCIsInVybCIsInBhcmFtcyIsInEiLCJzZWFyY2hQYXJhbXMiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwia2V5IiwidmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJqb2luIiwib3BlbiIsInNldFJlcXVlc3RIZWFkZXIiLCJzZW5kIiwiRXZlbnRFbWl0dGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFFQTs7OztJQUdxQkEsTTs7Ozs7QUFDbkI7Ozs7Ozs7QUFPQSxvQkFBMEI7QUFBQTs7QUFBQSxRQUFkQyxPQUFjLHVFQUFKLEVBQUk7O0FBQUE7O0FBQ3hCO0FBRUEsVUFBS0MsVUFBTCxHQUFrQkQsT0FBTyxDQUFDRSxJQUFSLElBQWdCLEVBQWxDO0FBQ0EsVUFBS0MsSUFBTCxHQUFZSCxPQUFPLENBQUNHLElBQVIsSUFBZ0IsTUFBNUI7QUFFQSxVQUFLQyxVQUFMLEdBQWtCLEtBQWxCO0FBRUEsVUFBS0MsR0FBTCxHQUFXQyxNQUFNLENBQUNDLGNBQVAsR0FDUCxJQUFJQSxjQUFKLEVBRE8sR0FFUCxJQUFJQyxhQUFKLENBQWtCLG1CQUFsQixDQUZKO0FBSUEsVUFBS0MsUUFBTCxHQUFnQixNQUFLQSxRQUFMLENBQWNDLElBQWQsK0JBQWhCO0FBQ0EsVUFBS0MsU0FBTCxHQUFpQixNQUFLQSxTQUFMLENBQWVELElBQWYsK0JBQWpCO0FBQ0EsVUFBS0UsU0FBTCxHQUFpQixNQUFLQSxTQUFMLENBQWVGLElBQWYsK0JBQWpCOztBQUVBLFVBQUtHLFdBQUw7O0FBaEJ3QjtBQWlCekI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7Ozs7O0FBTUE7Ozs7OztBQU1BOzs7OztBQUtBOzs7Ozs7QUFNQSIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL1NlYXJjaC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRlbWl0dGVyMic7XG5cbi8qKlxuICogU2VhcmNoIEFQSSBDbGFzc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2ggZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNlYXJjaCBpbnN0YW5jZSwgYW5kIG92ZXJyaWRlIGRlZmF1bHRzXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcHRpb25zLnR5cGUgLSBTZWFyY2ggcmVzdHJpY3Rpb24uIFVzZSAnYXJ0aWNsZScsICdwYWdlJywgJ3Byb2R1Y3QnLCBvciAnJ1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9ucy52aWV3IC0gU2VhcmNoIHRlbXBsYXRlIHN1ZmZpeC4gU3BlY2lmeSBkaWZmZXJlbnQgdGVtcGxhdGVzIGFzIG5lZWRlZFxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcblxuICAgI
1HRoaXMuc2VhcmNoVHlwZSA9IG9wdGlvbnMudHlwZSB8fCAnJztcbiAgICB0aGlzLnZpZXcgPSBvcHRpb25zLnZpZXcgfHwgJ2pzb24nO1xuXG4gICAgdGhpcy5pblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICB0aGlzLnhociA9IHdpbmRvdy5YTUxIdHRwUmVxdWVzdFxuICAgICAgPyBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuICAgICAgOiBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0LlhNTEhUVFAnKTtcblxuICAgIHRoaXMuX3hockxvYWQgPSB0aGlzLl94aHJMb2FkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5feGhyRXJyb3IgPSB0aGlzLl94aHJFcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX3hockFib3J0ID0gdGhpcy5feGhyQWJvcnQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuX2JpbmRFdmVudHMoKTtcbiAgfVxuXG4gIF9iaW5kRXZlbnRzKCkge1xuICAgIHRoaXMueGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl94aHJMb2FkKTtcbiAgICB0aGlzLnhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuX3hockVycm9yKTtcbiAgICB0aGlzLnhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXMuX3hockFib3J0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBYSFIgd2FzIHN1Y2Nlc3NmdWxsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvbiBYSFIgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnRcbiAgICogQGZpcmVzIFNlYXJjaCNjb21wbGV0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuICovXG4gIF94aHJMb2FkKGV2ZW50KSB7XG4gICAgbGV0IHJlc3BvbnNlID0ge307XG4gICAgY29uc3QgeyByZWFkeVN0YXRlLCBzdGF0dXMgfSA9IGV2ZW50LnRhcmdldDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAocmVhZHlTdGF0ZSA+IDMgJiYgc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGV2ZW50LnRhcmdldC5yZXNwb25zZVRleHQpO1xuICAgICAgICB0aGlzLmVtaXQoJ2NvbXBsZXRlJywgcmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBJbnZhbGlkIHJlYWR5U3RhdGU6ICR7cmVhZHlTdGF0ZX0sIG9yIHN0YXR1czogJHtzdGF0dXN9LmA7XG4gICAgICAgIHJldHVybiB0aGlzLl94aHJFcnJvcihldmVudCwgbWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB0aGlzLl94aHJFcnJvcihldmVudCwgJ0ludmFsaWQgSlNPTicsIGVycm9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBYSFIgY29udGFpbnMgYW4gZXJyb3JcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uIFhIUiBoYXMgY29udGFpbmVkIGFuIGVycm9yLCBhbmQgd2FzIHVuYWJsZSB0byBjb21wbGV0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnRcbiAgICogQHBhcmFtIHtvYmplY3R8c3RyaW5nfSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBlcnJvclxuICAgKiBAZmlyZXMgU2VhcmNoI2Vycm9yXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfeGhyRXJyb3IoZXZlbnQsIG1lc3NhZ2UgPSBudWxsLCBlcnJvciA9IG51bGwpIHtcbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgeyBldmVudCwgbWVzc2FnZSwgZXJyb3IgfSk7XG4gIH1cblxuICAvKipcbiAgICogWEhSIGhhcyBiZWVuIGFib3J0ZWRcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uIFRoaXMgZXZlbnQgb25seSBmaXJlcyBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgWEhSIHJlcXVlc3QgdGhhdCBoYXMgYmVlbiB0ZXJtaW5hdGVkXG4gICAqIEBmaXJlcyBTZWFyY2gjYWJvcnRlZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3hockFib3J0KCkge1xuICAgIHRoaXMuZW1pdCgnYWJvcnRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gdGhlIHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVybSAtIFNlYXJjaCB0ZXJtKHMpXG4gICAqIEBmaXJlcyBTZWFyY2gjaW5pdGlhbGl6ZWRcbiAgICogQGZpcmVzIFNlYXJjaCNjYW5jZWxsZWRcbiAgICovXG4gIGV4ZWN1dGUodGVybSkge1xuICAgIHRoaXMuZW1pdCgnaW5pdGlhbGl6ZWQnLCB7IHRlcm0gfSk7XG5cbiAgICBpZiAodGhpcy5pblByb2dyZXNzKSB7XG4gICAgICB0aGlzLmVtaXQoJ2NhbmNlbGxlZCcpO1xuICAgICAgdGhpcy54aHIuYWJvcnQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJsID0gJy9zZWFyY2gnO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIHE6IHRlcm0sXG4gICAgICB0eXBlOiB0aGlzLnNlYXJjaFR5cGUsXG4gICAgICB2aWV3OiB0aGlzLnZpZXcsXG4gICAgfTtcblxuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IE9iamVjdC5rZXlzKHBhcmFtcylcbiAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbXNba2V5XTtcbiAgICAgICAgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YDtcbiAgICAgIH0pXG4gICAgICAuam9pbignJicpO1xuXG4gICAgdGhpcy54aHIub3BlbignZ2V0JywgYCR7dXJsfT8ke3NlYXJjaFBhcmFtc31gKTtcbiAgICB0aGlzLnhoci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIHRoaXMueGhyLnNlbmQoKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBYSFIgaW5pdGlhbGl6ZWRcbiAqIEBldmVudCBTZWFyY2gjaW5pdGlhbGl6ZWRcbiAqIEB0eXBlIHtvYmplY3R9XG4gKi9cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gWEhSIGNvbXBsZXRlZFxuICogQGV2ZW50IFNlYXJjaCNjb21wbGV0ZVxuICogQHByb3BlcnR5IHtvYmplY3R9IHJlc3BvbnNlIC0gSlNPTiByZXNwb25zZSBmcm9tIGVuZCBwb2ludFxuICovXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFhIUiBoYWQgYW4gZXJyb3JcbiAqIEBldmVudCBTZWFyY2gjZXJyb3JcbiAqL1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBYSFIgY2FuY2VsbGVkIGR1ZSB0byB1c2VyIGludGVyYWN0aW9uLiBJZiBhbiBYSFJcbiAqICAgICAgICAgICAgICBpcyBiZWluZyBwcm9jZXNzZWQsIHRoaXMgZG9lcyBub3QgdGVybWluYXRlIGl0XG4gKiBAZXZlbnQgU2VhcmNoI2NhbmNlbGxlZFxuICovXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFhIUiBhYm9ydGVkIGR1ZSB0byB1c2VyIGludGVyYWN0aW9uLCB0ZXJtaW5hdGluZyBwcmV2aW91c2x5IGV4ZWN1dGVkIFhIUi5cbiAqIEBldmVudCBTZWFyY2gjYWJvcnRlZFxuICovXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/Search.js\n') },
1"./source/scripts/Sections.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Sections; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar Sections =\n/*#__PURE__*/\nfunction () {\n function Sections() {\n _classCallCheck(this, Sections);\n\n this.handlers = {};\n this.instances = {};\n this._onSectionEvent = this._onSectionEvent.bind(this);\n document.addEventListener('shopify:section:load', this._onSectionEvent);\n document.addEventListener('shopify:section:unload', this._onSectionEvent);\n document.addEventListener('shopify:section:select', this._onSectionEvent);\n document.addEventListener('shopify:section:deselect', this._onSectionEvent);\n document.addEventListener('shopify:block:select', this._onSectionEvent);\n document.addEventListener('shopify:block:deselect', this._onSectionEvent);\n }\n /**\n * Stop listening for section events, and unbind all handlers.\n */\n\n\n _createClass(Sections, [{\n key: \"unbind\",\n value: function unbind() {\n document.removeEventListener('shopify:section:load', this._onSectionEvent);\n document.removeEventListener('shopify:section:unload', this._onSectionEvent);\n document.removeEventListener('shopify:section:select', this._onSectionEvent);\n document.removeEventListener('shopify:section:deselect', this._onSectionEvent);\n document.removeEventListener('shopify:block:select', this._onSectionEvent);\n document.removeEventListener('shopify:block:deselect', this._onSectionEvent); // Unload all instances\n\n for (var i = 0; i < this.instances.length; i++) {\n this._triggerInstanceEvent(this.instances[i], 'onSectionUnload');\n }\n\n this.handlers = {};\n this.instances = {};\n }\n /**\n * Register a section handler.\n *\n * @param {string} type\n * The section type to handle. The handler will be called for all\n * sections with this type.\n *\n * @param {function} handler\n * The handler function is passed information about a specific section\n * instance. The handler is expected to return an object that will be\n * associated with the section instance.\n *\n * Section handlers are passed an object with the following parameters:\n * {string} id\n * An ID that maps to a specific section instance. Typically the\n * section's filename for static sections, or a generated ID for\n * dynamic sections.\n *\n * {string} type\n * The section type, as supplied when registered.\n *\n * {Element} el\n * The root DOM element for the section instance.\n *\n * {Object} data\n * Data loaded from the section script element. Defaults to an\n * empty object.\n *\n * {Function} postMessage\n * A function that can be called to pass messages between sections.\n * The function should be called with a message \"name\", and\n * optionally some data.\n */\n\n }, {\n key: \"register\",\n value: function register(type, handler) {\n if (this.handlers[type]) {\n console.warn(\"Sections: section handler already exists of type '\".concat(type, \"'.\"));\n } // Store the section handler\n\n\n this.handlers[type] = handler; // Init sections for this type\n\n this._initSections(type);\n }\n /**\n * Initialize sections already on the page.\n */\n\n }, {\n key: \"_initSections\",\n value: function _initSections(type) {\n // Fetch all existing sections of our type on the page\
1n var dataEls = document.querySelectorAll(\"[data-section-type=\\\"\".concat(type, \"\\\"]\"));\n\n if (!dataEls) {\n return;\n } // Create an instance for each section\n\n\n for (var i = 0; i < dataEls.length; i++) {\n var dataEl = dataEls[i];\n var el = dataEl.parentNode; // Get instance ID\n\n var idEl = el.querySelector('[data-section-id]');\n\n if (!idEl) {\n console.warn(\"Sections: unable to find section id for '\".concat(type, \"'.\"), el);\n }\n\n var sectionId = idEl.getAttribute('data-section-id');\n\n if (!sectionId) {\n console.warn(\"Sections: unable to find section id for '\".concat(type, \"'.\"), el);\n }\n\n this._createInstance(sectionId, el);\n }\n }\n }, {\n key: \"_onSectionEvent\",\n value: function _onSectionEvent(event) {\n var el = event.target;\n var _event$detail = event.detail,\n sectionId = _event$detail.sectionId,\n blockId = _event$detail.blockId;\n var instance = this.instances[sectionId];\n\n switch (event.type) {\n case 'shopify:section:load':\n this._createInstance(sectionId, el);\n\n break;\n\n case 'shopify:section:unload':\n this._triggerInstanceEvent(instance, 'onSectionUnload', {\n el: el,\n id: sectionId\n });\n\n delete this.instances[sectionId];\n break;\n\n case 'shopify:section:select':\n this._triggerInstanceEvent(instance, 'onSectionSelect', {\n el: el,\n id: sectionId\n });\n\n break;\n\n case 'shopify:section:deselect':\n this._triggerInstanceEvent(instance, 'onSectionDeselect', {\n el: el,\n id: sectionId\n });\n\n break;\n\n case 'shopify:block:select':\n this._triggerInstanceEvent(instance, 'onSectionBlockSelect', {\n el: el,\n id: blockId\n });\n\n break;\n\n case 'shopify:block:deselect':\n this._triggerInstanceEvent(instance, 'onSectionBlockDeselect', {\n el: el,\n id: blockId\n });\n\n break;\n\n default:\n break;\n }\n }\n }, {\n key: \"_triggerInstanceEvent\",\n value: function _triggerInstanceEvent(instance, eventName) {\n if (instance && instance[eventName]) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n instance[eventName].apply(instance, args);\n }\n }\n }, {\n key: \"_postMessage\",\n value: function _postMessage(name, data) {\n var _this = this;\n\n Object.keys(this.instances).forEach(function (id) {\n _this._triggerInstanceEvent(_this.instances[id], 'onSectionMessage', name, data);\n });\n }\n }, {\n key: \"_createInstance\",\n value: function _createInstance(id, el) {\n var typeEl = el.querySelector('[data-section-type]');\n\n if (!typeEl) {\n return;\n }\n\n var type = typeEl.getAttribute('data-section-type');\n\n if (!type) {\n return;\n }\n\n var handler = this.handlers[type];\n\n if (!handler) {\n console.warn(\"Sections: unable to find section handler for type '\".concat(type, \"'.\"));\n }\n\n var data = this._loadData(el);\n\n var postMessage = this._postMessage.bind(this);\n\n this.instances[id] = handler({\n id: id,\n type: type,\n el: el,\n data: data,\n postMessage: postMessage\n });\n }\n }, {\n key: \"_loadData\",\n value: function _loadData(el) {\n var dataEl = el.querySelector('[data-section-data]');\n\n if (!dataEl) {\n return {};\n } // Load data from attribute, or innerHTML\n\n\n var data = dataEl.getAttribute('data-section-data') || dataEl.innerHTML;\n\n try {\n return JSON.parse(data);\n }
1 catch (error) {\n console.warn(\"Sections: invalid section data found. \".concat(error.message));\n return {};\n }\n }\n }]);\n\n return Sections;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9TZWN0aW9ucy5qcz84MzNkIl0sIm5hbWVzIjpbIlNlY3Rpb25zIiwiaGFuZGxlcnMiLCJpbnN0YW5jZXMiLCJfb25TZWN0aW9uRXZlbnQiLCJiaW5kIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImkiLCJsZW5ndGgiLCJfdHJpZ2dlckluc3RhbmNlRXZlbnQiLCJ0eXBlIiwiaGFuZGxlciIsImNvbnNvbGUiLCJ3YXJuIiwiX2luaXRTZWN0aW9ucyIsImRhdGFFbHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZGF0YUVsIiwiZWwiLCJwYXJlbnROb2RlIiwiaWRFbCIsInF1ZXJ5U2VsZWN0b3IiLCJzZWN0aW9uSWQiLCJnZXRBdHRyaWJ1dGUiLCJfY3JlYXRlSW5zdGFuY2UiLCJldmVudCIsInRhcmdldCIsImRldGFpbCIsImJsb2NrSWQiLCJpbnN0YW5jZSIsImlkIiwiZXZlbnROYW1lIiwiYXJncyIsIm5hbWUiLCJkYXRhIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJ0eXBlRWwiLCJfbG9hZERhdGEiLCJwb3N0TWVzc2FnZSIsIl9wb3N0TWVzc2FnZSIsImlubmVySFRNTCIsIkpTT04iLCJwYXJzZSIsImVycm9yIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7SUFBcUJBLFE7OztBQUNuQixzQkFBYztBQUFBOztBQUNaLFNBQUtDLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLEVBQWpCO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QixLQUFLQSxlQUFMLENBQXFCQyxJQUFyQixDQUEwQixJQUExQixDQUF2QjtBQUVBQyxZQUFRLENBQUNDLGdCQUFULENBQTBCLHNCQUExQixFQUFrRCxLQUFLSCxlQUF2RDtBQUNBRSxZQUFRLENBQUNDLGdCQUFULENBQTBCLHdCQUExQixFQUFvRCxLQUFLSCxlQUF6RDtBQUNBRSxZQUFRLENB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XNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlY3Rpb25zIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuaW5zdGFuY2VzID0ge307XG4gICAgdGhpcy5fb25TZWN0aW9uRXZlbnQgPSB0aGlzLl9vblNlY3Rpb25FdmVudC5iaW5kKHRoaXMpO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2hvcGlmeTpzZWN0aW9uOmxvYWQnLCB0aGlzLl9vblNlY3Rpb25FdmVudCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2hvcGlmeTpzZWN0aW9uOnVubG9hZCcsIHRoaXMuX29uU2VjdGlvbkV2ZW50KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzaG9waWZ5OnNlY3Rpb246c2VsZWN0JywgdGhpcy5fb25TZWN0aW9uRXZlbnQpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Nob3BpZnk6c2VjdGlvbjpkZXNlbGVjdCcsIHRoaXMuX29uU2VjdGlvbkV2ZW50KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzaG9waWZ5OmJsb2NrOnNlbGVjdCcsIHRoaXMuX29uU2VjdGlvbkV2ZW50KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzaG9waWZ5OmJsb2NrOmRlc2VsZWN0JywgdGhpcy5fb25TZWN0aW9uRXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgbGlzdGVuaW5nIGZvciBzZWN0aW9uIGV2ZW50cywgYW5kIHVuYmluZCBhbGwgaGFuZGxlcnMuXG4gICAqL1xuICB1bmJpbmQoKSB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2hvcGlmeTpzZWN0aW9uOmxvYWQnLCB0aGlzLl9vblNlY3Rpb25FdmVudCk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICdzaG9waWZ5OnNlY3Rpb246dW5sb2FkJyxcbiAgICAgIHRoaXMuX29uU2VjdGlvbkV2ZW50LFxuICAgICk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICdzaG9waWZ5OnNlY3Rpb246c2VsZWN0JyxcbiAgICAgIHRoaXMuX29uU2VjdGlvbkV2ZW50LFxuICAgICk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICdzaG9waWZ5OnNlY3Rpb246ZGVzZWxlY3QnLFxuICAgICAgdGhpcy5fb25TZWN0aW9uRXZlbnQsXG4gICAgKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzaG9waWZ5OmJsb2NrOnNlbGVjdCcsIHRoaXMuX29uU2VjdGlvbkV2ZW50KTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgJ3Nob3BpZnk6YmxvY2s6ZGVzZWxlY3QnLFxuICAgICAgdGhpcy5fb25TZWN0aW9uRXZlbnQsXG4gICAgKTtcblxuICAgIC8vIFVubG9hZCBhbGwgaW5zdGFuY2VzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5fdHJpZ2dlckluc3RhbmNlRXZlbnQodGhpcy5pbnN0YW5jZXNbaV0sICdvblNlY3Rpb25VbmxvYWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5pbnN0YW5jZXMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHNlY3Rpb24gaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAgICogICAgICAgIFRoZSBzZWN0aW9uIHR5cGUgdG8gaGFuZGxlLiBUaGUgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBmb3IgYWxsXG4gICAqICAgICAgICBzZWN0aW9ucyB3aXRoIHRoaXMgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gaGFuZGxlclxuICAgKiAgICAgICAgVGhlIGhhbmRsZXIgZnVuY3Rpb24gaXMgcGFzc2VkIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgc2VjdGlvblxuICAgKiAgICAgICAgaW5zdGFuY2UuIFRoZSBoYW5kbGVyIGlzIGV4cGVjdGVkIHRvIHJldHVybi
1BhbiBvYmplY3QgdGhhdCB3aWxsIGJlXG4gICAqICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHNlY3Rpb24gaW5zdGFuY2UuXG4gICAqXG4gICAqICAgICAgICBTZWN0aW9uIGhhbmRsZXJzIGFyZSBwYXNzZWQgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICAgKiAgICAgICAgICB7c3RyaW5nfSBpZFxuICAgKiAgICAgICAgICBBbiBJRCB0aGF0IG1hcHMgdG8gYSBzcGVjaWZpYyBzZWN0aW9uIGluc3RhbmNlLiBUeXBpY2FsbHkgdGhlXG4gICAqICAgICAgICAgIHNlY3Rpb24ncyBmaWxlbmFtZSBmb3Igc3RhdGljIHNlY3Rpb25zLCBvciBhIGdlbmVyYXRlZCBJRCBmb3JcbiAgICogICAgICAgICAgZHluYW1pYyBzZWN0aW9ucy5cbiAgICpcbiAgICogICAgICAgICAge3N0cmluZ30gdHlwZVxuICAgKiAgICAgICAgICBUaGUgc2VjdGlvbiB0eXBlLCBhcyBzdXBwbGllZCB3aGVuIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqICAgICAgICAgIHtFbGVtZW50fSBlbFxuICAgKiAgICAgICAgICBUaGUgcm9vdCBET00gZWxlbWVudCBmb3IgdGhlIHNlY3Rpb24gaW5zdGFuY2UuXG4gICAqXG4gICAqICAgICAgICAgIHtPYmplY3R9IGRhdGFcbiAgICogICAgICAgICAgRGF0YSBsb2FkZWQgZnJvbSB0aGUgc2VjdGlvbiBzY3JpcHQgZWxlbWVudC4gRGVmYXVsdHMgdG8gYW5cbiAgICogICAgICAgICAgZW1wdHkgb2JqZWN0LlxuICAgKlxuICAgKiAgICAgICAgICB7RnVuY3Rpb259IHBvc3RNZXNzYWdlXG4gICAqICAgICAgICAgIEEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIHBhc3MgbWVzc2FnZXMgYmV0d2VlbiBzZWN0aW9ucy5cbiAgICogICAgICAgICAgVGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBhIG1lc3NhZ2UgXCJuYW1lXCIsIGFuZFxuICAgKiAgICAgICAgICBvcHRpb25hbGx5IHNvbWUgZGF0YS5cbiAgICovXG4gIHJlZ2lzdGVyKHR5cGUsIGhhbmRsZXIpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1t0eXBlXSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgU2VjdGlvbnM6IHNlY3Rpb24gaGFuZGxlciBhbHJlYWR5IGV4aXN0cyBvZiB0eXBlICcke3R5cGV9Jy5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTdG9yZSB0aGUgc2VjdGlvbiBoYW5kbGVyXG4gICAgdGhpcy5oYW5kbGVyc1t0eXBlXSA9IGhhbmRsZXI7XG5cbiAgICAvLyBJbml0IHNlY3Rpb25zIGZvciB0aGlzIHR5cGVcbiAgICB0aGlzLl9pbml0U2VjdGlvbnModHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBzZWN0aW9ucyBhbHJlYWR5IG9uIHRoZSBwYWdlLlxuICAgKi9cbiAgX2luaXRTZWN0aW9ucyh0eXBlKSB7XG4gICAgLy8gRmV0Y2ggYWxsIGV4aXN0aW5nIHNlY3Rpb25zIG9mIG91ciB0eXBlIG9uIHRoZSBwYWdlXG4gICAgY29uc3QgZGF0YUVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXNlY3Rpb24tdHlwZT1cIiR7dHlwZX1cIl1gKTtcbiAgICBpZiAoIWRhdGFFbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYW4gaW5zdGFuY2UgZm9yIGVhY2ggc2VjdGlvblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YUVscy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGF0YUVsID0gZGF0YUVsc1tpXTtcbiAgICAgIGNvbnN0IGVsID0gZGF0YUVsLnBhcmVudE5vZGU7XG5cbiAgICAgIC8vIEdldCBpbnN0YW5jZSBJRFxuICAgICAgY29uc3QgaWRFbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXNlY3Rpb24taWRdJyk7XG5cbiAgICAgIGlmICghaWRFbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFNlY3Rpb25zOiB1bmFibGUgdG8gZmluZCBzZWN0aW9uIGlkIGZvciAnJHt0eXBlfScuYCwgZWwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWN0aW9uSWQgPSBpZEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zZWN0aW9uLWlkJyk7XG4gICAgICBpZiAoIXNlY3Rpb25JZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFNlY3Rpb25zOiB1bmFibGUgdG8gZmluZCBzZWN0aW9uIGlkIGZvciAnJHt0eXBlfScuYCwgZWwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jcmVhdGVJbnN0YW5jZShzZWN0aW9uSWQsIGVsKTtcbiAgICB9XG4gIH1cblxuICBfb25TZWN0aW9uRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBlbCA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCB7IHNlY3Rpb25JZCwgYmxvY2tJZCB9ID0gZXZlbnQuZGV0YWlsO1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXNbc2VjdGlvbklkXTtcblxuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAnc2hvcGlmeTpzZWN0aW9uOmxvYWQnOlxuICAgICAgICB0aGlzLl9jcmVhdGVJbnN0YW5jZShzZWN0aW9uSWQsIGVsKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3Nob3BpZnk6c2VjdGlvbjp1bmxvYWQnOlxuICAgICAgICB0aGlzLl90cmlnZ2VySW5zdGFuY2VFdmVudChpbnN0YW5jZSwgJ29uU2VjdGlvblVubG9hZCcsIHtcbiAgICAgICAgICBlbCxcbiAgICAgICAgICBpZDogc2VjdGlvbklkLFxuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIHRoaXMuaW5zdGFuY2VzW3NlY3Rpb25JZF07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzaG9waWZ5OnNlY3Rpb246c2VsZWN0JzpcbiAgICAgICAgdGhpcy5fdHJpZ2dlckluc3RhbmNlRXZlbnQoaW5zdGFuY2UsICdvblNlY3Rpb25TZWxlY3QnLCB7XG4gICAgICAgICAgZWwsXG4gICAgICAgICAgaWQ6IHNlY3Rpb25JZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzaG9waWZ5OnNlY3Rpb246ZGVzZWxlY3QnOlxuICAgICAgICB0aGlzLl90cmlnZ2VySW5zdGFuY2VFdmVudChpbnN0YW5jZSwgJ29uU2VjdGlvbkRlc2VsZWN0Jywge1xuICAgICAgICAgIGVsLFxuICAgICAgICAgIGlkOiBzZWN0aW9uSWQsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2hvcGlmeTpibG9jazpzZWxlY3QnOlxuICAgICAgICB0aGlzLl90cmlnZ2VySW5zdGFuY2VFdmVudChpbnN0YW5jZSwgJ29uU2VjdGlvbkJsb2NrU2
1VsZWN0Jywge1xuICAgICAgICAgIGVsLFxuICAgICAgICAgIGlkOiBibG9ja0lkLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3Nob3BpZnk6YmxvY2s6ZGVzZWxlY3QnOlxuICAgICAgICB0aGlzLl90cmlnZ2VySW5zdGFuY2VFdmVudChpbnN0YW5jZSwgJ29uU2VjdGlvbkJsb2NrRGVzZWxlY3QnLCB7XG4gICAgICAgICAgZWwsXG4gICAgICAgICAgaWQ6IGJsb2NrSWQsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgX3RyaWdnZXJJbnN0YW5jZUV2ZW50KGluc3RhbmNlLCBldmVudE5hbWUsIC4uLmFyZ3MpIHtcbiAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2VbZXZlbnROYW1lXSkge1xuICAgICAgaW5zdGFuY2VbZXZlbnROYW1lXSguLi5hcmdzKTtcbiAgICB9XG4gIH1cblxuICBfcG9zdE1lc3NhZ2UobmFtZSwgZGF0YSkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuaW5zdGFuY2VzKS5mb3JFYWNoKGlkID0+IHtcbiAgICAgIHRoaXMuX3RyaWdnZXJJbnN0YW5jZUV2ZW50KFxuICAgICAgICB0aGlzLmluc3RhbmNlc1tpZF0sXG4gICAgICAgICdvblNlY3Rpb25NZXNzYWdlJyxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBfY3JlYXRlSW5zdGFuY2UoaWQsIGVsKSB7XG4gICAgY29uc3QgdHlwZUVsID0gZWwucXVlcnlTZWxlY3RvcignW2RhdGEtc2VjdGlvbi10eXBlXScpO1xuICAgIGlmICghdHlwZUVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IHR5cGVFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2VjdGlvbi10eXBlJyk7XG4gICAgaWYgKCF0eXBlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMuaGFuZGxlcnNbdHlwZV07XG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBTZWN0aW9uczogdW5hYmxlIHRvIGZpbmQgc2VjdGlvbiBoYW5kbGVyIGZvciB0eXBlICcke3R5cGV9Jy5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy5fbG9hZERhdGEoZWwpO1xuICAgIGNvbnN0IHBvc3RNZXNzYWdlID0gdGhpcy5fcG9zdE1lc3NhZ2UuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuaW5zdGFuY2VzW2lkXSA9IGhhbmRsZXIoe1xuICAgICAgaWQsXG4gICAgICB0eXBlLFxuICAgICAgZWwsXG4gICAgICBkYXRhLFxuICAgICAgcG9zdE1lc3NhZ2UsXG4gICAgfSk7XG4gIH1cblxuICBfbG9hZERhdGEoZWwpIHtcbiAgICBjb25zdCBkYXRhRWwgPSBlbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1zZWN0aW9uLWRhdGFdJyk7XG4gICAgaWYgKCFkYXRhRWwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIGRhdGEgZnJvbSBhdHRyaWJ1dGUsIG9yIGlubmVySFRNTFxuICAgIGNvbnN0IGRhdGEgPSBkYXRhRWwuZ2V0QXR0cmlidXRlKCdkYXRhLXNlY3Rpb24tZGF0YScpIHx8IGRhdGFFbC5pbm5lckhUTUw7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihgU2VjdGlvbnM6IGludmFsaWQgc2VjdGlvbiBkYXRhIGZvdW5kLiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/Sections.js\n") },
1"./source/scripts/Superstore.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _globals_jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./globals/jquery */ "./source/scripts/globals/jquery.js");\n/* harmony import */ var jquery_trend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jquery-trend */ "./node_modules/jquery-trend/jquery.trend.js");\n/* harmony import */ var jquery_trend__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery_trend__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var jquery_revealer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jquery-revealer */ "./node_modules/jquery-revealer/jquery.revealer.js");\n/* harmony import */ var jquery_revealer__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jquery_revealer__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _globals_flickity_ios_fix__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./globals/flickity-ios-fix */ "./source/scripts/globals/flickity-ios-fix.js");\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! scriptjs */ "./node_modules/scriptjs/dist/script.js");\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(scriptjs__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var rimg_shopify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rimg-shopify */ "./node_modules/rimg-shopify/dist/index.es.js");\n/* harmony import */ var _templates_Account__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./templates/Account */ "./source/scripts/templates/Account.js");\n/* harmony import */ var _templates_Contact__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./templates/Contact */ "./source/scripts/templates/Contact.js");\n/* harmony import */ var _templates_Page__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./templates/Page */ "./source/scripts/templates/Page.js");\n/* harmony import */ var _templates_GiftCard__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./templates/GiftCard */ "./source/scripts/templates/GiftCard.js");\n/* harmony import */ var _Sections__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Sections */ "./source/scripts/Sections.js");\n/* harmony import */ var _sections_DynamicBlogPosts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./sections/DynamicBlogPosts */ "./source/scripts/sections/DynamicBlogPosts.js");\n/* harmony import */ var _sections_DynamicCollectionList__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./sections/DynamicCollectionList */ "./source/scripts/sections/DynamicCollectionList.js");\n/* harmony import */ var _sections_DynamicFeaturedCollection__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./sections/DynamicFeaturedCollection */ "./source/scripts/sections/DynamicFeaturedCollection.js");\n/* harmony import */ var _sections_DynamicHighlightsBanners__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./sections/DynamicHighlightsBanners */ "./source/scripts/sections/DynamicHighlightsBanners.js");\n/* harmony import */ var _sections_DynamicInstagramFeed__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./sections/DynamicInstagramFeed */ "./source/scripts/sections/DynamicInstagramFeed.js");\n/* harmony import */ var _sections_DynamicMap__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./sections/DynamicMap */ "./source/scripts/sections/DynamicMap.js");\n/* harmony import */ var _sections_DynamicMenuList__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./sections/DynamicMenuList */ "./source/scripts/sections/DynamicMenuList.js");\n/* harmony import */ var _sections_DynamicNewsletter__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./sections/DynamicNewsletter */ "./source/scripts/sections/DynamicNewsletter.js");\n/* harmony import */ var _sections_DynamicPromoBlocks__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./sections/DynamicPromoBlocks */ "./source/scripts/sections/DynamicPromoBlocks.js");\n/* harmony import */ var _sections_DynamicRichText__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./sections/DynamicRichText */ "./source/scripts/sections/DynamicRichText.js");\n/* harmony import */ var _sections_DynamicSearch__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./sections/DynamicSearch */ "./source/scripts/sections/DynamicSearch.js");\n/* harmony import */ var _sections_DynamicTestimonials__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./sections/DynamicTestimonials */ "./source/scripts/sections/DynamicTestimonials.js");\n/* harmony import */ var _sections_DynamicTwitterFeed__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./sections/DynamicTwitterFeed */ "./source/scripts/sections/DynamicTwitterFeed.js");\n/* harmony import */ var _sections_DynamicVideo__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./sections/DynamicVideo */ "./source/scripts/sections/DynamicVideo.js");\n/* harmony import */ var _sections_StaticAnnouncement__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./sections/StaticAnnouncement */ "./source/scripts/sections/StaticAnnouncement.js");\n/* harmony import */ var _sections_StaticArticle__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./sections/StaticArticle */ "./source/scripts/sections/StaticArticle.js");\n/* harmony import */ var _sections_StaticBlog__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./sections/StaticBlog */ "./source/scripts/sections/StaticBlog.js");\n/* harmony import */ var _sections_StaticCart__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./sections/StaticCart */ "./source/scripts/sections/StaticCart.js");\n/* harmony import */ var _sections_StaticCollection__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./sections/StaticCollection */ "./source/scripts/sections/StaticCollection.js");\n/* harmony import */ var _sections_StaticCollectionMinimal__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./sections/StaticCollectionMinimal */ "./source/scripts/sections/StaticCollectionMinimal.js");\n/* harmony import */ var _sections_StaticPassword__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./sections/StaticPassword */ "./source/scripts/sections/StaticPassword.js");\n/* harmony import */ var _sections_StaticProduct__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./sections/StaticProduct */ "./source/scripts/sections/StaticProduct.js");\n/* harmony import */ var _sections_StaticSearch__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./sections/StaticSearch */ "./source/scripts/sections/StaticSearch.js");\n/* harmony import */ var _sections_StaticSectionFooter__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./sections/StaticSectionFooter */ "./source/scripts/sections/StaticSectionFooter.js");\n/* harmony import */ var _sections_StaticSectionHeader__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./sections/StaticSectionHeader */ "./source/scripts/sections/StaticSectionHeader.js");\n/* harmony import */ var _sections_StaticSlideshow__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./sections/StaticSlideshow */ "./source/scripts/sections/StaticSlideshow.js");\n/* harmony import */ var _checkPolyfills__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./checkPolyfills */ "./source/scripts/checkPolyfills.js");\n/* harmony import */ var _helpers_ProductReviews__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./helpers/ProductReviews */ "./source/scripts/helpers/ProductReviews.js");\n// jQuery plugins\n // eslint-disable-line\n\n // eslint-disable-line\n\n // eslint-disable-line\n// Global imports\n\n\n // Responsive Images\n\n // eslint-disable-line\n// Template imports\n\n\n\n\n // Section imports\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar initEmpire = function initEmpire() {\n rimg_shopify__WEBPACK_IMPORTED_MODULE_5__["default"].init(\'[data-rimg="lazy"]\', {\n round: 1\n });\n var sections = new _Sections__WEBPACK_IMPORTED_MODULE_10__["default"](); window.sectionsObj = sections; window.staticCollection = _sections_StaticCollection__WEBPACK_IMPORTED_MODULE_29__["default"]; \n sections.register(\'static-announcement\', function (section) {\n return new _sections_StaticAnnouncement__WEBPACK_IMPORTED_MODULE_25__["default"](section);\n });\n sections.register(\'static-article\', function (section) {\n return new _sections_StaticArticle__WEBPACK_IMPORTED_MODULE_26__["default"](section);\n });\n sections.register(\'static-blog\', function (section) {\n return new _sections_StaticBlog__WEBPACK_IMPORTED_MODULE_27__["default"](section);\n });\n sections.register(\'static-cart\', function (section) {\n return new _sections_StaticCart__WEBPACK_IMPORTED_MODULE_28__["default"](section);\n });\n sections.register(\'static-collection\', function (section) {\n return new _sections_StaticCollection__WEBPACK_IMPORTED_MODULE_29__["default"](section);\n });\n sections.register(\'static-collection-minimal\', function (section) {\n return new _sections_StaticCollectionMinimal__WEBPACK_IMPORTED_MODULE_30__["default"](section);\n });\n sections.register(\'static-footer\', function (section) {\n return new _sections_StaticSectionFooter__WEBPACK_IMPORTED_MODULE_34__["default"](section);\n });\n sections.register(\'static-header\', function (section) {\n return new _sections_StaticSectionHeader__WEBPACK_IMPORTED_MODULE_35__["default"](section);\n });\n sections.register(\'static-password\', function (section) {\n return new _sections_StaticPassword__WEBPACK_IMPORTED_MODULE_31__["default"](section);\n });\n sections.register(\'static-product\', function (section) {\n return new _sections_StaticProduct__WEBPACK_IMPORTED_MODULE_32__["default"](section);\n });\n sections.register(\'static-search\', function (section) {\n return new _sections_StaticSearch__WEBPACK_IMPORTED_MODULE_33__["default"](section);\n });\n sections.register(\'dynamic-blog-posts\', function (section) {\n return new _sections_DynamicBlogPosts__WEBPACK_IMPORTED_MODULE_11__["default"](section);\n });\n sections.register(\'dynamic-collection-list\', function (section) {\n return new _sections_DynamicCollectionList__WEBPACK_IMPORTED_MODULE_12__["default"](section);\n });\n sections.register(\'dynamic-highlights-banners\', function (section) {\n return new _sections_DynamicHighlightsBanners__WEBPACK_IMPORTED_MODULE_14__["default"](section);\n });\n sections.register(\'static-slideshow\', function (section) {\n return new _sections_StaticSlideshow__WEBPACK_IMPORTED_MODULE_36__["default"](section);\n });\n sections.register(\'dynamic-promo-mosaic\', function (section) {\n return new _sections_DynamicPromoBlocks__WEBPACK_IMPORTED_MODULE_19__["default"](section);\n });\n sections.register(\'dynamic-promo-grid\', function (section) {\n return new _sections_DynamicPromoBlocks__WEBPACK_IMPORTED_MODULE_19__["default"](section);\n });\n sections.register(\'dynamic-menu-list\', function (section) {\n return new _sections_DynamicMenuList__WEBPACK_IMPORTED_MODULE_17__["default"](section);\n });\n sections.register(\'dynamic-twitter-feed\', function (section) {\n return new _sections_DynamicTwitterFeed__WEBPACK_IMPORTED_MODULE_23__["default"](section);\n });\n sections.register(\'dynamic-testimonials\', function (section) {\n return new _sections_DynamicTestimonials__WEBPACK_IMPORTED_MODULE_22__["default"](section);\n });\n sections.register(\'dynamic-instagram-feed\', function (section) {\n return new _sections_DynamicInstagramFeed__WEBPACK_IMPORTED_MODULE_15__["default"](section);\n });\n sections.register(\'dynamic-featured-collection\', function (section) {\n return new _sections_DynamicFeaturedCollection__WEBPACK_IMPORTED_MODULE_13__["default"](section);\n });\n sections.register(\'dynamic-featured-product\', function (section) {\n return new _sections_StaticProduct__WEBPACK_IMPORTED_MODULE_32__["default"](section);\n });\n sections.register(\'dynamic-rich-text\', function (section) {\n return new _sections_DynamicRichText__WEBPACK_IMPORTED_MODULE_20__["default"](section);\n });\n sections.register(\'dynamic-search\', function (section) {\n return new _sections_DynamicSearch__WEBPACK_IMPORTED_MODULE_21__["default"](section);\n });\n sections.register(\'dynamic-video\', function (section) {\n return new _sections_DynamicVideo__WEBPACK_IMPORTED_MODULE_24__["default"](section);\n });\n sections.register(\'dynamic-newsletter\', function (section) {\n return new _sections_DynamicNewsletter__WEBPACK_IMPORTED_MODULE_18__["default"](section);\n });\n sections.register(\'dynamic-map\', function (section) {\n return new _sections_DynamicMap__WEBPACK_IMPORTED_MODULE_16__["default"](section);\n });\n\n if (Object(_globals_jquery__WEBPACK_IMPORTED_MODULE_0__["default"])(\'body.giftcard\').length) {\n new _templates_GiftCard__WEBPACK_IMPORTED_MODULE_9__["default"]();\n }\n\n new _templates_Account__WEBPACK_IMPORTED_MODULE_6__["default"]();\n new _templates_Contact__WEBPACK_IMPORTED_MODULE_7__["default"]();\n new _templates_Page__WEBPACK_IMPORTED_MODULE_8__["default"](); // This file gets reloaded for every page navigation, so when turbolinks is enabled\n // we need to explicitly unload all JS before navigating to another page to ensure\n // a clean JS slate for the next page.\n\n if (document.querySelector(\'[data-turbolinks-enabled]\')) {\n var unloadAll = function unloadAll() {\n document.removeEventListener(\'turbolinks:click\', unloadAll);\n sections.unbind();\n };\n\n document.addEventListener(\'turbolinks:click\', unloadAll);\n Object(_globals_jquery__WEBPACK_IMPORTED_MODULE_0__["default"])(document).on(\'turbolinks:load\', function () {\n if (document.querySelector(\'.spr-badge\')) {\n Object(_helpers_ProductReviews__WEBPACK_IMPORTED_MODULE_38__["default"])();\n }\n\n if (document.querySelector(\'.shopify-payment-button\')) {\n window.Shopify.PaymentButton.init();\n }\n });\n }\n};\n\nif (_checkPolyfills__WEBPACK_IMPORTED_MODULE_37__["default"].length) {\n scriptjs__WEBPACK_IMPORTED_MODULE_4___default()(_checkPolyfills__WEBPACK_IMPORTED_MODULE_37__["default"], initEmpire);\n} else {\n initEmpire();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9TdXBlcnN0b3JlLmpzPzMyYWUiXSwibmFtZXMiOlsiaW5pdEVtcGlyZSIsInJpbWciLCJpbml0Iiwicm91bmQiLCJzZWN0aW9ucyIsIlNlY3Rpb25zIiwicmVnaXN0ZXIiLCJzZWN0aW9uIiwiU3RhdGljQW5ub3VuY2VtZW50IiwiU3RhdGljQXJ0aWNsZSIsIlN0YXRpY0Jsb2ciLCJTdGF0aWNDYXJ0IiwiU3RhdGljQ29sbGVjdGlvbiIsIlN0YXRpY0NvbGxlY3Rpb25NaW5pbWFsIiwiU3RhdGljU2VjdGlvbkZvb3RlciIsIlN0YXRpY1NlY3Rpb25IZWFkZXIiLCJTdGF0aWNQYXNzd29yZCIsIlN0YXRpY1Byb2R1Y3QiLCJTdGF0aWNTZWFyY2giLCJEeW5hbWljQmxvZ1Bvc3RzIiwiRHluYW1pY0NvbGxlY3Rpb25MaXN0IiwiRHluYW1pY0hpZ2hsaWdodHNCYW5uZXJzIiwiU3RhdGljU2xpZGVzaG93IiwiRHluYW1pY1Byb21vQmxvY2tzIiwiRHluYW1pY01lbnVMaXN0IiwiRHluYW1pY1R3aXR0ZXJGZWVkIiwiRHluYW1pY1Rlc3RpbW9uaWFscyIsIkR5bmFtaWNJbnN0YWdyYW1GZWVkIiwiRHluYW1pY0ZlYXR1cmVkQ29sbGVjdGlvbiIsIkR5bmFtaWNSaWNoVGV4dCIsIkR5bmFtaWNTZWFyY2giLCJEeW5hbWljVmlkZW8iLCJEeW5hbWljTmV3c2xldHRlciIsIkR5bmFtaWNNYXAiLCIkIiwibGVuZ3RoIiwiR2lmdENhcmQiLCJBY2NvdW50IiwiQ29udGFjdCIsIlBhZ2UiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJ1bmxvYWRBbGwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidW5iaW5kIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uIiwiaW5pdFNob3BpZnlQcm9kdWN0UmV2aWV3cyIsIndpbmRvdyIsIlNob3BpZnkiLCJQYXltZW50QnV0dG9uIiwicG9seWZpbGxVcmxzIiwic2NyaXB0anMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Q0FDa0M7O0NBQ1g7O0NBQ0c7QUFFMUI7O0FBQ0E7Q0FHQTs7Q0FDaUM7QUFFakM7O0FBQ0E7QUFDQTtBQUNBO0NBR0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0F
1BRUE7QUFFQTs7QUFFQSxJQUFNQSxVQUFVLEdBQUcsU0FBYkEsVUFBYSxHQUFNO0FBQ3ZCQyxzREFBSSxDQUFDQyxJQUFMLENBQVUsb0JBQVYsRUFBZ0M7QUFBRUMsU0FBSyxFQUFFO0FBQVQsR0FBaEM7QUFFQSxNQUFNQyxRQUFRLEdBQUcsSUFBSUMsa0RBQUosRUFBakI7QUFFQUQsVUFBUSxDQUFDRSxRQUFULENBQ0UscUJBREYsRUFFRSxVQUFBQyxPQUFPO0FBQUEsV0FBSSxJQUFJQyxxRUFBSixDQUF1QkQsT0FBdkIsQ0FBSjtBQUFBLEdBRlQ7QUFJQUgsVUFBUSxDQUFDRSxRQUFULENBQWtCLGdCQUFsQixFQUFvQyxVQUFBQyxPQUFPO0FBQUEsV0FBSSxJQUFJRSxnRUFBSixDQUFrQkYsT0FBbEIsQ0FBSjtBQUFBLEdBQTNDO0FBQ0FILFVBQVEsQ0FBQ0UsUUFBVCxDQUFrQixhQUFsQixFQUFpQyxVQUFBQyxPQUFPO0FBQUEsV0FBSSxJQUFJRyw2REFBSixDQUFlSCxPQUFmLENBQUo7QUFBQSxHQUF4QztBQUNBSCxVQUFRLENBQUNFLFFBQVQsQ0FBa0IsYUFBbEIsRUFBaUMsVUFBQUMsT0FBTztBQUFBLFdBQUksSUFBSUksNkRBQUosQ0FBZUosT0FBZixDQUFKO0FBQUEsR0FBeEM7QUFDQUgsVUFBUSxDQUFDRSxRQUFULENBQWtCLG1CQUFsQixFQUF1QyxVQUFBQyxPQUFPO0FBQUEsV0FBSSxJQUFJSyxtRUFBSixDQUFxQkwsT0FBckIsQ0FBSjtBQUFBLEdBQTlDO0FBQ0FILFVBQVEsQ0FBQ0UsUUFBVCxDQUFrQiwyQkFBbEIsRUFBK0MsVUFBQUMsT0FBTztBQUFBLFdBQUksSUFBSU0sMEVBQUosQ0FBNEJOLE9BQTVCLENBQUo7QUFBQSxHQUF0RDtBQUNBSCxVQUFRLENBQUNFLFFBQVQsQ0FBa0IsZUFBbEIsRUFBbUMsVUFBQUMsT0FBTztBQUFBLFdBQUksSUFBSU8sc0VBQUosQ0FBd0JQLE9BQXhCLENBQUo7QUFBQSxHQUExQztBQUNBSCxVQUFRLENBQUNFLFFBQVQsQ0FBa0IsZUFBbEIsRU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FBQVQsQ0FBa0IsZUFBbEIsRUFBbUMsVUFBQUMsT0FBTztBQUFBLFdBQUksSUFBSXdCLCtEQUFKLENBQWlCeEIsT0FBakIsQ0FBSjtBQUFBLEdBQTFDO0FBQ0FILFVBQVEsQ0FBQ0UsUUFBVCxDQUNFLG9CQURGLEVBRUUsVUFBQUMsT0FBTztBQUFBLFdBQUksSUFBSXlCLG9FQUFKLENBQXNCekIsT0FBdEIsQ0FBSjtBQUFBLEdBRlQ7QUFJQUgsVUFBUSxDQUFDRSxRQUFULENBQWtCLGFBQWxCLEVBQWlDLFVBQUFDLE9BQU87QUFBQSxXQUFJLElBQUkwQiw2REFBSixDQUFlMUIsT0FBZixDQUFKO0FBQUEsR0FBeEM7O0FBRUEsTUFBSTJCLCtEQUFDLENBQUMsZUFBRCxDQUFELENBQW1CQyxNQUF2QixFQUErQjtBQUM3QixRQUFJQywyREFBSjtBQUNEOztBQUVELE1BQUlDLDBEQUFKO0FBQ0EsTUFBSUMsMERBQUo7QU
1FDQSxNQUFJQyx1REFBSixHQXJGdUIsQ0F1RnZCO0FBQ0E7QUFDQTs7QUFDQSxNQUFJQyxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsMkJBQXZCLENBQUosRUFBeUQ7QUFDdkQsUUFBTUMsU0FBUyxHQUFHLFNBQVpBLFNBQVksR0FBTTtBQUN0QkYsY0FBUSxDQUFDRyxtQkFBVCxDQUE2QixrQkFBN0IsRUFBaURELFNBQWpEO0FBQ0F0QyxjQUFRLENBQUN3QyxNQUFUO0FBQ0QsS0FIRDs7QUFJQUosWUFBUSxDQUFDSyxnQkFBVCxDQUEwQixrQkFBMUIsRUFBOENILFNBQTlDO0FBRUFSLG1FQUFDLENBQUNNLFFBQUQsQ0FBRCxDQUFZTSxFQUFaLENBQWUsaUJBQWYsRUFBa0MsWUFBTTtBQUN0QyxVQUFJTixRQUFRLENBQUNDLGFBQVQsQ0FBdUIsWUFBdkIsQ0FBSixFQUEwQztBQUN4Q00sZ0ZBQXlCO0FBQzFCOztBQUNELFVBQUlQLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1Qix5QkFBdkIsQ0FBSixFQUF1RDtBQUNyRE8sY0FBTSxDQUFDQyxPQUFQLENBQWVDLGFBQWYsQ0FBNkJoRCxJQUE3QjtBQUNEO0FBQ0YsS0FQRDtBQVFEO0FBQ0YsQ0ExR0Q7O0FBNEdBLElBQUlpRCx3REFBWSxDQUFDaEIsTUFBakIsRUFBeUI7QUFDdkJpQixpREFBUSxDQUFDRCx3REFBRCxFQUFlbkQsVUFBZixDQUFSO0FBQ0QsQ0FGRCxNQUVPO0FBQ0xBLFlBQVU7QUFDWCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL1N1cGVyc3RvcmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBqUXVlcnkgcGx1Z2luc1xuaW1wb3J0ICQgZnJvbSAnLi9nbG9iYWxzL2pxdWVyeSc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbmltcG9ydCAnanF1ZXJ5LXRyZW5kJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuaW1wb3J0ICdqcXVlcnktcmV2ZWFsZXInOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbi8vIEdsb2JhbCBpbXBvcnRzXG5pbXBvcnQgJy4vZ2xvYmFscy9mbGlja2l0eS1pb3MtZml4JztcbmltcG9ydCBzY3JpcHRqcyBmcm9tICdzY3JpcHRqcyc7XG5cbi8vIFJlc3BvbnNpdmUgSW1hZ2VzXG5pbXBvcnQgcmltZyBmcm9tICdyaW1nLXNob3BpZnknOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbi8vIFRlbXBsYXRlIGltcG9ydHNcbmltcG9ydCBBY2NvdW50IGZyb20gJy4vdGVtcGxhdGVzL0FjY291bnQnO1xuaW1wb3J0IENvbnRhY3QgZnJvbSAnLi90ZW1wbGF0ZXMvQ29udGFjdCc7XG5pbXBvcnQgUGFnZSBmcm9tICcuL3RlbXBsYXRlcy9QYWdlJztcbmltcG9ydCBHaWZ0Q2FyZCBmcm9tICcuL3RlbXBsYXRlcy9HaWZ0Q2FyZCc7XG5cbi8vIFNlY3Rpb24gaW1wb3J0c1xuaW1wb3J0IFNlY3Rpb25zIGZyb20gJy4vU2VjdGlvbnMnO1xuaW1wb3J0IER5bmFtaWNCbG9nUG9zdHMgZnJvbSAnLi9zZWN0aW9ucy9EeW5hbWljQmxvZ1Bvc3RzJztcbmltcG9ydCBEeW5hbWljQ29sbGVjdGlvbkxpc3QgZnJvbSAnLi9zZWN0aW9ucy9EeW5hbWljQ29sbGVjdGlvbkxpc3QnO1xuaW1wb3J0IER5bmFtaWNGZWF0dXJlZENvbGxlY3Rpb24gZnJvbSAnLi9zZWN0aW9ucy9EeW5hbWljRmVhdHVyZWRDb2xsZWN0aW9uJztcbmltcG9ydCBEeW5hbWljSGlnaGxpZ2h0c0Jhbm5lcnMgZnJvbSAnLi9zZWN0aW9ucy9EeW5hbWljSGlnaGxpZ2h0c0Jhbm5lcnMnO1xuaW1wb3J0IER5bmFtaWNJbnN0YWdyYW1GZWVkIGZyb20gJy4vc2VjdGlvbnMvRHluYW1pY0luc3RhZ3JhbUZlZWQnO1xuaW1wb3J0IER5bmFtaWNNYXAgZnJvbSAnLi9zZWN0aW9ucy9EeW5hbWljTWFwJztcbmltcG9ydCBEeW5hbWljTWVudUxpc3QgZnJvbSAnLi9zZWN0aW9ucy9EeW5hbWljTWVudUxpc3QnO1xuaW1wb3J0IER5bmFtaWNOZXdzbGV0dGVyIGZyb20gJy4vc2VjdGlvbnMvRHluYW1pY05ld3NsZXR0ZXInO1xuaW1wb3J0IER5bmFtaWNQcm9tb0Jsb2NrcyBmcm9tICcuL3NlY3Rpb25zL0R5bmFtaWNQcm9tb0Jsb2Nrcyc7XG5pbXBvcnQgRHluYW1pY1JpY2hUZXh0IGZyb20gJy4vc2VjdGlvbnMvRHluYW1pY1JpY2hUZXh0JztcbmltcG9ydCBEeW5hbWljU2VhcmNoIGZyb20gJy4vc2VjdGlvbnMvRHluYW1pY1NlYXJjaCc7XG5pbXBvcnQgRHluYW1pY1Rlc3RpbW9uaWFscyBmcm9tICcuL3NlY3Rpb25zL0R5bmFtaWNUZXN0aW1vbmlhbHMnO1xuaW1wb3J0IER5bmFtaWNUd2l0dGVyRmVlZCBmcm9tICcuL3NlY3Rpb25zL0R5bmFtaWNUd2l0dGVyRmVlZCc7XG5pbXBvcnQgRHluYW1pY1ZpZGVvIGZyb20gJy4vc2VjdGlvbnMvRHluYW1pY1ZpZGVvJztcbmltcG9ydCBTdGF0aWNBbm5vdW5jZW1lbnQgZnJvbSAnLi9zZWN0aW9ucy9TdGF0aWNBbm5vdW5jZW1lbnQnO1xuaW1wb3J0IFN0YXRpY0FydGljbGUgZnJvbSAnLi9zZWN0aW9ucy9TdGF0aWNBcnRpY2xlJztcbmltcG9ydCBTdGF0aWNCbG9nIGZyb20gJy4vc2VjdGlvbnMvU3RhdGljQmxvZyc7XG5pbXBvcnQgU3RhdGljQ2FydCBmcm9tICcuL3NlY3Rpb25zL1N0YXRpY0NhcnQnO1xuaW1wb3J0IFN0YXRpY0NvbGxlY3Rpb24gZnJvbSAnLi9zZWN0aW9ucy9TdGF0aWNDb2xsZWN0aW9uJztcbmltcG9ydCBTdGF0aWNDb2xsZWN0aW9uTWluaW1hbCBmcm9tICcuL3NlY3Rpb25zL1N0YXRpY0NvbGxlY3Rpb25NaW5pbWFsJztcbmltcG9ydCBTdGF0aWNQYXNzd29yZCBmcm9tICcuL3NlY3Rpb25zL1N0YXRpY1Bhc3N3b3JkJztcbmltcG9ydCBTdGF0aWNQcm9kdWN0IGZyb20gJy4vc2VjdGlvbnMvU3RhdGljUHJvZHVjdCc7XG5pbXBvcnQgU3RhdGljU2VhcmNoIGZyb20gJy4vc2VjdGlvbnMvU3RhdGljU2VhcmNoJztcbmltcG9ydCBTdGF0aWNTZWN0aW9uRm9vdGVyIGZyb20gJy4vc2VjdGlvbnMvU3RhdGljU2VjdGlvbkZvb3Rlcic7XG5pbXBvcnQgU3RhdGljU2VjdGlvbkhlYWRlciBmcm9tICcuL3NlY3Rpb25zL1N0YXRpY1NlY3Rpb25IZWFkZXInO1xuaW1wb3J0IFN0YXRpY1NsaWRlc2hvdyBmcm9tICcuL3NlY3Rpb25zL1N0YXRpY1NsaWRlc2hvdyc7XG5cbmltcG9ydCBwb2x5ZmlsbFVybHMgZnJvbSAnLi9jaGVja1BvbHlmaWxscyc7XG5cbmltcG9ydCBpbml0U2hvcGlmeVByb2R1Y3RSZXZpZXdzIGZyb20gJy4vaGVscGVycy9Qcm9kdWN0UmV2aWV3cyc7XG5cbmNvbnN0IGluaXRFbXBpcmUgPSAoKSA9PiB7XG4gIHJpbWcuaW5pdCgnW2RhdGEtcmltZz1cImxhenlcIl0nLCB7IHJvdW5kOiAxIH0pO1xuXG4gIGNvbnN0IHNlY3Rpb25zID0gbmV3IFNlY3Rpb25zKCk7XG5cbiAgc2VjdGlvbnMucmVnaXN0ZXIoXG4gICAgJ3N0YXRpYy1hbm5vdW5jZW1lbnQnLFxuICAgIHNlY3Rpb24gPT4gbmV3IFN0YXRpY0Fubm91bmNlbWVudChzZWN0aW9uKSxcbiAgKTtcbiAgc2VjdGlvbnMucmVnaXN0ZXIoJ3N0YXRpYy1hcnRpY2xlJywgc2VjdGlvbiA9PiBuZXcgU3RhdGljQXJ0aWNsZShzZWN0aW9uKSk7XG4gIHNlY3Rpb25zLnJlZ2lzdGVyKCdzdGF0aWMtYmxvZycsIHNlY3Rpb24gPT4gbmV3IFN0YXRpY0Jsb2coc2VjdGlvbikpO1xuICBzZWN0aW9ucy5yZWdpc3Rlcignc3RhdGljLWNhcnQnLCBzZWN0aW9uID0+IG5ldyBTdGF0aWNDYXJ0KHNlY3Rpb24pKTtcbiAgc2VjdGlvbnMucmVnaXN0ZXIoJ3N0YXRpYy1jb2xs
1ZWN0aW9uJywgc2VjdGlvbiA9PiBuZXcgU3RhdGljQ29sbGVjdGlvbihzZWN0aW9uKSk7XG4gIHNlY3Rpb25zLnJlZ2lzdGVyKCdzdGF0aWMtY29sbGVjdGlvbi1taW5pbWFsJywgc2VjdGlvbiA9PiBuZXcgU3RhdGljQ29sbGVjdGlvbk1pbmltYWwoc2VjdGlvbikpO1xuICBzZWN0aW9ucy5yZWdpc3Rlcignc3RhdGljLWZvb3RlcicsIHNlY3Rpb24gPT4gbmV3IFN0YXRpY1NlY3Rpb25Gb290ZXIoc2VjdGlvbikpO1xuICBzZWN0aW9ucy5yZWdpc3Rlcignc3RhdGljLWhlYWRlcicsIHNlY3Rpb24gPT4gbmV3IFN0YXRpY1NlY3Rpb25IZWFkZXIoc2VjdGlvbikpO1xuICBzZWN0aW9ucy5yZWdpc3Rlcignc3RhdGljLXBhc3N3b3JkJywgc2VjdGlvbiA9PiBuZXcgU3RhdGljUGFzc3dvcmQoc2VjdGlvbikpO1xuICBzZWN0aW9ucy5yZWdpc3Rlcignc3RhdGljLXByb2R1Y3QnLCBzZWN0aW9uID0+IG5ldyBTdGF0aWNQcm9kdWN0KHNlY3Rpb24pKTtcbiAgc2VjdGlvbnMucmVnaXN0ZXIoJ3N0YXRpYy1zZWFyY2gnLCBzZWN0aW9uID0+IG5ldyBTdGF0aWNTZWFyY2goc2VjdGlvbikpO1xuICBzZWN0aW9ucy5yZWdpc3RlcihcbiAgICAnZHluYW1pYy1ibG9nLXBvc3RzJyxcbiAgICBzZWN0aW9uID0+IG5ldyBEeW5hbWljQmxvZ1Bvc3RzKHNlY3Rpb24pLFxuICApO1xuICBzZWN0aW9ucy5yZWdpc3RlcihcbiAgICAnZHluYW1pYy1jb2xsZWN0aW9uLWxpc3QnLFxuICAgIHNlY3Rpb24gPT4gbmV3IER5bmFtaWNDb2xsZWN0aW9uTGlzdChzZWN0aW9uKSxcbiAgKTtcbiAgc2VjdGlvbnMucmVnaXN0ZXIoXG4gICAgJ2R5bmFtaWMtaGlnaGxpZ2h0cy1iYW5uZXJzJyxcbiAgICBzZWN0aW9uID0+IG5ldyBEeW5hbWljSGlnaGxpZ2h0c0Jhbm5lcnMoc2VjdGlvbiksXG4gICk7XG4gIHNlY3Rpb25zLnJlZ2lzdGVyKFxuICAgICdzdGF0aWMtc2xpZGVzaG93JyxcbiAgICBzZWN0aW9uID0+IG5ldyBTdGF0aWNTbGlkZXNob3coc2VjdGlvbiksXG4gICk7XG4gIHNlY3Rpb25zLnJlZ2lzdGVyKFxuICAgICdkeW5hbWljLXByb21vLW1vc2FpYycsXG4gICAgc2VjdGlvbiA9PiBuZXcgRHluYW1pY1Byb21vQmxvY2tzKHNlY3Rpb24pLFxuICApO1xuICBzZWN0aW9ucy5yZWdpc3RlcihcbiAgICAnZHluYW1pYy1wcm9tby1ncmlkJyxcbiAgICBzZWN0aW9uID0+IG5ldyBEeW5hbWljUHJvbW9CbG9ja3Moc2VjdGlvbiksXG4gICk7XG4gIHNlY3Rpb25zLnJlZ2lzdGVyKFxuICAgICdkeW5hbWljLW1lbnUtbGlzdCcsXG4gICAgc2VjdGlvbiA9PiBuZXcgRHluYW1pY01lbnVMaXN0KHNlY3Rpb24pLFxuICApO1xuICBzZWN0aW9ucy5yZWdpc3RlcihcbiAgICAnZHluYW1pYy10d2l0dGVyLWZlZWQnLFxuICAgIHNlY3Rpb24gPT4gbmV3IER5bmFtaWNUd2l0dGVyRmVlZChzZWN0aW9uKSxcbiAgKTtcbiAgc2VjdGlvbnMucmVnaXN0ZXIoXG4gICAgJ2R5bmFtaWMtdGVzdGltb25pYWxzJyxcbiAgICBzZWN0aW9uID0+IG5ldyBEeW5hbWljVGVzdGltb25pYWxzKHNlY3Rpb24pLFxuICApO1xuICBzZWN0aW9ucy5yZWdpc3RlcihcbiAgICAnZHluYW1pYy1pbnN0YWdyYW0tZmVlZCcsXG4gICAgc2VjdGlvbiA9PiBuZXcgRHluYW1pY0luc3RhZ3JhbUZlZWQoc2VjdGlvbiksXG4gICk7XG4gIHNlY3Rpb25zLnJlZ2lzdGVyKFxuICAgICdkeW5hbWljLWZlYXR1cmVkLWNvbGxlY3Rpb24nLFxuICAgIHNlY3Rpb24gPT4gbmV3IER5bmFtaWNGZWF0dXJlZENvbGxlY3Rpb24oc2VjdGlvbiksXG4gICk7XG4gIHNlY3Rpb25zLnJlZ2lzdGVyKFxuICAgICdkeW5hbWljLWZlYXR1cmVkLXByb2R1Y3QnLFxuICAgIHNlY3Rpb24gPT4gbmV3IFN0YXRpY1Byb2R1Y3Qoc2VjdGlvbiksXG4gICk7XG4gIHNlY3Rpb25zLnJlZ2lzdGVyKFxuICAgICdkeW5hbWljLXJpY2gtdGV4dCcsXG4gICAgc2VjdGlvbiA9PiBuZXcgRHluYW1pY1JpY2hUZXh0KHNlY3Rpb24pLFxuICApO1xuICBzZWN0aW9ucy5yZWdpc3RlcignZHluYW1pYy1zZWFyY2gnLCBzZWN0aW9uID0+IG5ldyBEeW5hbWljU2VhcmNoKHNlY3Rpb24pKTtcbiAgc2VjdGlvbnMucmVnaXN0ZXIoJ2R5bmFtaWMtdmlkZW8nLCBzZWN0aW9uID0+IG5ldyBEeW5hbWljVmlkZW8oc2VjdGlvbikpO1xuICBzZWN0aW9ucy5yZWdpc3RlcihcbiAgICAnZHluYW1pYy1uZXdzbGV0dGVyJyxcbiAgICBzZWN0aW9uID0+IG5ldyBEeW5hbWljTmV3c2xldHRlcihzZWN0aW9uKSxcbiAgKTtcbiAgc2VjdGlvbnMucmVnaXN0ZXIoJ2R5bmFtaWMtbWFwJywgc2VjdGlvbiA9PiBuZXcgRHluYW1pY01hcChzZWN0aW9uKSk7XG5cbiAgaWYgKCQoJ2JvZHkuZ2lmdGNhcmQnKS5sZW5ndGgpIHtcbiAgICBuZXcgR2lmdENhcmQoKTtcbiAgfVxuXG4gIG5ldyBBY2NvdW50KCk7XG4gIG5ldyBDb250YWN0KCk7XG4gIG5ldyBQYWdlKCk7XG5cbiAgLy8gVGhpcyBmaWxlIGdldHMgcmVsb2FkZWQgZm9yIGV2ZXJ5IHBhZ2UgbmF2aWdhdGlvbiwgc28gd2hlbiB0dXJib2xpbmtzIGlzIGVuYWJsZWRcbiAgLy8gd2UgbmVlZCB0byBleHBsaWNpdGx5IHVubG9hZCBhbGwgSlMgYmVmb3JlIG5hdmlnYXRpbmcgdG8gYW5vdGhlciBwYWdlIHRvIGVuc3VyZVxuICAvLyBhIGNsZWFuIEpTIHNsYXRlIGZvciB0aGUgbmV4dCBwYWdlLlxuICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtdHVyYm9saW5rcy1lbmFibGVkXScpKSB7XG4gICAgY29uc3QgdW5sb2FkQWxsID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHVyYm9saW5rczpjbGljaycsIHVubG9hZEFsbCk7XG4gICAgICBzZWN0aW9ucy51bmJpbmQoKTtcbiAgICB9O1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3R1cmJvbGlua3M6Y2xpY2snLCB1bmxvYWRBbGwpO1xuXG4gICAgJChkb2N1bWVudCkub24oJ3R1cmJvbGlua3M6bG9hZCcsICgpID0+IHtcbiAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc3ByLWJhZGdlJykpIHtcbiAgICAgICAgaW5pdFNob3BpZnlQcm9kdWN0UmV2aWV3cygpO1xuICAgICAgfVxuICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zaG9waWZ5LXBheW1lbnQtYnV0dG9uJykpIHtcbiAgICAgICAgd2luZG93LlNob3BpZnkuUGF5bWVudEJ1dHRvbi5pbml0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbmlmIChwb2x5ZmlsbFVybHMubGVuZ3RoKSB7XG4gIHNjcmlwdGpzKHBvbHlmaWxsVXJscywgaW5pdEVtcGlyZSk7XG59IGVsc2Uge1xuICBpbml0RW1waXJlKCk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/Superstore.js\n') },
1"./source/scripts/checkPolyfills.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\nvar _this = undefined;\n\nvar polyfillUrls = []; // Checks if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\n\nif (!('IntersectionObserver' in window && 'IntersectionObserverEntry' in window && 'intersectionRatio' in window.IntersectionObserverEntry.prototype) || !('open' in document.createElement('details'))) {\n polyfillUrls.push(document.querySelector('[data-scripts]').dataset.pxuPolyfills);\n} // Polyfill NodeList.forEach if required.\n// Polyfill is so small it doesn't need to load any external code.\n\n\nif (window.NodeList && !NodeList.prototype.forEach) {\n NodeList.prototype.forEach = Array.prototype.forEach;\n}\n\nif (!Element.prototype.toggleAttribute) {\n Element.prototype.toggleAttribute = function (name, force) {\n if (force !== undefined) {\n force = !!force;\n }\n\n if (_this.hasAttribute(name)) {\
1n if (force) return true;\n\n _this.removeAttribute(name);\n\n return false;\n }\n\n if (force === false) return false;\n\n _this.setAttribute(name, '');\n\n return true;\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (polyfillUrls);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jaGVja1BvbHlmaWxscy5qcz9kMGZkIl0sIm5hbWVzIjpbInBvbHlmaWxsVXJscyIsIndpbmRvdyIsIkludGVyc2VjdGlvbk9ic2VydmVyRW50cnkiLCJwcm90b3R5cGUiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJwdXNoIiwicXVlcnlTZWxlY3RvciIsImRhdGFzZXQiLCJweHVQb2x5ZmlsbHMiLCJOb2RlTGlzdCIsImZvckVhY2giLCJBcnJheSIsIkVsZW1lbnQiLCJ0b2dnbGVBdHRyaWJ1dGUiLCJuYW1lIiwiZm9yY2UiLCJ1bmRlZmluZWQiLCJoYXNBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQU1BLFlBQVksR0FBRyxFQUFyQixDLENBRUE7QUFDQTs7QUFDQSxJQUFJLEVBQ0YsMEJBQTBCQyxNQUExQixJQUNHLCtCQUErQkEsTUFEbEMsSUFFRyx1QkFBdUJBLE1BQU0sQ0FBQ0MseUJBQVAsQ0FBaUNDLFNBSHpELEtBSUMsRUFBRSxVQUFVQyxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsU0FBdkIsQ0FBWixDQUpMLEVBSXFEO0FBQ25ETCxjQUFZLENBQUNNLElBQWIsQ0FBa0JGLFFBQVEsQ0FBQ0csYUFBVCxDQUF1QixnQkFBdkIsRUFBeUNDLE9BQXpDLENBQWlEQyxZQUFuRTtBQUNELEMsQ0FFRDtBQUNBOzs7QUFDQSxJQUFJUixNQUFNLENBQUNTLFFBQVAsSUFBbUIsQ0FBQ0EsUUFBUSxDQUFDUCxTQUFULENBQW1CUSxPQUEzQyxFQUFvRDtBQUNsREQsVUFBUSxDQUFDUCxTQUFULENBQW1CUSxPQUFuQixHQUE2QkMsS0FBSyxDQUFDVCxTQUFOLENBQWdCUSxPQUE3QztBQUNEOztBQUVELElBQUksQ0FBQ0UsT0FBTyxDQUFDVixTQUFSLENBQWtCVyxlQUF2QixFQUF3QztBQUN0Q0QsU0FBT
1yxDQUFDVixTQUFSLENBQWtCVyxlQUFsQixHQUFvQyxVQUFDQyxJQUFELEVBQU9DLEtBQVAsRUFBaUI7QUFDbkQsUUFBSUEsS0FBSyxLQUFLQyxTQUFkLEVBQXlCO0FBQ3ZCRCxXQUFLLEdBQUcsQ0FBQyxDQUFDQSxLQUFWO0FBQ0Q7O0FBRUQsUUFBSSxLQUFJLENBQUNFLFlBQUwsQ0FBa0JILElBQWxCLENBQUosRUFBNkI7QUFDM0IsVUFBSUMsS0FBSixFQUFXLE9BQU8sSUFBUDs7QUFFWCxXQUFJLENBQUNHLGVBQUwsQ0FBcUJKLElBQXJCOztBQUNBLGFBQU8sS0FBUDtBQUNEOztBQUNELFFBQUlDLEtBQUssS0FBSyxLQUFkLEVBQXFCLE9BQU8sS0FBUDs7QUFFckIsU0FBSSxDQUFDSSxZQUFMLENBQWtCTCxJQUFsQixFQUF3QixFQUF4Qjs7QUFDQSxXQUFPLElBQVA7QUFDRCxHQWZEO0FBZ0JEOztBQUVjZiwyRUFBZiIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NoZWNrUG9seWZpbGxzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcG9seWZpbGxVcmxzID0gW107XG5cbi8vIENoZWNrcyBpZiBhbGwgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgYW5kIEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlcbi8vIGZlYXR1cmVzIGFyZSBuYXRpdmVseSBzdXBwb3J0ZWQuXG5pZiAoIShcbiAgJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3dcbiAgJiYgJ0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnknIGluIHdpbmRvd1xuICAmJiAnaW50ZXJzZWN0aW9uUmF0aW8nIGluIHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5LnByb3RvdHlwZVxuKSB8fCAhKCdvcGVuJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkZXRhaWxzJykpKSB7XG4gIHBvbHlmaWxsVXJscy5wdXNoKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXNjcmlwdHNdJykuZGF0YXNldC5weHVQb2x5ZmlsbHMpO1xufVxuXG4vLyBQb2x5ZmlsbCBOb2RlTGlzdC5mb3JFYWNoIGlmIHJlcXVpcmVkLlxuLy8gUG9seWZpbGwgaXMgc28gc21hbGwgaXQgZG9lc24ndCBuZWVkIHRvIGxvYWQgYW55IGV4dGVybmFsIGNvZGUuXG5pZiAod2luZG93Lk5vZGVMaXN0ICYmICFOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCkge1xuICBOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xufVxuXG5pZiAoIUVsZW1lbnQucHJvdG90eXBlLnRvZ2dsZUF0dHJpYnV0ZSkge1xuICBFbGVtZW50LnByb3RvdHlwZS50b2dnbGVBdHRyaWJ1dGUgPSAobmFtZSwgZm9yY2UpID0+IHtcbiAgICBpZiAoZm9yY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yY2UgPSAhIWZvcmNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgaWYgKGZvcmNlKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmb3JjZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsICcnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcG9seWZpbGxVcmxzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/checkPolyfills.js\n") },
1"./source/scripts/components/AddToCartFlyout.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shopify-currency-converter */ \"./node_modules/shopify-currency-converter/dist/index.js\");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _shopify_theme_a11y__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @shopify/theme-a11y */ \"./node_modules/@shopify/theme-a11y/theme-a11y.js\");\n/* harmony import */ var _MessageBanner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./MessageBanner */ \"./source/scripts/components/MessageBanner.js\");\n/* harmony import */ var _helpers_Images__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../helpers/Images */ \"./source/scripts/helpers/Images.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar AddToCartFlyout =\n/*#__PURE__*/\nfunction () {\n function AddToCartFlyout() {\n _classCallCheck(this, AddToCartFlyout);\n\n this.formData = {};\n this.settings = {};\n this.events = [];\n this.Images = new _helpers_Images__WEBPACK_IMPORTED_MODULE_4__[\"default\"]();\n this.flyOutSelector = '[data-atc-banner]';\n this.$atcTemplate = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-templates] \".concat(this.flyOutSelector));\n this.activeElement = null;\n this.atcFlyOut = document.querySelector(this.flyOutSelector);\n this._onInit = this._onInit.bind(this);\n this._onError = this._onError.bind(this);\n this._onSuccess = this._onSuccess.bind(this);\n this._onCloseAll = this._onCloseAll.bind(this);\n this._handleDocumentClick = this._handleDocumentClick.bind(this);\n this._closeEsc = this._closeEsc.bind(this);\n this.messageBanner = new _MessageBanner__WEBPACK_IMPORTED_MODULE_3__[\"default\"]();\n this.header = document.querySelector('[data-site-header]');\n this.$header = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.header);\n this.$headerMain = this.$header.find('[data-site-header-main]');\n this.$body = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body);\n }\n\n _createClass(AddToCartFlyout, [{\n key: \"init\",\n value: function init(formData, product, options) {\n var callbacks = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n this.formData = formData;\n this.product = product;\n this.isSample = options.isSample; // Allows ATC Flow to be overridden\n\n this.callbacks = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({\n onInit: this._onInit,\n onError: this._onError,\n onSuccess: this._onSuccess,\n onClose: this._onCloseAll\n }, callbacks);\n var $atcButton = options.$atcButton;\n this.settings = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({\n moneyFormat: null,\n cartRedirection: false\n }, options.settings); // If any FlyOuts are fully open, close them\n\n this._closeFlyOuts();\n\n this.callbacks.onInit();\n this.activeElement = document.activeElement;\n\n this._disableButton($atcButton);\n\n this._updateCart($atcButton);\n }\n }, {\n key: \"unload\",\n value: function unload() {\n this.messageBanner.dismissBanners();\n\n this._removeFlyOuts();\n\n delete this.Images;\n }\n }, {\n key: \"_updateCart\",\n value: function _updateCart($atcButton) {\n var _this = this;\n\n var $flyOut = this.$atcTemplate.clone();
1\n var idField = this.formData.filter(function (data) {\n return data.name === 'id';\n });\n var id = parseInt(idField[0].value, 10);\n var variants = this.product.variants.filter(function (variant) {\n return variant.id === id;\n });\n var variant = variants[0];\n var quantityField = this.formData.filter(function (data) {\n return data.name === 'quantity';\n });\n var quantity = parseInt(quantityField[0].value, 10);\n jquery__WEBPACK_IMPORTED_MODULE_0___default.a.ajax({\n type: 'POST',\n url: '/cart/add.js',\n data: jquery__WEBPACK_IMPORTED_MODULE_0___default.a.param(this.formData),\n dataType: 'json'\n }).done(function (res) {\n window.api.theme.triggerEvent('cart:updated', {\n cancel: function cancel() {}\n });\n\n if (res.image) {\n var imageUrl = _this.Images.getSizedImageUrl(res.image, '200x');\n\n var image = _this.Images.loadImage(imageUrl);\n\n $flyOut.find('[data-atc-banner-product-image]').html(image);\n }\n\n if (_this.isSample) {\n var $optionsEl = $flyOut.find('[data-atc-banner-product-options]');\n var sampleText = $optionsEl.data('sample-text'); // If sample is being added to the cart print product name with selected variant options.\n\n $flyOut.find('[data-atc-banner-product-title]').text(\"\".concat(res.product_title, \" - \").concat(res.properties._selected_variant));\n $optionsEl.text(sampleText);\n } else {\n $flyOut.find('[data-atc-banner-product-title]').text(res.product_title);\n /*\n TODO: Bring in `variant.options`, iterate through to get option\n name for: <strong>Option name:</strong> Option\n */\n\n if (res.variant_options[0] !== 'Title' && res.variant_options[0] !== 'Default Title') {\n $flyOut.find('[data-atc-banner-product-options]').text(res.variant_options.join(', '));\n }\n /*\n TODO: Bring in variant, and use that to check compare_at_price\n to see if the item is on sale\n */\n\n\n var $productPriceQuantity = $flyOut.find('[data-atc-banner-product-price-quantity]');\n $productPriceQuantity.text(\"\".concat(quantity, \" \\xD7 \"));\n var $productPriceValue = $flyOut.find('[data-atc-banner-product-price-value]');\n $productPriceValue.text(Shopify.formatMoney(variant.price, _this.settings.moneyFormat)); // Update price to local currency\n\n shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1___default.a.update($productPriceValue[0]);\n }\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default.a.ajax({\n type: 'GET',\n url: '/cart.js',\n dataType: 'json'\n }).done(function (response) {\n if (_this.settings.cartRedirection) {\n location.href = '/cart';\n }\n\n _this.callbacks.onSuccess(); // Reset formData in case instance is never cleared\n\n\n _this.formData = {};\n var $subTotal = $flyOut.find('[data-atc-banner-cart-subtotal]');\n\n var cartTotalValueListener = function cartTotalValueListener(_ref) {\n var price = _ref.price;\n\n if ($subTotal) {\n $subTotal.get(0).innerHTML = Shopify.formatMoney(price, _this.settings.moneyFormat);\n shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1___default.a.update($subTotal.get(0));\n }\n };\n\n _this.cartTotalValue = window.api.theme.useValue({\n name: 'cart:total',\n handler: cartTotalValueListener,\n initialValue: {\n price: response.total_price,\n compare_at_price: response.total_price\n }\n });\n $flyOut.find('[data-atc-banner-cart-button]').find('span').text(response.item_count);\n\n _this.$header.append($flyOut); // Notify Header of new cart count\n\n\n _this.$headerMain.trigger('cartcount:update', {\n response: response\n });\n\n _this._bindEvents($flyOut);\n\n _this._openFlyOut($flyOut, $atcButton);\n });\n }).fail(function (response) {\n var errorText;\n\n try {\n var responseText = JSON.parse(response.responseText);\n errorText = responseText.description;\n } catch (error) {\n errorText = \"\".concat(response.status, \" \").concat(response.statusText);\n\n if (response.status === 401) {\n errorText = \"\".concat(errorText, \". Try refreshing and logging in.\");\n }\n }\n\n _this._enableButton($atcButton);\n\n _this.callbacks.onError(errorText);\n });\n }\n }, {\n key: \"_onError\",\n value: function _onError(error) {\n this.messageBanner.message(error, 'error');\n }\n }, {\n key: \"_onInit\",\n value: function _onInit() {\n this.messageBanner.dismissBanners();\n }\n }, {\n key: \"_onSuccess\",\n value: function _onSuccess() {\
1n /*\n By default, the ATC Flyout doesn't need any additional success callbacks\n The `this.callbacks.onSuccess` is used to allow other views to initiate\n behaviour when a product has been added to the cart\n */\n }\n }, {\n key: \"_onCloseAll\",\n value: function _onCloseAll() {\n /*\n By default, the ATC Flyout doesn't need any additional close callbacks\n The `this.callbacks.onClose` is used to allow other views to initiate\n behaviour when the atc banner has been closed\n */\n }\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents($flyOut) {\n var _this2 = this;\n\n this.events.push([$flyOut.on('click.atc-banner', '[data-atc-banner-close]', function (event) {\n event.preventDefault();\n\n _this2._closeFlyOut($flyOut);\n }), jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-atc-button-checkout]', $flyOut).on('click.atc-banner', function (event) {\n return window.api.theme.triggerEvent('cart:checkout', {\n cancel: function cancel() {\n return event.preventDefault();\n }\n });\n }), jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).on('touchstart.atc-banner, click.atc-banner', this._handleDocumentClick)]);\n }\n /**\n * Trigger any existing open FlyOuts to close\n *\n * @private\n */\n\n }, {\n key: \"_closeFlyOuts\",\n value: function _closeFlyOuts() {\n var _this3 = this;\n\n var $excludeFlyOut = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.flyOutSelector).filter('[data-flyout-active]').each(function (index, el) {\n var $flyOut = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el);\n\n if ($excludeFlyOut && $flyOut.is($excludeFlyOut)) {\n return;\n }\n\n _this3._closeFlyOut($flyOut, index);\n });\n\n if (!$excludeFlyOut) {\n this.callbacks.onClose();\n }\n\n window.removeEventListener('keydown', this._closeEsc);\n }\n }, {\n key: \"_openFlyOut\",\n value: function _openFlyOut($flyOut, $atcButton) {\n var _this4 = this;\n\n /*\n If user has initiated a new ATC Flow before the first has finished,\n the first FlyOut could have opened after the first attempt to close open flyouts\n */\n this._closeFlyOuts($flyOut);\n\n $flyOut.addClass('animating animating-in').one('trend', function () {\n $flyOut.removeClass('animating animating-in').addClass('visible').off('trend');\n $flyOut.attr('data-flyout-active', true);\n Object(_shopify_theme_a11y__WEBPACK_IMPORTED_MODULE_2__[\"trapFocus\"])($flyOut[0]);\n window.addEventListener('keydown', _this4._closeEsc);\n\n _this4._enableButton($atcButton);\n });\n }\n }, {\n key: \"_closeEsc\",\n value: function _closeEsc(e) {\n if (e.key === 'Escape') {\n this._closeFlyOuts();\n }\n }\n /**\n * Close an open FlyOut\n *\n * @param $flyOut\n * @param index\n * @private\n */\n\n }, {\n key: \"_closeFlyOut\",\n value: function _closeFlyOut() {\n var _this5 = this;\n\n var $flyOut = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n if (!$flyOut) {\n return;\n }\n\n $flyOut.addClass('animating animating-out').one('trend', function () {\n $flyOut.removeClass('animating animating-out visible').one('trend', function () {\n $flyOut.off('trend');\n\n _this5._removeFlyOut($flyOut, index); // if the user clicked onto the search box, close the atc flyout and move focus\n // to the search instead of going to the previous active element.\n\n\n if (_this5.documentClickEventTarget && 'liveSearchInput' in _this5.documentClickEventTarget.dataset) {\n _this5.documentClickEventTarget.focus();\n } else if (_this5.activeElement) {\n _this5.activeElement.focus();\n }\n\n Object(_shopify_theme_a11y__WEBPACK_IMPORTED_MODULE_2__[\"removeTrapFocus\"])($flyOut[0]);\n\n _this5.callbacks.onClose();\n });\n });\n }\n }, {\n key: \"_removeFlyOuts\",\n value: function _removeFlyOuts() {\n var _this6 = this;\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.flyOutSelector).filter('[data-flyout-active]').each(function (index, el) {\n _this6._removeFlyOut(jquery__WEBPACK_IMPORTED_MODULE_0___default()(el), index);\n });\n }\n /**\n * Remove the Flyout from the DOM, and clean up listeners\n *\n * @param $flyOut\n * @param index\n * @private\n */\n\n }, {\n key: \"_removeFlyOut\",\n value: function _removeFlyOut($flyOut, index) {\n if (this.events[index]) {\n this.events[index].forEac
1h(function ($el) {\n return $el.off('.atc-banner');\n });\n this.events.splice(index, 1);\n }\n\n if (this.cartTotalValue) {\n this.cartTotalValue.unload();\n this.cartTotalValue = null;\n }\n\n if ($flyOut) {\n $flyOut.remove();\n }\n }\n }, {\n key: \"_disableButton\",\n value: function _disableButton($atcButton) {\n $atcButton.addClass('processing').prop('disabled', true);\n }\n }, {\n key: \"_enableButton\",\n value: function _enableButton($atcButton) {\n $atcButton.prop('disabled', false).removeClass('processing');\n }\n }, {\n key: \"_handleDocumentClick\",\n value: function _handleDocumentClick(event) {\n var target = event.target;\n var $parent = jquery__WEBPACK_IMPORTED_MODULE_0___default()(target).parents('[data-atc-banner]');\n\n if ($parent.length) {\n return;\n }\n\n this.documentClickEventTarget = target;\n\n this._closeFlyOuts();\n }\n }]);\n\n return AddToCartFlyout;\n}();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new AddToCartFlyout());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL0FkZFRvQ2FydEZseW91dC5qcz8xNWVjIl0sIm5hbWVzIjpbIkFkZFRvQ2FydEZseW91dCIsImZvcm1EYXRhIiwic2V0dGluZ3MiLCJldmVudHMiLCJJbWFnZXMiLCJmbHlPdXRTZWxlY3RvciIsIiRhdGNUZW1wbGF0ZSIsIiQiLCJhY3RpdmVFbGVtZW50IiwiYXRjRmx5T3V0IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiX29uSW5pdCIsImJpbmQiLCJfb25FcnJvciIsIl9vblN1Y2Nlc3MiLCJfb25DbG9zZUFsbCIsIl9oYW5kbGVEb2N1bWVudENsaWNrIiwiX2Nsb3NlRXNjIiwibWVzc2FnZUJhbm5lciIsIk1lc3NhZ2VCYW5uZXIiLCJoZWFkZXIiLCIkaGVhZGVyIiwiJGhlYWRlck1haW4iLCJmaW5kIiwiJGJvZHkiLCJib2R5IiwicHJvZHVjdCIsIm9wdGlvbnMiLCJjYWxsYmFja3MiLCJpc1NhbXBsZSIsImV4dGVuZCIsIm9uSW5pdCIsIm9uRXJyb3IiLCJvblN1Y2Nlc3MiLCJvbkNsb3NlIiwiJGF0Y0J1dHRvbiIsIm1vbmV5Rm9ybWF0IiwiY2FydFJlZGlyZWN0aW9uIiwiX2Nsb3NlRmx5T3V0cyIsIl9kaXNhYmxlQnV0dG9uIiwiX3VwZGF0ZUNhcnQiLCJkaXNtaXNzQmFubmVycyIsIl9yZW1vdmVGbHlPdXRzIiwiJGZseU91dCIsImNsb25lIiwiaWRGaWVsZCIsImZpbHRlciIsImRhdGEiLCJuYW1lIiwiaWQiLCJwYXJzZUludCIsInZhbHVlIiwidmFyaWFudHMiLCJ2YXJpYW50IiwicXVhbnRpdHlGaWVsZCIsInF1YW50aXR5IiwiYWpheCIsInR5cGUiLCJ1cmwiLCJwYXJhbSIsImRhdGFUeXBlIiwiZG9uZSIsInJlcyIsIndpbmRvdyIsImFwaSIsInRoZW1lIiwidHJpZ2dlckV2ZW50IiwiY2FuY2VsIiwiaW1hZ2UiLCJpbWFnZVVybCIsImdldFNpemVkSW1hZ2VVcmwiLCJsb2FkSW1hZ2UiLCJodG1sIiwiJG9wdGlvbnNFbCIsInNhbXBsZVRleHQiLCJ0ZXh0IiwicHJvZHVjdF90aXRsZSIsInByb3BlcnRpZXMiLCJfc2VsZWN0ZWRfdmFyaWFudCIsInZhcmlhbnRfb3B0aW9ucyIsImpvaW4iLCIkcHJvZHVjdFByaWNlUXVhbnRpdHkiLCIkcHJvZHVjdFByaWNlVmFsdWUiLCJTaG9waWZ5IiwiZm9ybWF0TW9uZXkiLCJwcmljZSIsIkN1cnJlbmN5Q29udmVydGVyIiwidXBkYXRlIiwicmVzcG9uc2UiLCJsb2NhdGlvbiIsImhyZWYiLCIkc3ViVG90YWwiLCJjYXJ0VG90YWxWYWx1ZUxpc3RlbmVyIiwiZ2V0IiwiaW5uZXJIVE1MIiwiY2FydFRvdGFsVmFsdWUiLCJ1c2VWYWx1ZSIsImhhbmRsZXIiLCJpbml0aWFsVmFsdWUiLCJ0b3RhbF9wcmljZSIsImNvbXBhcmVfYXRfcHJpY2UiLCJpdGVtX2NvdW50IiwiYXBwZW5kIiwidHJpZ2dlciIsIl9iaW5kRXZlbnRzIiwiX29wZW5GbHlPdXQiLCJmYWlsIiwiZXJyb3JUZXh0IiwicmVzcG9uc2VUZXh0IiwiSlNPTiIsInBhcnNlIiwiZGVzY3JpcHRpb24iLCJlcnJvciIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJfZW5hYmxlQnV0dG9uIiwibWVzc2FnZSIsInB1c2giLCJvbiIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJfY2xvc2VGbHlPdXQiLCIkZXhjbHVkZUZseU91dCIsImVhY2giLCJpbmRleCIsImVsIiwiaXMiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYWRkQ2xhc3MiLCJvbmUiLCJyZW1vdmVDbGFzcyIsIm9mZiIsImF0dHIiLCJ0cmFwRm9jdXMiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsImtleSIsIl9yZW1vdmVGbHlPdXQiLCJkb2N1bWVudENsaWNrRXZlbnRUYXJnZXQiLCJkYXRhc2V0IiwiZm9jdXMiLCJyZW1vdmVUcmFwRm9jdXMiLCJmb3JFYWNoIiwiJGVsIiwic3BsaWNlIiwidW5sb2FkIiwicmVtb3ZlIiwicHJvcCIsInRhcmdldCIsIiRwYXJlbnQiLCJwYXJlbnRzIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0lBRU1BLGU7OztBQUNKLDZCQUFjO0FBQUE7O0FBQ1osU0FBS0MsUUFBTCxHQUFnQixFQUFoQjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQSxTQUFLQyxNQUFMLEdBQWMsRUFBZDtBQUNBLFNBQUtDLE1BQUwsR0FBYyxJQUFJQSx1REFBSixFQUFkO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQixtQkFBdEI7QUFDQSxTQUFLQyxZQUFMLEdBQW9CQyw2Q0FBQyw0QkFBcUIsS0FBS0YsY0FBMUIsRUFBckI7QUFDQSxTQUFLRyxhQUFMLEdBQXFCLElBQXJCO0FBRUEsU0FBS0MsU0FBTCxHQUFpQkMsUUFBUSxDQUFDQyxhQUFULENBQXVCLEtBQUtOLGNBQTVCLENBQWpCO0FBRUEsU0FBS08sT0FBTCxHQUFlLEtBQUtBLE9BQUwsQ0FBYUMsSUFBYixDQUFrQixJQUFsQixDQUFmO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNELElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDQSxTQUFLRSxVQUFMLEdBQWtCLEtBQUtBLFVBQUwsQ0FBZ0JGLElBQWhCLENBQXFCLElBQXJCLENBQWxCO
10FBQ0EsU0FBS0csV0FBTCxHQUFtQixLQUFLQSxXQUFMLENBQWlCSCxJQUFqQixDQUFzQixJQUF0QixDQUFuQjtBQUNBLFNBQUtJLG9CQUFMLEdBQTRCLEtBQUtBLG9CQUFMLENBQTBCSixJQUExQixDQUErQixJQUEvQixDQUE1QjtBQUVBLFNBQUtLLFNBQUwsR0FBaUIsS0FBS0EsU0FBTCxDQUFlTCxJQUFmLENBQW9CLElBQXBCLENBQWpCO0FBRUEsU0FBS00sYUFBTCxHQUFxQixJQUFJQyxzREFBSixFQUFyQjtBQUVBLFNBQUtDLE1BQUwsR0FBY1gsUUFBUSxDQUFDQyxhQUFULENBQXVCLG9CQUF2QixDQUFkO0FBQ0EsU0FBS1csT0FBTCxHQUFlZiw2Q0FBQyxDQUFDLEtBQUtjLE1BQU4sQ0FBaEI7QUFDQSxTQUFLRSxXQUFMLEdBQW1CLEtBQUtELE9BQUwsQ0FBYUUsSUFBYixDQUFrQix5QkFBbEIsQ0FBbkI7QUFDQSxTQUFLQyxLQUFMLEdBQWFsQiw2Q0FBQyxDQUFDRyxRQUFRLENBQUNnQixJQUFWLENBQWQ7QUFDRDs7Ozt5QkFFSXpCLFEsRUFBVTBCLE8sRUFBU0MsTyxFQUF5QjtBQUFBLFVBQWhCQyxTQUFnQix1RUFBSixFQUFJO0FBQy9DLFdBQUs1QixRQUFMLEdBQWdCQSxRQUFoQjtBQUNBLFdBQUswQixPQUFMLEdBQWVBLE9BQWY7QUFDQSxXQUFLRyxRQUFMLEdBQWdCRixPQUFPLENBQUNFLFFBQXhCLENBSCtDLENBSy9DOztBQUNBLFdBQUtELFNBQUwsR0FBaUJ0Qiw2Q0FBQyxDQUFDd0IsTUFBRixDQUNmO0FBQ0VDLGNBQU0sRUFBRSxLQUFLcEIsT0FEZjtBQUVFcUIsZUFBTyxFQUFFLEtBQUtuQixRQUZoQjtBQUdFb0IsaUJBQVMsRUFBRSxLQUFLbkIsVUFIbEI7QUFJRW9CLGVBQU8sRUFBRSxLQUFLbkI7QUFKaEIsT0FEZSxFQU9mYSxTQVBlLENBQWpCO0FBTitDLFVBZ0J2Q08sVUFoQnVDLEdBZ0J4QlIsT0FoQndCLENBZ0J2Q1EsVUFoQnVDO0FBa0IvQyxXQUFLbEMsUUFBTCxH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JLEtBQUsxSCxNQUFMLENBQVkwSCxLQUFaLENBQUosRUFBd0I7QUFDdEIsYUFBSzFILE1BQUwsQ0FBWTBILEtBQVosRUFBbUJrQixPQUFuQixDQUEyQixVQUFBQyxHQUFHO0FBQUEsaUJBQUlBLEdBQUcsQ0FBQ1osR0FBSixDQUFRLGFBQVIsQ0FBSjtBQUFBLFNBQTlCO0FBQ0EsYUFBS2pJLE1BQUwsQ0FBWThJLE1BQVosQ0FBbUJwQixLQUFuQixFQUEwQixDQUExQjtBQUNEOztBQUVELFVBQUksS0FBSzdCLGNBQVQsRUFBeUI7QUFDdkIsYUFBS0EsY0FBTCxDQUFvQmtELE1BQXBCO0FBQ0EsYUFBS2xELGNBQUwsR0FBc0IsSUFBdEI7QUFDRDs7QUFFRCxVQUFJcEQsT0FBSixFQUFhO0FBQ1hBLGVBQU8sQ0FBQ3VHLE1BQVI7QUFDRDtBQUNGOzs7bUNBRWMvRyxVLEVBQVk7QUFDekJBLGdCQUFVLENBQUM2RixRQUFYLENBQW9CLFlBQXBCLEVBQWtDbUIsSUFBbEMsQ0FBdUMsVUFBdkMsRUFBbUQsSUFBbkQ7QUFDRDs7O2tDQUVhaEgsVSxFQUFZO0FBQ3hCQSxnQkFBVSxDQUFDZ0gsSUFBWCxDQUFnQixVQUFoQixFQUE0QixLQUE1QixFQUFtQ2pCLFdBQW5DLENBQStDLFlBQS9DO0FBQ0Q7Ozt5Q0FFb0JYLEssRUFBTztBQUFBLFVBQ2xCNkIsTUFEa0IsR0FDUDdCLEtBRE8sQ0FDbEI2QixNQURrQjtBQUUxQixVQUFNQyxPQUFPLEdBQUcvSSw2Q0FBQyxDQUFDOEksTUFBRCxDQUFELENBQVVFLE9BQVYsQ0FBa0IsbUJBQWxCLENBQWhCOztBQUVBLFVBQUlELE9BQU8sQ0FBQ0UsTUFBWixFQUFvQjtBQUNsQjtBQUNEOztBQUVELFdBQUtiLHdCQUFMLEdBQWdDVSxNQUFoQzs7QUFDQSxXQUFLOUcsYUFBTDtBQUNEOzs7Ozs7QUFHWSxtRUFBSXZDLGVBQUosRUFBZiIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvQWRkVG9DYXJ0Rmx5b3V0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBDdXJyZW5jeUNvbnZlcnRlciBmcm9tICdzaG9waWZ5LWN1cnJlbmN5LWNvbnZlcnRlcic7XG5pbXBvcnQgeyB0cmFwRm9jdXMsIHJlbW92ZVRyYXBGb2N1cyB9IGZyb20gJ0BzaG9waWZ5L3RoZW1lLWExMXknO1xuXG5pbXBvcnQgTWVzc2FnZUJhbm5lciBmcm9tICcuL01lc3NhZ2VCYW5uZXInO1xuaW1wb3J0IEltYWdlcyBmcm9tICcuLi9oZWxwZXJzL0ltYWdlcyc7XG5cbmNsYXNzIEFkZFRvQ2FydEZseW91dCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZm9ybURhdGEgPSB7fTtcbiAgICB0aGlzLnNldHRpbmdzID0ge307XG4gICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICB0aGlzLkltYWdlcyA9IG5ldyBJbWFnZXMoKTtcbiAgICB0aGlzLmZseU91dFNlbGVjdG9yID0gJ1tkYXRhLWF0Yy1iYW5uZXJdJztcbiAgICB0aGlzLiRhdGNUZW1wbGF0ZSA9ICQoYFtkYXRhLXRlbXBsYXRlc10gJHt0aGlzLmZseU91dFNlbGVjdG9yfWApO1xuICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLmF0Y0ZseU91dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mbHlPdXRTZWxlY3Rvcik7XG5cbiAgICB0aGlzLl9vbkluaXQgPSB0aGlzLl9vbkluaXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbkVycm9yID0gdGh
1pcy5fb25FcnJvci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uU3VjY2VzcyA9IHRoaXMuX29uU3VjY2Vzcy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2xvc2VBbGwgPSB0aGlzLl9vbkNsb3NlQWxsLmJpbmQodGhpcyk7XG4gICAgdGhpcy5faGFuZGxlRG9jdW1lbnRDbGljayA9IHRoaXMuX2hhbmRsZURvY3VtZW50Q2xpY2suYmluZCh0aGlzKTtcblxuICAgIHRoaXMuX2Nsb3NlRXNjID0gdGhpcy5fY2xvc2VFc2MuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubWVzc2FnZUJhbm5lciA9IG5ldyBNZXNzYWdlQmFubmVyKCk7XG5cbiAgICB0aGlzLmhlYWRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXNpdGUtaGVhZGVyXScpO1xuICAgIHRoaXMuJGhlYWRlciA9ICQodGhpcy5oZWFkZXIpO1xuICAgIHRoaXMuJGhlYWRlck1haW4gPSB0aGlzLiRoZWFkZXIuZmluZCgnW2RhdGEtc2l0ZS1oZWFkZXItbWFpbl0nKTtcbiAgICB0aGlzLiRib2R5ID0gJChkb2N1bWVudC5ib2R5KTtcbiAgfVxuXG4gIGluaXQoZm9ybURhdGEsIHByb2R1Y3QsIG9wdGlvbnMsIGNhbGxiYWNrcyA9IHt9KSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZvcm1EYXRhO1xuICAgIHRoaXMucHJvZHVjdCA9IHByb2R1Y3Q7XG4gICAgdGhpcy5pc1NhbXBsZSA9IG9wdGlvbnMuaXNTYW1wbGU7XG5cbiAgICAvLyBBbGxvd3MgQVRDIEZsb3cgdG8gYmUgb3ZlcnJpZGRlblxuICAgIHRoaXMuY2FsbGJhY2tzID0gJC5leHRlbmQoXG4gICAgICB7XG4gICAgICAgIG9uSW5pdDogdGhpcy5fb25Jbml0LFxuICAgICAgICBvbkVycm9yOiB0aGlzLl9vbkVycm9yLFxuICAgICAgICBvblN1Y2Nlc3M6IHRoaXMuX29uU3VjY2VzcyxcbiAgICAgICAgb25DbG9zZTogdGhpcy5fb25DbG9zZUFsbCxcbiAgICAgIH0sXG4gICAgICBjYWxsYmFja3MsXG4gICAgKTtcblxuICAgIGNvbnN0IHsgJGF0Y0J1dHRvbiB9ID0gb3B0aW9ucztcblxuICAgIHRoaXMuc2V0dGluZ3MgPSAkLmV4dGVuZChcbiAgICAgIHtcbiAgICAgICAgbW9uZXlGb3JtYXQ6IG51bGwsXG4gICAgICAgIGNhcnRSZWRpcmVjdGlvbjogZmFsc2UsXG4gICAgICB9LFxuICAgICAgb3B0aW9ucy5zZXR0aW5ncyxcbiAgICApO1xuXG4gICAgLy8gSWYgYW55IEZseU91dHMgYXJlIGZ1bGx5IG9wZW4sIGNsb3NlIHRoZW1cbiAgICB0aGlzLl9jbG9zZUZseU91dHMoKTtcblxuICAgIHRoaXMuY2FsbGJhY2tzLm9uSW5pdCgpO1xuXG4gICAgdGhpcy5hY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgIHRoaXMuX2Rpc2FibGVCdXR0b24oJGF0Y0J1dHRvbik7XG4gICAgdGhpcy5fdXBkYXRlQ2FydCgkYXRjQnV0dG9uKTtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VCYW5uZXIuZGlzbWlzc0Jhbm5lcnMoKTtcbiAgICB0aGlzLl9yZW1vdmVGbHlPdXRzKCk7XG4gICAgZGVsZXRlIHRoaXMuSW1hZ2VzO1xuICB9XG5cbiAgX3VwZGF0ZUNhcnQoJGF0Y0J1dHRvbikge1xuICAgIGNvbnN0ICRmbHlPdXQgPSB0aGlzLiRhdGNUZW1wbGF0ZS5jbG9uZSgpO1xuXG4gICAgY29uc3QgaWRGaWVsZCA9IHRoaXMuZm9ybURhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5uYW1lID09PSAnaWQnKTtcbiAgICBjb25zdCBpZCA9IHBhcnNlSW50KGlkRmllbGRbMF0udmFsdWUsIDEwKTtcbiAgICBjb25zdCB2YXJpYW50cyA9IHRoaXMucHJvZHVjdC52YXJpYW50cy5maWx0ZXIodmFyaWFudCA9PiB2YXJpYW50LmlkID09PSBpZCk7XG4gICAgY29uc3QgdmFyaWFudCA9IHZhcmlhbnRzWzBdO1xuICAgIGNvbnN0IHF1YW50aXR5RmllbGQgPSB0aGlzLmZvcm1EYXRhLmZpbHRlcihcbiAgICAgIGRhdGEgPT4gZGF0YS5uYW1lID09PSAncXVhbnRpdHknLFxuICAgICk7XG4gICAgY29uc3QgcXVhbnRpdHkgPSBwYXJzZUludChxdWFudGl0eUZpZWxkWzBdLnZhbHVlLCAxMCk7XG5cbiAgICAkLmFqYXgoe1xuICAgICAgdHlwZTogJ1BPU1QnLFxuICAgICAgdXJsOiAnL2NhcnQvYWRkLmpzJyxcbiAgICAgIGRhdGE6ICQucGFyYW0odGhpcy5mb3JtRGF0YSksXG4gICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgIH0pXG4gICAgICAuZG9uZShyZXMgPT4ge1xuICAgICAgICB3aW5kb3cuYXBpLnRoZW1lLnRyaWdnZXJFdmVudCgnY2FydDp1cGRhdGVkJywgeyBjYW5jZWw6ICgpID0+IHt9IH0pO1xuXG4gICAgICAgIGlmIChyZXMuaW1hZ2UpIHtcbiAgICAgICAgICBjb25zdCBpbWFnZVVybCA9IHRoaXMuSW1hZ2VzLmdldFNpemVkSW1hZ2VVcmwocmVzLmltYWdlLCAnMjAweCcpO1xuICAgICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5JbWFnZXMubG9hZEltYWdlKGltYWdlVXJsKTtcblxuICAgICAgICAgICRmbHlPdXRcbiAgICAgICAgICAgIC5maW5kKCdbZGF0YS1hdGMtYmFubmVyLXByb2R1Y3QtaW1hZ2VdJylcbiAgICAgICAgICAgIC5odG1sKGltYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzU2FtcGxlKSB7XG4gICAgICAgICAgY29uc3QgJG9wdGlvbnNFbCA9ICRmbHlPdXQuZmluZCgnW2RhdGEtYXRjLWJhbm5lci1wcm9kdWN0LW9wdGlvbnNdJyk7XG4gICAgICAgICAgY29uc3Qgc2FtcGxlVGV4dCA9ICRvcHRpb25zRWwuZGF0YSgnc2FtcGxlLXRleHQnKTtcblxuICAgICAgICAgIC8vIElmIHNhbXBsZSBpcyBiZWluZyBhZGRlZCB0byB0aGUgY2FydCBwcmludCBwcm9kdWN0IG5hbWUgd2l0aCBzZWxlY3RlZCB2YXJpYW50IG9wdGlvbnMuXG4gICAgICAgICAgJGZseU91dFxuICAgICAgICAgICAgLmZpbmQoJ1tkYXRhLWF0Yy1iYW5uZXItcHJvZHVjdC10aXRsZV0nKVxuICAgICAgICAgICAgLnRleHQoYCR7cmVzLnByb2R1Y3RfdGl0bGV9IC0gJHtyZXMucHJvcGVydGllcy5fc2VsZWN0ZWRfdmFyaWFudH1gKTtcblxuICAgICAgICAgICRvcHRpb25zRWwudGV4dChzYW1wbGVUZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkZmx5T3V0XG4gICAgICAgICAgICAuZmluZCgnW2RhdGEtYXRjLWJhbm5lci1wcm9kdWN0LXRpdGxlXScpXG4gICAgICAgICAgICAudGV4dChyZXMucHJvZHVjdF90aXRsZSk7XG5cbiAgICAgICAgICAvKlxuICAgICAgICAgICAgVE9ETzogQnJpbmcgaW4gYHZhcmlhbnQub3B0aW9uc2AsIGl0ZXJhdGUgdGhyb3VnaCB0byBnZXQgb3B0aW9uXG4gICAgICAgICAgICAgIG5hbWUgZm9yOiA8c3Ryb25nPk9wdGlvbiBuYW1lOjwvc3Ryb25nPiBPcHRpb25cbiAgICAgICAgICAqL1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgI
1HJlcy52YXJpYW50X29wdGlvbnNbMF0gIT09ICdUaXRsZScgJiZcbiAgICAgICAgICAgIHJlcy52YXJpYW50X29wdGlvbnNbMF0gIT09ICdEZWZhdWx0IFRpdGxlJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgJGZseU91dFxuICAgICAgICAgICAgICAuZmluZCgnW2RhdGEtYXRjLWJhbm5lci1wcm9kdWN0LW9wdGlvbnNdJylcbiAgICAgICAgICAgICAgLnRleHQocmVzLnZhcmlhbnRfb3B0aW9ucy5qb2luKCcsICcpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKlxuICAgICAgICAgICAgVE9ETzogQnJpbmcgaW4gdmFyaWFudCwgYW5kIHVzZSB0aGF0IHRvIGNoZWNrIGNvbXBhcmVfYXRfcHJpY2VcbiAgICAgICAgICAgICAgdG8gc2VlIGlmIHRoZSBpdGVtIGlzIG9uIHNhbGVcbiAgICAgICAgICAqL1xuICAgICAgICAgIGNvbnN0ICRwcm9kdWN0UHJpY2VRdWFudGl0eSA9ICRmbHlPdXQuZmluZChcbiAgICAgICAgICAgICdbZGF0YS1hdGMtYmFubmVyLXByb2R1Y3QtcHJpY2UtcXVhbnRpdHldJyxcbiAgICAgICAgICApO1xuICAgICAgICAgICRwcm9kdWN0UHJpY2VRdWFudGl0eS50ZXh0KGAke3F1YW50aXR5fSDDlyBgKTtcblxuICAgICAgICAgIGNvbnN0ICRwcm9kdWN0UHJpY2VWYWx1ZSA9ICRmbHlPdXQuZmluZChcbiAgICAgICAgICAgICdbZGF0YS1hdGMtYmFubmVyLXByb2R1Y3QtcHJpY2UtdmFsdWVdJyxcbiAgICAgICAgICApO1xuICAgICAgICAgICRwcm9kdWN0UHJpY2VWYWx1ZS50ZXh0KFxuICAgICAgICAgICAgU2hvcGlmeS5mb3JtYXRNb25leSh2YXJpYW50LnByaWNlLCB0aGlzLnNldHRpbmdzLm1vbmV5Rm9ybWF0KSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gVXBkYXRlIHByaWNlIHRvIGxvY2FsIGN1cnJlbmN5XG4gICAgICAgICAgQ3VycmVuY3lDb252ZXJ0ZXIudXBkYXRlKCRwcm9kdWN0UHJpY2VWYWx1ZVswXSk7XG4gICAgICAgIH1cblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgIHR5cGU6ICdHRVQnLFxuICAgICAgICAgIHVybDogJy9jYXJ0LmpzJyxcbiAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICB9KS5kb25lKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5jYXJ0UmVkaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSAnL2NhcnQnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLm9uU3VjY2VzcygpO1xuXG4gICAgICAgICAgLy8gUmVzZXQgZm9ybURhdGEgaW4gY2FzZSBpbnN0YW5jZSBpcyBuZXZlciBjbGVhcmVkXG4gICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuXG4gICAgICAgICAgY29uc3QgJHN1YlRvdGFsID0gJGZseU91dC5maW5kKCdbZGF0YS1hdGMtYmFubmVyLWNhcnQtc3VidG90YWxdJyk7XG4gICAgICAgICAgY29uc3QgY2FydFRvdGFsVmFsdWVMaXN0ZW5lciA9ICh7IHByaWNlIH0pID0+IHtcbiAgICAgICAgICAgIGlmICgkc3ViVG90YWwpIHtcbiAgICAgICAgICAgICAgJHN1YlRvdGFsLmdldCgwKS5pbm5lckhUTUwgPSBTaG9waWZ5LmZvcm1hdE1vbmV5KFxuICAgICAgICAgICAgICAgIHByaWNlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MubW9uZXlGb3JtYXQsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIEN1cnJlbmN5Q29udmVydGVyLnVwZGF0ZSgkc3ViVG90YWwuZ2V0KDApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5jYXJ0VG90YWxWYWx1ZSA9IHdpbmRvdy5hcGkudGhlbWUudXNlVmFsdWUoe1xuICAgICAgICAgICAgbmFtZTogJ2NhcnQ6dG90YWwnLFxuICAgICAgICAgICAgaGFuZGxlcjogY2FydFRvdGFsVmFsdWVMaXN0ZW5lcixcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZToge1xuICAgICAgICAgICAgICBwcmljZTogcmVzcG9uc2UudG90YWxfcHJpY2UsXG4gICAgICAgICAgICAgIGNvbXBhcmVfYXRfcHJpY2U6IHJlc3BvbnNlLnRvdGFsX3ByaWNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgICRmbHlPdXRcbiAgICAgICAgICAgIC5maW5kKCdbZGF0YS1hdGMtYmFubmVyLWNhcnQtYnV0dG9uXScpXG4gICAgICAgICAgICAuZmluZCgnc3BhbicpXG4gICAgICAgICAgICAudGV4dChyZXNwb25zZS5pdGVtX2NvdW50KTtcblxuICAgICAgICAgIHRoaXMuJGhlYWRlci5hcHBlbmQoJGZseU91dCk7XG5cbiAgICAgICAgICAvLyBOb3RpZnkgSGVhZGVyIG9mIG5ldyBjYXJ0IGNvdW50XG4gICAgICAgICAgdGhpcy4kaGVhZGVyTWFpbi50cmlnZ2VyKCdjYXJ0Y291bnQ6dXBkYXRlJywgeyByZXNwb25zZSB9KTtcblxuICAgICAgICAgIHRoaXMuX2JpbmRFdmVudHMoJGZseU91dCk7XG4gICAgICAgICAgdGhpcy5fb3BlbkZseU91dCgkZmx5T3V0LCAkYXRjQnV0dG9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmZhaWwocmVzcG9uc2UgPT4ge1xuICAgICAgICBsZXQgZXJyb3JUZXh0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IEpTT04ucGFyc2UocmVzcG9uc2UucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICBlcnJvclRleHQgPSByZXNwb25zZVRleHQuZGVzY3JpcHRpb247XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZXJyb3JUZXh0ID0gYCR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YDtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIGVycm9yVGV4dCA9IGAke2Vycm9yVGV4dH0uIFRyeSByZWZyZXNoaW5nIGFuZCBsb2dnaW5nIGluLmA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZW5hYmxlQnV0dG9uKCRhdGNCdXR0b24pO1xuICAgICAgICB0aGlzLmNhbGxiYWNrcy5vbkVycm9yKGVycm9yVGV4dCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIF9vbkVycm9yKGVycm9yKSB7XG4gICAgdGhpcy5tZXNzYWdlQmFubmVyLm1lc3NhZ2UoZXJyb3IsICdlcnJvcicpO1xuICB9XG5cbiAgX29uSW5pdCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VCYW5uZXIuZGlzbWlzc0Jhbm5lcnMoKTtcbiAgfVxuXG4gIF9vblN1Y2Nlc3MoKSB7XG4gICAgLypcbiAgICAgIEJ5IGRlZmF1bHQsIHRoZSBBVEMgRmx5b3V0IGRvZXNuJ3QgbmVlZCBhbnkgYWRkaXRpb25hbCBzdWNjZXNzIGNhbGxiYWNrc1xuXG4gICAgICBUaGUgYHRoaXMuY2FsbGJhY2tzLm9uU3VjY2Vzc2AgaXMgdXNlZCB0byBhbGxvdyBvdGhlciB2aWV3cyB0byBpbml0aWF0ZVxuICAgICAgYmVoYXZpb3VyIHdoZW4gYSBwcm9kdWN0IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBjYXJ0XG4gICAgICovXG4gIH1cblxuICBfb25DbG9zZUFsbCgpIHtcbiAgICAvKlxuICAgICAgQnkgZGVmYXVsdCwgdGhlIEFUQyBGbHlvdXQgZG9lc24ndCBuZWVkIGFueSBhZGRpdGlvbmFsIGNsb3NlIGNhbGxiYWNrc1xuXG4gICAgICBUaGUgYHRoaXMuY2FsbGJhY2tzLm9uQ2xvc2VgIGlzIHVzZWQgdG8gYWxsb3cgb3RoZXIgdmlld3MgdG8gaW5pdGlhdGVcbiAgICAgIGJlaGF2aW91ciB3aGVuIHRoZSBhdGMgYmFubmVyIGhhcyBiZWVuIGNsb3NlZFxuICAgICAqL1xuICB9XG5cbiAgX2JpbmRFdmVudHMoJGZseU91dCkge1xuICAgIHRoaXMuZXZlbnRzLnB1c2goW1xuICAgICAgJGZseU91dC5vbignY2xpY2suYXRjLWJhbm5lcicsICdbZGF0YS1hdGMtYmFubmVyLWNsb3NlXScsIGV2ZW50ID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fY2xvc2VGbHlPdXQoJGZseU91dCk7XG4gICAgICB9KSxcbiAgICAgICQoJ1tkYXRhLWF0Yy1idXR0b24tY2hlY2tvdXRdJywgJGZseU91dCkub24oJ2NsaWNrLmF0Yy1iYW5uZXInLCBldmVudCA9PiB3aW5kb3cuYXBpLnRoZW1lLnRyaWdnZXJFdmVudCgnY2FydDpjaGVja291dCcsIHtcbiAgICAgICAgY2FuY2VsOiAoKSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpLFxuICAgICAgfSkpLFxuICAgICAgJChkb2N1bWVudCkub24oXG4gICAgICAgICd0b3VjaHN0YXJ0LmF0Yy1iYW5uZXIsIGNsaWNrLmF0Yy1iYW5uZXInLFxuICAgICAgICB0aGlzLl9oYW5kbGVEb2N1bWVudENsaWNrLFxuICAgICAgKSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGFueSBleGlzdGluZyBvcGVuIEZseU91dHMgdG8gY2xvc2VcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbG9zZUZseU91dHMoJGV4Y2x1ZGVGbHlPdXQgPSBudWxsKSB7XG4gICAgJCh0aGlzLmZseU91dFNlbGVjdG9yKVxuICAgICAgLmZpbHRlcignW2RhdGEtZmx5b3V0LWFjdGl2ZV0nKVxuICAgICAgLmVhY2goKGluZGV4LCBlbCkgPT4ge1xuICAgICAgICBjb25zdCAkZmx5T3V0ID0gJChlbCk7XG5cbiAgICAgICAgaWYgKCRleGNsdWRlRmx5T3V0ICYmICRmbHlPdXQuaXMoJGV4Y2x1ZGVGbHlPdXQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2xvc2VGbHlPdXQoJGZseU91dCwgaW5kZXgpO1xuICAgICAgfSk7XG5cbiAgICBpZiAoISRleGNsdWRlRmx5T3V0KSB7XG4gICAgICB0aGlzLmNhbGxiYWNrcy5vbkNsb3NlKCk7XG4gICAgfVxuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9jbG9zZUVzYyk7XG4gIH1cblxuICBfb3BlbkZseU91dCg
1kZmx5T3V0LCAkYXRjQnV0dG9uKSB7XG4gICAgLypcbiAgICAgSWYgdXNlciBoYXMgaW5pdGlhdGVkIGEgbmV3IEFUQyBGbG93IGJlZm9yZSB0aGUgZmlyc3QgaGFzIGZpbmlzaGVkLFxuICAgICB0aGUgZmlyc3QgRmx5T3V0IGNvdWxkIGhhdmUgb3BlbmVkIGFmdGVyIHRoZSBmaXJzdCBhdHRlbXB0IHRvIGNsb3NlIG9wZW4gZmx5b3V0c1xuICAgICovXG4gICAgdGhpcy5fY2xvc2VGbHlPdXRzKCRmbHlPdXQpO1xuXG4gICAgJGZseU91dC5hZGRDbGFzcygnYW5pbWF0aW5nIGFuaW1hdGluZy1pbicpLm9uZSgndHJlbmQnLCAoKSA9PiB7XG4gICAgICAkZmx5T3V0XG4gICAgICAgIC5yZW1vdmVDbGFzcygnYW5pbWF0aW5nIGFuaW1hdGluZy1pbicpXG4gICAgICAgIC5hZGRDbGFzcygndmlzaWJsZScpXG4gICAgICAgIC5vZmYoJ3RyZW5kJyk7XG5cbiAgICAgICRmbHlPdXQuYXR0cignZGF0YS1mbHlvdXQtYWN0aXZlJywgdHJ1ZSk7XG5cbiAgICAgIHRyYXBGb2N1cygkZmx5T3V0WzBdKTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9jbG9zZUVzYyk7XG5cbiAgICAgIHRoaXMuX2VuYWJsZUJ1dHRvbigkYXRjQnV0dG9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jbG9zZUVzYyhlKSB7XG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5fY2xvc2VGbHlPdXRzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGFuIG9wZW4gRmx5T3V0XG4gICAqXG4gICAqIEBwYXJhbSAkZmx5T3V0XG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2Nsb3NlRmx5T3V0KCRmbHlPdXQgPSBudWxsLCBpbmRleCA9IDApIHtcbiAgICBpZiAoISRmbHlPdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAkZmx5T3V0LmFkZENsYXNzKCdhbmltYXRpbmcgYW5pbWF0aW5nLW91dCcpLm9uZSgndHJlbmQnLCAoKSA9PiB7XG4gICAgICAkZmx5T3V0XG4gICAgICAgIC5yZW1vdmVDbGFzcygnYW5pbWF0aW5nIGFuaW1hdGluZy1vdXQgdmlzaWJsZScpXG4gICAgICAgIC5vbmUoJ3RyZW5kJywgKCkgPT4ge1xuICAgICAgICAgICRmbHlPdXQub2ZmKCd0cmVuZCcpO1xuICAgICAgICAgIHRoaXMuX3JlbW92ZUZseU91dCgkZmx5T3V0LCBpbmRleCk7XG5cbiAgICAgICAgICAvLyBpZiB0aGUgdXNlciBjbGlja2VkIG9udG8gdGhlIHNlYXJjaCBib3gsIGNsb3NlIHRoZSBhdGMgZmx5b3V0IGFuZCBtb3ZlIGZvY3VzXG4gICAgICAgICAgLy8gdG8gdGhlIHNlYXJjaCBpbnN0ZWFkIG9mIGdvaW5nIHRvIHRoZSBwcmV2aW91cyBhY3RpdmUgZWxlbWVudC5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2xpY2tFdmVudFRhcmdldFxuICAgICAgICAgICAgJiYgJ2xpdmVTZWFyY2hJbnB1dCcgaW4gdGhpcy5kb2N1bWVudENsaWNrRXZlbnRUYXJnZXQuZGF0YXNldFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudENsaWNrRXZlbnRUYXJnZXQuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVtb3ZlVHJhcEZvY3VzKCRmbHlPdXRbMF0pO1xuICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLm9uQ2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBfcmVtb3ZlRmx5T3V0cygpIHtcbiAgICAkKHRoaXMuZmx5T3V0U2VsZWN0b3IpXG4gICAgICAuZmlsdGVyKCdbZGF0YS1mbHlvdXQtYWN0aXZlXScpXG4gICAgICAuZWFjaCgoaW5kZXgsIGVsKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUZseU91dCgkKGVsKSwgaW5kZXgpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBGbHlvdXQgZnJvbSB0aGUgRE9NLCBhbmQgY2xlYW4gdXAgbGlzdGVuZXJzXG4gICAqXG4gICAqIEBwYXJhbSAkZmx5T3V0XG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZUZseU91dCgkZmx5T3V0LCBpbmRleCkge1xuICAgIGlmICh0aGlzLmV2ZW50c1tpbmRleF0pIHtcbiAgICAgIHRoaXMuZXZlbnRzW2luZGV4XS5mb3JFYWNoKCRlbCA9PiAkZWwub2ZmKCcuYXRjLWJhbm5lcicpKTtcbiAgICAgIHRoaXMuZXZlbnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FydFRvdGFsVmFsdWUpIHtcbiAgICAgIHRoaXMuY2FydFRvdGFsVmFsdWUudW5sb2FkKCk7XG4gICAgICB0aGlzLmNhcnRUb3RhbFZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJGZseU91dCkge1xuICAgICAgJGZseU91dC5yZW1vdmUoKTtcbiAgICB9XG4gIH1cblxuICBfZGlzYWJsZUJ1dHRvbigkYXRjQnV0dG9uKSB7XG4gICAgJGF0Y0J1dHRvbi5hZGRDbGFzcygncHJvY2Vzc2luZycpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gIH1cblxuICBfZW5hYmxlQnV0dG9uKCRhdGNCdXR0b24pIHtcbiAgICAkYXRjQnV0dG9uLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpLnJlbW92ZUNsYXNzKCdwcm9jZXNzaW5nJyk7XG4gIH1cblxuICBfaGFuZGxlRG9jdW1lbnRDbGljayhldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBldmVudDtcbiAgICBjb25zdCAkcGFyZW50ID0gJCh0YXJnZXQpLnBhcmVudHMoJ1tkYXRhLWF0Yy1iYW5uZXJdJyk7XG5cbiAgICBpZiAoJHBhcmVudC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRvY3VtZW50Q2xpY2tFdmVudFRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLl9jbG9zZUZseU91dHMoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQWRkVG9DYXJ0Rmx5b3V0KCk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/components/AddToCartFlyout.js\n") },
1"./source/scripts/components/CartItem.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CartItem; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shopify-currency-converter */ "./node_modules/shopify-currency-converter/dist/index.js");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1__);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar CartItem =\n/*#__PURE__*/\nfunction () {\n function CartItem(el, data, settings) {\n var _this = this;\n\n _classCallCheck(this, CartItem);\n\n this.el = el;\n this.data = data;\n this.settings = settings;\n this._id = el.getAttribute(\'data-cartitem-id\');\n this.value = window.api.theme.useValue({\n name: "line-item:".concat(this._id, ":price"),\n handler: function handler(_ref) {\n var price = _ref.price;\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(_this.el).each(function (index, cartItem) {\n var cartItemTotal = cartItem.querySelector(\'[data-cartitem-total]\');\n cartItemTotal.innerHTML = Shopify.formatMoney(price, _this.settings.money_format);\n shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1___default.a.update(cartItemTotal);\n });\n },\n initialValue: {\n price: this.data.line_price,\n compare_at_price: this.data.original_line_price\n }\n });\n }\n\n _createClass(CartItem, [{\n key: "unload",\n value: function unload() {\n this.value.unload();\n }\n }]);\n\n return CartItem;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL0NhcnRJdGVtLmpzP2Y5ZTUiXSwibmFtZXMiOlsiQ2FydEl0ZW0iLCJlbCIsImRhdGEiLCJzZXR0aW5ncyIsIl9pZCIsImdldEF0dHJpYnV0ZSIsInZhbHVlIiwid2luZG93IiwiYXBpIiwidGhlbWUiLCJ1c2VWYWx1ZSIsIm5hbWUiLCJoYW5kbGVyIiwicHJpY2UiLCIkIiwiZWFjaCIsImluZGV4IiwiY2FydEl0ZW0iLCJjYXJ0SXRlbVRvdGFsIiwicXVlcnlTZWxlY3RvciIsImlubmVySFRNTCIsIlNob3BpZnkiLCJmb3JtYXRNb25leSIsIm1vbmV5X2Zvcm1hdCIsIkN1cnJlbmN5Q29udmVydGVyIiwidXBkYXRlIiwiaW5pdGlhbFZhbHVlIiwibGluZV9wcmljZSIsImNvbXBhcmVfYXRfcHJpY2UiLCJvcmlnaW5hbF9saW5lX3ByaWNlIiwidW5sb2FkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztJQUVxQkEsUTs7O0FBQ25CLG9CQUFZQyxFQUFaLEVBQWdCQyxJQUFoQixFQUFzQkMsUUFBdEIsRUFBZ0M7QUFBQTs7QUFBQTs7QUFDOUIsU0FBS0YsRUFBTCxHQUFVQSxFQUFWO0FBQ0EsU0FBS0MsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQkEsUUFBaEI7QUFDQSxTQUFLQyxHQUFMLEdBQVdILEVBQUUsQ0FBQ0ksWUFBSCxDQUFnQixrQkFBaEIsQ0FBWDtBQUVBLFNBQUtDLEtBQUwsR0FBYUMsTUFBTSxDQUFDQyxHQUFQLENBQVdDLEtBQVgsQ0FBaUJDLFFBQWpCLENBQTBCO0FBQ3JDQyxVQUFJLHNCQUFlLEtBQUtQLEdBQXBCLFdBRGlDO0FBRXJDUSxhQUFPLEVBQUUsdUJBQWU7QUFBQSxZQUFaQyxLQUFZLFFBQVpBLEtBQVk7QUFDdEJDLHFEQUFDLENBQUMsS0FBSSxDQUFDYixFQUFOLENBQUQsQ0FBV2MsSUFBWCxDQUFnQixVQUFDQyxLQUFELEVBQVFDLFFBQVIsRU
1FBcUI7QUFDbkMsY0FBTUMsYUFBYSxHQUFHRCxRQUFRLENBQUNFLGFBQVQsQ0FBdUIsdUJBQXZCLENBQXRCO0FBRUFELHVCQUFhLENBQUNFLFNBQWQsR0FBMEJDLE9BQU8sQ0FBQ0MsV0FBUixDQUN4QlQsS0FEd0IsRUFFeEIsS0FBSSxDQUFDVixRQUFMLENBQWNvQixZQUZVLENBQTFCO0FBSUFDLDJFQUFpQixDQUFDQyxNQUFsQixDQUF5QlAsYUFBekI7QUFDRCxTQVJEO0FBU0QsT0Fab0M7QUFhckNRLGtCQUFZLEVBQUU7QUFDWmIsYUFBSyxFQUFFLEtBQUtYLElBQUwsQ0FBVXlCLFVBREw7QUFFWkMsd0JBQWdCLEVBQUUsS0FBSzFCLElBQUwsQ0FBVTJCO0FBRmhCO0FBYnVCLEtBQTFCLENBQWI7QUFrQkQ7Ozs7NkJBRVE7QUFDUCxXQUFLdkIsS0FBTCxDQUFXd0IsTUFBWDtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9DYXJ0SXRlbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgQ3VycmVuY3lDb252ZXJ0ZXIgZnJvbSAnc2hvcGlmeS1jdXJyZW5jeS1jb252ZXJ0ZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYXJ0SXRlbSB7XG4gIGNvbnN0cnVjdG9yKGVsLCBkYXRhLCBzZXR0aW5ncykge1xuICAgIHRoaXMuZWwgPSBlbDtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICB0aGlzLl9pZCA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jYXJ0aXRlbS1pZCcpO1xuXG4gICAgdGhpcy52YWx1ZSA9IHdpbmRvdy5hcGkudGhlbWUudXNlVmFsdWUoe1xuICAgICAgbmFtZTogYGxpbmUtaXRlbToke3RoaXMuX2lkfTpwcmljZWAsXG4gICAgICBoYW5kbGVyOiAoeyBwcmljZSB9KSA9PiB7XG4gICAgICAgICQodGhpcy5lbCkuZWFjaCgoaW5kZXgsIGNhcnRJdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2FydEl0ZW1Ub3RhbCA9IGNhcnRJdGVtLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNhcnRpdGVtLXRvdGFsXScpO1xuXG4gICAgICAgICAgY2FydEl0ZW1Ub3RhbC5pbm5lckhUTUwgPSBTaG9waWZ5LmZvcm1hdE1vbmV5KFxuICAgICAgICAgICAgcHJpY2UsXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLm1vbmV5X2Zvcm1hdCxcbiAgICAgICAgICApO1xuICAgICAgICAgIEN1cnJlbmN5Q29udmVydGVyLnVwZGF0ZShjYXJ0SXRlbVRvdGFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgaW5pdGlhbFZhbHVlOiB7XG4gICAgICAgIHByaWNlOiB0aGlzLmRhdGEubGluZV9wcmljZSxcbiAgICAgICAgY29tcGFyZV9hdF9wcmljZTogdGhpcy5kYXRhLm9yaWdpbmFsX2xpbmVfcHJpY2UsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIHRoaXMudmFsdWUudW5sb2FkKCk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/components/CartItem.js\n') },
1"./source/scripts/components/GridItemSwatches.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return GridItemSwatches; });\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! just-debounce */ \"./node_modules/just-debounce/index.js\");\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(just_debounce__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var rimg_shopify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rimg-shopify */ \"./node_modules/rimg-shopify/dist/index.es.js\");\n/* harmony import */ var shopify_asyncview__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shopify-asyncview */ \"./node_modules/shopify-asyncview/dist/index.es.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar swatchSize = null;\nvar swatchGap = null;\n\nvar GridItemSwatches =\n/*#__PURE__*/\nfunction () {\n function GridItemSwatches(options) {\n var _this = this;\n\n _classCallCheck(this, GridItemSwatches);\n\n this.el = options.el;\n this.productQuickshop = options.productQuickshop;\n this.product = options.product;\n this.expanded = false;\n this.swatchImages = {};\n this.swatchVariantIds = {};\n this.selectedImage = null;\n this.state = {};\n this.events = [];\n this._injectImages = this._injectImages.bind(this);\n this._handleClick = this._handleClick.bind(this);\n this._handleMouseOver = this._handleMouseOver.bind(this);\n this._handleMouseLeave = this._handleMouseLeave.bind(this);\n this._toggleExpanded = this._toggleExpanded.bind(this);\n this._handleChange = this._handleChange.bind(this);\n this._handleResize = just_debounce__WEBPACK_IMPORTED_MODULE_0___default()(function () {\n return _this.resize();\n }, 50);\n this.data = JSON.parse(this.el.querySelector('[data-swatch-data]').innerHTML);\n this.swatchesContainer = this.el.querySelector('[data-swatches-container]');\n this.cardLinks = this.el.querySelectorAll('[data-product-page-link]');\n this.cardLinkHref = this.cardLinks[0].getAttribute('href');\n this.activeControlTime = 0;\n this.activeControl = this.swatchesContainer.querySelector('[checked]');\n this.isPreselected = !!this.activeControl;\n\n if (this.data.swatchesProductCardHover === 'always') {\n this.swatches = this.swatchesContainer.querySelectorAll('[data-swatch]');\n this.swatchCount = this.swatches.length;\n this.swatchCountWrapper = this.el.querySelector('[data-swatch-count-wrapper]');\n this.swatchCount = this.swatchCountWrapper.querySelector('[data-swatch-count]');\n this.resize();\n this.addEvent(window, 'resize', this._handleResize);\n this.addEvent(this.swatchCountWrapper, 'click', this._toggleExpanded);\n }\n\n this.originalImages = {\n primary: this.el.querySelector('.productitem--image-primary'),\n alternate: this.el.querySelector('.productitem--image-alternate')\n };\n this.disableUnavailable();\n this.bindEvents();\n }\n\n _createClass(GridItemSwatches, [{\n key: \"disableUnavailable\",\n value: function disableUnavailable() {\n var _this2 = this;\n\n if (!this.product) {\n return;\n }\n\n var availableSwatches = {};
1\n this.product.variants.forEach(function (variant) {\n if (variant.available) {\n availableSwatches[variant[_this2.data.swatchOptionKey]] = true;\n }\n });\n var swatchInputs = this.swatchesContainer.querySelectorAll('input[name=\"swatch\"]');\n swatchInputs.forEach(function (swatch) {\n if (!(swatch.value in availableSwatches)) {\n swatch.disabled = true;\n }\n });\n }\n }, {\n key: \"addEvent\",\n value: function addEvent(el, eventName, eventListener) {\n el.addEventListener(eventName, eventListener);\n this.events.push({\n el: el,\n eventName: eventName,\n eventListener: eventListener\n });\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.addEvent(this.el, 'mouseover', this._injectImages);\n this.addEvent(this.swatchesContainer, 'mouseover', this._handleMouseOver);\n this.addEvent(this.swatchesContainer, 'mouseleave', this._handleMouseLeave);\n this.addEvent(this.swatchesContainer, 'click', this._handleClick);\n this.addEvent(this.swatchesContainer, 'change', this._handleChange);\n }\n }, {\n key: \"resize\",\n value: function resize() {\n var _this3 = this;\n\n if (this.data.swatchesProductCardHover === 'on-hover') return;\n if (this.expanded) this._toggleExpanded();\n var availableWidth = this.swatchesContainer.getBoundingClientRect().width - parseInt(window.getComputedStyle(this.swatchesContainer).paddingRight, 10);\n var newShowSwatchCount = Math.floor((availableWidth + this.getSwatchGap()) / (this.getSwatchSize() + this.getSwatchGap()));\n if (newShowSwatchCount === this.showSwatchCount) return;\n this.showSwatchCount = newShowSwatchCount;\n this.swatches.forEach(function (swatch, index) {\n if (index < _this3.showSwatchCount) {\n swatch.classList.add('productitem--swatches-swatch-visible');\n swatch.classList.remove('productitem--swatches-swatch-hidden');\n } else {\n swatch.classList.remove('productitem--swatches-swatch-visible');\n swatch.classList.add('productitem--swatches-swatch-hidden');\n }\n });\n this.swatchCountWrapper.style.left = \"\".concat(this.showSwatchCount * (this.getSwatchSize() + this.getSwatchGap()), \"px\");\n\n if (this.swatches.length > this.showSwatchCount) {\n this.swatchCountWrapper.style.display = 'flex';\n this.swatchCount.innerText = \"+\".concat(this.swatches.length - this.showSwatchCount);\n } else {\n this.swatchCountWrapper.style.display = 'none';\n }\n }\n }, {\n key: \"_injectImages\",\n value: function _injectImages() {\n var _this4 = this;\n\n this.el.removeEventListener('mouseover', this._injectImages);\n shopify_asyncview__WEBPACK_IMPORTED_MODULE_2__[\"default\"].load(this.cardLinkHref, {\n view: '_swatch-data'\n }, {\n hash: this.data.hash\n }).then(function (_ref) {\n var data = _ref.data;\n var tempContainer = document.createDocumentFragment();\n\n if (data.featuredImage) {\n var tempEl = document.createElement('div');\n tempEl.innerHTML = data.featuredImage;\n var img = tempEl.querySelector('img');\n tempContainer.appendChild(img);\n _this4.featuredImage = img;\n }\n\n data.swatches.forEach(function (_ref2) {\n var swatchValue = _ref2.swatchValue,\n imageString = _ref2.imageString,\n variantId = _ref2.variantId;\n _this4.swatchVariantIds[swatchValue] = variantId;\n\n if (imageString) {\n var _tempEl = document.createElement('div');\n\n _tempEl.innerHTML = imageString;\n\n var _img = _tempEl.querySelector('img');\n\n tempContainer.appendChild(_img);\n _this4.swatchImages[swatchValue] = _img;\n }\n });\n\n var imagesContainer = _this4.el.querySelector('[data-product-item-image]');\n\n var salesBadge = imagesContainer.querySelector('[data-badge-sales]');\n imagesContainer.insertBefore(tempContainer, salesBadge);\n rimg_shopify__WEBPACK_IMPORTED_MODULE_1__[\"default\"].watch(imagesContainer);\n\n _this4._setState({\n swatchName: _this4.activeControl ? _this4.activeControl.value : null,\n primaryImage: _this4.originalImages.primary,\n hideAlternateImage: !!_this4.activeControl\n });\n });\n }\n }, {\n key: \"_setState\",\n value: function _setState(_ref3) {\n var swatchName = _ref3.swatchName,\n primaryImage = _ref3.primaryImage,\n hideAlternateImage = _ref3.hideAlternateImage;\n var oldPrimaryImg = this.state.primaryImage;\n var href = swatchName ? \"\".concat(this.cardLinkHref, \"?variant=\").concat(this.swatchVariantIds[swatchName]) : this.cardLinkHref;\n this.cardLinks.forEach(function (link) {\n return link.setAttribute('href', href);\n });\n\n if (this.productQuickshop) {\n this.productQuickshop.setInitialVariant(this.swatchVariantIds[swatchName] || this.product.variants[0].id);\n }\n\n if (oldPrimaryImg) {\n oldPrimaryImg.classList.remove('productitem--image-primary');\n oldPrimaryImg.style.visibility = '';\n }\n\n if (primaryImage) {\n primaryImage.classList.add('productitem--image-primary');\n primaryImage.style.visibility = hideAlternateImage ? 'visible' : '';\n }\n\n if (this.originalImages.alternate) {\n this.originalImages.alternate.style.visibility = hideAlternateImage ? 'hidden' : '';\n }\n\n this.state = {\n swatchName: swatchName,\n primaryImage: primaryImage,\n hideAlternateImage: hideAlternateImage\n };\n }\n }, {\n key: \"_handleChange\",\n value: function _handleChange(_ref4) {\n var target = _ref4.target;\n this.activeControlTime = Date.now();\n this.activeControl = target;\n var swatchName = target.value;\n this.selectedImage = this.swatchImages[swatchName] || this.originalImages.primary;\n\n this._setState({\n swatchName: swatchName,\n primaryImage: this.selectedImage,\n hideAlternateImage: true\n });\n }\n }, {\n key: \"_handleClick\",\n value: function _handleClick(_ref5) {\n var target = _ref5.target;\n\n if (target === this.activeControl && this.activeControlTime + 150 < Date.now()) {\n // Allow deselection, if swatch has been active for more than the threshold\n // because we can't guarantee the order of the click and change events\n target.checked = false;\n this.activeControl = null;\n this.selectedImage = null; // Swaps in featured image if card was rendered on server with\n // preselected swatch variant image.\n\n if (this.isPreselected && this.featuredImage) {\n this.originalImages.primary = this.featuredImage;\n this.isPreselected = false;\n }\n\n this._setState({\n swatchName: null,\n primaryImage: this.state.primaryImage,\n hideAlternateImage: true\n });\n }\n }\n }, {\n key: \"_handleMouseOver\",\n value: function _handleMouseOver(event) {\n if (event.target.hasAttribute('data-swatch-tooltip')) {\n this._setState({\n swatchName: this.state.swatchName,\n primaryImage: this.swatchImages[event.target.dataset.swatchTooltip] || this.originalImages.primary,\n hideAlternateImage: true\n });\n }\n }\n }, {\n key: \"_handleMouseLeave\",\n value: function _handleMouseLeave(_ref6) {\n var target = _ref6.target;\n\n if (target.hasAttribute('data-swatches-container')) {\n this._setState({\n swatchName: this.state.swatchName,\n primaryImage: this.selectedImage || this.originalImages.primary,\n hideAlternateImage: !!this.selectedImage\n });\n }\n }\n }, {\n key: \"_toggleExpanded\",\n value: function _toggleExpanded() {\n var swatchesEl = this.el.querySelector('[data-swatches]');\n\n if (this.expanded) {\n this.expanded = false;\n swatchesEl.classList.remove('productitem--swatches-expanded');\n this.swatchCount.innerText = \"+\".concat(this.swatches.length - this.showSwatchCount);\n } else {\n this.expanded = true;\n swatchesEl.classList.add('productitem--swatches-expanded');\n }\n } // Getters are used to avoid having to get these properties for every card on the page\
1n\n }, {\n key: \"getSwatchSize\",\n value: function getSwatchSize() {\n if (swatchSize === null) {\n swatchSize = this.swatches[0].getBoundingClientRect().width;\n }\n\n return swatchSize;\n }\n }, {\n key: \"getSwatchGap\",\n value: function getSwatchGap() {\n if (swatchGap === null) {\n swatchGap = parseInt(window.getComputedStyle(this.swatchesContainer).getPropertyValue('grid-column-gap'), 10);\n }\n\n return swatchGap;\n }\n }, {\n key: \"unload\",\n value: function unload() {\n this.events.forEach(function (_ref7) {\n var el = _ref7.el,\n eventName = _ref7.eventName,\n eventHandler = _ref7.eventHandler;\n el.removeEventListener(eventName, eventHandler);\n });\n }\n }]);\n\n return GridItemSwatches;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL0dyaWRJdGVtU3dhdGNoZXMuanM/M2ZlNiJdLCJuYW1lcyI6WyJzd2F0Y2hTaXplIiwic3dhdGNoR2FwIiwiR3JpZEl0ZW1Td2F0Y2hlcyIsIm9wdGlvbnMiLCJlbCIsInByb2R1Y3RRdWlja3Nob3AiLCJwcm9kdWN0IiwiZXhwYW5kZWQiLCJzd2F0Y2hJbWFnZXMiLCJzd2F0Y2hWYXJpYW50SWRzIiwic2VsZWN0ZWRJbWFnZSIsInN0YXRlIiwiZXZlbnRzIiwiX2luamVjdEltYWdlcyIsImJpbmQiLCJfaGFuZGxlQ2xpY2siLCJfaGFuZGxlTW91c2VPdmVyIiwiX2hhbmRsZU1vdXNlTGVhdmUiLCJfdG9nZ2xlRXhwYW5kZWQiLCJfaGFuZGxlQ2hhbmdlIiwiX2hhbmRsZVJlc2l6ZSIsImRlYm91bmNlIiwicmVzaXplIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInF1ZXJ5U2VsZWN0b3IiLCJpbm5lckhUTUwiLCJzd2F0Y2hlc0NvbnRhaW5lciIsImNhcmRMaW5rcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjYXJkTGlua0hyZWYiLCJnZXRBdHRyaWJ1dGUiLCJhY3RpdmVDb250cm9sVGltZSIsImFjdGl2ZUNvbnRyb2wiLCJpc1ByZXNlbGVjdGVkIiwic3dhdGNoZXNQcm9kdWN0Q2FyZEhvdmVyIiwic3dhdGNoZXMiLCJzd2F0Y2hDb3VudCIsImxlbmd0aCIsInN3YXRjaENvdW50V3JhcHBlciIsImFkZEV2ZW50Iiwid2luZG93Iiwib3JpZ2luYWxJbWFnZXMiLCJwcmltYXJ5IiwiYWx0ZXJuYXRlIiwiZGlzYWJsZVVuYXZhaWxhYmxlIiwiYmluZEV2ZW50cyIsImF2YWlsYWJsZVN3YXRjaGVzIiwidmFyaWFudHMiLCJmb3JFYWNoIiwidmFyaWFudCIsImF2YWlsYWJsZSIsInN3YXRjaE9wdGlvbktleSIsInN3YXRjaElucHV0cyIsInN3YXRjaCIsInZhbHVlIiwiZGlzYWJsZWQiLCJldmVudE5hbWUiLCJldmVudExpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInB1c2giLCJhdmFpbGFibGVXaWR0aCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwicGFyc2VJbnQiLCJnZXRDb21wdXRlZFN0eWxlIiwicGFkZGluZ1JpZ2h0IiwibmV3U2hvd1N3YXRjaENvdW50IiwiTWF0aCIsImZsb29yIiwiZ2V0U3dhdGNoR2FwIiwiZ2V0U3dhdGNoU2l6ZSIsInNob3dTd2F0Y2hDb3VudCIsImluZGV4IiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwic3R5bGUiLCJsZWZ0IiwiZGlzcGxheSIsImlubmVyVGV4dCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJBc3luY1ZpZXciLCJsb2FkIiwidmlldyIsImhhc2giLCJ0aGVuIiwidGVtcENvbnRhaW5lciIsImRvY3VtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImZlYXR1cmVkSW1hZ2UiLCJ0ZW1wRWwiLCJjcmVhdGVFbGVtZW50IiwiaW1nIiwiYXBwZW5kQ2hpbGQiLCJzd2F0Y2hWYWx1ZSIsImltYWdlU3RyaW5nIiwidmFyaWFudElkIiwiaW1hZ2VzQ29udGFpbmVyIiwic2FsZXNCYWRnZSIsImluc2VydEJlZm9yZSIsInJpbWciLCJ3YXRjaCIsIl9zZXRTdGF0ZSIsInN3YXRjaE5hbWUiLCJwcmltYXJ5SW1hZ2UiLCJoaWRlQWx0ZXJuYXRlSW1hZ2UiLCJvbGRQcmltYXJ5SW1nIiwiaHJlZiIsImxpbmsiLCJzZXRBdHRyaWJ1dGUiLCJzZXRJbml0aWFsVmFyaWFudCIsImlkIiwidmlzaWJpbGl0eSIsInRhcmdldCIsIkRhdGUiLCJub3ciLCJjaGVja2VkIiwiZXZlbnQiLCJoYXNBdHRyaWJ1dGUiLCJkYXRhc2V0Iiwic3dhdGNoVG9vbHRpcCIsInN3YXRjaGVzRWwiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiZXZlbnRIYW5kbGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxV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QWMsQ0FBZCxFQUFpQjBCLHFCQUFqQixHQUF5Q0MsS0FBdEQ7QUFDRDs7QUFDRCxhQUFPaEUsVUFBUDtBQUNEOzs7bUNBRWM7QUFDYixVQUFJQyxTQUFTLEtBQUssSUFBbEIsRUFBd0I7QUFDdEJBLGlCQUFTLEdBQUdnRSxRQUFRLENBQUN2QixNQUFNLENBQUN3QixnQkFBUCxDQUF3QixLQUFLdEMsaUJBQTdCLEVBQWdEZ0csZ0JBQWhELENBQWlFLGlCQUFqRSxDQUFELEVBQXNGLEVBQXRGLENBQXBCO0FBQ0Q7O0FBQ0QsYUFBTzNILFNBQVA7QUFDRDs7OzZCQUVRO0FBQ1AsV0FBS1csTUFBTCxDQUFZc0MsT0FBWixDQUFvQixpQkFBcUM7QUFBQSxZQUFsQzlDLEVBQWtDLFNBQWxDQSxFQUFrQztBQUFBLFlBQTlCc0QsU0FBOEIsU0FBOUJBLFNBQThCO0FBQUEsWUFBbkJtRSxZQU
1FtQixTQUFuQkEsWUFBbUI7QUFDdkR6SCxVQUFFLENBQUM4RSxtQkFBSCxDQUF1QnhCLFNBQXZCLEVBQWtDbUUsWUFBbEM7QUFDRCxPQUZEO0FBR0QiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL0dyaWRJdGVtU3dhdGNoZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVib3VuY2UgZnJvbSAnanVzdC1kZWJvdW5jZSc7XG5pbXBvcnQgcmltZyBmcm9tICdyaW1nLXNob3BpZnknO1xuaW1wb3J0IEFzeW5jVmlldyBmcm9tICdzaG9waWZ5LWFzeW5jdmlldyc7XG5cbmxldCBzd2F0Y2hTaXplID0gbnVsbDtcbmxldCBzd2F0Y2hHYXAgPSBudWxsO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcmlkSXRlbVN3YXRjaGVzIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMuZWwgPSBvcHRpb25zLmVsO1xuICAgIHRoaXMucHJvZHVjdFF1aWNrc2hvcCA9IG9wdGlvbnMucHJvZHVjdFF1aWNrc2hvcDtcbiAgICB0aGlzLnByb2R1Y3QgPSBvcHRpb25zLnByb2R1Y3Q7XG5cbiAgICB0aGlzLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5zd2F0Y2hJbWFnZXMgPSB7fTtcbiAgICB0aGlzLnN3YXRjaFZhcmlhbnRJZHMgPSB7fTtcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB0aGlzLmV2ZW50cyA9IFtdO1xuXG4gICAgdGhpcy5faW5qZWN0SW1hZ2VzID0gdGhpcy5faW5qZWN0SW1hZ2VzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5faGFuZGxlQ2xpY2sgPSB0aGlzLl9oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2hhbmRsZU1vdXNlT3ZlciA9IHRoaXMuX2hhbmRsZU1vdXNlT3Zlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2hhbmRsZU1vdXNlTGVhdmUgPSB0aGlzLl9oYW5kbGVNb3VzZUxlYXZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fdG9nZ2xlRXhwYW5kZWQgPSB0aGlzLl90b2dnbGVFeHBhbmRlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2hhbmRsZUNoYW5nZSA9IHRoaXMuX2hhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2hhbmRsZVJlc2l6ZSA9IGRlYm91bmNlKCgpID0+IHRoaXMucmVzaXplKCksIDUwKTtcblxuICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UodGhpcy5lbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1zd2F0Y2gtZGF0YV0nKS5pbm5lckhUTUwpO1xuXG4gICAgdGhpcy5zd2F0Y2hlc0NvbnRhaW5lciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtc3dhdGNoZXMtY29udGFpbmVyXScpO1xuICAgIHRoaXMuY2FyZExpbmtzID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1wcm9kdWN0LXBhZ2UtbGlua10nKTtcbiAgICB0aGlzLmNhcmRMaW5rSHJlZiA9IHRoaXMuY2FyZExpbmtzWzBdLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgIHRoaXMuYWN0aXZlQ29udHJvbFRpbWUgPSAwO1xuICAgIHRoaXMuYWN0aXZlQ29udHJvbCA9IHRoaXMuc3dhdGNoZXNDb250YWluZXIucXVlcnlTZWxlY3RvcignW2NoZWNrZWRdJyk7XG4gICAgdGhpcy5pc1ByZXNlbGVjdGVkID0gISF0aGlzLmFjdGl2ZUNvbnRyb2w7XG5cbiAgICBpZiAodGhpcy5kYXRhLnN3YXRjaGVzUHJvZHVjdENhcmRIb3ZlciA9PT0gJ2Fsd2F5cycpIHtcbiAgICAgIHRoaXMuc3dhdGNoZXMgPSB0aGlzLnN3YXRjaGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXN3YXRjaF0nKTtcbiAgICAgIHRoaXMuc3dhdGNoQ291bnQgPSB0aGlzLnN3YXRjaGVzLmxlbmd0aDtcbiAgICAgIHRoaXMuc3dhdGNoQ291bnRXcmFwcGVyID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1zd2F0Y2gtY291bnQtd3JhcHBlcl0nKTtcbiAgICAgIHRoaXMuc3dhdGNoQ291bnQgPSB0aGlzLnN3YXRjaENvdW50V3JhcHBlci5xdWVyeVNlbGVjdG9yKCdbZGF0YS1zd2F0Y2gtY291bnRdJyk7XG4gICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgICAgdGhpcy5hZGRFdmVudCh3aW5kb3csICdyZXNpemUnLCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgICAgdGhpcy5hZGRFdmVudCh0aGlzLnN3YXRjaENvdW50V3JhcHBlciwgJ2NsaWNrJywgdGhpcy5fdG9nZ2xlRXhwYW5kZWQpO1xuICAgIH1cblxuICAgIHRoaXMub3JpZ2luYWxJbWFnZXMgPSB7XG4gICAgICBwcmltYXJ5OiB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJy5wcm9kdWN0aXRlbS0taW1hZ2UtcHJpbWFyeScpLFxuICAgICAgYWx0ZXJuYXRlOiB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJy5wcm9kdWN0aXRlbS0taW1hZ2UtYWx0ZXJuYXRlJyksXG4gICAgfTtcblxuICAgIHRoaXMuZGlzYWJsZVVuYXZhaWxhYmxlKCk7XG4gICAgdGhpcy5iaW5kRXZlbnRzKCk7XG4gIH1cblxuICBkaXNhYmxlVW5hdmFpbGFibGUoKSB7XG4gICAgaWYgKCF0aGlzLnByb2R1Y3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhdmFpbGFibGVTd2F0Y2hlcyA9IHt9O1xuXG4gICAgdGhpcy5wcm9kdWN0LnZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XG4gICAgICBpZiAodmFyaWFudC5hdmFpbGFibGUpIHtcbiAgICAgICAgYXZhaWxhYmxlU3dhdGNoZXNbdmFyaWFudFt0aGlzLmRhdGEuc3dhdGNoT3B0aW9uS2V5XV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3dhdGNoSW5wdXRzID0gdGhpcy5zd2F0Y2hlc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPVwic3dhdGNoXCJdJyk7XG5cbiAgICBzd2F0Y2hJbnB1dHMuZm9yRWFjaChzd2F0Y2ggPT4ge1xuICAgICAgaWYgKCEoc3dhdGNoLnZhbHVlIGluIGF2YWlsYWJsZVN3YXRjaGVzKSkge1xuICAgICAgICBzd2F0Y2guZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnQoZWwsIGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lcikge1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudExpc3RlbmVyKTtcbiAgICB0aGlzLmV2ZW50cy5wdXNoKHsgZWwsIGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lciB9KTtcbiAgfVxuXG4gIGJpbmRFdmVudHMoKSB7XG4gICAgdGhpcy5hZGR
1FdmVudCh0aGlzLmVsLCAnbW91c2VvdmVyJywgdGhpcy5faW5qZWN0SW1hZ2VzKTtcbiAgICB0aGlzLmFkZEV2ZW50KHRoaXMuc3dhdGNoZXNDb250YWluZXIsICdtb3VzZW92ZXInLCB0aGlzLl9oYW5kbGVNb3VzZU92ZXIpO1xuICAgIHRoaXMuYWRkRXZlbnQodGhpcy5zd2F0Y2hlc0NvbnRhaW5lciwgJ21vdXNlbGVhdmUnLCB0aGlzLl9oYW5kbGVNb3VzZUxlYXZlKTtcbiAgICB0aGlzLmFkZEV2ZW50KHRoaXMuc3dhdGNoZXNDb250YWluZXIsICdjbGljaycsIHRoaXMuX2hhbmRsZUNsaWNrKTtcbiAgICB0aGlzLmFkZEV2ZW50KHRoaXMuc3dhdGNoZXNDb250YWluZXIsICdjaGFuZ2UnLCB0aGlzLl9oYW5kbGVDaGFuZ2UpO1xuICB9XG5cbiAgcmVzaXplKCkge1xuICAgIGlmICh0aGlzLmRhdGEuc3dhdGNoZXNQcm9kdWN0Q2FyZEhvdmVyID09PSAnb24taG92ZXInKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZXhwYW5kZWQpIHRoaXMuX3RvZ2dsZUV4cGFuZGVkKCk7XG5cbiAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IHRoaXMuc3dhdGNoZXNDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGhcbiAgICAgIC0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5zd2F0Y2hlc0NvbnRhaW5lcikucGFkZGluZ1JpZ2h0LCAxMCk7XG5cbiAgICBjb25zdCBuZXdTaG93U3dhdGNoQ291bnQgPSBNYXRoLmZsb29yKFxuICAgICAgKGF2YWlsYWJsZVdpZHRoICsgdGhpcy5nZXRTd2F0Y2hHYXAoKSkgLyAodGhpcy5nZXRTd2F0Y2hTaXplKCkgKyB0aGlzLmdldFN3YXRjaEdhcCgpKSxcbiAgICApO1xuXG4gICAgaWYgKG5ld1Nob3dTd2F0Y2hDb3VudCA9PT0gdGhpcy5zaG93U3dhdGNoQ291bnQpIHJldHVybjtcblxuICAgIHRoaXMuc2hvd1N3YXRjaENvdW50ID0gbmV3U2hvd1N3YXRjaENvdW50O1xuXG4gICAgdGhpcy5zd2F0Y2hlcy5mb3JFYWNoKChzd2F0Y2gsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPCB0aGlzLnNob3dTd2F0Y2hDb3VudCkge1xuICAgICAgICBzd2F0Y2guY2xhc3NMaXN0LmFkZCgncHJvZHVjdGl0ZW0tLXN3YXRjaGVzLXN3YXRjaC12aXNpYmxlJyk7XG4gICAgICAgIHN3YXRjaC5jbGFzc0xpc3QucmVtb3ZlKCdwcm9kdWN0aXRlbS0tc3dhdGNoZXMtc3dhdGNoLWhpZGRlbicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dhdGNoLmNsYXNzTGlzdC5yZW1vdmUoJ3Byb2R1Y3RpdGVtLS1zd2F0Y2hlcy1zd2F0Y2gtdmlzaWJsZScpO1xuICAgICAgICBzd2F0Y2guY2xhc3NMaXN0LmFkZCgncHJvZHVjdGl0ZW0tLXN3YXRjaGVzLXN3YXRjaC1oaWRkZW4nKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3dhdGNoQ291bnRXcmFwcGVyLnN0eWxlLmxlZnQgPSBgJHt0aGlzLnNob3dTd2F0Y2hDb3VudCAqICh0aGlzLmdldFN3YXRjaFNpemUoKSArIHRoaXMuZ2V0U3dhdGNoR2FwKCkpfXB4YDtcblxuICAgIGlmICh0aGlzLnN3YXRjaGVzLmxlbmd0aCA+IHRoaXMuc2hvd1N3YXRjaENvdW50KSB7XG4gICAgICB0aGlzLnN3YXRjaENvdW50V3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgdGhpcy5zd2F0Y2hDb3VudC5pbm5lclRleHQgPSBgKyR7dGhpcy5zd2F0Y2hlcy5sZW5ndGggLSB0aGlzLnNob3dTd2F0Y2hDb3VudH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN3YXRjaENvdW50V3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIF9pbmplY3RJbWFnZXMoKSB7XG4gICAgdGhpcy5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLl9pbmplY3RJbWFnZXMpO1xuXG4gICAgQXN5bmNWaWV3LmxvYWQodGhpcy5jYXJkTGlua0hyZWYsIHsgdmlldzogJ19zd2F0Y2gtZGF0YScgfSwgeyBoYXNoOiB0aGlzLmRhdGEuaGFzaCB9KVxuICAgICAgLnRoZW4oKHsgZGF0YSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHRlbXBDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICAgICAgaWYgKGRhdGEuZmVhdHVyZWRJbWFnZSkge1xuICAgICAgICAgIGNvbnN0IHRlbXBFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIHRlbXBFbC5pbm5lckhUTUwgPSBkYXRhLmZlYXR1cmVkSW1hZ2U7XG4gICAgICAgICAgY29uc3QgaW1nID0gdGVtcEVsLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuICAgICAgICAgIHRlbXBDb250YWluZXIuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICAgICAgICB0aGlzLmZlYXR1cmVkSW1hZ2UgPSBpbWc7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLnN3YXRjaGVzLmZvckVhY2goKHsgc3dhdGNoVmFsdWUsIGltYWdlU3RyaW5nLCB2YXJpYW50SWQgfSkgPT4ge1xuICAgICAgICAgIHRoaXMuc3dhdGNoVmFyaWFudElkc1tzd2F0Y2hWYWx1ZV0gPSB2YXJpYW50SWQ7XG4gICAgICAgICAgaWYgKGltYWdlU3RyaW5nKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRlbXBFbC5pbm5lckhUTUwgPSBpbWFnZVN0cmluZztcbiAgICAgICAgICAgIGNvbnN0IGltZyA9IHRlbXBFbC5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcbiAgICAgICAgICAgIHRlbXBDb250YWluZXIuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICAgICAgICAgIHRoaXMuc3dhdGNoSW1hZ2VzW3N3YXRjaFZhbHVlXSA9IGltZztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpbWFnZXNDb250YWluZXIgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXByb2R1Y3QtaXRlbS1pbWFnZV0nKTtcbiAgICAgICAgY29uc3Qgc2FsZXNCYWRnZSA9IGltYWdlc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbZGF0YS1iYWRnZS1zYWxlc10nKTtcblxuICAgICAgICBpbWFnZXNDb250YWluZXIuaW5zZXJ0QmVmb3JlKHRlbXBDb250YWluZXIsIHNhbGVzQmFkZ2UpO1xuICAgICAgICByaW1nLndhdGNoKGltYWdlc0NvbnRhaW5lcik7XG5cbiAgICAgICAgdGhpcy5fc2V0U3RhdGUoe1xuICAgICAgICAgIHN3YXRjaE5hbWU6IHRoaXMuYWN0aXZlQ29udHJvbCA/IHRoaXMuYWN0aXZlQ29udHJvbC52YWx1ZSA6IG51bGwsXG4gICAgICAgICAgcHJpbWFyeUltYWdlOiB0aGlzLm9yaWdpbmFsSW1hZ2VzLnByaW1hcnksXG4gICAgICAgICAgaGlkZUFsdGVybmF0ZUltYWdlOiAhIXRoaXMuYWN0aXZlQ29udHJvbCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIF9zZXRTdGF0ZSh7IHN3YXRjaE5hbWUsIHByaW1hcnlJbWFnZSwgaGlkZUFsdGVybmF0ZUltYWdlIH0pIHtcbiAgICBjb25zdCBvbGRQcmltYXJ5SW1nID0gdGhpcy5zdGF0ZS5wcmltYXJ5SW1hZ2U7XG5cbiAgICBjb25zdCBocmVmID0gc3dhdGNoTmFtZSA/IGAke3RoaXMuY2FyZExpbmtIcmVmfT92YXJpYW50PSR7dGhpcy5zd2F0Y2hWYXJpYW50SWRzW3N3YXRjaE5hbWVdfWAgOiB0aGlzLmNhcmRMaW5rSHJlZjtcbiAgICB0aGlzLmNhcmRMaW5rcy5mb3JFYWNoKGxpbmsgPT4gbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKSk7XG5cbiAgICBpZiAodGhpcy5wcm9kdWN0UXVpY2tzaG9wKSB7XG4gICAgICB0aGlzLnByb2R1Y3RRdWlja3
1Nob3Auc2V0SW5pdGlhbFZhcmlhbnQodGhpcy5zd2F0Y2hWYXJpYW50SWRzW3N3YXRjaE5hbWVdIHx8XG4gICAgICAgIHRoaXMucHJvZHVjdC52YXJpYW50c1swXS5pZCk7XG4gICAgfVxuXG4gICAgaWYgKG9sZFByaW1hcnlJbWcpIHtcbiAgICAgIG9sZFByaW1hcnlJbWcuY2xhc3NMaXN0LnJlbW92ZSgncHJvZHVjdGl0ZW0tLWltYWdlLXByaW1hcnknKTtcbiAgICAgIG9sZFByaW1hcnlJbWcuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xuICAgIH1cblxuICAgIGlmIChwcmltYXJ5SW1hZ2UpIHtcbiAgICAgIHByaW1hcnlJbWFnZS5jbGFzc0xpc3QuYWRkKCdwcm9kdWN0aXRlbS0taW1hZ2UtcHJpbWFyeScpO1xuICAgICAgcHJpbWFyeUltYWdlLnN0eWxlLnZpc2liaWxpdHkgPSBoaWRlQWx0ZXJuYXRlSW1hZ2UgPyAndmlzaWJsZScgOiAnJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcmlnaW5hbEltYWdlcy5hbHRlcm5hdGUpIHtcbiAgICAgIHRoaXMub3JpZ2luYWxJbWFnZXMuYWx0ZXJuYXRlLnN0eWxlLnZpc2liaWxpdHkgPSBoaWRlQWx0ZXJuYXRlSW1hZ2UgPyAnaGlkZGVuJyA6ICcnO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB7IHN3YXRjaE5hbWUsIHByaW1hcnlJbWFnZSwgaGlkZUFsdGVybmF0ZUltYWdlIH07XG4gIH1cblxuICBfaGFuZGxlQ2hhbmdlKHsgdGFyZ2V0IH0pIHtcbiAgICB0aGlzLmFjdGl2ZUNvbnRyb2xUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmFjdGl2ZUNvbnRyb2wgPSB0YXJnZXQ7XG4gICAgY29uc3Qgc3dhdGNoTmFtZSA9IHRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0aGlzLnN3YXRjaEltYWdlc1tzd2F0Y2hOYW1lXSB8fCB0aGlzLm9yaWdpbmFsSW1hZ2VzLnByaW1hcnk7XG4gICAgdGhpcy5fc2V0U3RhdGUoe1xuICAgICAgc3dhdGNoTmFtZSxcbiAgICAgIHByaW1hcnlJbWFnZTogdGhpcy5zZWxlY3RlZEltYWdlLFxuICAgICAgaGlkZUFsdGVybmF0ZUltYWdlOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgX2hhbmRsZUNsaWNrKHsgdGFyZ2V0IH0pIHtcbiAgICBpZiAodGFyZ2V0ID09PSB0aGlzLmFjdGl2ZUNvbnRyb2wgJiYgdGhpcy5hY3RpdmVDb250cm9sVGltZSArIDE1MCA8IERhdGUubm93KCkpIHtcbiAgICAgIC8vIEFsbG93IGRlc2VsZWN0aW9uLCBpZiBzd2F0Y2ggaGFzIGJlZW4gYWN0aXZlIGZvciBtb3JlIHRoYW4gdGhlIHRocmVzaG9sZFxuICAgICAgLy8gYmVjYXVzZSB3ZSBjYW4ndCBndWFyYW50ZWUgdGhlIG9yZGVyIG9mIHRoZSBjbGljayBhbmQgY2hhbmdlIGV2ZW50c1xuICAgICAgdGFyZ2V0LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuYWN0aXZlQ29udHJvbCA9IG51bGw7XG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xuXG4gICAgICAvLyBTd2FwcyBpbiBmZWF0dXJlZCBpbWFnZSBpZiBjYXJkIHdhcyByZW5kZXJlZCBvbiBzZXJ2ZXIgd2l0aFxuICAgICAgLy8gcHJlc2VsZWN0ZWQgc3dhdGNoIHZhcmlhbnQgaW1hZ2UuXG4gICAgICBpZiAodGhpcy5pc1ByZXNlbGVjdGVkICYmIHRoaXMuZmVhdHVyZWRJbWFnZSkge1xuICAgICAgICB0aGlzLm9yaWdpbmFsSW1hZ2VzLnByaW1hcnkgPSB0aGlzLmZlYXR1cmVkSW1hZ2U7XG4gICAgICAgIHRoaXMuaXNQcmVzZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRTdGF0ZSh7XG4gICAgICAgIHN3YXRjaE5hbWU6IG51bGwsXG4gICAgICAgIHByaW1hcnlJbWFnZTogdGhpcy5zdGF0ZS5wcmltYXJ5SW1hZ2UsXG4gICAgICAgIGhpZGVBbHRlcm5hdGVJbWFnZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9oYW5kbGVNb3VzZU92ZXIoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1zd2F0Y2gtdG9vbHRpcCcpKSB7XG4gICAgICB0aGlzLl9zZXRTdGF0ZSh7XG4gICAgICAgIHN3YXRjaE5hbWU6IHRoaXMuc3RhdGUuc3dhdGNoTmFtZSxcbiAgICAgICAgcHJpbWFyeUltYWdlOiB0aGlzLnN3YXRjaEltYWdlc1tldmVudC50YXJnZXQuZGF0YXNldC5zd2F0Y2hUb29sdGlwXSB8fFxuICAgICAgICAgIHRoaXMub3JpZ2luYWxJbWFnZXMucHJpbWFyeSxcbiAgICAgICAgaGlkZUFsdGVybmF0ZUltYWdlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZU1vdXNlTGVhdmUoeyB0YXJnZXQgfSkge1xuICAgIGlmICh0YXJnZXQuaGFzQXR0cmlidXRlKCdkYXRhLXN3YXRjaGVzLWNvbnRhaW5lcicpKSB7XG4gICAgICB0aGlzLl9zZXRTdGF0ZSh7XG4gICAgICAgIHN3YXRjaE5hbWU6IHRoaXMuc3RhdGUuc3dhdGNoTmFtZSxcbiAgICAgICAgcHJpbWFyeUltYWdlOiB0aGlzLnNlbGVjdGVkSW1hZ2UgfHwgdGhpcy5vcmlnaW5hbEltYWdlcy5wcmltYXJ5LFxuICAgICAgICBoaWRlQWx0ZXJuYXRlSW1hZ2U6ICEhdGhpcy5zZWxlY3RlZEltYWdlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgX3RvZ2dsZUV4cGFuZGVkKCkge1xuICAgIGNvbnN0IHN3YXRjaGVzRWwgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXN3YXRjaGVzXScpO1xuXG4gICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgIHN3YXRjaGVzRWwuY2xhc3NMaXN0LnJlbW92ZSgncHJvZHVjdGl0ZW0tLXN3YXRjaGVzLWV4cGFuZGVkJyk7XG4gICAgICB0aGlzLnN3YXRjaENvdW50LmlubmVyVGV4dCA9IGArJHt0aGlzLnN3YXRjaGVzLmxlbmd0aCAtIHRoaXMuc2hvd1N3YXRjaENvdW50fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgc3dhdGNoZXNFbC5jbGFzc0xpc3QuYWRkKCdwcm9kdWN0aXRlbS0tc3dhdGNoZXMtZXhwYW5kZWQnKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzIGFyZSB1c2VkIHRvIGF2b2lkIGhhdmluZyB0byBnZXQgdGhlc2UgcHJvcGVydGllcyBmb3IgZXZlcnkgY2FyZCBvbiB0aGUgcGFnZVxuICBnZXRTd2F0Y2hTaXplKCkge1xuICAgIGlmIChzd2F0Y2hTaXplID09PSBudWxsKSB7XG4gICAgICBzd2F0Y2hTaXplID0gdGhpcy5zd2F0Y2hlc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIHN3YXRjaFNpemU7XG4gIH1cblxuICBnZXRTd2F0Y2hHYXAoKSB7XG4gICAgaWYgKHN3YXRjaEdhcCA9PT0gbnVsbCkge1xuICAgICAgc3dhdGNoR2FwID0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5zd2F0Y2hlc0NvbnRhaW5lcikuZ2V0UHJvcGVydHlWYWx1ZSgnZ3JpZC1jb2x1bW4tZ2FwJyksIDEwKTtcbiAgICB9XG4gICAgcmV0dXJuIHN3YXRjaEdhcDtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICB0aGlzLmV2ZW50cy5mb3JFYWNoKCh7IGVsLCBldmVudE5hbWUsIGV2ZW50SGFuZGxlciB9KSA9PiB7XG4gICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVyKTtcbiAgICB9KTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/components/GridItemSwatches.js\n") },
1"./source/scripts/components/Leadform.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ProductLeadform; });\n/* harmony import */ var shopify_asyncview__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shopify-asyncview */ "./node_modules/shopify-asyncview/dist/index.es.js");\n/* harmony import */ var _Modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Modal */ "./source/scripts/components/Modal.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar classes = {\n leadformModal: \'leadform-modal\'\n};\n\nvar ProductLeadform =\n/*#__PURE__*/\nfunction () {\n function ProductLeadform(options) {\n var _this = this;\n\n _classCallCheck(this, ProductLeadform);\n\n this.options = options;\n var $trigger = this.options.$trigger;\n this.modal = null;\n this.isLoaded = false;\n this.loader = null;\n this.isOpen = false;\n $trigger.on(\'click\', function (e) {\n e.preventDefault();\n\n _this.open();\n });\n }\n\n _createClass(ProductLeadform, [{\n key: "open",\n value: function open() {\n var _this2 = this;\n\n var loader = !this.isLoaded && this.loader ? this.loader : this.load();\n loader.then(function () {\n var modalCallbacks = {\n onClose: function onClose() {\n return _this2.close();\n }\n };\n _this2.modal = new _Modal__WEBPACK_IMPORTED_MODULE_1__["default"](modalCallbacks);\n\n _this2.modal.open(".".concat(classes.leadformModal));\n\n _this2.isOpen = true;\n });\n }\n }, {\n key: "close",\n value: function close() {\n var _this3 = this;\n\n if (this.isLoaded || this.loader) {\n var loader = this.loader || Promise.resolve();\n return loader.then(function () {\n if (!_this3.isOpen) {\n return;\n }\n\n _this3.modal.unload();\n\n _this3.isOpen = false;\n });\n }\n\n return Promise.resolve();\n }\n }, {\n key: "unload",\n value: function unload() {\n if (this.isLoaded || this.loader) {\n return this.close();\n }\n\n return Promise.resolve();\n }\n }, {\n key: "load",\n value: function load() {\n var _this4 = this;\n\n var el = this.options.el; // If we\'re already loaded, return true\n\n if (this.isLoaded) {\n return Promise.resolve(true);\n } // If we\'re currently loading, return the existing promise\n\n\n if (this.loader) {\n return this.loader;\n }\n\n this.loader = shopify_asyncview__WEBPACK_IMPORTED_MODULE_0__["default"].load(document.location.pathname, {\n view: \'_leadform\'\n }).then(function (response) {\n var html = response.html;\n var container = document.createElement(\'div\');\n container.innerHTML = html.content;\n container.classList.add(classes.leadformModal);\n _this4.el = el.appendChild(container);\n _this4.isLoaded = true;\n }).then(function () {\n _this4.loader = null;\n return true;\n }).catch(function () {\n _this4.loader = null;\n return false;\n });\n return this.loader;\n }\n }]);\n\n return ProductLeadform;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL0xlYWRmb3JtLmpzPzNkYzQiXSwibmFtZXMiOlsiY2xhc3NlcyIsImxlYWRmb3JtTW9kYWwiLCJQcm9kdWN0TGVhZGZvcm0iLCJvcHRpb25zIiwiJHRyaWdnZXIiLCJtb2RhbCIsImlzTG9hZGVkIiwibG9hZGVyIiwiaXNPcGVuIiwib24iLCJlIiwicHJldmVudERlZmF1bHQiLCJvcGVuIiwibG9hZCIsInRoZW4iLCJtb2RhbENhbGxiYWNrcyIsIm9uQ2xvc2UiLCJjbG9zZSIsIk1vZGFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ1bmxvYWQiLCJlbCIsIkFzeW5jVmlldyIsImRvY3VtZW50IiwibG9jYXRpb24iLCJwYXRobmFtZSIsInZpZXciLCJyZXNwb25zZSIsImh0bWwiLCJ
1jb250YWluZXIiLCJjcmVhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwiY29udGVudCIsImNsYXNzTGlzdCIsImFkZCIsImFwcGVuZENoaWxkIiwiY2F0Y2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUEsSUFBTUEsT0FBTyxHQUFHO0FBQ2RDLGVBQWEsRUFBRTtBQURELENBQWhCOztJQUlxQkMsZTs7O0FBQ25CLDJCQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQUE7O0FBQ25CLFNBQUtBLE9BQUwsR0FBZUEsT0FBZjtBQURtQixRQUVYQyxRQUZXLEdBRUUsS0FBS0QsT0FGUCxDQUVYQyxRQUZXO0FBSW5CLFNBQUtDLEtBQUwsR0FBYSxJQUFiO0FBRUEsU0FBS0MsUUFBTCxHQUFnQixLQUFoQjtBQUNBLFNBQUtDLE1BQUwsR0FBYyxJQUFkO0FBRUEsU0FBS0MsTUFBTCxHQUFjLEtBQWQ7QUFFQUosWUFBUSxDQUFDSyxFQUFULENBQVksT0FBWixFQUFxQixVQUFBQyxDQUFDLEVBQUk7QUFDeEJBLE9BQUMsQ0FBQ0MsY0FBRjs7QUFDQSxXQUFJLENBQUNDLElBQUw7QUFDRCxLQUhEO0FBSUQ7Ozs7MkJBRU07QUFBQTs7QUFDTCxVQUFNTCxNQUFNLEdBQUcsQ0FBQyxLQUFLRCxRQUFOLElBQWtCLEtBQUtDLE1BQXZCLEdBQWdDLEtBQUtBLE1BQXJDLEdBQThDLEtBQUtNLElBQUwsRUFBN0Q7QUFFQU4sWUFBTSxDQUFDTyxJQUFQLENBQVksWUFBTTtBQUNoQixZQUFNQyxjQUFjLEdBQUc7QUFDckJDLGlCQUFPLEVBQUU7QUFBQSxtQkFBTSxNQUFJLENBQUNDLEtBQUwsRUFBTjtBQUFBO0FBRFksU0FBdkI7QUFJQSxjQUFJLENBQUNaLEtBQUwsR0FBYSxJQUFJYSw4Q0FBSixDQUFVSCxjQUFWLENBQWI7O0FBQ0EsY0FBSSxDQUFDVixLQUFMLENBQVdPLElBQVgsWUFDTVosT0FBTyxDQUFDQyxhQURkOztBQUlBLGNBQUksQ0FBQ08sTUFBTCxHQUFjLElBQWQ7QUFDRCxPQVhEO0FBWUQ7Ozs0QkFFTztBQUFBOztBQUNOLFVBQUksS0FBS0YsUUFBTCxJQUFpQixLQUFLQyxNQUExQixFQUFrQztBQUNoQyxZQUFNQSxNQUFNLEdBQUcsS0FBS0EsTUFBTCxJQUFlWSxPQUFPLENBQUNDLE9BQVIsRUFBOUI7QUFFQSxlQUFPYixNQUFNLENBQUNPLElBQVAsQ0FBWSxZQUFNO0FBQ3ZCLGNBQUksQ0FBQyxNQUFJLENBQUNOLE1BQVYsRUFBa0I7QUFDaEI7QUFDRDs7QUFFRCxnQkFBSSxDQUFDSCxLQUFMLENBQVdnQixNQUFYOztBQUVBLGdCQUFJLENBQUNiLE1BQUwsR0FBYyxLQUFkO0FBQ0QsU0FSTSxDQUFQO0FBU0Q7O0FBRUQsYUFBT1csT0FBTyxDQUFDQyxPQUFSLEVBQVA7QUFDRDs7OzZCQUVRO0FBQ1AsVUFBSSxLQUFLZCxRQUFMLElBQWlCLEtBQUtDLE1BQTFCLEVBQWtDO0FBQ2hDLGVBQU8sS0FBS1UsS0FBTCxFQUFQO0FBQ0Q7O0FBRUQsYUFBT0UsT0FBTyxDQUFDQyxPQUFSLEVBQVA7QUFDRDs7OzJCQUVNO0FBQUE7O0FBQUEsVUFDR0UsRUFESCxHQUNVLEtBQUtuQixPQURmLENBQ0dtQixFQURILEVBR0w7O0FBQ0EsVUFBSSxLQUFLaEIsUUFBVCxFQUFtQjtBQUNqQixlQUFPYSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsSUFBaEIsQ0FBUDtBQUNELE9BTkksQ0FRTDs7O0FBQ0EsVUFBSSxLQUFLYixNQUFULEVBQWlCO0FBQ2YsZUFBTyxLQUFLQSxNQUFaO0FBQ0Q7O0FBRUQsV0FBS0EsTUFBTCxHQUFjZ0IseURBQVMsQ0FBQ1YsSUFBVixDQUFlVyxRQUFRLENBQUNDLFFBQVQsQ0FBa0JDLFFBQWpDLEVBQTJDO0FBQUVDLFlBQUksRUFBRTtBQUFSLE9BQTNDLEVBQ1hiLElBRFcsQ0FDTixVQUFBYyxRQUFRLEVBQUk7QUFBQSxZQUNSQyxJQURRLEdBQ0NELFFBREQsQ0FDUkMsSUFEUTtBQUVoQixZQUFNQyxTQUFTLEdBQUdOLFFBQVEsQ0FBQ08sYUFBVCxDQUF1QixLQUF2QixDQUFsQjtBQUVBRCxpQkFBUyxDQUFDRSxTQUFWLEdBQXNCSCxJQUFJLENBQUNJLE9BQTNCO0FBRUFILGlCQUFTLENBQUNJLFNBQVYsQ0FBb0JDLEdBQXBCLENBQXdCbkMsT0FBTyxDQUFDQyxhQUFoQztBQUVBLGNBQUksQ0FBQ3FCLEVBQUwsR0FBVUEsRUFBRSxDQUFDYyxXQUFILENBQWVOLFNBQWYsQ0FBVjtBQUNBLGNBQUksQ0FBQ3hCLFFBQUwsR0FBZ0IsSUFBaEI7QUFDRCxPQVhXLEVBWVhRLElBWlcsQ0FZTixZQUFNO0FBQ1YsY0FBSSxDQUFDUCxNQUFMLEdBQWMsSUFBZDtBQUNBLGVBQU8sSUFBUDtBQUNELE9BZlcsRUFnQlg4QixLQWhCVyxDQWdCTCxZQUFNO0FBQ1gsY0FBSSxDQUFDOUIsTUFBTCxHQUFjLElBQWQ7QUFDQSxlQUFPLEtBQVA7QUFDRCxPQW5CVyxDQUFkO0FBcUJBLGFBQU8sS0FBS0EsTUFBWjtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9MZWFkZm9ybS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBc3luY1ZpZXcgZnJvbSAnc2hvcGlmeS1hc3luY3ZpZXcnO1xuaW1wb3J0IE1vZGFsIGZyb20gJy4vTW9kYWwnO1xuXG5jb25zdCBjbGFzc2VzID0ge1xuICBsZWFkZm9ybU1vZGFsOiAnbGVhZGZvcm0tbW9kYWwnLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdExlYWRmb3JtIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgY29uc3QgeyAkdHJpZ2dlciB9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgdGhpcy5tb2RhbCA9IG51bGw7XG5cbiAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5sb2FkZXIgPSBudWxsO1xuXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcblxuICAgICR0cmlnZ2VyLm9uKCdjbGljaycsIGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuKCkge1xuICAgIGNvbnN0IGxvYWRlciA9ICF0aGlzLmlzTG9hZGVkICYmIHRoaXMubG9hZGVyID8gdGhpcy5sb2FkZXIgOiB0aGlzLmxvYWQoKTtcblxuICAgIGxvYWRlci50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IG1vZGFsQ2FsbGJhY2tzID0ge1xuICAgICAgICBvbkNsb3NlOiAoKSA9PiB0aGlzLmNsb3NlKCksXG4gICAgICB9O1xuXG4gICAgICB0aGlzLm1vZGFsID0gbmV3IE1vZGFsKG1vZGFsQ2FsbGJhY2tzKTtcbiAgICAgIHRoaXMubW9kYWwub3BlbihcbiAgICAgICAgYC4ke2NsYXNzZXMubGVhZGZvcm1Nb2RhbH1gLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkZWQgfHwgdGhpcy5sb2FkZXIpIHtcbiAgICAgIGNvbnN0IGxvYWRlciA9IHRoaXMubG9hZGVyIHx8IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICByZXR1cm4gbG9hZGVyLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb2R
1hbC51bmxvYWQoKTtcblxuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGVkIHx8IHRoaXMubG9hZGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIGxvYWQoKSB7XG4gICAgY29uc3QgeyBlbCB9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgLy8gSWYgd2UncmUgYWxyZWFkeSBsb2FkZWQsIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMuaXNMb2FkZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UncmUgY3VycmVudGx5IGxvYWRpbmcsIHJldHVybiB0aGUgZXhpc3RpbmcgcHJvbWlzZVxuICAgIGlmICh0aGlzLmxvYWRlcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVyO1xuICAgIH1cblxuICAgIHRoaXMubG9hZGVyID0gQXN5bmNWaWV3LmxvYWQoZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWUsIHsgdmlldzogJ19sZWFkZm9ybScgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgY29uc3QgeyBodG1sIH0gPSByZXNwb25zZTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWwuY29udGVudDtcblxuICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZChjbGFzc2VzLmxlYWRmb3JtTW9kYWwpO1xuXG4gICAgICAgIHRoaXMuZWwgPSBlbC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGVyID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBudWxsO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmxvYWRlcjtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/components/Leadform.js\n') },
1"./source/scripts/components/MessageBanner.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return MessageBanner; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar MessageBanner =\n/*#__PURE__*/\nfunction () {\n function MessageBanner() {\n var _this = this;\n\n _classCallCheck(this, MessageBanner);\n\n this.$window = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window);\n this.$document = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document);\n this.$body = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body);\n this.$bannerTemplate = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-templates] [data-message-banner]');\n this.$banners = [];\n this.header = document.querySelector('[data-site-header]');\n this.events = [];\n this.$document.on('touchstart.message-banner, click.message-banner', function (event) {\n _this._handleDocumentClick(event.target);\n });\n this.$window.on('keydown.message-banner', function (event) {\n return _this._closeEsc(event);\n });\n }\n\n _createClass(MessageBanner, [{\n key: \"unload\",\n value: function unload() {\n this.$document.off('touchstart.message-banner, click.message-banner');\n this.$window.off('keydown.message-banner');\n }\n }, {\n key: \"message\",\n value: function message(_message, type) {\n var $banner = this.$bannerTemplate.clone();\n $banner.addClass(\"message--\".concat(type)).find('[data-message-banner-content]').html(_message);\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.header).append($banner);\n\n this._bindEvents($banner);\n\n this._show($banner);\n }\n }, {\n key: \"dismissBanners\",\n value: function dismissBanners() {\n var _this2 = this;\n\n var $visibleBanners = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-message-banner]:visible');\n $visibleBanners.each(function (index, banner) {\n _this2._hide(jquery__WEBPACK_IMPORTED_MODULE_0___default()(banner), index);\n });\n }\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents($banner) {\n var _this3 = this;\n\n this.events.push([$banner.on('click.message-banner', '[data-message-banner-close]', function (event) {\n event.preventDefault();\n\n _this3._hide($banner);\n }), this.$window.on('keydown.message-banner', function (e) {\n if (e.key === 'Escape') {\n _this3._hide($banner);\n }\n })]);\n }\n }, {\n key: \"_closeEsc\",\n value: function _closeEsc(e) {\n if (e.key === 'Escape') {\n this.dismissBanners();\n }\n }\n }, {\n key: \"_show\",\n value: function _show($banner) {\n this.$banners.push($banner);\n $banner.addClass('animating animating-in').one('trend', function () {\n $banner.removeClass('animating animating-in').addClass('visible').off('trend');\n });\n }\n }, {\n key: \"_hide\",\n value: function _hide($banner) {\n var _this4 = this;\n\n var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n $banner.addClass('animating animating-out').one('trend', function () {\n $banner.removeClass('animating animating-out visible').off('trend');\n\n _this4._removeBanner($banner, index);\n });\n }\n }, {\n key: \"_removeBanner\",\n value: function _removeBanner($banner, index) {\n if (this.events[index]) {\n this.events[index].forEac
1h(function ($el) {\n return $el.off('.message-banner');\n });\n this.events.splice(index, 1);\n }\n\n this.$banners.splice(index, 1);\n $banner.remove();\n }\n }, {\n key: \"_handleDocumentClick\",\n value: function _handleDocumentClick(target) {\n var $parent = jquery__WEBPACK_IMPORTED_MODULE_0___default()(target).parents('[data-message-banner]');\n\n if ($parent.length) {\n return;\n }\n\n this.dismissBanners();\n }\n }]);\n\n return MessageBanner;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL01lc3NhZ2VCYW5uZXIuanM/OGRkMyJdLCJuYW1lcyI6WyJNZXNzYWdlQmFubmVyIiwiJHdpbmRvdyIsIiQiLCJ3aW5kb3ciLCIkZG9jdW1lbnQiLCJkb2N1bWVudCIsIiRib2R5IiwiYm9keSIsIiRiYW5uZXJUZW1wbGF0ZSIsIiRiYW5uZXJzIiwiaGVhZGVyIiwicXVlcnlTZWxlY3RvciIsImV2ZW50cyIsIm9uIiwiZXZlbnQiLCJfaGFuZGxlRG9jdW1lbnRDbGljayIsInRhcmdldCIsIl9jbG9zZUVzYyIsIm9mZiIsIm1lc3NhZ2UiLCJ0eXBlIiwiJGJhbm5lciIsImNsb25lIiwiYWRkQ2xhc3MiLCJmaW5kIiwiaHRtbCIsImFwcGVuZCIsIl9iaW5kRXZlbnRzIiwiX3Nob3ciLCIkdmlzaWJsZUJhbm5lcnMiLCJlYWNoIiwiaW5kZXgiLCJiYW5uZXIiLCJfaGlkZSIsInB1c2giLCJwcmV2ZW50RGVmYXVsdCIsImUiLCJrZXkiLCJkaXNtaXNzQmFubmVycyIsIm9uZSIsInJlbW92ZUNsYXNzIiwiX3JlbW92ZUJhbm5lciIsImZvckVhY2giLCIkZWwiLCJzcGxpY2UiLCJyZW1vdmUiLCIkcGFyZW50IiwicGFyZW50cyIsImxlbmd0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztJQUVxQkEsYTs7O0FBQ25CLDJCQUFjO0FBQUE7O0FBQUE7O0FBQ1osU0FBS0MsT0FBTCxHQUFlQyw2Q0FBQyxDQUFDQyxNQUFELENBQWhCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQkYsNkNBQUMsQ0FBQ0csUUFBRCxDQUFsQjtBQUNBLFNBQUtDLEtBQUwsR0FBYUosNkNBQUMsQ0FBQ0csUUFBUSxDQUFDRSxJQUFWLENBQWQ7QUFDQSxTQUFLQyxlQUFMLEdBQXVCTiw2Q0FBQyxDQUFDLHdDQUFELENBQXhCO0FBQ0EsU0FBS08sUUFBTCxHQUFnQixFQUFoQjtBQUVBLFNBQUtDLE1BQUwsR0FBY0wsUUFB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RUFBU1UsSyxFQUFPO0FBQzVCLFVBQUksS0FBS25CLE1BQUwsQ0FBWW1CLEtBQVosQ0FBSixFQUF3QjtB
1QUN0QixhQUFLbkIsTUFBTCxDQUFZbUIsS0FBWixFQUFtQlcsT0FBbkIsQ0FBMkIsVUFBQUMsR0FBRztBQUFBLGlCQUFJQSxHQUFHLENBQUN6QixHQUFKLENBQVEsaUJBQVIsQ0FBSjtBQUFBLFNBQTlCO0FBQ0EsYUFBS04sTUFBTCxDQUFZZ0MsTUFBWixDQUFtQmIsS0FBbkIsRUFBMEIsQ0FBMUI7QUFDRDs7QUFFRCxXQUFLdEIsUUFBTCxDQUFjbUMsTUFBZCxDQUFxQmIsS0FBckIsRUFBNEIsQ0FBNUI7QUFDQVYsYUFBTyxDQUFDd0IsTUFBUjtBQUNEOzs7eUNBRW9CN0IsTSxFQUFRO0FBQzNCLFVBQU04QixPQUFPLEdBQUc1Qyw2Q0FBQyxDQUFDYyxNQUFELENBQUQsQ0FBVStCLE9BQVYsQ0FBa0IsdUJBQWxCLENBQWhCOztBQUNBLFVBQUlELE9BQU8sQ0FBQ0UsTUFBWixFQUFvQjtBQUNsQjtBQUNEOztBQUVELFdBQUtWLGNBQUw7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvTWVzc2FnZUJhbm5lci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc3NhZ2VCYW5uZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiR3aW5kb3cgPSAkKHdpbmRvdyk7XG4gICAgdGhpcy4kZG9jdW1lbnQgPSAkKGRvY3VtZW50KTtcbiAgICB0aGlzLiRib2R5ID0gJChkb2N1bWVudC5ib2R5KTtcbiAgICB0aGlzLiRiYW5uZXJUZW1wbGF0ZSA9ICQoJ1tkYXRhLXRlbXBsYXRlc10gW2RhdGEtbWVzc2FnZS1iYW5uZXJdJyk7XG4gICAgdGhpcy4kYmFubmVycyA9IFtdO1xuXG4gICAgdGhpcy5oZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1zaXRlLWhlYWRlcl0nKTtcbiAgICB0aGlzLmV2ZW50cyA9IFtdO1xuXG4gICAgdGhpcy4kZG9jdW1lbnQub24oXG4gICAgICAndG91Y2hzdGFydC5tZXNzYWdlLWJhbm5lciwgY2xpY2subWVzc2FnZS1iYW5uZXInLFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICB0aGlzLl9oYW5kbGVEb2N1bWVudENsaWNrKGV2ZW50LnRhcmdldCk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLiR3aW5kb3cub24oJ2tleWRvd24ubWVzc2FnZS1iYW5uZXInLCBldmVudCA9PiB0aGlzLl9jbG9zZUVzYyhldmVudCkpO1xuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIHRoaXMuJGRvY3VtZW50Lm9mZigndG91Y2hzdGFydC5tZXNzYWdlLWJhbm5lciwgY2xpY2subWVzc2FnZS1iYW5uZXInKTtcbiAgICB0aGlzLiR3aW5kb3cub2ZmKCdrZXlkb3duLm1lc3NhZ2UtYmFubmVyJyk7XG4gIH1cblxuICBtZXNzYWdlKG1lc3NhZ2UsIHR5cGUpIHtcbiAgICBjb25zdCAkYmFubmVyID0gdGhpcy4kYmFubmVyVGVtcGxhdGUuY2xvbmUoKTtcblxuICAgICRiYW5uZXJcbiAgICAgIC5hZGRDbGFzcyhgbWVzc2FnZS0tJHt0eXBlfWApXG4gICAgICAuZmluZCgnW2RhdGEtbWVzc2FnZS1iYW5uZXItY29udGVudF0nKVxuICAgICAgLmh0bWwobWVzc2FnZSk7XG5cbiAgICAkKHRoaXMuaGVhZGVyKS5hcHBlbmQoJGJhbm5lcik7XG4gICAgdGhpcy5fYmluZEV2ZW50cygkYmFubmVyKTtcbiAgICB0aGlzLl9zaG93KCRiYW5uZXIpO1xuICB9XG5cbiAgZGlzbWlzc0Jhbm5lcnMoKSB7XG4gICAgY29uc3QgJHZpc2libGVCYW5uZXJzID0gJCgnW2RhdGEtbWVzc2FnZS1iYW5uZXJdOnZpc2libGUnKTtcblxuICAgICR2aXNpYmxlQmFubmVycy5lYWNoKChpbmRleCwgYmFubmVyKSA9PiB7XG4gICAgICB0aGlzLl9oaWRlKCQoYmFubmVyKSwgaW5kZXgpO1xuICAgIH0pO1xuICB9XG5cbiAgX2JpbmRFdmVudHMoJGJhbm5lcikge1xuICAgIHRoaXMuZXZlbnRzLnB1c2goW1xuICAgICAgJGJhbm5lci5vbihcbiAgICAgICAgJ2NsaWNrLm1lc3NhZ2UtYmFubmVyJyxcbiAgICAgICAgJ1tkYXRhLW1lc3NhZ2UtYmFubmVyLWNsb3NlXScsXG4gICAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuX2hpZGUoJGJhbm5lcik7XG4gICAgICAgIH0sXG4gICAgICApLFxuICAgICAgdGhpcy4kd2luZG93Lm9uKCdrZXlkb3duLm1lc3NhZ2UtYmFubmVyJywgZSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICB0aGlzLl9oaWRlKCRiYW5uZXIpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICBdKTtcbiAgfVxuXG4gIF9jbG9zZUVzYyhlKSB7XG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5kaXNtaXNzQmFubmVycygpO1xuICAgIH1cbiAgfVxuXG4gIF9zaG93KCRiYW5uZXIpIHtcbiAgICB0aGlzLiRiYW5uZXJzLnB1c2goJGJhbm5lcik7XG5cbiAgICAkYmFubmVyLmFkZENsYXNzKCdhbmltYXRpbmcgYW5pbWF0aW5nLWluJykub25lKCd0cmVuZCcsICgpID0+IHtcbiAgICAgICRiYW5uZXJcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdhbmltYXRpbmcgYW5pbWF0aW5nLWluJylcbiAgICAgICAgLmFkZENsYXNzKCd2aXNpYmxlJylcbiAgICAgICAgLm9mZigndHJlbmQnKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9oaWRlKCRiYW5uZXIsIGluZGV4ID0gMCkge1xuICAgICRiYW5uZXIuYWRkQ2xhc3MoJ2FuaW1hdGluZyBhbmltYXRpbmctb3V0Jykub25lKCd0cmVuZCcsICgpID0+IHtcbiAgICAgICRiYW5uZXIucmVtb3ZlQ2xhc3MoJ2FuaW1hdGluZyBhbmltYXRpbmctb3V0IHZpc2libGUnKS5vZmYoJ3RyZW5kJyk7XG4gICAgICB0aGlzLl9yZW1vdmVCYW5uZXIoJGJhbm5lciwgaW5kZXgpO1xuICAgIH0pO1xuICB9XG5cbiAgX3JlbW92ZUJhbm5lcigkYmFubmVyLCBpbmRleCkge1xuICAgIGlmICh0aGlzLmV2ZW50c1tpbmRleF0pIHtcbiAgICAgIHRoaXMuZXZlbnRzW2luZGV4XS5mb3JFYWNoKCRlbCA9PiAkZWwub2ZmKCcubWVzc2FnZS1iYW5uZXInKSk7XG4gICAgICB0aGlzLmV2ZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHRoaXMuJGJhbm5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAkYmFubmVyLnJlbW92ZSgpO1xuICB9XG5cbiAgX2hhbmRsZURvY3VtZW50Q2xpY2sodGFyZ2V0KSB7XG4gICAgY29uc3QgJHBhcmVudCA9ICQodGFyZ2V0KS5wYXJlbnRzKCdbZGF0YS1tZXNzYWdlLWJhbm5lcl0nKTtcbiAgICBpZiAoJHBhcmVudC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc21pc3NCYW5uZXJzKCk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/components/MessageBanner.js\n") },
1"./source/scripts/components/Modal.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Modal; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! just-debounce */ "./node_modules/just-debounce/index.js");\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(just_debounce__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var vanilla_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vanilla-modal */ "./node_modules/vanilla-modal/dist/index.js");\n/* harmony import */ var vanilla_modal__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(vanilla_modal__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _shopify_theme_a11y__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @shopify/theme-a11y */ "./node_modules/@shopify/theme-a11y/theme-a11y.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar Modal =\n/*#__PURE__*/\nfunction () {\n function Modal() {\n var callbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Modal);\n\n this.$body = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body);\n this.$window = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window);\n this.modal = null;\n this.$modal = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'[data-modal-container]\');\n this.$modalInner = this.$modal.find(\'[data-modal-inner]\');\n this.trigger = null; // Extend default vanilla-modal callbacks back to instantiator of Modal\n\n this.defaultCallbacks = {\n onOpen: function onOpen() {},\n onClose: function onClose() {},\n onBeforeOpen: function onBeforeOpen() {},\n onBeforeClose: function onBeforeClose() {}\n };\n this.callbacks = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, this.defaultCallbacks, callbacks);\n this._onOpen = this._onOpen.bind(this);\n this._onBeforeOpen = this._onBeforeOpen.bind(this);\n this._onClose = this._onClose.bind(this);\n this._onBeforeClose = this._onBeforeClose.bind(this);\n this._closeEsc = this._closeEsc.bind(this);\n this.position = this.position.bind(this);\n this.modalOptions = {\n loadClass: \'\',\n class: \'modal-loaded\',\n onOpen: this._onOpen,\n onClose: this._onClose,\n onBeforeOpen: this._onBeforeOpen,\n onBeforeClose: this._onBeforeClose,\n transitions: false\n };\n }\n\n _createClass(Modal, [{\n key: "unload",\n value: function unload() {\n if (!this.modal || !this.modal.isOpen) {\n return;\n }\n\n this.modal.destroy();\n }\n /**\n * Open a modal with contents from selector\n *\n * @param selector\n * @param handle\n */\n\n }, {\n key: "open",\n value: function open(selector) {\n var handle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \'general\';\n var trigger = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n this._addModalClass(handle);\n\n this.modal = new vanilla_modal__WEBPACK_IMPORTED_MODULE_2___default.a(this.modalOptions);\n this.modal.open(selector);\n this.trigger = trigger;\n window.addEventListener(\'keydown\', this.closeEsc);\n }\n }, {\n key: "close",\n value: function close() {\n this.modal.close();\n window.removeEventListener(\'keydown\', this.closeEsc);\n }\n }, {\n key: "_closeEsc",\n value: function _closeEsc(e) {\n if (e.key === \'Escape\') {\n this.close();\n }\n }\n }, {\n key: "isOpen",\n value: function isOpen() {\n return this.modal && this.modal.isOpen;\n }\n /**\n * Update the vertical positioning of modal\n */\n\n }
1, {\n key: "position",\n value: function position() {\n var windowHeight = window.innerHeight;\n var modalHeight = this.$modalInner.outerHeight();\n var modalPadding = parseInt(this.$modal.css(\'padding-top\'), 10) * 2;\n var offset = (windowHeight - modalPadding - modalHeight) / 2;\n var marginTop = offset > 0 ? offset : 0;\n this.$modalInner.css({\n marginTop: marginTop\n });\n }\n /**\n * Add a class to the modal for individual styling\n * @param handle\n * @private\n */\n\n }, {\n key: "_addModalClass",\n value: function _addModalClass(handle) {\n this.$modal.addClass("modal--".concat(handle));\n }\n /**\n * Remove modal class based on the handle\n * @private\n */\n\n }, {\n key: "_removeModalClass",\n value: function _removeModalClass() {\n var modalClass = this.$modal.attr(\'class\').match(/modal--[\\w-]*\\b/);\n\n if (!modalClass) {\n return;\n }\n\n this.$modal.removeClass(modalClass[0]);\n }\n }, {\n key: "_onClose",\n value: function _onClose() {\n this._removeModalClass();\n\n this.$body.removeClass(\'scroll-lock\').removeClass(\'modal-visible\');\n this.$window.off(\'resize.modal\');\n this.$modalInner.css({\n marginTop: \'\'\n });\n this.callbacks.onClose();\n Object(_shopify_theme_a11y__WEBPACK_IMPORTED_MODULE_3__["removeTrapFocus"])(this.$modal[0]);\n\n if (this.activeElement) {\n this.activeElement.focus();\n }\n }\n }, {\n key: "_onOpen",\n value: function _onOpen() {\n var _this = this;\n\n this.activeElement = document.activeElement;\n this.position();\n this.$body.addClass(\'scroll-lock\').addClass(\'modal-visible\');\n this.$window.on(\'resize.modal\', just_debounce__WEBPACK_IMPORTED_MODULE_1___default()(function () {\n return _this.position();\n }, 16, true, true));\n this.callbacks.onOpen();\n Object(_shopify_theme_a11y__WEBPACK_IMPORTED_MODULE_3__["trapFocus"])(this.$modal[0]);\n }\n }, {\n key: "_onBeforeClose",\n value: function _onBeforeClose() {\n this.callbacks.onBeforeClose();\n }\n }, {\n key: "_onBeforeOpen",\n value: function _onBeforeOpen() {\n this.callbacks.onBeforeOpen();\n }\n }]);\n\n return Modal;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL01vZGFsLmpzPzYwYWQiXSwibmFtZXMiOlsiTW9kYWwiLCJjYWxsYmFja3MiLCIkYm9keSIsIiQiLCJkb2N1bWVudCIsImJvZHkiLCIkd2luZG93Iiwid2luZG93IiwibW9kYWwiLCIkbW9kYWwiLCIkbW9kYWxJbm5lciIsImZpbmQiLCJ0cmlnZ2VyIiwiZGVmYXVsdENhbGxiYWNrcyIsIm9uT3BlbiIsIm9uQ2xvc2UiLCJvbkJlZm9yZU9wZW4iLCJvbkJlZm9yZUNsb3NlIiwiZXh0ZW5kIiwiX29uT3BlbiIsImJpbmQiLCJfb25CZWZvcmVPcGVuIiwiX29uQ2xvc2UiLCJfb25CZWZvcmVDbG9zZSIsIl9jbG9zZUVzYyIsInBvc2l0aW9uIiwibW9kYWxPcHRpb25zIiwibG9hZENsYXNzIiwiY2xhc3MiLCJ0cmFuc2l0aW9ucyIsImlzT3BlbiIsImRlc3Ryb3kiLCJzZWxlY3RvciIsImhhbmRsZSIsIl9hZGRNb2RhbENsYXNzIiwiVmFuaWxsYU1vZGFsIiwib3BlbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJjbG9zZUVzYyIsImNsb3NlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImUiLCJrZXkiLCJ3aW5kb3dIZWlnaHQiLCJpbm5lckhlaWdodCIsIm1vZGFsSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJtb2RhbFBhZGRpbmciLCJwYXJzZUludCIsImNzcyIsIm9mZnNldCIsIm1hcmdpblRvcCIsImFkZENsYXNzIiwibW9kYWxDbGFzcyIsImF0dHIiLCJtYXRjaCIsInJlbW92ZUNsYXNzIiwiX3JlbW92ZU1vZGFsQ2xhc3MiLCJvZmYiLCJyZW1vdmVUcmFwRm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiZm9jdXMiLCJvbiIsImRlYm91bmNlIiwidHJhcEZvY3VzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7SUFFcUJBLEs7OztBQUNuQixtQkFBNEI7QU
1FBQSxRQUFoQkMsU0FBZ0IsdUVBQUosRUFBSTs7QUFBQTs7QUFDMUIsU0FBS0MsS0FBTCxHQUFhQyw2Q0FBQyxDQUFDQyxRQUFRLENBQUNDLElBQVYsQ0FBZDtBQUNBLFNBQUtDLE9BQUwsR0FBZUgsNkNBQUMsQ0FBQ0ksTUFBRCxDQUFoQjtBQUVBLFNBQUtDLEtBQUwsR0FBYSxJQUFiO0FBQ0EsU0FBS0MsTUFBTCxHQUFjTiw2Q0FBQyxDQUFDLHdCQUFELENBQWY7QUFDQSxTQUFLTyxXQUFMLEdBQW1CLEtBQUtELE1BQUwsQ0FBWUUsSUFBWixDQUFpQixvQkFBakIsQ0FBbkI7QUFFQSxTQUFLQyxPQUFMLEdBQWUsSUFBZixDQVIwQixDQVUxQjs7QUFDQSxTQUFLQyxnQkFBTCxHQUF3QjtBQUN0QkMsWUFBTSxFQUFFLGtCQUFNLENBQUUsQ0FETTtBQUV0QkMsYUFBTyxFQUFFLG1CQUFNLENBQUUsQ0FGSztBQUd0QkMsa0JBQVksRUFBRSx3QkFBTSxDQUFFLENBSEE7QUFJdEJDLG1CQUFhLEVBQUUseUJBQU0sQ0FBRTtBQUpELEtBQXhCO0FBT0EsU0FBS2hCLFNBQUwsR0FBaUJFLDZDQUFDLENBQUNlLE1BQUYsQ0FBUyxFQUFULEVBQWEsS0FBS0wsZ0JBQWxCLEVBQW9DWixTQUFwQyxDQUFqQjtBQUVBLFNBQUtrQixPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhQyxJQUFiLENBQWtCLElBQWxCLENBQWY7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLEtBQUtBLGFBQUwsQ0FBbUJELElBQW5CLENBQXdCLElBQXhCLENBQXJCO0FBQ0EsU0FBS0UsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNGLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDQSxTQUFLRyxjQUFMLEdBQXNCLEtBQUtBLGNBQUwsQ0FBb0JILElBQXBCLENBQXlCLElBQXpCLENBQXRCO0FBQ0EsU0FBS0ksU0FBTCxHQUFpQixLQUFLQSxTQUFMLENBQWVKLElBQWYsQ0FBb0IsSUFBcEIsQ0FBakI7QUFFQSxTQUFLSyxRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBY0wsSUFBZCxDQUFtQixJQUFuQixDQUFoQjtBQUVBLFNBQUtNLFlBQUwsR0FBb0I7QUFDbEJDLGVBQVMsRUFBRSxFQURPO0FBRWxCQyxXQUFLLEVBQUUsY0FGVztBQUdsQmQsWUFBTSxFQUFFLEtBQUtLLE9BSEs7QUFJbEJKLGFBQU8sRUFBRSxLQUFLTyxRQUpJO0FBS2xCTixrQkFBWSxFQUFFLEtBQUtLLGFBTEQ7QUFNbEJKLG1CQUFhLEVBQUUsS0FBS00sY0FORjtBQU9sQk0saUJBQVcsRUFBRTtBQVBLLEtBQXBCO0FBU0Q7Ozs7NkJBRVE7QUFDUCxVQUFJLENBQUMsS0FBS3JCLEtBQU4sSUFBZSxDQUFDLEtBQUtBLEtBQUwsQ0FBV3NCLE1BQS9CLEVBQXVDO0FBQ3JDO0FBQ0Q7O0FBRUQsV0FBS3RCLEtBQUwsQ0FBV3VCLE9BQVg7QUFDRDtBQUVEOzs7Ozs7Ozs7eUJBTUtDLFEsRUFBOEM7QUFBQSxVQUFwQ0MsTUFBb0MsdUVBQTNCLFNBQTJCO0FBQUEsVUFBaEJyQixPQUFnQix1RUFBTixJQUFNOztBQUNqRCxXQUFLc0IsY0FBTCxDQUFvQkQsTUFBcEI7O0FBQ0EsV0FBS3pCLEtBQUwsR0FBYSxJQUFJMkIsb0RBQUosQ0FBaUIsS0FBS1QsWUFBdEIsQ0FBYjtBQUVBLFdBQUtsQixLQUFMLENBQVc0QixJQUFYLENBQWdCSixRQUFoQjtBQUNBLFdBQUtwQixPQUFMLEdBQWVBLE9BQWY7QUFDQUwsWUFBTSxDQUFDOEIsZ0JBQVAsQ0FBd0IsU0FBeEIsRUFBbUMsS0FBS0MsUUFBeEM7QUFDRDs7OzRCQUVPO0FBQ04sV0FBSzlCLEtBQUwsQ0FBVytCLEtBQVg7QUFDQWhDLFlBQU0sQ0FBQ2lDLG1CQUFQLENBQTJCLFNBQTNCLEVBQXNDLEtB
1QUtGLFFBQTNDO0FBQ0Q7Ozs4QkFFU0csQyxFQUFHO0FBQ1gsVUFBSUEsQ0FBQyxDQUFDQyxHQUFGLEtBQVUsUUFBZCxFQUF3QjtBQUN0QixhQUFLSCxLQUFMO0FBQ0Q7QUFDRjs7OzZCQUVRO0FBQ1AsYUFBTyxLQUFLL0IsS0FBTCxJQUFjLEtBQUtBLEtBQUwsQ0FBV3NCLE1BQWhDO0FBQ0Q7QUFFRDs7Ozs7OytCQUdXO0FBQ1QsVUFBTWEsWUFBWSxHQUFHcEMsTUFBTSxDQUFDcUMsV0FBNUI7QUFFQSxVQUFNQyxXQUFXLEdBQUcsS0FBS25DLFdBQUwsQ0FBaUJvQyxXQUFqQixFQUFwQjtBQUNBLFVBQU1DLFlBQVksR0FBR0MsUUFBUSxDQUFDLEtBQUt2QyxNQUFMLENBQVl3QyxHQUFaLENBQWdCLGFBQWhCLENBQUQsRUFBaUMsRUFBakMsQ0FBUixHQUErQyxDQUFwRTtBQUVBLFVBQU1DLE1BQU0sR0FBRyxDQUFDUCxZQUFZLEdBQUdJLFlBQWYsR0FBOEJGLFdBQS9CLElBQThDLENBQTdEO0FBQ0EsVUFBTU0sU0FBUyxHQUFHRCxNQUFNLEdBQUcsQ0FBVCxHQUFhQSxNQUFiLEdBQXNCLENBQXhDO0FBQ0EsV0FBS3hDLFdBQUwsQ0FBaUJ1QyxHQUFqQixDQUFxQjtBQUFFRSxpQkFBUyxFQUFUQTtBQUFGLE9BQXJCO0FBQ0Q7QUFFRDs7Ozs7Ozs7bUNBS2VsQixNLEVBQVE7QUFDckIsV0FBS3hCLE1BQUwsQ0FBWTJDLFFBQVosa0JBQStCbkIsTUFBL0I7QUFDRDtBQUVEOzs7Ozs7O3dDQUlvQjtBQUNsQixVQUFNb0IsVUFBVSxHQUFHLEtBQUs1QyxNQUFMLENBQVk2QyxJQUFaLENBQWlCLE9BQWpCLEVBQTBCQyxLQUExQixDQUFnQyxpQkFBaEMsQ0FBbkI7O0FBQ0EsVUFBSSxDQUFDRixVQUFMLEVBQWlCO0FBQ2Y7QUFDRDs7QUFFRCxXQUFLNUMsTUFBTCxDQUFZK0MsV0FBWixDQUF3QkgsVUFBVSxDQUFDLENBQUQsQ0FBbEM7QUFDRDs7OytCQUVVO0FBQ1QsV0FBS0ksaUJBQUw7O0FBQ0EsV0FBS3ZELEtBQUwsQ0FBV3NELFdBQVgsQ0FBdUIsYUFBdkIsRUFBc0NBLFdBQXRDLENBQWtELGVBQWxEO0FBRUEsV0FBS2xELE9BQUwsQ0FBYW9ELEdBQWIsQ0FBaUIsY0FBakI7QUFFQSxXQUFLaEQsV0FBTCxDQUFpQnVDLEdBQWpCLENBQXFCO0FBQUVFLGlCQUFTLEVBQUU7QUFBYixPQUFyQjtBQUVBLFdBQUtsRCxTQUFMLENBQWVjLE9BQWY7QUFFQTRDLGlGQUFlLENBQUMsS0FBS2xELE1BQUwsQ0FBWSxDQUFaLENBQUQsQ0FBZjs7QUFFQSxVQUFJLEtBQUttRCxhQUFULEVBQXdCO0FBQ3RCLGFBQUtBLGFBQUwsQ0FBbUJDLEtBQW5CO0FBQ0Q7QUFDRjs7OzhCQUVTO0FBQUE7O0FBQ1IsV0FBS0QsYUFBTCxHQUFxQnhELFFBQVEsQ0FBQ3dELGFBQTlCO0FBQ0EsV0FBS25DLFFBQUw7QUFDQSxXQUFLdkIsS0FBTCxDQUFXa0QsUUFBWCxDQUFvQixhQUFwQixFQUFtQ0EsUUFBbkMsQ0FBNEMsZUFBNUM7QUFDQSxXQUFLOUMsT0FBTCxDQUFhd0QsRUFBYixDQUNFLGNBREYsRUFFRUMsb0RBQVEsQ0FBQztBQUFBLGVBQU0sS0FBSSxDQUFDdEMsUUFBTCxFQUFOO0FBQUEsT0FBRCxFQUF3QixFQUF4QixFQUE0QixJQUE1QixFQUFrQyxJQUFsQyxDQUZWO0FBS0EsV0FBS3hCLFNBQUwsQ0FBZWEsTUFBZjtBQUVBa0QsMkVBQVMsQ0FBQyxLQUFLdkQsTUFBTCxDQUFZLENBQVosQ0FBRCxDQUFUO0FBQ0Q7OztxQ0FFZ0I7QUFDZixXQUFLUixTQUFMLENBQWVnQixhQUFmO0FBQ0Q7OztvQ0FFZTtBQUNkLFdBQUtoQixTQUFMLENBQWVlLFlBQWY7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvTW9kYWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2p1c3QtZGVib3VuY2UnO1xuaW1wb3J0IFZhbmlsbGFNb2RhbCBmcm9tICd2YW5pbGxhLW1vZGFsJztcbmltcG9ydCB7IHRyYXBGb2N1cywgcmVtb3ZlVHJhcEZvY3VzIH0gZnJvbSAnQHNob3BpZnkvdGhlbWUtYTExeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZGFsIHtcbiAgY29uc3RydWN0b3IoY2FsbGJhY2tzID0ge30pIHtcbiAgICB0aGlzLiRib2R5ID0gJChkb2N1bWVudC5ib2R5KTtcbiAgICB0aGlzLiR3aW5kb3cgPSAkKHdpbmRvdyk7XG5cbiAgICB0aGlzLm1vZGFsID0gbnVsbDtcbiAgICB0aGlzLiRtb2RhbCA9ICQoJ1tkYXRhLW1vZGFsLWNvbnRhaW5lcl0nKTtcbiAgICB0aGlzLiRtb2RhbElubmVyID0gdGhpcy4kbW9kYWwuZmluZCgnW2RhdGEtbW9kYWwtaW5uZXJdJyk7XG5cbiAgICB0aGlzLnRyaWdnZXIgPSBudWxsO1xuXG4gICAgLy8gRXh0ZW5kIGRlZmF1bHQgdmFuaWxsYS1tb2RhbCBjYWxsYmFja3MgYmFjayB0byBpbnN0YW50aWF0b3Igb2YgTW9kYWxcbiAgICB0aGlzLmRlZmF1bHRDYWxsYmFja3MgPSB7XG4gICAgICBvbk9wZW46ICgpID0+IHt9LFxuICAgICAgb25DbG9zZTogKCkgPT4ge30sXG4gICAgICBvbkJlZm9yZU9wZW46ICgpID0+IHt9LFxuICAgICAgb25CZWZvcmVDbG9zZTogKCkgPT4ge30sXG4gICAgfTtcblxuICAgIHRoaXMuY2FsbGJhY2tzID0gJC5leHRlbmQoe30sIHRoaXMuZGVmYXVsdENhbGxiYWNrcywgY2FsbGJhY2tzKTtcblxuICAgIHRoaXMuX29uT3BlbiA9IHRoaXMuX29uT3Blbi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQmVmb3JlT3BlbiA9IHRoaXMuX29uQmVmb3JlT3Blbi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2xvc2UgPSB0aGlzLl9vbkNsb3NlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25CZWZvcmVDbG9zZSA9IHRoaXMuX29uQmVmb3JlQ2xvc2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9jbG9zZUVzYyA9IHRoaXMuX2Nsb3NlRXNjLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbi5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5tb2RhbE9wdGlvbnMgPSB7XG4gICAgICBsb2FkQ2xhc3M6ICcnLFxuICAgICAgY2xhc3M6ICdtb2RhbC1sb2FkZWQnLFxuICAgICAgb25PcGVuOiB0aGlzLl9vbk9wZW4sXG4gICAgICBvbkNsb3NlOiB0aGlzLl9vbkNsb3NlLFxuICAgICAgb25CZWZvcmVPcGVuOiB0aGlzLl9vbkJlZm9yZU9wZW4sXG4gICAgICBvbkJlZm9yZUNsb3NlOiB0aGlzLl9vbkJlZm9yZUNsb3NlLFxuICAgICAgdHJhbnNpdGlvbnM6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICB1bmxvYWQoKSB7XG4gICAgaWYgKCF0aGlzLm1vZGFsIHx8ICF0aGlzLm1vZGFsLmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgI
1HRoaXMubW9kYWwuZGVzdHJveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYSBtb2RhbCB3aXRoIGNvbnRlbnRzIGZyb20gc2VsZWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHNlbGVjdG9yXG4gICAqIEBwYXJhbSBoYW5kbGVcbiAgICovXG4gIG9wZW4oc2VsZWN0b3IsIGhhbmRsZSA9ICdnZW5lcmFsJywgdHJpZ2dlciA9IG51bGwpIHtcbiAgICB0aGlzLl9hZGRNb2RhbENsYXNzKGhhbmRsZSk7XG4gICAgdGhpcy5tb2RhbCA9IG5ldyBWYW5pbGxhTW9kYWwodGhpcy5tb2RhbE9wdGlvbnMpO1xuXG4gICAgdGhpcy5tb2RhbC5vcGVuKHNlbGVjdG9yKTtcbiAgICB0aGlzLnRyaWdnZXIgPSB0cmlnZ2VyO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5jbG9zZUVzYyk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLm1vZGFsLmNsb3NlKCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmNsb3NlRXNjKTtcbiAgfVxuXG4gIF9jbG9zZUVzYyhlKSB7XG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGlzT3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbCAmJiB0aGlzLm1vZGFsLmlzT3BlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZlcnRpY2FsIHBvc2l0aW9uaW5nIG9mIG1vZGFsXG4gICAqL1xuICBwb3NpdGlvbigpIHtcbiAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgICBjb25zdCBtb2RhbEhlaWdodCA9IHRoaXMuJG1vZGFsSW5uZXIub3V0ZXJIZWlnaHQoKTtcbiAgICBjb25zdCBtb2RhbFBhZGRpbmcgPSBwYXJzZUludCh0aGlzLiRtb2RhbC5jc3MoJ3BhZGRpbmctdG9wJyksIDEwKSAqIDI7XG5cbiAgICBjb25zdCBvZmZzZXQgPSAod2luZG93SGVpZ2h0IC0gbW9kYWxQYWRkaW5nIC0gbW9kYWxIZWlnaHQpIC8gMjtcbiAgICBjb25zdCBtYXJnaW5Ub3AgPSBvZmZzZXQgPiAwID8gb2Zmc2V0IDogMDtcbiAgICB0aGlzLiRtb2RhbElubmVyLmNzcyh7IG1hcmdpblRvcCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBjbGFzcyB0byB0aGUgbW9kYWwgZm9yIGluZGl2aWR1YWwgc3R5bGluZ1xuICAgKiBAcGFyYW0gaGFuZGxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkTW9kYWxDbGFzcyhoYW5kbGUpIHtcbiAgICB0aGlzLiRtb2RhbC5hZGRDbGFzcyhgbW9kYWwtLSR7aGFuZGxlfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBtb2RhbCBjbGFzcyBiYXNlZCBvbiB0aGUgaGFuZGxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVtb3ZlTW9kYWxDbGFzcygpIHtcbiAgICBjb25zdCBtb2RhbENsYXNzID0gdGhpcy4kbW9kYWwuYXR0cignY2xhc3MnKS5tYXRjaCgvbW9kYWwtLVtcXHctXSpcXGIvKTtcbiAgICBpZiAoIW1vZGFsQ2xhc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiRtb2RhbC5yZW1vdmVDbGFzcyhtb2RhbENsYXNzWzBdKTtcbiAgfVxuXG4gIF9vbkNsb3NlKCkge1xuICAgIHRoaXMuX3JlbW92ZU1vZGFsQ2xhc3MoKTtcbiAgICB0aGlzLiRib2R5LnJlbW92ZUNsYXNzKCdzY3JvbGwtbG9jaycpLnJlbW92ZUNsYXNzKCdtb2RhbC12aXNpYmxlJyk7XG5cbiAgICB0aGlzLiR3aW5kb3cub2ZmKCdyZXNpemUubW9kYWwnKTtcblxuICAgIHRoaXMuJG1vZGFsSW5uZXIuY3NzKHsgbWFyZ2luVG9wOiAnJyB9KTtcblxuICAgIHRoaXMuY2FsbGJhY2tzLm9uQ2xvc2UoKTtcblxuICAgIHJlbW92ZVRyYXBGb2N1cyh0aGlzLiRtb2RhbFswXSk7XG5cbiAgICBpZiAodGhpcy5hY3RpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmFjdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBfb25PcGVuKCkge1xuICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5wb3NpdGlvbigpO1xuICAgIHRoaXMuJGJvZHkuYWRkQ2xhc3MoJ3Njcm9sbC1sb2NrJykuYWRkQ2xhc3MoJ21vZGFsLXZpc2libGUnKTtcbiAgICB0aGlzLiR3aW5kb3cub24oXG4gICAgICAncmVzaXplLm1vZGFsJyxcbiAgICAgIGRlYm91bmNlKCgpID0+IHRoaXMucG9zaXRpb24oKSwgMTYsIHRydWUsIHRydWUpLFxuICAgICk7XG5cbiAgICB0aGlzLmNhbGxiYWNrcy5vbk9wZW4oKTtcblxuICAgIHRyYXBGb2N1cyh0aGlzLiRtb2RhbFswXSk7XG4gIH1cblxuICBfb25CZWZvcmVDbG9zZSgpIHtcbiAgICB0aGlzLmNhbGxiYWNrcy5vbkJlZm9yZUNsb3NlKCk7XG4gIH1cblxuICBfb25CZWZvcmVPcGVuKCkge1xuICAgIHRoaXMuY2FsbGJhY2tzLm9uQmVmb3JlT3BlbigpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/components/Modal.js\n') },
1"./source/scripts/components/ProductDetails.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ProductDetails; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var shopify_variants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shopify-variants */ "./node_modules/shopify-variants/dist/shopify-variants.es.js");\n/* harmony import */ var _Forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Forms */ "./source/scripts/Forms.js");\n/* harmony import */ var _AddToCartFlyout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AddToCartFlyout */ "./source/scripts/components/AddToCartFlyout.js");\n/* harmony import */ var _ProductGallery__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ProductGallery */ "./source/scripts/components/ProductGallery.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar ProductDetails =\n/*#__PURE__*/\nfunction () {\n function ProductDetails(options) {\n _classCallCheck(this, ProductDetails);\n\n this.$window = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window);\n this.$formArea = options.$formArea;\n this.$gallery = options.$gallery;\n this.$details = options.$details;\n this.context = options.context;\n this.settings = options.settings;\n this.product = options.product;\n this.useHistory = options.useHistory;\n this.variantHelper = null;\n this.atcCallbacks = options.atcCallbacks; // Form\n\n this.$form = this.$formArea.find(\'[data-product-form]\');\n this.$productAtcButton = this.$formArea.find(\'[data-product-atc]\');\n this.$productSampleButton = this.$formArea.find(\'[data-product-sample-atc]\');\n this.$productVariants = this.$form.find(\'[data-variants]\');\n this.$productOptions = this.$form.find(\'[data-product-option]\');\n this.detailsLink = this.$formArea[0].querySelector(\'[data-product-details-link]\');\n\n if (this.detailsLink) {\n this.detailsBaseHref = this.detailsLink.getAttribute(\'href\');\n }\n\n this.variantFields = {\n $price: this.$details.find(\'[data-price]\'),\n $priceMoney: this.$details.find(\'[data-price] [data-unit-price]\'),\n $compareAtPrice: this.$details.find(\'[data-price-compare-at]\'),\n $compareAtPriceMoney: this.$details.find(\'[data-price-compare-at] [data-unit-price]\'),\n $badge: this.$details.find(\'[data-badge-sales]\'),\n $badgeMoneySaved: this.$details.find(\'[data-price-money-saved]\'),\n $badgePercentSaved: this.$details.find(\'[data-price-percent-saved]\'),\n $sku: this.$details.find(\'[data-product-sku]\')\n };\n this.forms = new _Forms__WEBPACK_IMPORTED_MODULE_2__["default"](this.$form);\n this.gallery = new _ProductGallery__WEBPACK_IMPORTED_MODULE_4__["default"](options);\n\n this._bindEvents();\n\n this._initOptions();\n }\n\n _createClass(ProductDetails, [{\n key: "unload",\n value: function unload() {\n this.$form.off(".product-details-".concat(this.settings.section_id));\n this.$window.off(".product-details-".concat(this.settings.section_id));\n this.forms.unload();\n\n if (this.variantHelper) {\n this.variantHelper.unload();\n }\n\n this.gallery.unload();\n }\n }, {\n key: "selectVariant",\n value: function selectVariant(variantId) {\n if (variantId) {\n this.variantHelper.selectVariant(variantId);\n }\n }\n }, {\n key: "_bindEvents",\n value: function _bindEvents() {\n var _this = this;\n\n this.$window.on("shopify-variants:switch-variant.product-details-".concat(this.settings.section_id), function (event, data) {\n return _this._switchVariant(event, data);\n });\n this.$form.on("submit.product-details-".concat(this.settings.section_id), function (event) {\n _this._AddToCartFlyout(event);\n });
1\n this.$form.find(\'[data-product-sample-atc]\').on(\'click\', function (event) {\n return _this._AddSampleToCart(event);\n });\n }\n }, {\n key: "_initOptions",\n value: function _initOptions() {\n if (!this.$productVariants.length) {\n return;\n }\n\n this.variantHelper = new shopify_variants__WEBPACK_IMPORTED_MODULE_1__["default"](this.product, this.$productVariants, this.$productOptions, {\n mixedControls: true\n });\n\n if (this.$productSampleButton.length) {\n var selectedVariantSku = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'[data-hidden-properties-selected-variant-sku]\').val();\n\n this._updateSampleButton(selectedVariantSku);\n }\n }\n }, {\n key: "_switchVariant",\n value: function _switchVariant(event, data) {\n if (data.product !== this.product) {\n return;\n }\n\n var variant = data.variant,\n firstLoad = data.firstLoad;\n\n if (firstLoad) {\n return;\n }\n\n var url = "".concat(window.location.origin, "/products/").concat(this.product.handle, "?").concat(jquery__WEBPACK_IMPORTED_MODULE_0___default.a.param({\n variant: variant.id\n }));\n window.location.href = url;\n }\n }, {\n key: "_updateSampleButton",\n value: function _updateSampleButton(variantSku) {\n if (!this.$productSampleButton.length) {\n return;\n }\n\n var disabledSkus = this.$productSampleButton.data(\'disabled-skus\').toString();\n\n if (disabledSkus.includes(variantSku)) {\n this.$productSampleButton.attr(\'disabled\', true);\n } else {\n this.$productSampleButton.attr(\'disabled\', false);\n }\n }\n }, {\n key: "_AddToCartFlyout",\n value: function _AddToCartFlyout(event) {\n event.preventDefault();\n var formData = this.$form.serializeArray();\n var options = {\n $atcButton: this.$productAtcButton,\n settings: {\n moneyFormat: this.settings.money_format,\n cartRedirection: this.settings.cart_redirection\n }\n };\n _AddToCartFlyout__WEBPACK_IMPORTED_MODULE_3__["default"].init(formData, this.product, options, this.atcCallbacks);\n }\n }, {\n key: "_AddSampleToCart",\n value: function _AddSampleToCart(event) {\n event.preventDefault();\n var disabledSkus = this.$productSampleButton.data(\'disabled-skus\').split(\',\');\n var variantSku = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'[data-hidden-properties-selected-variant-sku]\').val();\n\n if (disabledSkus.includes(variantSku)) {\n return;\n }\n\n var form = this.$form.serializeArray();\n var sampleId = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'[data-hidden-properties-sample]\').val();\n var formData = [];\n\n if (sampleId) {\n formData = form.map(function (formItem) {\n if (formItem.name === \'id\') {\n formItem.value = sampleId;\n }\n\n return formItem;\n });\n } else {\n formData = form;\n }\n\n var options = {\n $atcButton: this.$productSampleButton,\n settings: {\n moneyFormat: this.settings.money_format,\n cartRedirection: this.settings.cart_redirection\n },\n isSample: !!sampleId\n };\n _AddToCartFlyout__WEBPACK_IMPORTED_MODULE_3__["default"].init(formData, this.product, options, this.atcCallbacks);\n }\n }]);\n\n return ProductDetails;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL1Byb2R1Y3REZXRhaWxzLmpzPzFhMmQiXSwibmFtZXMiOlsiUHJvZHVjdERldGFpbHMiLCJvcHRpb25zIiwiJHdpbmRvdyIsIiQiLCJ3aW5kb3ciLCIkZm9ybUFyZWEiLCIkZ2FsbGVyeSIsIiRkZXRhaWxzIiwiY29udGV4dCIsInNldHRpbmdzIiwicHJvZHVjdCIsInVzZUhpc3RvcnkiLCJ2YXJpYW50SGVscGVyIiwiYXRjQ2FsbGJhY2tzIiwiJGZvcm0iLCJmaW5kIiwiJHByb2R1Y3RBdGNCdXR0b24iLCIkcHJvZHVjdFNhbXBsZUJ1dHRvbiIsIiRwcm9kdWN0VmFyaWFudHMiLCIkcHJvZHVjdE9wdGlvbnMiLCJkZXRhaWxzTGluayIsInF1ZXJ5U2VsZWN0b3IiLCJkZXRhaWxzQmFzZUhyZWYiLCJnZXRBdHRyaWJ1dGUiLCJ2YXJpYW50RmllbGRzIiwiJHByaWNlIiwiJHByaWNlTW9uZXkiLCIkY29tcGFyZUF0UHJpY2UiLCIkY29tcGFyZUF0UHJpY2VNb25leSIsIiRiYWRnZSIsIiRiYWRnZU1vbmV5U2F2ZWQiLCIkYmFkZ2VQZXJjZW50U2F2ZWQiLCIkc2t1IiwiZm9ybXMiLCJGb3JtcyIsImdhbGxlcnkiLCJQcm9kdWN0R2FsbGVyeSIsIl9iaW5kRXZlbnRzIiwiX2luaXRPcHRpb25zIiwib2ZmIiwic2VjdGlvbl9pZCIsInVubG9hZCIsInZhcmlhbnRJZCIsInNlbGVjdFZhcmlhbnQiLCJvbiIsImV2ZW50IiwiZGF0YSIsIl9zd2l0Y2hWYXJpYW50IiwiX0FkZFRvQ2FydEZseW91dCIsIl9BZGRTYW1wbGVUb0NhcnQiLCJsZW5ndGgiLCJTaG9waWZ5VmFyaWFudHMiLCJtaXhlZENvbnRyb2xzIiwic2VsZWN0ZWRWYXJpYW50U2t1IiwidmFsIiwiX3VwZGF0ZVNhbXBsZUJ1dHRvbiIsInZhcmlhbnQiLCJmaXJzdExvYWQiLCJ1cmwiLCJsb2NhdGlvbiIsIm9yaWdpbiIsImhhbmRsZSIsInBhcmFtIiwiaWQiLCJocmVmIiwidmFyaWFudFNrdSIsImRpc2FibGVkU2t1cyIsInRvU3RyaW5nIiwiaW5jbHVkZXMiLCJhdHRyIiwicHJldmVudERlZmF1bHQiLCJmb3JtRGF0YSIsInNlcmlhbGl6ZUFycmF5IiwiJGF0Y0J1dHRvbiIsIm1vbmV5Rm9ybWF0IiwibW9uZXlfZm9ybWF0IiwiY2FydFJlZGlyZWN0aW9uIiwiY2FydF9yZWRpcmVjdGlvbiIsIkFkZFRvQ2FydEZseW91dCIsImluaXQiLCJzcGxpdCIsImZvcm0iLCJzYW1wbGVJZCIsIm1hcCIsImZvcm1JdGVtIiwibmFtZSIsInZhbHVlIiwiaXNTYW1wbGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7SUFFcUJBLGM7OztBQUNuQiwwQkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUNuQixTQUFLQyxPQUFMLEdBQWVDLDZDQUFDLENBQUNDLE1BQUQsQ0FBaEI7QUFDQSxTQUFLQyxTQUFMLEdBQWlCSixPQUFPLENBQUNJLFNBQXpCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQkwsT0FBTyxDQUFDSyxRQUF4QjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0JOLE9BQU8sQ0FBQ00sUUFBeEI7QUFDQSxTQUFLQyxPQUFMLEdBQWVQLE9BQU8sQ0FBQ08sT0FBdkI7QU
1FDQSxTQUFLQyxRQUFMLEdBQWdCUixPQUFPLENBQUNRLFFBQXhCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlVCxPQUFPLENBQUNTLE9BQXZCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQlYsT0FBTyxDQUFDVSxVQUExQjtBQUVBLFNBQUtDLGFBQUwsR0FBcUIsSUFBckI7QUFFQSxTQUFLQyxZQUFMLEdBQW9CWixPQUFPLENBQUNZLFlBQTVCLENBWm1CLENBY25COztBQUNBLFNBQUtDLEtBQUwsR0FBYSxLQUFLVCxTQUFMLENBQWVVLElBQWYsQ0FBb0IscUJBQXBCLENBQWI7QUFDQSxTQUFLQyxpQkFBTCxHQUF5QixLQUFLWCxTQUFMLENBQWVVLElBQWYsQ0FBb0Isb0JBQXBCLENBQXpCO0FBQ0EsU0FBS0Usb0JBQUwsR0FBNEIsS0FBS1osU0FBTCxDQUFlVSxJQUFmLENBQzFCLDJCQUQwQixDQUE1QjtBQUdBLFNBQUtHLGdCQUFMLEdBQXdCLEtBQUtKLEtBQUwsQ0FBV0MsSUFBWCxDQUFnQixpQkFBaEIsQ0FBeEI7QUFDQSxTQUFLSSxlQUFMLEdBQXVCLEtBQUtMLEtBQUwsQ0FBV0MsSUFBWCxDQUFnQix1QkFBaEIsQ0FBdkI7QUFDQSxTQUFLSyxXQUFMLEdBQW1CLEtBQUtmLFNBQUwsQ0FBZSxDQUFmLEVBQWtCZ0IsYUFBbEIsQ0FDakIsNkJBRGlCLENBQW5COztBQUdBLFFBQUksS0FBS0QsV0FBVCxFQUFzQjtBQUNwQixXQUFLRSxlQUFMLEdBQXVCLEtBQUtGLFdBQUwsQ0FBaUJHLFlBQWpCLENBQThCLE1BQTlCLENBQXZCO0FBQ0Q7O0FBRUQsU0FBS0MsYUFBTCxHQUFxQjtBQUNuQkMsWUFBTSxFQUFFLEtBQUtsQixRQUFMLENBQWNRLElBQWQsQ0FBbUIsY0FBbkIsQ0FEVztBQUVuQlcsaUJBQVcsRUFBRSxLQUFLbkIsUUFBTCxDQUFjUSxJQUFkLENBQW1CLGdDQUFuQixDQUZNO0FBR25CWSxxQkFBZSxFQUFFLEtBQUtwQixRQUFMLENBQWNRLElBQWQsQ0FBbUIseUJBQW5CLENBSEU7QUFJbkJhLDBCQUFvQ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UEsVUFBSVcsUUFBSixFQUFjO0FBQ1pYLGdCQUFRLEdBQUdVLElBQUksQ0FBQ0UsR0FBTCxDQUFTLFVBQUFDLFFBQVEsRUFBSTtBQUM5QixjQUFJQSxRQUFRLENBQUNDLElBQVQsS0FBa0IsSUFBdEIsRUFBNEI7QU
1FDMUJELG9CQUFRLENBQUNFLEtBQVQsR0FBaUJKLFFBQWpCO0FBQ0Q7O0FBQ0QsaUJBQU9FLFFBQVA7QUFDRCxTQUxVLENBQVg7QUFNRCxPQVBELE1BT087QUFDTGIsZ0JBQVEsR0FBR1UsSUFBWDtBQUNEOztBQUVELFVBQU1oRixPQUFPLEdBQUc7QUFDZHdFLGtCQUFVLEVBQUUsS0FBS3hELG9CQURIO0FBRWRSLGdCQUFRLEVBQUU7QUFDUmlFLHFCQUFXLEVBQUUsS0FBS2pFLFFBQUwsQ0FBY2tFLFlBRG5CO0FBRVJDLHlCQUFlLEVBQUUsS0FBS25FLFFBQUwsQ0FBY29FO0FBRnZCLFNBRkk7QUFNZFUsZ0JBQVEsRUFBRSxDQUFDLENBQUNMO0FBTkUsT0FBaEI7QUFTQUosOERBQWUsQ0FBQ0MsSUFBaEIsQ0FBcUJSLFFBQXJCLEVBQStCLEtBQUs3RCxPQUFwQyxFQUE2Q1QsT0FBN0MsRUFBc0QsS0FBS1ksWUFBM0Q7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvUHJvZHVjdERldGFpbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IFNob3BpZnlWYXJpYW50cyBmcm9tICdzaG9waWZ5LXZhcmlhbnRzJztcbmltcG9ydCBGb3JtcyBmcm9tICcuLi9Gb3Jtcyc7XG5pbXBvcnQgQWRkVG9DYXJ0Rmx5b3V0IGZyb20gJy4vQWRkVG9DYXJ0Rmx5b3V0JztcbmltcG9ydCBQcm9kdWN0R2FsbGVyeSBmcm9tICcuL1Byb2R1Y3RHYWxsZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdERldGFpbHMge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy4kd2luZG93ID0gJCh3aW5kb3cpO1xuICAgIHRoaXMuJGZvcm1BcmVhID0gb3B0aW9ucy4kZm9ybUFyZWE7XG4gICAgdGhpcy4kZ2FsbGVyeSA9IG9wdGlvbnMuJGdhbGxlcnk7XG4gICAgdGhpcy4kZGV0YWlscyA9IG9wdGlvbnMuJGRldGFpbHM7XG4gICAgdGhpcy5jb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0O1xuICAgIHRoaXMuc2V0dGluZ3MgPSBvcHRpb25zLnNldHRpbmdzO1xuICAgIHRoaXMucHJvZHVjdCA9IG9wdGlvbnMucHJvZHVjdDtcbiAgICB0aGlzLnVzZUhpc3RvcnkgPSBvcHRpb25zLnVzZUhpc3Rvcnk7XG5cbiAgICB0aGlzLnZhcmlhbnRIZWxwZXIgPSBudWxsO1xuXG4gICAgdGhpcy5hdGNDYWxsYmFja3MgPSBvcHRpb25zLmF0Y0NhbGxiYWNrcztcblxuICAgIC8vIEZvcm1cbiAgICB0aGlzLiRmb3JtID0gdGhpcy4kZm9ybUFyZWEuZmluZCgnW2RhdGEtcHJvZHVjdC1mb3JtXScpO1xuICAgIHRoaXMuJHByb2R1Y3RBdGNCdXR0b24gPSB0aGlzLiRmb3JtQXJlYS5maW5kKCdbZGF0YS1wcm9kdWN0LWF0Y10nKTtcbiAgICB0aGlzLiRwcm9kdWN0U2FtcGxlQnV0dG9uID0gdGhpcy4kZm9ybUFyZWEuZmluZChcbiAgICAgICdbZGF0YS1wcm9kdWN0LXNhbXBsZS1hdGNdJyxcbiAgICApO1xuICAgIHRoaXMuJHByb2R1Y3RWYXJpYW50cyA9IHRoaXMuJGZvcm0uZmluZCgnW2RhdGEtdmFyaWFudHNdJyk7XG4gICAgdGhpcy4kcHJvZHVjdE9wdGlvbnMgPSB0aGlzLiRmb3JtLmZpbmQoJ1tkYXRhLXByb2R1Y3Qtb3B0aW9uXScpO1xuICAgIHRoaXMuZGV0YWlsc0xpbmsgPSB0aGlzLiRmb3JtQXJlYVswXS5xdWVyeVNlbGVjdG9yKFxuICAgICAgJ1tkYXRhLXByb2R1Y3QtZGV0YWlscy1saW5rXScsXG4gICAgKTtcbiAgICBpZiAodGhpcy5kZXRhaWxzTGluaykge1xuICAgICAgdGhpcy5kZXRhaWxzQmFzZUhyZWYgPSB0aGlzLmRldGFpbHNMaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgIH1cblxuICAgIHRoaXMudmFyaWFudEZpZWxkcyA9IHtcbiAgICAgICRwcmljZTogdGhpcy4kZGV0YWlscy5maW5kKCdbZGF0YS1wcmljZV0nKSxcbiAgICAgICRwcmljZU1vbmV5OiB0aGlzLiRkZXRhaWxzLmZpbmQoJ1tkYXRhLXByaWNlXSBbZGF0YS11bml0LXByaWNlXScpLFxuICAgICAgJGNvbXBhcmVBdFByaWNlOiB0aGlzLiRkZXRhaWxzLmZpbmQoJ1tkYXRhLXByaWNlLWNvbXBhcmUtYXRdJyksXG4gICAgICAkY29tcGFyZUF0UHJpY2VNb25leTogdGhpcy4kZGV0YWlscy5maW5kKFxuICAgICAgICAnW2RhdGEtcHJpY2UtY29tcGFyZS1hdF0gW2RhdGEtdW5pdC1wcmljZV0nLFxuICAgICAgKSxcbiAgICAgICRiYWRnZTogdGhpcy4kZGV0YWlscy5maW5kKCdbZGF0YS1iYWRnZS1zYWxlc10nKSxcbiAgICAgICRiYWRnZU1vbmV5U2F2ZWQ6IHRoaXMuJGRldGFpbHMuZmluZCgnW2RhdGEtcHJpY2UtbW9uZXktc2F2ZWRdJyksXG4gICAgICAkYmFkZ2VQZXJjZW50U2F2ZWQ6IHRoaXMuJGRldGFpbHMuZmluZCgnW2RhdGEtcHJpY2UtcGVyY2VudC1zYXZlZF0nKSxcbiAgICAgICRza3U6IHRoaXMuJGRldGFpbHMuZmluZCgnW2RhdGEtcHJvZHVjdC1za3VdJyksXG4gICAgfTtcblxuICAgIHRoaXMuZm9ybXMgPSBuZXcgRm9ybXModGhpcy4kZm9ybSk7XG4gICAgdGhpcy5nYWxsZXJ5ID0gbmV3IFByb2R1Y3RHYWxsZXJ5KG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fYmluZEV2ZW50cygpO1xuICAgIHRoaXMuX2luaXRPcHRpb25zKCk7XG4gIH1cblxuICB1bmxvYWQoKSB7XG4gICAgdGhpcy4kZm9ybS5vZmYoYC5wcm9kdWN0LWRldGFpbHMtJHt0aGlzLnNldHRpbmdzLnNlY3Rpb25faWR9YCk7XG4gICAgdGhpcy4kd2luZG93Lm9mZihgLnByb2R1Y3QtZGV0YWlscy0ke3RoaXMuc2V0dGluZ3Muc2VjdGlvbl9pZH1gKTtcbiAgICB0aGlzLmZvcm1zLnVubG9hZCgpO1xuXG4gICAgaWYgKHRoaXMudmFyaWFudEhlbHBlcikge1xuICAgICAgdGhpcy52YXJpYW50SGVscGVyLnVubG9hZCgpO1xuICAgIH1cblxuICAgIHRoaXMuZ2FsbGVyeS51bmxvYWQoKTtcbiAgfVxuXG4gIHNlbGVjdFZhcmlhbnQodmFyaWFudElkKSB7XG4gICAgaWYgKHZhcmlhbnRJZCkge1xuICAgICAgdGhpcy52YXJpYW50SGVscGVyLnNlbGVjdFZhcmlhbnQodmFyaWFudElkKTtcbiAgICB9XG4gIH1cblxuICBfYmluZEV2ZW50cygpIHtcbiAgICB0aGlzLiR3aW5kb3cub24oYHNob3BpZnktdmFyaWFudHM6c3dpdGNoLXZhcmlhbnQucHJvZHVjdC1kZXRhaWxzLSR7dGhpcy5zZXR0aW5ncy5zZWN0aW9uX2lkfWAsIChldmVudCwgZGF0YSkgPT4gdGhpcy5fc3dpdGNoVmFyaWFudChldmVudCwgZGF0YSkpO1xuICAgIHRoaXMuJGZvcm0ub24oYHN1Ym1pdC5wcm9kdWN0LWRldGFpbHMtJHt0aGlzLnNldHRpbmdzLnNlY3Rpb25faWR9YCwgZXZlbnQgPT4ge1xuICAgICAgdGhpcy5fQWRkVG9DYXJ0Rmx5b3V0KGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLiRmb3JtXG4gICAgICAuZmluZCgnW2RhdGEtcHJvZHVjdC1zYW1wbGUtYXRjXScpXG4gICAgICAub24oJ2NsaWNrJywgZXZlbnQgPT4gdGhpcy5fQWRkU2FtcGxlVG9DYXJ0KGV2ZW50KSk7XG4gIH1cblxuICBfaW5pdE9wdGlvbnMoKSB7XG4gICAgaWYgKCF0aGlzLiRwcm9kdWN0VmFyaWFudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52YXJpYW50SGVscGVyID0gbmV3IFNob3BpZnlWYXJpYW50cyhcbiAgICAgIHRoaXMucHJvZHVjdCxcbiAgICAgIHRoaXMuJHByb2R1Y3RWYXJpYW50cyxcbiAgICAgIHRoaXMuJHByb2R1Y3RPcHRpb25zLFxuICAgICAgeyBtaXhlZENvbnRyb2xzOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIGlmICh0aGlzLiRwcm9kdWN0U2FtcGxlQnV0dG9uLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRWYXJpYW50U2t1ID0gJChcbiAgICAgICAgJ1tkYXRhLWhpZGRlbi1wcm9wZXJ0aWVzLXNlbGVjdGVkLXZhcmlhbnQtc2t1XScsXG4gICAgICApLnZhbCgpO1xuICAgICAgdGhpcy5fdXBkYXRlU2FtcGxlQnV0dG9uKHNlbGVjdGVkVmFyaWFudFNrdSk7XG4gICAgfVxuICB9XG5cbiAgX3N3aXRjaFZhcmlhbnQoZXZlbnQsIGRhdGEpIHtcbiAgICBpZiAoZGF0YS5wcm9kdWN0ICE9PSB0aGlzLnByb2R1Y3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHZhcmlhbnQsIGZpcnN0TG9hZCB9ID0gZGF0YTtcblxuICAgIGlmIChmaXJzdExvYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9wcm9k
1dWN0cy8ke3RoaXMucHJvZHVjdC5oYW5kbGV9PyR7JC5wYXJhbSh7IHZhcmlhbnQ6IHZhcmlhbnQuaWQgfSl9YDtcblxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICB9XG5cbiAgX3VwZGF0ZVNhbXBsZUJ1dHRvbih2YXJpYW50U2t1KSB7XG4gICAgaWYgKCF0aGlzLiRwcm9kdWN0U2FtcGxlQnV0dG9uLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2FibGVkU2t1cyA9IHRoaXMuJHByb2R1Y3RTYW1wbGVCdXR0b25cbiAgICAgIC5kYXRhKCdkaXNhYmxlZC1za3VzJykudG9TdHJpbmcoKTtcblxuICAgIGlmIChkaXNhYmxlZFNrdXMuaW5jbHVkZXModmFyaWFudFNrdSkpIHtcbiAgICAgIHRoaXMuJHByb2R1Y3RTYW1wbGVCdXR0b24uYXR0cignZGlzYWJsZWQnLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4kcHJvZHVjdFNhbXBsZUJ1dHRvbi5hdHRyKCdkaXNhYmxlZCcsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBfQWRkVG9DYXJ0Rmx5b3V0KGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy4kZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICRhdGNCdXR0b246IHRoaXMuJHByb2R1Y3RBdGNCdXR0b24sXG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICBtb25leUZvcm1hdDogdGhpcy5zZXR0aW5ncy5tb25leV9mb3JtYXQsXG4gICAgICAgIGNhcnRSZWRpcmVjdGlvbjogdGhpcy5zZXR0aW5ncy5jYXJ0X3JlZGlyZWN0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgQWRkVG9DYXJ0Rmx5b3V0LmluaXQoZm9ybURhdGEsIHRoaXMucHJvZHVjdCwgb3B0aW9ucywgdGhpcy5hdGNDYWxsYmFja3MpO1xuICB9XG5cbiAgX0FkZFNhbXBsZVRvQ2FydChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBkaXNhYmxlZFNrdXMgPSB0aGlzLiRwcm9kdWN0U2FtcGxlQnV0dG9uXG4gICAgICAuZGF0YSgnZGlzYWJsZWQtc2t1cycpXG4gICAgICAuc3BsaXQoJywnKTtcblxuICAgIGNvbnN0IHZhcmlhbnRTa3UgPSAkKCdbZGF0YS1oaWRkZW4tcHJvcGVydGllcy1zZWxlY3RlZC12YXJpYW50LXNrdV0nKS52YWwoKTtcblxuICAgIGlmIChkaXNhYmxlZFNrdXMuaW5jbHVkZXModmFyaWFudFNrdSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtID0gdGhpcy4kZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgIGNvbnN0IHNhbXBsZUlkID0gJCgnW2RhdGEtaGlkZGVuLXByb3BlcnRpZXMtc2FtcGxlXScpLnZhbCgpO1xuICAgIGxldCBmb3JtRGF0YSA9IFtdO1xuXG4gICAgaWYgKHNhbXBsZUlkKSB7XG4gICAgICBmb3JtRGF0YSA9IGZvcm0ubWFwKGZvcm1JdGVtID0+IHtcbiAgICAgICAgaWYgKGZvcm1JdGVtLm5hbWUgPT09ICdpZCcpIHtcbiAgICAgICAgICBmb3JtSXRlbS52YWx1ZSA9IHNhbXBsZUlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtSXRlbTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtRGF0YSA9IGZvcm07XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICRhdGNCdXR0b246IHRoaXMuJHByb2R1Y3RTYW1wbGVCdXR0b24sXG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICBtb25leUZvcm1hdDogdGhpcy5zZXR0aW5ncy5tb25leV9mb3JtYXQsXG4gICAgICAgIGNhcnRSZWRpcmVjdGlvbjogdGhpcy5zZXR0aW5ncy5jYXJ0X3JlZGlyZWN0aW9uLFxuICAgICAgfSxcbiAgICAgIGlzU2FtcGxlOiAhIXNhbXBsZUlkLFxuICAgIH07XG5cbiAgICBBZGRUb0NhcnRGbHlvdXQuaW5pdChmb3JtRGF0YSwgdGhpcy5wcm9kdWN0LCBvcHRpb25zLCB0aGlzLmF0Y0NhbGxiYWNrcyk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/components/ProductDetails.js\n') },
1"./source/scripts/components/ProductGallery.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ProductGallery; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flickity */ \"./node_modules/flickity/js/index.js\");\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flickity__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Layout */ \"./source/scripts/Layout.js\");\n/* harmony import */ var _helpers_scrollLeft__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers/scrollLeft */ \"./source/scripts/helpers/scrollLeft.js\");\n/* harmony import */ var _helpers_flickityHelper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../helpers/flickityHelper */ \"./source/scripts/helpers/flickityHelper.js\");\n/* harmony import */ var _Video__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Video */ \"./source/scripts/components/Video.js\");\n/* harmony import */ var _ProductZoom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ProductZoom */ \"./source/scripts/components/ProductZoom.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\nvar ProductGallery =\n/*#__PURE__*/\nfunction () {\n function ProductGallery(options) {\n _classCallCheck(this, ProductGallery);\n\n this.$gallery = options.$gallery;\n this.settings = options.settings;\n this.isQuickshop = options.isQuickshop || false; // Gallery\n\n this.flickity = null;\n this.slider = '[data-product-slider]';\n this.$slider = this.$gallery.find(this.slider);\n this.slides = '[data-product-image]';\n this.$slides = this.$gallery.find(this.slides);\n this.slideImages = this.$slider[0].querySelectorAll('[data-rimg]');\n this.$sliderPagination = this.$gallery.find('[data-product-slider-pagination]');\n this.$paginationTrigger = this.$gallery.find('[data-product-thumbnail]');\n this.productZoom = null;\n this.lazyLoad = !document.querySelector('[data-lazy-loading-disabled]');\n\n if (this.settings.enable_image_zoom) {\n this.productZoom = new _ProductZoom__WEBPACK_IMPORTED_MODULE_6__[\"default\"](options);\n }\n\n this.videos = {};\n this.videoSlides = this.$slider[0].querySelectorAll('[data-product-image-video]'); // Re-initialise gallery when crossing breakpoints if needed\n\n this._onUpdateGallery = this._onUpdateGallery.bind(this);\n _Layout__WEBPACK_IMPORTED_MODULE_2__[\"default\"].onBreakpointChange(this._onUpdateGallery);\n this.slideImageLoaded = this._onSlideImageLoaded.bind(this);\n this.variantChange = this._onVariantChange.bind(this);\n\n if (this.isQuickshop) {\n this.$gallery.trigger('theme:rimg:watch');\n }\n\n this._init();\n }\n\n _createClass(ProductGallery, [{\n key: \"unload\",\n value: function unload() {\n for (var i = 0; i < this.slideImages.length; i += 1) {\n var eventName = this.lazyLoad ? 'rimg:load' : 'load';\n this.slideImages[i].removeEventListener(eventName, this.slideImageLoaded);\n }\n\n if (this.productZoom) {\n this.productZoom.unload();\n }\n\n if (this.isQuickshop) {\n this.$gallery.trigger('theme:rimg:unwatch');\n }\n\n if (this.isQuickshop) {\n this._onUpdateGallery();\n }\n\n _Layout__WEBPACK_IMPORTED_MODULE_2__[\"default\"].offBreakp
1ointChange(this._onUpdateGallery);\n\n this._unloadGallery();\n }\n }, {\n key: \"_init\",\n value: function _init() {\n for (var i = 0; i < this.slideImages.length; i += 1) {\n var slideImage = this.slideImages[i];\n\n if (this.lazyLoad) {\n slideImage.addEventListener('rimg:load', this.slideImageLoaded);\n } else if (slideImage.complete) {\n this.slideImageLoaded();\n } else {\n slideImage.addEventListener('load', this.slideImageLoaded);\n }\n }\n\n if (this.videoSlides.length) {\n for (var _i = 0; _i < this.videoSlides.length; _i += 1) {\n var videoSlide = this.videoSlides[_i];\n var slideId = videoSlide.getAttribute('data-product-image');\n var videoEl = videoSlide.querySelector('[data-video]');\n this.videos[slideId] = new _Video__WEBPACK_IMPORTED_MODULE_5__[\"default\"](videoEl);\n }\n }\n\n if (this.$slides.length) {\n this._initGallery();\n }\n }\n /**\n * Make sure Flickity updates viewport height when images load in\n * @private\n */\n\n }, {\n key: \"_onSlideImageLoaded\",\n value: function _onSlideImageLoaded() {\n Object(_helpers_flickityHelper__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(this.flickity);\n }\n }, {\n key: \"_unloadGallery\",\n value: function _unloadGallery() {\n if (this.flickity) {\n for (var i = 0; i < this.videos.length; i += 1) {\n this.videos[i].unload();\n }\n\n this.$paginationTrigger.off('.gallery');\n this.flickity.destroy();\n this.flickity = null;\n this.$slider.find(this.slides).attr('style', '');\n }\n }\n }, {\n key: \"_onUpdateGallery\",\n value: function _onUpdateGallery() {\n /**\n Do not reset the gallery if we are taking an element full-screen.\n This function is called by layout.onBreakpointChange, a side effect\n of going full-screen with a video. If there is a full-screen element\n just return out of this function.\n */\n if (document.fullscreenElement !== null) {\n return;\n }\n\n this._unloadGallery();\n\n this._initGallery();\n }\n /**\n * Update gallery on variant change\n *\n * @param variant\n * @property {Object} options.featured_image - Featured image information\n * @private\n */\n\n }, {\n key: \"_onVariantChange\",\n value: function _onVariantChange(variant) {\n if (!variant || !variant.featured_image || !this.flickity) {\n return;\n }\n\n var index = this.$slider.find(\"[data-product-image=\".concat(variant.featured_image.id, \"]\")).attr('data-product-image-index');\n this.flickity.select(index, false, false);\n }\n }, {\n key: \"_initGallery\",\n value: function _initGallery() {\n var $selectedImage = this.$slider.find('.image--selected'); // Options shared on Desktop and Mobile\n\n var flickityOptions = {\n autoPlay: 0,\n accessibility: true,\n adaptiveHeight: true,\n cellAlign: 'left',\n cellSelector: this.slides,\n pageDots: false,\n prevNextButtons: false,\n wrapAround: true\n }; // Mobile only options\n\n var optionsMobile = {\n draggable: true,\n friction: 0.8,\n selectedAttraction: 0.2\n }; // Desktop only options\n\n var optionsDesktop = {\n draggable: false\n };\n\n if (_Layout__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isBreakpoint('XS')) {\n flickityOptions = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, optionsMobile, flickityOptions);\n } else {\n flickityOptions = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, optionsDesktop, flickityOptions);\n } // If a variant has an image pre-selected, start the slideshow at that image\n // If the slideshow has been re-initalised across a break point, slideshow\n // restarts at same slide\n\n\n if ($selectedImage.length) {\n var initialIndex = parseInt($selectedImage.attr('data-product-image-index'), 10);\n flickityOptions = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, {\n initialIndex: initialIndex\n }, flickityOptions);\n }\n\n // Only initialize the carousel on mobile\n if (window.innerWidth < 720
1){ this.flickity = new flickity__WEBPACK_IMPORTED_MODULE_1___default.a(this.$slider[0], flickityOptions);\n\n this._bindGallery();\n\n this._handleGalleryVideos();\n } }\n }, {\n key: \"_bindGallery\",\n value: function _bindGallery() {\n var _this = this;\n\n this.flickity.on('select', function () {\n _this._updateActiveSlide(_this.flickity.selectedIndex);\n\n _this._handleGalleryVideos();\n });\n this.$paginationTrigger.on('click.gallery', function (event) {\n event.preventDefault();\n var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget);\n\n _this.flickity.select($target.attr('data-product-thumbnail'), false, false);\n });\n }\n /**\n * Handle gallery videos\n * - Pause video if is not active slide\n * - Play video if is active slide, and is autoplay\n *\n * @private\n */\n\n }, {\n key: \"_handleGalleryVideos\",\n value: function _handleGalleryVideos() {\n var _this2 = this;\n\n if (!this.flickity.selectedElement) {\n return;\n }\n\n var slideId = parseInt(this.flickity.selectedElement.getAttribute('data-product-image'), 10);\n Object.keys(this.videos).forEach(function (key) {\n var videoKey = parseInt(key, 10); // Pause inactive slide videos\n\n if (slideId !== videoKey) {\n _this2.videos[videoKey].onPauseClick();\n } // Play video if is selected, and auto play enabled\n\n\n if (slideId === videoKey && _this2.settings.enable_video_autoplay) {\n _this2.videos[videoKey].autoplay();\n }\n });\n }\n /**\n * Adds a non-flickity active class to thumbnails, and main
1slideshow\n * - Is used on re-init across breakpoints\n * - Is used to show the active thumbnail in the pagination\n *\n * @param index\n * @private\n */\n\n }, {\n key: \"_updateActiveSlide\",\n value: function _updateActiveSlide(index) {\n var $newSlide = this.$slider.find(\"[data-product-image-index=\".concat(index, \"]\"));\n var $newThumbnail = this.$sliderPagination.find(\"[data-product-thumbnail=\".concat(index, \"]\"));\n $newSlide.addClass('image--selected').attr('aria-hidden', 'false').siblings('.image--selected').removeClass('image--selected').attr('aria-hidden', 'true');\n $newThumbnail.addClass('thumbnail--selected').siblings('.thumbnail--selected').removeClass('thumbnail--selected');\n\n if (_Layout__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isBreakpoint('XS')) {\n Object(_helpers_scrollLeft__WEBPACK_IMPORTED_MODULE_3__[\"default\"])($newThumbnail);\n }\n\n if (this.settings.enable_image_zoom) {\n this.productZoom.enableZoom(index);\n }\n }\n }]);\n\n return ProductGallery;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL1Byb2R1Y3RHYWxsZXJ5LmpzPzFjMGYiXSwibmFtZXMiOlsiUHJvZHVjdEdhbGxlcnkiLCJvcHRpb25zIiwiJGdhbGxlcnkiLCJzZXR0aW5ncyIsImlzUXVpY2tzaG9wIiwiZmxpY2tpdHkiLCJzbGlkZXIiLCIkc2xpZGVyIiwiZmluZCIsInNsaWRlcyIsIiRzbGlkZXMiLCJzbGlkZUltYWdlcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCIkc2xpZGVyUGFnaW5hdGlvbiIsIiRwYWdpbmF0aW9uVHJpZ2dlciIsInByb2R1Y3Rab29tIiwibGF6eUxvYWQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJlbmFibGVfaW1hZ2Vfem9vbSIsIlByb2R1Y3Rab29tIiwidmlkZW9zIiwidmlkZW9TbGlkZXMiLCJfb25VcGRhdGVHYWxsZXJ5IiwiYmluZCIsImxheW91dCIsIm9uQnJlYWtwb2ludENoYW5nZSIsInNsaWRlSW1hZ2VMb2FkZWQiLCJfb25TbGlkZUltYWdlTG9hZGVkIiwidmFyaWFudENoYW5nZSIsIl9vblZhcmlhbnRDaGFuZ2UiLCJ0cmlnZ2VyIiwiX2luaXQiLCJpIiwibGVuZ3RoIiwiZXZlbnROYW1lIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVubG9hZCIsIm9mZkJyZWFrcG9pbnRDaGFuZ2UiLCJfdW5sb2FkR2FsbGVyeSIsInNsaWRlSW1hZ2UiLCJhZGRFdmVudExpc3RlbmVyIiwiY29tcGxldGUiLCJ2aWRlb1NsaWRlIiwic2xpZGVJZCIsImdldEF0dHJpYnV0ZSIsInZpZGVvRWwiLCJWaWRlbyIsIl9pbml0R2FsbGVyeSIsInJlc2l6ZUZsaWNraXR5SWZOZWVkZWQiLCJvZmYiLCJkZXN0cm95IiwiYXR0ciIsImZ1bGxzY3JlZW5FbGVtZW50IiwidmFyaWFudCIsImZlYXR1cmVkX2ltYWdlIiwiaW5kZXgiLCJpZCIsInNlbGVjdCIsIiRzZWxlY3RlZEltYWdlIiwiZmx
1pY2tpdHlPcHRpb25zIiwiYXV0b1BsYXkiLCJhY2Nlc3NpYmlsaXR5IiwiYWRhcHRpdmVIZWlnaHQiLCJjZWxsQWxpZ24iLCJjZWxsU2VsZWN0b3IiLCJwYWdlRG90cyIsInByZXZOZXh0QnV0dG9ucyIsIndyYXBBcm91bmQiLCJvcHRpb25zTW9iaWxlIiwiZHJhZ2dhYmxlIiwiZnJpY3Rpb24iLCJzZWxlY3RlZEF0dHJhY3Rpb24iLCJvcHRpb25zRGVza3RvcCIsImlzQnJlYWtwb2ludCIsIiQiLCJleHRlbmQiLCJpbml0aWFsSW5kZXgiLCJwYXJzZUludCIsIkZsaWNraXR5IiwiX2JpbmRHYWxsZXJ5IiwiX2hhbmRsZUdhbGxlcnlWaWRlb3MiLCJvbiIsIl91cGRhdGVBY3RpdmVTbGlkZSIsInNlbGVjdGVkSW5kZXgiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwiJHRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJzZWxlY3RlZEVsZW1lbnQiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInZpZGVvS2V5Iiwib25QYXVzZUNsaWNrIiwiZW5hYmxlX3ZpZGVvX2F1dG9wbGF5IiwiYXV0b3BsYXkiLCIkbmV3U2xpZGUiLCIkbmV3VGh1bWJuYWlsIiwiYWRkQ2xhc3MiLCJzaWJsaW5ncyIsInJlbW92ZUNsYXNzIiwic2Nyb2xsTGVmdCIsImVuYWJsZVpvb20iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBRXFCQSxjOzs7QUFDbkIsMEJBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFDbkIsU0FBS0MsUUFBTCxHQUFnQkQsT0FBTyxDQUFDQyxRQUF4QjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0JGLE9BQU8sQ0FBQ0UsUUFBeEI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CSCxPQUFPLENBQUNHLFdBQVIsSUFBdUIsS0FBMUMsQ0FIbUIsQ0FLbkI7O0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixJQUFoQjtBQUNBLFNBQUtDLE1BQUwsR0FBYyx1QkFBZDtBQUNBLFNBQUtDLE9BQUwsR0FBZSxLQUFLTCxRQUFMLENBQWNNLElBQWQsQ0FBbUIsS0FBS0YsTUFBeEIsQ0FBZjtBQUNBLFNBQUtHLE1BQUwsR0FBYyxzQkFBZDtBQUNBLFNBQUtDLE9BQUwsR0FBZSxLQUFLUixRQUFMLENBQWNNLElBQWQsQ0FBbUIsS0FBS0MsTUFBeEIsQ0FBZjtBQUNBLFNBQUtFLFdBQUwsR0FBbUIsS0FBS0osT0FBTCxDQUFhLENBQWIsRUFBZ0JLLGdCQUFoQixDQUFpQyxhQUFqQyxDQUFuQjtBQUNBLFNBQUtDLGlCQUFMLEdBQXlCLEtBQUtYLFFBQUwsQ0FBY00sSUFBZCxDQUN2QixrQ0FEdUIsQ0FBekI7QUFHQSxTQUFLTSxrQkFBTCxHQUEwQixLQUFLWixRQUFMLENBQWNNLElBQWQsQ0FBbUIsMEJBQW5CLENBQTFCO0FBQ0EsU0FBS08sV0FBTCxHQUFtQixJQUFuQjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0IsQ0FBQ0MsUUFBUSxDQUFDQyxhQUFULENBQXVCLDhCQUF2QixDQUFqQjs7QUFFQSxRQUFJLEtBQUtmLFFBQUwsQ0FBY2dCLGlCQUFsQixFQUFxQztBQUNuQyxXQUFLSixXQUFMLEdBQW1CLElBQUlLLG9EQUFKLENBQWdCbkIsT0FBaEIsQ0FBbkI7QUFDRDs7QUFFRCxTQUFLb0IsTUFBTCxHQUFjLEVBQWQ7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEtBQUtmLE9BQUwsQ0FBYSxDQUFiLEVBQWdCSyxnQkFBaEIsQ0FDakIsNEJBRGlCLENBQW5CLENBeEJtQixDQTRCbkI7O0FBQ0EsU0FBS1csZ0JBQUwsR0FBd0IsS0FBS0EsZ0JBQUwsQ0FBc0JDLElBQXRCLENBQTJCLElBQTNCLENBQXhCO0FBQ0FDLG1EQUFNLENBQUNDLGtCQUFQLENBQTBCLEtBQUtILGdCQUEvQjtBQUVBLFNBQUtJLGdCQUFMLEdBQXdCLEtBQUtDLG1CQUFMLENBQXlCSixJQUF6QixDQUE4QixJQUE5QixDQUF4QjtBQUNBLFNBQUtLLGFBQUwsR0FBcUIsS0FBS0MsZ0JBQUwsQ0FBc0JOLElBQXRCLENBQTJCLElBQTNCLENBQXJCOztBQUVBLFFBQUksS0FBS3BCLFdBQVQsRUFBc0I7QUFDcEIsV0FBS0YsUUFBTCxDQUFjNkIsT0FBZCxDQUFzQixrQkFBdEI7QUFDRDs7QUFFRCxTQUFLQyxLQUFMO0FBQ0Q7Ozs7NkJBRVE7QUFDUCxXQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcsS0FBS3RCLFdBQUwsQ0FBaUJ1QixNQUFyQyxFQUE2Q0QsQ0FBQyxJQUFJLENBQWxELEVBQXFEO0FBQ25ELFlBQU1FLFNBQVMsR0FBRyxLQUFLbkIsUUFBTCxHQUFnQixXQUFoQixHQUE4QixNQUFoRDtBQUNBLGFBQUtMLFdBQUwsQ0FBaUJzQixDQUFqQixFQUFvQkcsbUJBQXBCLENBQXdDRCxTQUF4QyxFQUFtRCxLQUFLUixnQkFBeEQ7QUFDRDs7QUFFRCxVQUFJLEtBQUtaLFdBQVQsRUFBc0I7QUFDcEIsYUFBS0EsV0FBTCxDQUFpQnNCLE1BQWpCO0FBQ0Q7O0FBRUQsVUFBSSxLQUFLakMsV0FBVCxFQUFzQjtBQUNwQixhQUFLRixRQUFMLENBQWM2QixPQUFkLENBQXNCLG9CQUF0QjtBQUNEOztBQUVELFVBQUksS0FBSzNCLFdBQVQsRUFBc0I7QUFDcEIsYUFBS21CLGdCQUFMO0FBQ0Q7O0FBRURFLHFEQUFNLENBQUNhLG1CQUFQLENBQTJCLEtBQUtmLGdCQUFoQzs7QUFFQSxXQUFLZ0IsY0FBTDtBQUNEOzs7NEJBRU87QUFDTixXQUFLLElBQUlOLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcsS0FBS3RCLFdBQUwsQ0FBaUJ1QixNQUFyQyxFQUE2Q0QsQ0FBQyxJQUFJLENBQWxELEVBQXFEO0FBQ25ELFlBQU1PLFVBQVUsR0FBRyxLQUFLN0IsV0FBTCxDQUFpQnNCLENBQWpCLENBQW5COztBQUNBLFlBQUksS0FBS2pCLFFBQVQsRUFBbUI7QUFDakJ3QixvQkFBVSxDQUFDQyxnQkFBWCxDQUE0QixXQUE1QixFQUF5QyxLQUFLZCxnQkFBOUM7QUFDRCxTQUZELE1BRU8sSUFBSWEsVUFBVSxDQUFDRSxRQUFmLEVBQXlCO0FBQzlCLGVBQUtmLGdCQUFMO0FBQ0QsU0FGTSxNQUVBO0FBQ0xhLG9CQUFVLENBQUNDLGdCQUFYLENBQTRCLE1BQTVCLEVBQW9DLEtBQUtkLGdCQUF6QztBQUNEO0FBQ0Y7O0FBRUQsVUFBSSxLQUFLTCxXQUFMLENBQWlCWSxNQUFyQixFQUE2QjtBQUMzQixhQUFLLElBQUlELEVBQUMsR0FBRyxDQUFiLEVBQWdCQSxFQUFDLEdBQUcsS0FBS1gsV0FBTCxDQUFpQlksTUFBckMsRUFBNkNELEVBQUMsSUFBSSxDQUFsRCxFQUFxRDtBQUNuRCxjQUFNVSxVQUFVLEdBQUcsS0FBS3JCLFdBQUwsQ0FBaUJXLEVBQWpCLENBQW5CO0FBQ0EsY0FBTVcsT0FBTyxHQUFHRCxVQUFVLENBQUNFLFlBQVgsQ0FBd0Isb0JBQXhCLENBQWhCO0FBQ0EsY0FBTUMsT0FBTyxHQUFHSCxVQUFVLENBQUN6QixhQUFYLENBQXlCLGNBQXpCLENBQWhCO0FBRUEsZUFBS0csTUFBTCxDQUFZdUIsT0FBWixJQUF1QixJQUFJRyw4Q0FBSixDQUFVRCxPQUFWLENBQXZCO0FBQ0Q7QUFDRjs7QUFFRCxVQUFJLEtBQUtwQyxPQUFMLENBQWF3QixNQUFqQixFQUF5QjtBQUN2QixhQUFLYyxZQUFMO0FBQ0Q7QUFDRjtBQUVEOzs7Ozs7OzBDQUlzQjtBQUNwQkMsNkVBQXNCLENBQUMsS0FBSzVDLFFBQU4sQ0FBdEI7QUFDRDs7O3FDQUVnQjtBQUNmLFVBQUksS0FBS0EsUUFBVCxFQUFtQjtBQUNqQixhQUFLLElBQUk0QixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHLEtBQUtaLE1BQUwsQ0FBWWEsTUFBaEMsRUFBd0NELENBQUMsSUFBSSxDQUE3QyxFQUFnRDtBQUM5QyxlQUFLWixNQUFMLENBQVlZLENBQVosRUFBZUksTUFBZjtBQUNEOztBQUVELGFBQUt2QixrQkFBTCxDQUF3Qm9DLEdBQXhCLENBQTRCLFVBQTVCO0FBRUEsYUFBSzdDLFFBQUwsQ0FBYzhDLE9BQWQ7QUFDQSxhQUFLOUMsUUFBTCxHQUFnQixJQUFoQjtBQUNBLGFBQUtFLE9BQUwsQ0FBYUMsSUFBYixDQUFrQixLQUFLQyxNQUF2QixFQUErQjJDLElBQS9CLENBQW9DLE9BQXBDLEVBQTZDLEVBQTdDO0FBQ0Q7QUFDRjs7O3VDQUVrQjtBQUNqQjs7Ozs7O0FBTUEsVUFBSW5DLFFBQVEsQ0FBQ29DLGlCQUFULEtBQStCLElBQW5DLEVBQXlDO0FBQ3ZDO0FBQ0Q7O0FBRUQsV0FBS2QsY0FBTDs7QUFDQSxXQUFLUyxZQU
1FMO0FBQ0Q7QUFFRDs7Ozs7Ozs7OztxQ0FPaUJNLE8sRUFBUztBQUN4QixVQUFJLENBQUNBLE9BQUQsSUFBWSxDQUFDQSxPQUFPLENBQUNDLGNBQXJCLElBQXVDLENBQUMsS0FBS2xELFFBQWpELEVBQTJEO0FBQ3pEO0FBQ0Q7O0FBRUQsVUFBTW1ELEtBQUssR0FBRyxLQUFLakQsT0FBTCxDQUNYQyxJQURXLCtCQUNpQjhDLE9BQU8sQ0FBQ0MsY0FBUixDQUF1QkUsRUFEeEMsUUFFWEwsSUFGVyxDQUVOLDBCQUZNLENBQWQ7QUFHQSxXQUFLL0MsUUFBTCxDQUFjcUQsTUFBZCxDQUFxQkYsS0FBckIsRUFBNEIsS0FBNUIsRUFBbUMsS0FBbkM7QUFDRDs7O21DQUVjO0FBQ2IsVUFBTUcsY0FBYyxHQUFHLEtBQUtwRCxPQUFMLENBQWFDLElBQWIsQ0FBa0Isa0JBQWxCLENBQXZCLENBRGEsQ0FHYjs7QUFDQSxVQUFJb0QsZUFBZSxHQUFHO0FBQ3BCQyxnQkFBUSxFQUFFLENBRFU7QUFFcEJDLHFCQUFhLEVBQUUsSUFGSztBQUdwQkMsc0JBQWMsRUFBRSxJQUhJO0FBSXBCQyxpQkFBUyxFQUFFLE1BSlM7QUFLcEJDLG9CQUFZLEVBQUUsS0FBS3hELE1BTEM7QUFNcEJ5RCxnQkFBUSxFQUFFLEtBTlU7QUFPcEJDLHVCQUFlLEVBQUUsS0FQRztBQVFwQkMsa0JBQVUsRUFBRTtBQVJRLE9BQXRCLENBSmEsQ0FlYjs7QUFDQSxVQUFNQyxhQUFhLEdBQUc7QUFDcEJDLGlCQUFTLEVBQUUsSUFEUztBQUVwQkMsZ0JBQVEsRUFBRSxHQUZVO0FBR3BCQywwQkFBa0IsRUFBRTtBQUhBLE9BQXRCLENBaEJhLENBc0JiOztBQUNBLFVBQU1DLGNBQWMsR0FBRztBQUNyQkgsaUJBQVMsRUFBRTtBQURVLE9BQXZCOztBQUlBLFVBQUk3QywrQ0FBTSxDQUFDaUQsWUFBUCxDQUFvQixJQUFwQixDQUFKLEVBQStCO0FBQzdCZCx1QkFBZSxHQUFHZSw2Q0FBQyxDQUFDQyxNQUFGLENBQVMsRUFBVCxFQUFhUCxhQUFiLEVBQTRCVCxlQUE1QixDQUFsQjtBQUNELE9BRkQsTUFFTztBQUNMQSx1QkFBZSxHQUFHZSw2Q0FBQyxDQUFDQyxNQUFGLENBQVMsRUFBVCxFQUFhSCxjQUFiLEVBQTZCYixlQUE3QixDQUFsQjtBQUNELE9BL0JZLENBaUNiO0FBQ0E7QUFDQTs7O0FBQ0EsVUFBSUQsY0FBYyxDQUFDekIsTUFBbkIsRUFBMkI7QUFDekIsWUFBTTJDLFlBQVksR0FBR0MsUUFBUSxDQUMzQm5CLGNBQWMsQ0FBQ1AsSUFBZixDQUFvQiwwQkFBcEIsQ0FEMkIsRUFFM0IsRUFGMkIsQ0FBN0I7QUFLQVEsdUJBQWUsR0FBR2UsNkNBQUMsQ0FBQ0MsTUFBRixDQUFTLEVBQVQsRUFBYTtBQUFFQyxzQkFBWSxFQUFaQTtBQUFGLFNBQWIsRUFBK0JqQixlQUEvQixDQUFsQjtBQUNEOztBQUVELFdBQUt2RCxRQUFMLEdBQWdCLElBQUkwRSwrQ0FBSixDQUFhLEtBQUt4RSxPQUFMLENBQWEsQ0FBYixDQUFiLEVBQThCcUQsZUFBOUIsQ0FBaEI7O0FBRUEsV0FBS29CLFlBQUw7O0FBQ0EsV0FBS0Msb0JBQUw7QUFDRDs7O21DQUVjO0FBQUE7O0FBQ2IsV0FBSzVFLFFBQUwsQ0FBYzZFLEVBQWQsQ0FBaUIsUUFBakIsRUFBMkIsWUFBTTtBQUMvQixhQUFJLENBQUNDLGtCQUFMLENBQXdCLEtBQUksQ0FBQzlFLFFBQUwsQ0FBYytFLGFBQXRDOztBQUNBLGFBQUksQ0FBQ0gsb0JBQUw7QUFDRCxPQUhEO0FBS0EsV0FBS25FLGtCQUFMLENBQXdCb0UsRUFBeEIsQ0FBMkIsZUFBM0IsRUFBNEMsVUFBQUcsS0FBSyxFQUFJO0FBQ25EQSxhQUFLLENBQUNDLGNBQU47QUFDQSxZQUFNQyxPQUFPLEdBQUdaLDZDQUFDLENBQUNVLEtBQUssQ0FBQ0csYUFBUCxDQUFqQjs7QUFDQSxhQUFJLENBQUNuRixRQUFMLENBQWNxRCxNQUFkLENBQ0U2QixPQUFPLENBQUNuQyxJQUFSLENBQWEsd0JBQWIsQ0FERixFQUVFLEtBRkYsRUFHRSxLQUhGO0FBS0QsT0FSRDtBQVNEO0FBRUQ7Ozs7Ozs7Ozs7MkNBT3VCO0FBQUE7O0FBQ3JCLFVBQUksQ0FBQyxLQUFLL0MsUUFBTCxDQUFjb0YsZUFBbkIsRUFBb0M7QUFDbEM7QUFDRDs7QUFFRCxVQUFNN0MsT0FBTyxHQUFHa0MsUUFBUSxDQUN0QixLQUFLekUsUUFBTCxDQUFjb0YsZUFBZCxDQUE4QjVDLFlBQTlCLENBQTJDLG9CQUEzQyxDQURzQixFQUV0QixFQUZzQixDQUF4QjtBQUtBNkMsWUFBTSxDQUFDQyxJQUFQLENBQVksS0FBS3RFLE1BQWpCLEVBQXlCdUUsT0FBekIsQ0FBaUMsVUFBQUMsR0FBRyxFQUFJO0FBQ3RDLFlBQU1DLFFBQVEsR0FBR2hCLFFBQVEsQ0FBQ2UsR0FBRCxFQUFNLEVBQU4sQ0FBekIsQ0FEc0MsQ0FHdEM7O0FBQ0EsWUFBSWpELE9BQU8sS0FBS2tELFFBQWhCLEVBQTBCO0FBQ3hCLGdCQUFJLENBQUN6RSxNQUFMLENBQVl5RSxRQUFaLEVBQXNCQyxZQUF0QjtBQUNELFNBTnFDLENBUXRDOzs7QUFDQSxZQUFJbkQsT0FBTyxLQUFLa0QsUUFBWixJQUF3QixNQUFJLENBQUMzRixRQUFMLENBQWM2RixxQkFBMUMsRUFBaUU7QUFDL0QsZ0JBQUksQ0FBQzNFLE1BQUwsQ0FBWXlFLFFBQVosRUFBc0JHLFFBQXRCO0FBQ0Q7QUFDRixPQVpEO0FBYUQ7QUFFRDs7Ozs7Ozs7Ozs7dUNBUW1CekMsSyxFQUFPO0FBQ3hCLFVBQU0wQyxTQUFTLEdBQUcsS0FBSzNGLE9BQUwsQ0FBYUMsSUFBYixxQ0FBK0NnRCxLQUEvQyxPQUFsQjtBQUNBLFVBQU0yQyxhQUFhLEdBQUcsS0FBS3RGLGlCQUFMLENBQXVCTCxJQUF2QixtQ0FDT2dELEtBRFAsT0FBdEI7QUFJQTBDLGVBQVMsQ0FDTkUsUUFESCxDQUNZLGlCQURaLEVBRUdoRCxJQUZILENBRVEsYUFGUixFQUV1QixPQUZ2QixFQUdHaUQsUUFISCxDQUdZLGtCQUhaLEVBSUdDLFdBSkgsQ0FJZSxpQkFKZixFQUtHbEQsSUFMSCxDQUtRLGFBTFIsRUFLdUIsTUFMdkI7QUFPQStDLG1CQUFhLENBQ1ZDLFFBREgsQ0FDWSxxQkFEWixFQUVHQyxRQUZILENBRVksc0JBRlosRUFHR0MsV0FISCxDQUdlLHFCQUhmOztBQUtBLFVBQUk3RSwrQ0FBTSxDQUFDaUQsWUFBUCxDQUFvQixJQUFwQixDQUFKLEVBQStCO0FBQzdCNkIsMkVBQVUsQ0FBQ0osYUFBRCxDQUFWO0FBQ0Q7O0FBRUQsVUFBSSxLQUFLaEcsUUFBTCxDQUFjZ0IsaUJBQWxCLEVBQXFDO0FBQ25DLGFBQUtKLFdBQUwsQ0FBaUJ5RixVQUFqQixDQUE0QmhELEtBQTVCO0FBQ0Q7QUFDRiIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvUHJvZHVjdEdhbGxlcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IEZsaWNraXR5IGZyb20gJ2ZsaWNraXR5JztcbmltcG9ydCBsYXlvdXQgZnJvbSAnLi4vTGF5b3V0JztcbmltcG9ydCBzY3JvbGxMZWZ0IGZyb20gJy4uL2hlbHBlcnMvc2Nyb2xsTGVmdCc7XG5pbXBvcnQgcmVzaXplRmxpY2tpdHlJZk5lZWRlZCBmcm9tICcuLi9oZWxwZXJzL2ZsaWNraXR5SGVscGVyJztcbmltcG9ydCBWaWRlbyBmcm9tICcuL1ZpZGVvJztcbmltcG9ydCBQcm9kdWN0Wm9vbSBmcm9tICcuL1Byb2R1Y3Rab29tJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdEdhbGxlcnkge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy4kZ2FsbGVyeSA9IG9wdGlvbnMuJGdhbGxlcnk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG9wdGlvbnMuc2V0dGluZ3M7XG4gICAgdGhpcy5pc1F1aWNrc2hvcCA9IG9wdGlvbnMuaXNRdWlja3
1Nob3AgfHwgZmFsc2U7XG5cbiAgICAvLyBHYWxsZXJ5XG4gICAgdGhpcy5mbGlja2l0eSA9IG51bGw7XG4gICAgdGhpcy5zbGlkZXIgPSAnW2RhdGEtcHJvZHVjdC1zbGlkZXJdJztcbiAgICB0aGlzLiRzbGlkZXIgPSB0aGlzLiRnYWxsZXJ5LmZpbmQodGhpcy5zbGlkZXIpO1xuICAgIHRoaXMuc2xpZGVzID0gJ1tkYXRhLXByb2R1Y3QtaW1hZ2VdJztcbiAgICB0aGlzLiRzbGlkZXMgPSB0aGlzLiRnYWxsZXJ5LmZpbmQodGhpcy5zbGlkZXMpO1xuICAgIHRoaXMuc2xpZGVJbWFnZXMgPSB0aGlzLiRzbGlkZXJbMF0ucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtcmltZ10nKTtcbiAgICB0aGlzLiRzbGlkZXJQYWdpbmF0aW9uID0gdGhpcy4kZ2FsbGVyeS5maW5kKFxuICAgICAgJ1tkYXRhLXByb2R1Y3Qtc2xpZGVyLXBhZ2luYXRpb25dJyxcbiAgICApO1xuICAgIHRoaXMuJHBhZ2luYXRpb25UcmlnZ2VyID0gdGhpcy4kZ2FsbGVyeS5maW5kKCdbZGF0YS1wcm9kdWN0LXRodW1ibmFpbF0nKTtcbiAgICB0aGlzLnByb2R1Y3Rab29tID0gbnVsbDtcbiAgICB0aGlzLmxhenlMb2FkID0gIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWxhenktbG9hZGluZy1kaXNhYmxlZF0nKTtcblxuICAgIGlmICh0aGlzLnNldHRpbmdzLmVuYWJsZV9pbWFnZV96b29tKSB7XG4gICAgICB0aGlzLnByb2R1Y3Rab29tID0gbmV3IFByb2R1Y3Rab29tKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHRoaXMudmlkZW9zID0ge307XG4gICAgdGhpcy52aWRlb1NsaWRlcyA9IHRoaXMuJHNsaWRlclswXS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgJ1tkYXRhLXByb2R1Y3QtaW1hZ2UtdmlkZW9dJyxcbiAgICApO1xuXG4gICAgLy8gUmUtaW5pdGlhbGlzZSBnYWxsZXJ5IHdoZW4gY3Jvc3NpbmcgYnJlYWtwb2ludHMgaWYgbmVlZGVkXG4gICAgdGhpcy5fb25VcGRhdGVHYWxsZXJ5ID0gdGhpcy5fb25VcGRhdGVHYWxsZXJ5LmJpbmQodGhpcyk7XG4gICAgbGF5b3V0Lm9uQnJlYWtwb2ludENoYW5nZSh0aGlzLl9vblVwZGF0ZUdhbGxlcnkpO1xuXG4gICAgdGhpcy5zbGlkZUltYWdlTG9hZGVkID0gdGhpcy5fb25TbGlkZUltYWdlTG9hZGVkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52YXJpYW50Q2hhbmdlID0gdGhpcy5fb25WYXJpYW50Q2hhbmdlLmJpbmQodGhpcyk7XG5cbiAgICBpZiAodGhpcy5pc1F1aWNrc2hvcCkge1xuICAgICAgdGhpcy4kZ2FsbGVyeS50cmlnZ2VyKCd0aGVtZTpyaW1nOndhdGNoJyk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdCgpO1xuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zbGlkZUltYWdlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgZXZlbnROYW1lID0gdGhpcy5sYXp5TG9hZCA/ICdyaW1nOmxvYWQnIDogJ2xvYWQnO1xuICAgICAgdGhpcy5zbGlkZUltYWdlc1tpXS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcy5zbGlkZUltYWdlTG9hZGVkKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9kdWN0Wm9vbSkge1xuICAgICAgdGhpcy5wcm9kdWN0Wm9vbS51bmxvYWQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1F1aWNrc2hvcCkge1xuICAgICAgdGhpcy4kZ2FsbGVyeS50cmlnZ2VyKCd0aGVtZTpyaW1nOnVud2F0Y2gnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1F1aWNrc2hvcCkge1xuICAgICAgdGhpcy5fb25VcGRhdGVHYWxsZXJ5KCk7XG4gICAgfVxuXG4gICAgbGF5b3V0Lm9mZkJyZWFrcG9pbnRDaGFuZ2UodGhpcy5fb25VcGRhdGVHYWxsZXJ5KTtcblxuICAgIHRoaXMuX3VubG9hZEdhbGxlcnkoKTtcbiAgfVxuXG4gIF9pbml0KCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zbGlkZUltYWdlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3Qgc2xpZGVJbWFnZSA9IHRoaXMuc2xpZGVJbWFnZXNbaV07XG4gICAgICBpZiAodGhpcy5sYXp5TG9hZCkge1xuICAgICAgICBzbGlkZUltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ3JpbWc6bG9hZCcsIHRoaXMuc2xpZGVJbWFnZUxvYWRlZCk7XG4gICAgICB9IGVsc2UgaWYgKHNsaWRlSW1hZ2UuY29tcGxldGUpIHtcbiAgICAgICAgdGhpcy5zbGlkZUltYWdlTG9hZGVkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZUltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLnNsaWRlSW1hZ2VMb2FkZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvU2xpZGVzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZpZGVvU2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IHZpZGVvU2xpZGUgPSB0aGlzLnZpZGVvU2xpZGVzW2ldO1xuICAgICAgICBjb25zdCBzbGlkZUlkID0gdmlkZW9TbGlkZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJvZHVjdC1pbWFnZScpO1xuICAgICAgICBjb25zdCB2aWRlb0VsID0gdmlkZW9TbGlkZS5xdWVyeVNlbGVjdG9yKCdbZGF0YS12aWRlb10nKTtcblxuICAgICAgICB0aGlzLnZpZGVvc1tzbGlkZUlkXSA9IG5ldyBWaWRlbyh2aWRlb0VsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy4kc2xpZGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5faW5pdEdhbGxlcnkoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBzdXJlIEZsaWNraXR5IHVwZGF0ZXMgdmlld3BvcnQgaGVpZ2h0IHdoZW4gaW1hZ2VzIGxvYWQgaW5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblNsaWRlSW1hZ2VMb2FkZWQoKSB7XG4gICAgcmVzaXplRmxpY2tpdHlJZk5lZWRlZCh0aGlzLmZsaWNraXR5KTtcbiAgfVxuXG4gIF91bmxvYWRHYWxsZXJ5KCkge1xuICAgIGlmICh0aGlzLmZsaWNraXR5KSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmlkZW9zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHRoaXMudmlkZW9zW2ldLnVubG9hZCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiRwYWdpbmF0aW9uVHJpZ2dlci5vZmYoJy5nYWxsZXJ5Jyk7XG5cbiAgICAgIHRoaXMuZmxpY2tpdHkuZGVzdHJveSgpO1xuICAgICAgdGhpcy5mbGlja2l0eSA9IG51bGw7XG4gICAgICB0aGlzLiRzbGlkZXIuZmluZCh0aGlzLnNsaWRlcykuYXR0cignc3R5bGUnLCAnJyk7XG4gICAgfVxuICB9XG5cbiAgX29uVXBkYXRlR2FsbGVyeSgpIHtcbiAgICAvKipcbiAgICAgIERvIG5vdCByZXNldCB0aGUgZ2FsbGVyeSBpZiB3ZSBhcmUgdGFraW5nIGFuIGVsZW1lbnQgZnVsbC1zY3JlZW4uXG4gICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBsYXlvdXQub25CcmVha3BvaW50Q2hhbmdlLCBhIHNpZGUgZWZmZWN0XG4gICAgICBvZiBnb2luZyBmdWxsLXNjcmVlbiB3aXRoIGEgdmlkZW8uIElmIHRoZXJlIGlzIGEgZnVsbC1zY3JlZW4gZWxlbWVudFxuICAgICAganVzdCByZXR1cm4gb3V0IG9mIHRoaXMgZnVuY3Rpb24uXG4gICAgKi9cbiAgICBpZiAoZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl91bmxvYWRHYWxsZXJ5KCk7XG4gICAgdGhpcy5faW5pdEdhbGxlcnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZ2FsbGVyeSBvbiB2YXJpYW50IGNoYW5nZVxuICAgKlxuICAgKiBAcGFyYW0gdmFyaWFudFxuICAgKiBAcHJvcGVydHkge09iamVjdH0gb3B0aW9ucy5mZWF0dXJlZF9pbWFnZSAtIE
1ZlYXR1cmVkIGltYWdlIGluZm9ybWF0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25WYXJpYW50Q2hhbmdlKHZhcmlhbnQpIHtcbiAgICBpZiAoIXZhcmlhbnQgfHwgIXZhcmlhbnQuZmVhdHVyZWRfaW1hZ2UgfHwgIXRoaXMuZmxpY2tpdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuJHNsaWRlclxuICAgICAgLmZpbmQoYFtkYXRhLXByb2R1Y3QtaW1hZ2U9JHt2YXJpYW50LmZlYXR1cmVkX2ltYWdlLmlkfV1gKVxuICAgICAgLmF0dHIoJ2RhdGEtcHJvZHVjdC1pbWFnZS1pbmRleCcpO1xuICAgIHRoaXMuZmxpY2tpdHkuc2VsZWN0KGluZGV4LCBmYWxzZSwgZmFsc2UpO1xuICB9XG5cbiAgX2luaXRHYWxsZXJ5KCkge1xuICAgIGNvbnN0ICRzZWxlY3RlZEltYWdlID0gdGhpcy4kc2xpZGVyLmZpbmQoJy5pbWFnZS0tc2VsZWN0ZWQnKTtcblxuICAgIC8vIE9wdGlvbnMgc2hhcmVkIG9uIERlc2t0b3AgYW5kIE1vYmlsZVxuICAgIGxldCBmbGlja2l0eU9wdGlvbnMgPSB7XG4gICAgICBhdXRvUGxheTogMCxcbiAgICAgIGFjY2Vzc2liaWxpdHk6IHRydWUsXG4gICAgICBhZGFwdGl2ZUhlaWdodDogdHJ1ZSxcbiAgICAgIGNlbGxBbGlnbjogJ2xlZnQnLFxuICAgICAgY2VsbFNlbGVjdG9yOiB0aGlzLnNsaWRlcyxcbiAgICAgIHBhZ2VEb3RzOiBmYWxzZSxcbiAgICAgIHByZXZOZXh0QnV0dG9uczogZmFsc2UsXG4gICAgICB3cmFwQXJvdW5kOiB0cnVlLFxuICAgIH07XG5cbiAgICAvLyBNb2JpbGUgb25seSBvcHRpb25zXG4gICAgY29uc3Qgb3B0aW9uc01vYmlsZSA9IHtcbiAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgIGZyaWN0aW9uOiAwLjgsXG4gICAgICBzZWxlY3RlZEF0dHJhY3Rpb246IDAuMixcbiAgICB9O1xuXG4gICAgLy8gRGVza3RvcCBvbmx5IG9wdGlvbnNcbiAgICBjb25zdCBvcHRpb25zRGVza3RvcCA9IHtcbiAgICAgIGRyYWdnYWJsZTogZmFsc2UsXG4gICAgfTtcblxuICAgIGlmIChsYXlvdXQuaXNCcmVha3BvaW50KCdYUycpKSB7XG4gICAgICBmbGlja2l0eU9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgb3B0aW9uc01vYmlsZSwgZmxpY2tpdHlPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxpY2tpdHlPcHRpb25zID0gJC5leHRlbmQoe30sIG9wdGlvbnNEZXNrdG9wLCBmbGlja2l0eU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIElmIGEgdmFyaWFudCBoYXMgYW4gaW1hZ2UgcHJlLXNlbGVjdGVkLCBzdGFydCB0aGUgc2xpZGVzaG93IGF0IHRoYXQgaW1hZ2VcbiAgICAvLyBJZiB0aGUgc2xpZGVzaG93IGhhcyBiZWVuIHJlLWluaXRhbGlzZWQgYWNyb3NzIGEgYnJlYWsgcG9pbnQsIHNsaWRlc2hvd1xuICAgIC8vIHJlc3RhcnRzIGF0IHNhbWUgc2xpZGVcbiAgICBpZiAoJHNlbGVjdGVkSW1hZ2UubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpbml0aWFsSW5kZXggPSBwYXJzZUludChcbiAgICAgICAgJHNlbGVjdGVkSW1hZ2UuYXR0cignZGF0YS1wcm9kdWN0LWltYWdlLWluZGV4JyksXG4gICAgICAgIDEwLFxuICAgICAgKTtcblxuICAgICAgZmxpY2tpdHlPcHRpb25zID0gJC5leHRlbmQoe30sIHsgaW5pdGlhbEluZGV4IH0sIGZsaWNraXR5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgdGhpcy5mbGlja2l0eSA9IG5ldyBGbGlja2l0eSh0aGlzLiRzbGlkZXJbMF0sIGZsaWNraXR5T3B0aW9ucyk7XG5cbiAgICB0aGlzLl9iaW5kR2FsbGVyeSgpO1xuICAgIHRoaXMuX2hhbmRsZUdhbGxlcnlWaWRlb3MoKTtcbiAgfVxuXG4gIF9iaW5kR2FsbGVyeSgpIHtcbiAgICB0aGlzLmZsaWNraXR5Lm9uKCdzZWxlY3QnLCAoKSA9PiB7XG4gICAgICB0aGlzLl91cGRhdGVBY3RpdmVTbGlkZSh0aGlzLmZsaWNraXR5LnNlbGVjdGVkSW5kZXgpO1xuICAgICAgdGhpcy5faGFuZGxlR2FsbGVyeVZpZGVvcygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kcGFnaW5hdGlvblRyaWdnZXIub24oJ2NsaWNrLmdhbGxlcnknLCBldmVudCA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgJHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgICB0aGlzLmZsaWNraXR5LnNlbGVjdChcbiAgICAgICAgJHRhcmdldC5hdHRyKCdkYXRhLXByb2R1Y3QtdGh1bWJuYWlsJyksXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGdhbGxlcnkgdmlkZW9zXG4gICAqIC0gUGF1c2UgdmlkZW8gaWYgaXMgbm90IGFjdGl2ZSBzbGlkZVxuICAgKiAtIFBsYXkgdmlkZW8gaWYgaXMgYWN0aXZlIHNsaWRlLCBhbmQgaXMgYXV0b3BsYXlcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVHYWxsZXJ5VmlkZW9zKCkge1xuICAgIGlmICghdGhpcy5mbGlja2l0eS5zZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzbGlkZUlkID0gcGFyc2VJbnQoXG4gICAgICB0aGlzLmZsaWNraXR5LnNlbGVjdGVkRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJvZHVjdC1pbWFnZScpLFxuICAgICAgMTAsXG4gICAgKTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMudmlkZW9zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCB2aWRlb0tleSA9IHBhcnNlSW50KGtleSwgMTApO1xuXG4gICAgICAvLyBQYXVzZSBpbmFjdGl2ZSBzbGlkZSB2aWRlb3NcbiAgICAgIGlmIChzbGlkZUlkICE9PSB2aWRlb0tleSkge1xuICAgICAgICB0aGlzLnZpZGVvc1t2aWRlb0tleV0ub25QYXVzZUNsaWNrKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFBsYXkgdmlkZW8gaWYgaXMgc2VsZWN0ZWQsIGFuZCBhdXRvIHBsYXkgZW5hYmxlZFxuICAgICAgaWYgKHNsaWRlSWQgPT09IHZpZGVvS2V5ICYmIHRoaXMuc2V0dGluZ3MuZW5hYmxlX3ZpZGVvX2F1dG9wbGF5KSB7XG4gICAgICAgIHRoaXMudmlkZW9zW3ZpZGVvS2V5XS5hdXRvcGxheSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBub24tZmxpY2tpdHkgYWN0aXZlIGNsYXNzIHRvIHRodW1ibmFpbHMsIGFuZCBtYWluIHNsaWRlc2hvd1xuICAgKiAgLSBJcyB1c2VkIG9uIHJlLWluaXQgYW
1Nyb3NzIGJyZWFrcG9pbnRzXG4gICAqICAtIElzIHVzZWQgdG8gc2hvdyB0aGUgYWN0aXZlIHRodW1ibmFpbCBpbiB0aGUgcGFnaW5hdGlvblxuICAgKlxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVBY3RpdmVTbGlkZShpbmRleCkge1xuICAgIGNvbnN0ICRuZXdTbGlkZSA9IHRoaXMuJHNsaWRlci5maW5kKGBbZGF0YS1wcm9kdWN0LWltYWdlLWluZGV4PSR7aW5kZXh9XWApO1xuICAgIGNvbnN0ICRuZXdUaHVtYm5haWwgPSB0aGlzLiRzbGlkZXJQYWdpbmF0aW9uLmZpbmQoXG4gICAgICBgW2RhdGEtcHJvZHVjdC10aHVtYm5haWw9JHtpbmRleH1dYCxcbiAgICApO1xuXG4gICAgJG5ld1NsaWRlXG4gICAgICAuYWRkQ2xhc3MoJ2ltYWdlLS1zZWxlY3RlZCcpXG4gICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKVxuICAgICAgLnNpYmxpbmdzKCcuaW1hZ2UtLXNlbGVjdGVkJylcbiAgICAgIC5yZW1vdmVDbGFzcygnaW1hZ2UtLXNlbGVjdGVkJylcbiAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG5cbiAgICAkbmV3VGh1bWJuYWlsXG4gICAgICAuYWRkQ2xhc3MoJ3RodW1ibmFpbC0tc2VsZWN0ZWQnKVxuICAgICAgLnNpYmxpbmdzKCcudGh1bWJuYWlsLS1zZWxlY3RlZCcpXG4gICAgICAucmVtb3ZlQ2xhc3MoJ3RodW1ibmFpbC0tc2VsZWN0ZWQnKTtcblxuICAgIGlmIChsYXlvdXQuaXNCcmVha3BvaW50KCdYUycpKSB7XG4gICAgICBzY3JvbGxMZWZ0KCRuZXdUaHVtYm5haWwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNldHRpbmdzLmVuYWJsZV9pbWFnZV96b29tKSB7XG4gICAgICB0aGlzLnByb2R1Y3Rab29tLmVuYWJsZVpvb20oaW5kZXgpO1xuICAgIH1cbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/components/ProductGallery.js\n") },
1"./source/scripts/components/ProductGridItem.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ProductGridItem; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! scriptjs */ \"./node_modules/scriptjs/dist/script.js\");\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(scriptjs__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Layout */ \"./source/scripts/Layout.js\");\n/* harmony import */ var _helpers_LazyLoader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers/LazyLoader */ \"./source/scripts/helpers/LazyLoader.js\");\n/* harmony import */ var _ProductQuickshop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ProductQuickshop */ \"./source/scripts/components/ProductQuickshop.js\");\n/* harmony import */ var _AddToCartFlyout__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AddToCartFlyout */ \"./source/scripts/components/AddToCartFlyout.js\");\n/* harmony import */ var _GridItemSwatches__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./GridItemSwatches */ \"./source/scripts/components/GridItemSwatches.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\nvar ProductGridItem =\n/*#__PURE__*/\nfunction () {\n function ProductGridItem(options) {\n _classCallCheck(this, ProductGridItem);\n\n this.$el = options.$el;\n this.id = options.id;\n this.product = options.product;\n this.queryParams = options.queryParams || {};\n this.events = [];\n this._init = this._init.bind(this);\n this.lazyLoader = new _helpers_LazyLoader__WEBPACK_IMPORTED_MODULE_3__[\"default\"](this.$el[0], this._init);\n }\n\n _createClass(ProductGridItem, [{\n key: \"_init\",\n value: function _init() {\n var _this = this;\n\n this.productQuickshop = null;\n this.quickBuySettings = null;\n this.actionsOpen = false;\n this.$window = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window);\n this.$html = jquery__WEBPACK_IMPORTED_MODULE_0___default()('html');\n this.$content = this.$el.find('[data-product-item-content]');\n this.$actions = this.$el.find('[data-product-actions]');\n this.swatchesEl = this.$el[0].querySelector('[data-swatches]');\n this.hasProductActions = this.$actions.children().length;\n this._addToCart = this._addToCart.bind(this);\n this._actionsToggle = this._actionsToggle.bind(this);\n var productQuickshopEl = this.$el.get(0).querySelector('[data-product-quickshop]');\n\n if (productQuickshopEl) {\n this.productQuickshop = new _ProductQuickshop__WEBPACK_IMPORTED_MODULE_4__[\"default\"]({\n el: productQuickshopEl,\n id: this.id,\n url: productQuickshopEl.dataset.productQuickshopUrl,\n hash: productQuickshopEl.dataset.productQuickshopHash,\n trigger: this.$el.find('.productitem--title a')\n });\n\n this._openQuickShop = function (e) {\n e.preventDefault();\n\n _this.productQuickshop.open(e.currentTarget.dataset.quickshopTrigger === 'full');\n };\n\n this._loadQuickShop = function () {\n _this.productQuickshop.load();\n };\n }\n\n if (this.hasProductActions || this.swatchesEl && this.swatchesEl.classList.contains('productitem--swatches-show-on-hover')) {\n this.events.push(this.$content.on('mouseenter.product-item', this._actionsToggle));\n this.events.push(this.$content.on('mouseleave.product-item', this._actionsToggle));\n this.events.push(this.$content.on('focusin.product-item', this._actionsToggle));\n }\n\n if (this.hasProductActions) {\n // $scripts checks existence of script in header before attempting to inject\n scriptjs__WEBPACK_IMPORTED_MODULE_1___default()(jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-scripts]').data('shopify-api-url'), function () {\n _this.events.push(_this.$el.on('click.product-item', '[data-quick-buy]', _this._addToCart));\n\n if (_this.productQuickshop) {\n _this.events.push(_this.$el.on('focusin.product-item', '[data-quickshop-trigger]', _this._loadQuickShop));\n\n _this.events.push(_this.$el.on('mouseover.product-item', '[data-quickshop-trigger]', _this._loadQuickShop));\n\n _this.events.push(_this.$el.on('click.product-item', '[data-quickshop-trigger]', _this._openQuickShop));\n }\n });\n }\n\n if (this.$el.find('[data-quick-buy]').length) {\n this._initQuickBuy();\n }\n\n this._objectFitPolyfill();\n\n if (this.swatchesEl) {\n this.swatches = new _GridItemSwatches__WEBPACK_IMPORTED_MODULE_6__[\"default\"]({\n el: this.$el[0],\n productQuickshop: this.productQuickshop,\n product: this.product\n });\n }\n }\n }, {\n key: \"handleViewChange\",\n value: function handleViewChange(view) {\n this.currentView = view;\n\n if (this.swatches) {\n this.swatches.resize();\n }\n }\n }, {\n key: \"_initQuickBuy\",\n value: function _initQuickBuy() {\n tr
1y {\n this.quickBuySettings = JSON.parse(this.$el.find('[data-quick-buy-settings]').text());\n } catch (error) {\n console.warn(\"Quick buy: invalid QuickBuy data found. \".concat(error.message));\n }\n }\n }, {\n key: \"_isObjectFitAvailable\",\n value: function _isObjectFitAvailable() {\n return 'objectFit' in document.documentElement.style;\n }\n }, {\n key: \"_objectFitPolyfill\",\n value: function _objectFitPolyfill() {\n if (this._isObjectFitAvailable()) {\n return;\n }\n\n var $figure = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-product-item-image]', this.$el);\n var featuredSrc = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.productitem--image-primary', $figure).attr('src');\n var alternateSrc = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.productitem--image-alternate', $figure).attr('src');\n $figure.addClass('product-item-image-no-objectfit');\n $figure.css('background-image', \"url(\\\"\".concat(featuredSrc, \"\\\")\"));\n\n if (alternateSrc) {\n this.$el.on('mouseover', function () {\n $figure.css('background-image', \"url(\\\"\".concat(alternateSrc, \"\\\")\"));\n });\n this.$el.on('mouseleave', function () {\n $figure.css('background-image', \"url(\\\"\".concat(featuredSrc, \"\\\")\"));\n });\n }\n }\n /**\n * Get height of element, and combined height of element + actions\n *\n * @returns {{heightBase, heightExpanded: *}}\n * @private\n */\n\n }, {\n key: \"_getHeights\",\n value: function _getHeights() {\n var heightBase = 0;\n var parent = this.$el.parent();\n\n if (parent.hasClass('product-row--no-spacing') || parent.hasClass('productgrid--no-spacing')) {\n var imageHeight = this.$el.find('[data-product-page-link]').outerHeight(true);\n var infoHeight = this.$el.find('.productitem--info').outerHeight(true);\n var cardPadding = parseFloat(this.$content.css('padding-top').replace('px', '')) + parseFloat(this.$content.css('padding-bottom').replace('px', ''));\n heightBase = imageHeight + infoHeight + cardPadding;\n } else {\n heightBase = this.$el.height();\n }\n\n var actionsHeight = this.$el.find('[data-product-actions]').outerHeight(true) || 0;\n var swatchesHeight = this.$el.find('.productitem--swatches-show-on-hover').outerHeight(true) || 0;\n var heightExpanded = heightBase + actionsHeight + swatchesHeight;\n return {\n heightBase: heightBase,\n heightExpanded: heightExpanded\n };\n }\n }, {\n key: \"_actionsToggle\",\n value: function _actionsToggle(event) {\n if (!_Layout__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isBreakpoint('L') || this.currentView === 'list-view') return;\n var $currentTarget = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget);\n var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.target);\n var openProductItem = false; // This function gets called on the element as well as the document focusin, so we want to\n // be extra careful that we are inside the product card in question. We want the product card\n // to close if another product card has received focus.\n\n var productHasFocus = this.$el.is($currentTarget) || this.$el.is($target) || this.$el.is($target.parents('.productgrid--item').first()) || event.type === 'focusin' && $target[0].contains(this.$el[0]);\n\n if (event.type === 'mouseenter' || event.type === 'mouseleave') {\n openProductItem = event.type === 'mouseenter';\n } else if (productHasFocus) {\n openProductItem = true;\n }\n\n if (openProductItem) {\n this._showActions();\n } else {\n this._hideActions();\n }\n }\n }, {\n key: \"_showActions\",\n value: function _showActions() {\n var _this2 = this;\n\n if (this.actionsOpen) {\n return;\n }\n\n var _this$_getHeights = this._getHeights(),\n heightBase = _this$_getHeights.heightBase,\n heightExpanded = _this$_getHeights.heightExpanded; // Lock heights to prevent jumping\n\n\n this.$el.css('height', heightBase);\n this.$content.css('height', heightBase); // Store height for when hovering out\n\n this.$el.data('base-height', heightBase); // Start animation, and transition height to expanded height\n\n this.$el.revealer('show').one('revealer-animating.product-item', function () {\n _this2.$content.css('height', heightExpanded);\n });\n document.addEventListener('focusin', this._actionsToggle);\n this.actionsOpen = true;\n }\n }, {\n key: \"_hideActions\",\n value: function _hideActions() {\n var _this3 = this;\n\n var height = this.$el.data('base-height');\n /*\n - Transition buttons up, using base height for animation\n - Remove heights after animation is complete in case of resize\n */\n\n this.$el.revealer('hide').one('revealer-animating', function () {\n _this3.$el.off('revealer-animating.product-item');\n\n _this3.$el.css({\n height: height\n });\n\n _this3.$content.css({\n height: height\n });\n }).one('revealer-hide', function () {\n _this3.$el.off('revealer-hide.product-item').css('height', '');\n\n _this3.$content.css('height', '');\n });\n document.removeEventListener('focusin', this._actionsToggle);\n this.actionsOpen = false;\n }\n }, {\n key: \"_addToCart\",\n value: function _addToCart(event) {\n event.preventDefault();\n var $atcButton = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget);\n var variantID = $atcButton.attr('data-variant-id');\n var formData = [{\n name: 'id',\n value: variantID\n }, {\n name: 'quantity',\n value: 1\n }];\n var options = {\n $atcButton: $atcButton,\n settings: {\n moneyFormat: this.quickBuySettings.money_format,\n cartRedirection: this.quickBuySettings.cart_redirection\n }\n };\n _AddToCartFlyout__WEBPACK_IMPORTED_MODULE_5__[\"default\"].init(formData, this.product, options);\n }\n }, {\n key: \"unload\",\n value: function unload() {\n this.events.forEac
1h(function ($el) {\n return $el.off('.product-item');\n });\n\n if (this.productQuickshop) {\n this.productQuickshop.unload();\n }\n\n document.removeEventListener('focusin', this._actionsToggle);\n\n if (this.swatches) {\n this.swatches.unload();\n }\n\n this.lazyLoader.unload();\n }\n }]);\n\n return ProductGridItem;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL1Byb2R1Y3RHcmlkSXRlbS5qcz85YTA3Il0sIm5hbWVzIjpbIlByb2R1Y3RHcmlkSXRlbSIsIm9wdGlvbnMiLCIkZWwiLCJpZCIsInByb2R1Y3QiLCJxdWVyeVBhcmFtcyIsImV2ZW50cyIsIl9pbml0IiwiYmluZCIsImxhenlMb2FkZXIiLCJMYXp5TG9hZGVyIiwicHJvZHVjdFF1aWNrc2hvcCIsInF1aWNrQnV5U2V0dGluZ3MiLCJhY3Rpb25zT3BlbiIsIiR3aW5kb3ciLCIkIiwid2luZG93IiwiJGh0bWwiLCIkY29udGVudCIsImZpbmQiLCIkYWN0aW9ucyIsInN3YXRjaGVzRWwiLCJxdWVyeVNlbGVjdG9yIiwiaGFzUHJvZHVjdEFjdGlvbnMiLCJjaGlsZHJlbiIsImxlbmd0aCIsIl9hZGRUb0NhcnQiLCJfYWN0aW9uc1RvZ2dsZSIsInByb2R1Y3RRdWlja3Nob3BFbCIsImdldCIsIlByb2R1Y3RRdWlja3Nob3AiLCJlbCIsInVybCIsImRhdGFzZXQiLCJwcm9kdWN0UXVpY2tzaG9wVXJsIiwiaGFzaCIsInByb2R1Y3RRdWlja3Nob3BIYXNoIiwidHJpZ2dlciIsIl9vcGVuUXVpY2tTaG9wIiwiZSIsInByZXZlbnREZWZhdWx0Iiwib3BlbiIsImN1cnJlbnRUYXJnZXQiLCJxdWlja3Nob3BUcmlnZ2VyIiwiX2xvYWRRdWlja1Nob3AiLCJsb2FkIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJwdXNoIiwib24iLCIkc2NyaXB0IiwiZGF0YSIsIl9pbml0UXVpY2tCdXkiLCJfb2JqZWN0Rml0UG9seWZpbGwiLCJzd2F0Y2hlcyIsIkdyaWRJdGVtU3dhdGNoZXMiLCJ2aWV3IiwiY3VycmVudFZpZXciLCJyZXNpemUiLCJKU09OIiwicGFyc2UiLCJ0ZXh0IiwiZXJyb3IiLCJjb25zb2xlIiwid2FybiIsIm1lc3NhZ2UiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsInN0eWxlIiwiX2lzT2JqZWN0Rml0QXZhaWxhYmxlIiwiJGZpZ3VyZSIsImZlYXR1cmVkU3JjIiwiYXR0ciIsImFsdGVybmF0ZVNyYyIsImFkZENsYXNzIiwiY3NzIiwiaGVpZ2h0QmFzZSIsInBhcmVudCIsImhhc0NsYXNzIiwiaW1hZ2VIZWlnaHQiLCJvdXRlckhlaWdodCIsImluZm9IZWlnaHQiLCJjYXJkUGFkZGluZyIsInBhcnNlRmxvYXQiLCJyZXBsYWNlIiwiaGVpZ2h0IiwiYWN0aW9uc0hlaWdodCIsInN3YXRjaGVzSGVpZ2h0IiwiaGVpZ2h0RXhwYW5kZWQiLCJldmVudCIsImxheW91dCIsImlzQnJlYWtwb2ludCIsIiRjdXJyZW50VGFyZ2V0IiwiJHRhcmdldCIsInRhcmdldCIsIm9wZW5Qcm9kdWN0SXRlbSIsInByb2R1Y3RIYXNGb2N1cyIsImlzIiwicGFyZW50cyIsImZpcnN0IiwidHlwZSIsIl9zaG93QWN0aW9ucyIsIl9oaWRlQWN0aW9ucyIsIl9nZXRIZWlnaHRzIiwicmV2ZWFsZXIiLCJvbmUiLCJhZGRFdmVudExpc3RlbmVyIiwib2ZmIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIiRhdGNCdXR0b24iLCJ2YXJpYW50SUQiLCJmb3JtRGF0YSIsIm5hbWUiLCJ2YWx1ZSIsInNldHRpbmdzIiwibW9uZXlGb3JtYXQiLCJtb25leV9mb3JtYXQiLCJjYXJ0UmVkaXJlY3Rpb24iLCJjYXJ0X3JlZGlyZWN0aW9uIiwiQWRkVG9DYXJ0Rmx5b3V0IiwiaW5pdCIsImZvckVhY2giLCJ1bmxvYWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBRXFCQSxlOzs7QUFDbkIsMkJBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFDbkIsU0FBS0MsR0FBTCxHQUFXRCxPQUFPLENBQUNDLEdBQW5CO0FBQ0EsU0FBS0MsRUFBTCxHQUFVRixPQUFPLENBQUNFLEVBQWxCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlSCxPQUFPLENBQUNHLE9BQXZCO0FBQ0Es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FNMEIsWUFBTTtBQUM1QixjQUFJLENBQUN2RyxHQUFMLENBQ0d5RyxHQURILENBQ08sNEJBRFAsRUFFR2hDLEdBRkgsQ0FFTyxRQUZQLEVBRWlCLEVBRmpCOztBQUdBLGNBQUksQ0FBQ3pELFFBQUwsQ0FBY3lELEdBQWQsQ0FBa0IsUUFBbEIsRUFBNEIsRUFBNUI7QUFDRCxPQVhIO0FBYUFULGNBQVEsQ0FBQzBDLG1CQUFULENBQTZCLFNBQTdCLEVBQXdDLEtBQUtqRixjQUE3QztBQUVBLFdBQUtkLFdBQUwsR0FBbUIsS0FBbkI7QUFDRDs7OytCQUVVNEUsSyxFQUFPO0FBQ2hCQSxXQUFLLENBQUNqRCxjQUFOO0FBQ0EsVUFBTXFFLFVBQVUsR0FBRzlGLDZDQUFDLENBQUMwRSxLQUFLLENBQUMvQyxhQUFQLENBQXBCO0FBQ0EsVUFBTW9FLFNBQVMsR0FBR0QsVUFBVSxDQUFDckMsSUFBWCxDQUFnQixpQkFBaEIsQ0FBbEI7QUFFQSxVQUFNdUMsUUFBUSxHQUFHLENBQ2Y7QUFDRUMsWUFBSSxFQUFFLElBRFI7QUFFRUMsYUFBSyxFQUFFSDtBQUZULE9BRGUsRUFLZjtBQUNFRSxZQUFJLEVBQUUsVUFEUjtBQUVFQyxhQUFLLEVBQUU7QUFGVCxPQUxlLENBQWpCO0FBV0EsVUFBTWhILE9BQU8sR0FBRztBQUNkNEcsa0JBQVUsRUFBVkEsVUFEYztBQUVkSyxnQkFBUSxFQUFFO0FBQ1JDLHFCQUFXLEVBQUUsS0FBS3ZHLGdCQUFMLENBQXNCd0csWUFEM0I7QU
1FFUkMseUJBQWUsRUFBRSxLQUFLekcsZ0JBQUwsQ0FBc0IwRztBQUYvQjtBQUZJLE9BQWhCO0FBUUFDLDhEQUFlLENBQUNDLElBQWhCLENBQXFCVCxRQUFyQixFQUErQixLQUFLM0csT0FBcEMsRUFBNkNILE9BQTdDO0FBQ0Q7Ozs2QkFFUTtBQUNQLFdBQUtLLE1BQUwsQ0FBWW1ILE9BQVosQ0FBb0IsVUFBQXZILEdBQUc7QUFBQSxlQUFJQSxHQUFHLENBQUN5RyxHQUFKLENBQVEsZUFBUixDQUFKO0FBQUEsT0FBdkI7O0FBRUEsVUFBSSxLQUFLaEcsZ0JBQVQsRUFBMkI7QUFDekIsYUFBS0EsZ0JBQUwsQ0FBc0IrRyxNQUF0QjtBQUNEOztBQUVEeEQsY0FBUSxDQUFDMEMsbUJBQVQsQ0FBNkIsU0FBN0IsRUFBd0MsS0FBS2pGLGNBQTdDOztBQUVBLFVBQUksS0FBSzJCLFFBQVQsRUFBbUI7QUFDakIsYUFBS0EsUUFBTCxDQUFjb0UsTUFBZDtBQUNEOztBQUNELFdBQUtqSCxVQUFMLENBQWdCaUgsTUFBaEI7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvUHJvZHVjdEdyaWRJdGVtLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCAkc2NyaXB0IGZyb20gJ3NjcmlwdGpzJztcbmltcG9ydCBsYXlvdXQgZnJvbSAnLi4vTGF5b3V0JztcbmltcG9ydCBMYXp5TG9hZGVyIGZyb20gJy4uL2hlbHBlcnMvTGF6eUxvYWRlcic7XG5pbXBvcnQgUHJvZHVjdFF1aWNrc2hvcCBmcm9tICcuL1Byb2R1Y3RRdWlja3Nob3AnO1xuaW1wb3J0IEFkZFRvQ2FydEZseW91dCBmcm9tICcuL0FkZFRvQ2FydEZseW91dCc7XG5pbXBvcnQgR3JpZEl0ZW1Td2F0Y2hlcyBmcm9tICcuL0dyaWRJdGVtU3dhdGNoZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9kdWN0R3JpZEl0ZW0ge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy4kZWwgPSBvcHRpb25zLiRlbDtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZDtcbiAgICB0aGlzLnByb2R1Y3QgPSBvcHRpb25zLnByb2R1Y3Q7XG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IG9wdGlvbnMucXVlcnlQYXJhbXMgfHwge307XG4gICAgdGhpcy5ldmVudHMgPSBbXTtcblxuICAgIHRoaXMuX2luaXQgPSB0aGlzLl9pbml0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5sYXp5TG9hZGVyID0gbmV3IExhenlMb2FkZXIodGhpcy4kZWxbMF0sIHRoaXMuX2luaXQpO1xuICB9XG5cbiAgX2luaXQoKSB7XG4gICAgdGhpcy5wcm9kdWN0UXVpY2tzaG9wID0gbnVsbDtcbiAgICB0aGlzLnF1aWNrQnV5U2V0dGluZ3MgPSBudWxsO1xuICAgIHRoaXMuYWN0aW9uc09wZW4gPSBmYWxzZTtcblxuICAgIHRoaXMuJHdpbmRvdyA9ICQod2luZG93KTtcbiAgICB0aGlzLiRodG1sID0gJCgnaHRtbCcpO1xuICAgIHRoaXMuJGNvbnRlbnQgPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1wcm9kdWN0LWl0ZW0tY29udGVudF0nKTtcbiAgICB0aGlzLiRhY3Rpb25zID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtcHJvZHVjdC1hY3Rpb25zXScpO1xuICAgIHRoaXMuc3dhdGNoZXNFbCA9IHRoaXMuJGVsWzBdLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXN3YXRjaGVzXScpO1xuICAgIHRoaXMuaGFzUHJvZHVjdEFjdGlvbnMgPSB0aGlzLiRhY3Rpb25zLmNoaWxkcmVuKCkubGVuZ3RoO1xuXG4gICAgdGhpcy5fYWRkVG9DYXJ0ID0gdGhpcy5fYWRkVG9DYXJ0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYWN0aW9uc1RvZ2dsZSA9IHRoaXMuX2FjdGlvbnNUb2dnbGUuYmluZCh0aGlzKTtcblxuICAgIGNvbnN0IHByb2R1Y3RRdWlja3Nob3BFbCA9IHRoaXMuJGVsLmdldCgwKS5xdWVyeVNlbGVjdG9yKCdbZGF0YS1wcm9kdWN0LXF1aWNrc2hvcF0nKTtcbiAgICBpZiAocHJvZHVjdFF1aWNrc2hvcEVsKSB7XG4gICAgICB0aGlzLnByb2R1Y3RRdWlja3Nob3AgPSBuZXcgUHJvZHVjdFF1aWNrc2hvcCh7XG4gICAgICAgIGVsOiBwcm9kdWN0UXVpY2tzaG9wRWwsXG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICB1cmw6IHByb2R1Y3RRdWlja3Nob3BFbC5kYXRhc2V0LnByb2R1Y3RRdWlja3Nob3BVcmwsXG4gICAgICAgIGhhc2g6IHByb2R1Y3RRdWlja3Nob3BFbC5kYXRhc2V0LnByb2R1Y3RRdWlja3Nob3BIYXNoLFxuICAgICAgICB0cmlnZ2VyOiB0aGlzLiRlbC5maW5kKCcucHJvZHVjdGl0ZW0tLXRpdGxlIGEnKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fb3BlblF1aWNrU2hvcCA9IGUgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvZHVjdFF1aWNrc2hvcC5vcGVuKGUuY3VycmVudFRhcmdldC5kYXRhc2V0LnF1aWNrc2hvcFRyaWdnZXIgPT09ICdmdWxsJyk7XG4gICAgICB9O1xuICAgICAgdGhpcy5fbG9hZFF1aWNrU2hvcCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5wcm9kdWN0UXVpY2tzaG9wLmxvYWQoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzUHJvZHVjdEFjdGlvbnMgfHwgKHRoaXMuc3dhdGNoZXNFbCAmJiB0aGlzLnN3YXRjaGVzRWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdwcm9kdWN0aXRlbS0tc3dhdGNoZXMtc2hvdy1vbi1ob3ZlcicpKSkge1xuICAgICAgdGhpcy5ldmVudHMucHVzaCh0aGlzLiRjb250ZW50Lm9uKCdtb3VzZWVudGVyLnByb2R1Y3QtaXRlbScsIHRoaXMuX2FjdGlvbnNUb2dnbGUpKTtcbiAgICAgIHRoaXMuZXZlbnRzLnB1c2godGhpcy4kY29udGVudC5vbignbW91c2VsZWF2ZS5wcm9kdWN0LWl0ZW0nLCB0aGlzLl9hY3Rpb25zVG9nZ2xlKSk7XG4gICAgICB0aGlzLmV2ZW50cy5wdXNoKHRoaXMuJGNvbnRlbnQub24oJ2ZvY3VzaW4ucHJvZHVjdC1pdGVtJywgdGhpcy5fYWN0aW9uc1RvZ2dsZSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc1Byb2R1Y3RBY3Rpb25zKSB7XG4gICAgICAvLyAkc2NyaXB0cyBjaGVja3MgZXhpc3RlbmNlIG9mIHNjcmlwdCBpbiBoZWFkZXIgYmVmb3JlIGF0dGVtcHRpbmcgdG8gaW5qZWN0XG4gICAgICAkc2NyaXB0KCQoJ1tkYXRhLXNjcmlwdHNdJykuZGF0YSgnc2hvcGlmeS1hcGktdXJsJyksICgpID0+IHtcbiAgICAgICAgdGhpcy5ldmVudHMucHVzaCh0aGlzLiRlbC5vbignY2xpY2sucHJvZHVjdC1pdGVtJywgJ1tkYXRhLX
1F1aWNrLWJ1eV0nLCB0aGlzLl9hZGRUb0NhcnQpKTtcblxuICAgICAgICBpZiAodGhpcy5wcm9kdWN0UXVpY2tzaG9wKSB7XG4gICAgICAgICAgdGhpcy5ldmVudHMucHVzaCh0aGlzLiRlbC5vbignZm9jdXNpbi5wcm9kdWN0LWl0ZW0nLCAnW2RhdGEtcXVpY2tzaG9wLXRyaWdnZXJdJywgdGhpcy5fbG9hZFF1aWNrU2hvcCkpO1xuICAgICAgICAgIHRoaXMuZXZlbnRzLnB1c2godGhpcy4kZWwub24oJ21vdXNlb3Zlci5wcm9kdWN0LWl0ZW0nLCAnW2RhdGEtcXVpY2tzaG9wLXRyaWdnZXJdJywgdGhpcy5fbG9hZFF1aWNrU2hvcCkpO1xuICAgICAgICAgIHRoaXMuZXZlbnRzLnB1c2godGhpcy4kZWwub24oJ2NsaWNrLnByb2R1Y3QtaXRlbScsICdbZGF0YS1xdWlja3Nob3AtdHJpZ2dlcl0nLCB0aGlzLl9vcGVuUXVpY2tTaG9wKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiRlbC5maW5kKCdbZGF0YS1xdWljay1idXldJykubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9pbml0UXVpY2tCdXkoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9vYmplY3RGaXRQb2x5ZmlsbCgpO1xuXG4gICAgaWYgKHRoaXMuc3dhdGNoZXNFbCkge1xuICAgICAgdGhpcy5zd2F0Y2hlcyA9IG5ldyBHcmlkSXRlbVN3YXRjaGVzKHtcbiAgICAgICAgZWw6IHRoaXMuJGVsWzBdLFxuICAgICAgICBwcm9kdWN0UXVpY2tzaG9wOiB0aGlzLnByb2R1Y3RRdWlja3Nob3AsXG4gICAgICAgIHByb2R1Y3Q6IHRoaXMucHJvZHVjdCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVZpZXdDaGFuZ2Uodmlldykge1xuICAgIHRoaXMuY3VycmVudFZpZXcgPSB2aWV3O1xuICAgIGlmICh0aGlzLnN3YXRjaGVzKSB7XG4gICAgICB0aGlzLnN3YXRjaGVzLnJlc2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIF9pbml0UXVpY2tCdXkoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucXVpY2tCdXlTZXR0aW5ncyA9IEpTT04ucGFyc2UodGhpcy4kZWwuZmluZCgnW2RhdGEtcXVpY2stYnV5LXNldHRpbmdzXScpLnRleHQoKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihgUXVpY2sgYnV5OiBpbnZhbGlkIFF1aWNrQnV5IGRhdGEgZm91bmQuICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBfaXNPYmplY3RGaXRBdmFpbGFibGUoKSB7XG4gICAgcmV0dXJuICdvYmplY3RGaXQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTtcbiAgfVxuXG4gIF9vYmplY3RGaXRQb2x5ZmlsbCgpIHtcbiAgICBpZiAodGhpcy5faXNPYmplY3RGaXRBdmFpbGFibGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0ICRmaWd1cmUgPSAkKCdbZGF0YS1wcm9kdWN0LWl0ZW0taW1hZ2VdJywgdGhpcy4kZWwpO1xuICAgIGNvbnN0IGZlYXR1cmVkU3JjID0gJCgnLnByb2R1Y3RpdGVtLS1pbWFnZS1wcmltYXJ5JywgJGZpZ3VyZSkuYXR0cignc3JjJyk7XG4gICAgY29uc3QgYWx0ZXJuYXRlU3JjID0gJCgnLnByb2R1Y3RpdGVtLS1pbWFnZS1hbHRlcm5hdGUnLCAkZmlndXJlKS5hdHRyKCdzcmMnKTtcblxuICAgICRmaWd1cmUuYWRkQ2xhc3MoJ3Byb2R1Y3QtaXRlbS1pbWFnZS1uby1vYmplY3RmaXQnKTtcbiAgICAkZmlndXJlLmNzcygnYmFja2dyb3VuZC1pbWFnZScsIGB1cmwoXCIke2ZlYXR1cmVkU3JjfVwiKWApO1xuXG4gICAgaWYgKGFsdGVybmF0ZVNyYykge1xuICAgICAgdGhpcy4kZWwub24oJ21vdXNlb3ZlcicsICgpID0+IHtcbiAgICAgICAgJGZpZ3VyZS5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCBgdXJsKFwiJHthbHRlcm5hdGVTcmN9XCIpYCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy4kZWwub24oJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgICAgICRmaWd1cmUuY3NzKCdiYWNrZ3JvdW5kLWltYWdlJywgYHVybChcIiR7ZmVhdHVyZWRTcmN9XCIpYCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGhlaWdodCBvZiBlbGVtZW50LCBhbmQgY29tYmluZWQgaGVpZ2h0IG9mIGVsZW1lbnQgKyBhY3Rpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHt7aGVpZ2h0QmFzZSwgaGVpZ2h0RXhwYW5kZWQ6ICp9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEhlaWdodHMoKSB7XG4gICAgbGV0IGhlaWdodEJhc2UgPSAwO1xuXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy4kZWwucGFyZW50KCk7XG5cbiAgICBpZiAocGFyZW50Lmhhc0NsYXNzKCdwcm9kdWN0LXJvdy0tbm8tc3BhY2luZycpIHx8IHBhcmVudC5oYXNDbGFzcygncHJvZHVjdGdyaWQtLW5vLXNwYWNpbmcnKSkge1xuICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1wcm9kdWN0LXBhZ2UtbGlua10nKS5vdXRlckhlaWdodCh0cnVlKTtcbiAgICAgIGNvbnN0IGluZm9IZWlnaHQgPSB0aGlzLiRlbC5maW5kKCcucHJvZHVjdGl0ZW0tLWluZm8nKS5vdXRlckhlaWdodCh0cnVlKTtcbiAgICAgIGNvbnN0IGNhcmRQYWRkaW5nID0gcGFyc2VGbG9hdCh0aGlzLiRjb250ZW50LmNzcygncGFkZGluZy10b3AnKS5yZXBsYWNlKCdweCcsICcnKSlcbiAgICAgICAgKyBwYXJzZU
1Zsb2F0KHRoaXMuJGNvbnRlbnQuY3NzKCdwYWRkaW5nLWJvdHRvbScpLnJlcGxhY2UoJ3B4JywgJycpKTtcblxuICAgICAgaGVpZ2h0QmFzZSA9IGltYWdlSGVpZ2h0ICsgaW5mb0hlaWdodCArIGNhcmRQYWRkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWlnaHRCYXNlID0gdGhpcy4kZWwuaGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aW9uc0hlaWdodCA9IHRoaXMuJGVsLmZpbmQoJ1tkYXRhLXByb2R1Y3QtYWN0aW9uc10nKS5vdXRlckhlaWdodCh0cnVlKSB8fCAwO1xuICAgIGNvbnN0IHN3YXRjaGVzSGVpZ2h0ID0gdGhpcy4kZWwuZmluZCgnLnByb2R1Y3RpdGVtLS1zd2F0Y2hlcy1zaG93LW9uLWhvdmVyJykub3V0ZXJIZWlnaHQodHJ1ZSkgfHwgMDtcblxuICAgIGNvbnN0IGhlaWdodEV4cGFuZGVkID0gaGVpZ2h0QmFzZSArIGFjdGlvbnNIZWlnaHQgKyBzd2F0Y2hlc0hlaWdodDtcblxuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHRCYXNlLFxuICAgICAgaGVpZ2h0RXhwYW5kZWQsXG4gICAgfTtcbiAgfVxuXG4gIF9hY3Rpb25zVG9nZ2xlKGV2ZW50KSB7XG4gICAgaWYgKCFsYXlvdXQuaXNCcmVha3BvaW50KCdMJykgfHwgdGhpcy5jdXJyZW50VmlldyA9PT0gJ2xpc3QtdmlldycpIHJldHVybjtcblxuICAgIGNvbnN0ICRjdXJyZW50VGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCAkdGFyZ2V0ID0gJChldmVudC50YXJnZXQpO1xuXG4gICAgbGV0IG9wZW5Qcm9kdWN0SXRlbSA9IGZhbHNlO1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBvbiB0aGUgZWxlbWVudCBhcyB3ZWxsIGFzIHRoZSBkb2N1bWVudCBmb2N1c2luLCBzbyB3ZSB3YW50IHRvXG4gICAgLy8gYmUgZXh0cmEgY2FyZWZ1bCB0aGF0IHdlIGFyZSBpbnNpZGUgdGhlIHByb2R1Y3QgY2FyZCBpbiBxdWVzdGlvbi4gV2Ugd2FudCB0aGUgcHJvZHVjdCBjYXJkXG4gICAgLy8gdG8gY2xvc2UgaWYgYW5vdGhlciBwcm9kdWN0IGNhcmQgaGFzIHJlY2VpdmVkIGZvY3VzLlxuICAgIGNvbnN0IHByb2R1Y3RIYXNGb2N1cyA9IHRoaXMuJGVsLmlzKCRjdXJyZW50VGFyZ2V0KVxuICAgICAgfHwgdGhpcy4kZWwuaXMoJHRhcmdldClcbiAgICAgIHx8IHRoaXMuJGVsLmlzKCR0YXJnZXQucGFyZW50cygnLnByb2R1Y3RncmlkLS1pdGVtJykuZmlyc3QoKSlcbiAgICAgIHx8IChldmVudC50eXBlID09PSAnZm9jdXNpbicgJiYgJHRhcmdldFswXS5jb250YWlucyh0aGlzLiRlbFswXSkpO1xuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWVudGVyJyB8fCBldmVudC50eXBlID09PSAnbW91c2VsZWF2ZScpIHtcbiAgICAgIG9wZW5Qcm9kdWN0SXRlbSA9IGV2ZW50LnR5cGUgPT09ICdtb3VzZWVudGVyJztcbiAgICB9IGVsc2UgaWYgKHByb2R1Y3RIYXNGb2N1cykge1xuICAgICAgb3BlblByb2R1Y3RJdGVtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3BlblByb2R1Y3RJdGVtKSB7XG4gICAgICB0aGlzLl9zaG93QWN0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9oaWRlQWN0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIF9zaG93QWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5hY3Rpb25zT3BlbikgeyByZXR1cm47IH1cblxuICAgIGNvbnN0IHsgaGVpZ2h0QmFzZSwgaGVpZ2h0RXhwYW5kZWQgfSA9IHRoaXMuX2dldEhlaWdodHMoKTtcblxuICAgIC8vIExvY2sgaGVpZ2h0cyB0byBwcmV2ZW50IGp1bXBpbmdcbiAgICB0aGlzLiRlbC5jc3MoJ2hlaWdodCcsIGhlaWdodEJhc2UpO1xuICAgIHRoaXMuJGNvbnRlbnQuY3NzKCdoZWlnaHQnLCBoZWlnaHRCYXNlKTtcblxuICAgIC8vIFN0b3JlIGhlaWdodCBmb3Igd2hlbiBob3ZlcmluZyBvdXRcbiAgICB0aGlzLiRlbC5kYXRhKCdiYXNlLWhlaWdodCcsIGhlaWdodEJhc2UpO1xuXG4gICAgLy8gU3RhcnQgYW5pbWF0aW9uLCBhbmQgdHJhbnNpdGlvbiBoZWlnaHQgdG8gZXhwYW5kZWQgaGVpZ2h0XG4gICAgdGhpcy4kZWxcbiAgICAgIC5yZXZlYWxlcignc2hvdycpXG4gICAgICAub25lKCdyZXZlYWxlci1hbmltYXRpbmcucHJvZHVjdC1pdGVtJywgKCkgPT4ge1xuICAgICAgICB0aGlzLiRjb250ZW50LmNzcygnaGVpZ2h0JywgaGVpZ2h0RXhwYW5kZWQpO1xuICAgICAgfSk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5fYWN0aW9uc1RvZ2dsZSk7XG5cbiAgICB0aGlzLmFjdGlvbnNPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIF9oaWRlQWN0aW9ucygpIHtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLiRlbC5kYXRhKCdiYXNlLWhlaWdodCcpO1xuXG4gICAgLypcbiAgICAgIC0gVHJhbnNpdGlvbiBidXR0b25zIHVwLCB1c2luZyBiYXNlIGhlaWdodCBmb3IgYW5pbWF0aW9uXG4gICAgICAtIFJlbW92ZSBoZWlnaHRzIGFmdGVyIGFuaW1hdGlvbiBpcyBjb21wbGV0ZSBpbiBjYXNlIG9mIHJlc2l6ZVxuICAgICAqL1xuICAgIHRoaXMuJGVsXG4gICAgICAucmV2ZWFsZXIoJ2hpZGUnKVxuICAgICAgLm9uZSgncmV2ZWFsZXItYW5pbWF0aW5nJywgKCkgPT4ge1xuICAgICAgICB0aGlzLiRlbC5vZmYoJ3JldmVhbGVyLWFuaW1hdGluZy5wcm9kdWN0LWl0ZW0nKTtcbiAgICAgICAgdGhpcy4kZWwuY3NzKHsgaGVpZ2h0IH0pO1xuICAgICAgICB0aGlzLiRjb250ZW50LmNzcyh7IGhlaWdodCB9KTtcbiAgICAgIH0pLm9uZSgncmV2ZWFsZXItaGlkZScsICgpID0+IHtcbiAgICAgICAgdGhpcy4kZWxcbiAgICAgICAgICAub2ZmKCdyZXZlYWxlci1oaWRlLnByb2R1Y3QtaXRlbScpXG4gICAgICAgICAgLmNzcygnaGVpZ2h0JywgJycpO1xuICAgICAgICB0aGlzLiRjb250ZW50LmNzcygnaGVpZ2h0JywgJycpO1xuICAgICAgfSk7XG5cbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5fYWN0aW9uc1RvZ2dsZSk7XG5cbiAgICB0aGlzLmFjdGlvbnNPcGVuID0gZmFsc2U7XG4gIH1cblxuICBfYWRkVG9DYXJ0KGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCAkYXRjQnV0dG9uID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCB2YXJpYW50SUQgPSAkYXRjQnV0dG9uLmF0dHIoJ2RhdGEtdmFyaWFudC1pZCcpO1xuXG4gICAgY29uc3QgZm9ybURhdGEgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgI
1HZhbHVlOiB2YXJpYW50SUQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncXVhbnRpdHknLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAkYXRjQnV0dG9uLFxuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgbW9uZXlGb3JtYXQ6IHRoaXMucXVpY2tCdXlTZXR0aW5ncy5tb25leV9mb3JtYXQsXG4gICAgICAgIGNhcnRSZWRpcmVjdGlvbjogdGhpcy5xdWlja0J1eVNldHRpbmdzLmNhcnRfcmVkaXJlY3Rpb24sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBBZGRUb0NhcnRGbHlvdXQuaW5pdChmb3JtRGF0YSwgdGhpcy5wcm9kdWN0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICB0aGlzLmV2ZW50cy5mb3JFYWNoKCRlbCA9PiAkZWwub2ZmKCcucHJvZHVjdC1pdGVtJykpO1xuXG4gICAgaWYgKHRoaXMucHJvZHVjdFF1aWNrc2hvcCkge1xuICAgICAgdGhpcy5wcm9kdWN0UXVpY2tzaG9wLnVubG9hZCgpO1xuICAgIH1cblxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLl9hY3Rpb25zVG9nZ2xlKTtcblxuICAgIGlmICh0aGlzLnN3YXRjaGVzKSB7XG4gICAgICB0aGlzLnN3YXRjaGVzLnVubG9hZCgpO1xuICAgIH1cbiAgICB0aGlzLmxhenlMb2FkZXIudW5sb2FkKCk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/components/ProductGridItem.js\n") },
1"./source/scripts/components/ProductQuickshop.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ProductQuickshop; });\n/* harmony import */ var shopify_asyncview__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! shopify-asyncview */ "./node_modules/shopify-asyncview/dist/index.es.js");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shopify-currency-converter */ "./node_modules/shopify-currency-converter/dist/index.js");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var rimg_shopify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rimg-shopify */ "./node_modules/rimg-shopify/dist/index.es.js");\n/* harmony import */ var _Modal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Modal */ "./source/scripts/components/Modal.js");\n/* harmony import */ var _ProductDetails__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ProductDetails */ "./source/scripts/components/ProductDetails.js");\n/* harmony import */ var _RichText__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./RichText */ "./source/scripts/components/RichText.js");\n/* harmony import */ var _helpers_ProductReviews__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../helpers/ProductReviews */ "./source/scripts/helpers/ProductReviews.js");\n/* harmony import */ var _shortcodes_Shortcodes__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../shortcodes/Shortcodes */ "./source/scripts/shortcodes/Shortcodes.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n/**\n * Updates element IDs to ensure they are unique within the document by checking for conflicts.\n * Also checks associated labels and updates the `for` attribute if required.\n * @param {NodeList} idEls Elements to check for ID uniqueness within the document\n * @param {NodeList} labels Labels to update if element with associated ID is updated.\n */\n\nfunction makeIDsUnique(idEls, labels) {\n idEls.forEach(function (idEl) {\n var oldId = idEl.getAttribute(\'id\');\n var duplicateCount = document.querySelectorAll("[id$=\\"".concat(oldId, "\\"]")).length;\n\n if (duplicateCount > 0) {\n var newId = "".concat(duplicateCount).concat(oldId);\n idEl.setAttribute(\'id\', newId); // update label\n\n labels.forEach(function (label) {\n if (label.matches("[for=\\"".concat(oldId, "\\"]"))) {\n label.setAttribute(\'for\', newId);\n }\n });\n }\n });\n}\n\nvar ProductQuickshop =\n/*#__PURE__*/\nfunction () {\n function ProductQuickshop(options) {\n _classCallCheck(this, ProductQuickshop);\n\n this.options = options;\n this.el = null;\n this.modal = null;\n this.richText = null;\n this.productDetails = null;\n this.initialVariant = this.options.initialVariant || null;\n this.isLoaded = false;\n this.loader = null;\n this.isOpen = false;\n }\n /**\n * Sets a variant to be preselected when quickshop is opened\n * @param {integer} variantId - Variant ID to preselect when quickshop is opened\n */\n\n\n _createClass(ProductQuickshop, [{\n key: "setInitialVariant",\n value: function setInitialVariant(variantId) {\n this.initialVariant = variantId;\n }\n }, {\n key: "open",\n value: function open(full) {\n var _this = this;\n\n var loader = !this.isLoaded && this.loader ? this.loader : this.load();\n loader.then(function () {\n var _this$options = _this.options,\n id = _this$options.id,\n url = _this$options.url,\n trigger = _this$options.trigger;\n var modalCallbacks = {\n onClose: function onClose() {\n return _this.close();\n }\n };\n _this.modal = new _Modal__WEBPACK_IMPORTED_MODULE_3__["default"](modalCallbacks);\n\n _this.modal.open("#shopify-section-".concat(id, " [data-product-quickshop-url=\\"").concat(url, "\\"]"), full ? \'quickshop-full\' : \'quickshop-slim\', trigger);\n\n rimg_shopify__WEBPACK_IMPORTED_MODULE_2__["default"].watch(_this.el);\n\n if (window.Shopify && Shopify.PaymentButton) {\n Shopify.PaymentButton.init();\n }\n\n _this.isOpen = true;\n });\n }\n }, {\n key: "close",\n value: function close() {\n var _this2 = this;\n\n if (this.isLoaded || this.loader) {\n var loader = this.loader || Promise.resolve();\n return loader.then(function () {\n if (!_this2.isOpen) {\n return;\n }\n\n if (!_this2.openingAddToCart) {\n var trigger = _this2.options.trigger;\n trigger.focus();\n }\n\n _this2._clearNotification();\n\n _this2.modal.unload();\n\n _this2.isOpen = false;\n });\n }\n\n return Promise.resolve();\n }\n }, {\n key: "unload",\n value: function unload() {\n var _this3 = this;\n\n if (this.isLoaded || this.loader) {\n return this.close().then(function () {\n if (_this3.productDetails) {\n _this3.productDetails.unload();\n }\n\n if (_this3.richText) {\n _this3.richText.unload();\n }\n\n if (_this3.shortcodes) {\n _this3.shortcodes.unload();\n }\n });\n }\n\n return Promise.resolve();\n }\n }, {\n key: "load",\n value: function load() {\n var _this4 = this;\n\n // If we\'re already loaded, return true\n if (this.isLoaded) {\n return Promise.resolve(true);\n } // If we\'re currently loading, return the existing promise\n\n\n if (this.loader) {\n return this.loader;\n }\n\n var _this$options2 = this.options,\n el = _this$options2.el,\n url = _this$options2.url,\n hash = _this$options2.hash;\n this.openingAddToCart = false;\n this.loader = shopify_asyncview__WEBPACK_IMPORTED_MODULE_0__["default"].load(url, {\n view: \'_quickshop\'\n }, {\n hash: hash\n }).then(function (response) {\n var data = response.data,\n html = response.html;\n var context = data.context,\n settings = data.settings,\n product = data.product;\n var container = document.createElement(\'div\');\n container.innerHTML = html;
1\n var formArea = container.querySelector(\'[data-product-form-area]\');\n makeIDsUnique(formArea.querySelectorAll(\'select[id], input[id]\'), formArea.querySelectorAll(\'label[for]\'));\n var gallery = container.querySelector(\'[data-product-gallery]\');\n var details = container.querySelector(\'[data-product-details]\');\n var description = container.querySelector(\'[data-product-description]\');\n _this4._onATCInit = _this4._onATCInit.bind(_this4);\n _this4._onATCError = _this4._onATCError.bind(_this4);\n _this4._onATCSuccess = _this4._onATCSuccess.bind(_this4);\n _this4._onATCClose = _this4._onATCClose.bind(_this4);\n var atcCallbacks = {\n onInit: _this4._onATCInit,\n onError: _this4._onATCError,\n onSuccess: _this4._onATCSuccess,\n onClose: _this4._onATCClose\n };\n _this4.productDetails = new _ProductDetails__WEBPACK_IMPORTED_MODULE_4__["default"]({\n $formArea: $(formArea),\n $gallery: $(gallery),\n $details: $(details),\n atcCallbacks: atcCallbacks,\n context: context,\n settings: settings,\n product: product,\n useHistory: false,\n isQuickshop: true\n });\n _this4.shortcodes = new _shortcodes_Shortcodes__WEBPACK_IMPORTED_MODULE_7__["default"](container);\n\n if (description) {\n _this4.richText = new _RichText__WEBPACK_IMPORTED_MODULE_5__["default"](description);\n }\n\n Object(_helpers_ProductReviews__WEBPACK_IMPORTED_MODULE_6__["default"])();\n var moneyEls = container.querySelectorAll(\'.money\');\n\n for (var i = 0; i < moneyEls.length; i++) {\n shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1___default.a.update(moneyEls[i]);\n }\n\n el.setAttribute(\'data-loaded\', true);\n _this4.el = el.appendChild(container);\n _this4.isLoaded = true;\n }).then(function () {\n _this4.loader = null;\n return true;\n }).catch(function () {\n _this4.loader = null;\n return false;\n });\n return this.loader;\n }\n }, {\n key: "_setNotification",\n value: function _setNotification(notification) {\n var isVisible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var shouldFocus = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (!this.isLoaded) {\n return;\n }\n\n var notificationContainer = this.el.querySelector(\'[data-product-quickshop-message]\');\n notificationContainer.appendChild(notification);\n\n if (isVisible) {\n notificationContainer.classList.add(\'visible\');\n } else {\n notificationContainer.classList.remove(\'visible\');\n }\n\n if (shouldFocus) {\n notification.focus();\n }\n }\n }, {\n key: "_clearNotification",\n value: function _clearNotification() {\n if (!this.isLoaded) {\n return;\n }\n\n var notificationContainer = this.el.querySelector(\'[data-product-quickshop-message]\');\n notificationContainer.classList.remove(\'visible\');\n\n while (notificationContainer.firstChild) {\n notificationContainer.removeChild(notificationContainer.firstChild);\n }\n }\n }, {\n key: "_onATCInit",\n value: function _onATCInit() {\n this.openingAddToCart = true;\n\n this._clearNotification();\n }\n }, {\n key: "_onATCError",\n value: function _onATCError(error) {\n var notification = document.createElement(\'div\');\n notification.classList.add(\'product-message--error\');\n notification.setAttribute(\'tabindex\', \'-1\');\n notification.innerHTML = error;\n\n this._setNotification(notification, true, true);\n }\n }, {\n key: "_onATCSuccess",\n value: function _onATCSuccess() {\n this.close();\n }\n }, {\n key: "_onATCClose",\n value: function _onATCClose() {\n var trigger = this.options.trigger;\n trigger.focus();\n }\n }]);\n\n return ProductQuickshop;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL1Byb2R1Y3RRdWlja3
1Nob3AuanM/N2Y0YyJdLCJuYW1lcyI6WyJtYWtlSURzVW5pcXVlIiwiaWRFbHMiLCJsYWJlbHMiLCJmb3JFYWNoIiwiaWRFbCIsIm9sZElkIiwiZ2V0QXR0cmlidXRlIiwiZHVwbGljYXRlQ291bnQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJuZXdJZCIsInNldEF0dHJpYnV0ZSIsImxhYmVsIiwibWF0Y2hlcyIsIlByb2R1Y3RRdWlja3Nob3AiLCJvcHRpb25zIiwiZWwiLCJtb2RhbCIsInJpY2hUZXh0IiwicHJvZHVjdERldGFpbHMiLCJpbml0aWFsVmFyaWFudCIsImlzTG9hZGVkIiwibG9hZGVyIiwiaXNPcGVuIiwidmFyaWFudElkIiwiZnVsbCIsImxvYWQiLCJ0aGVuIiwiaWQiLCJ1cmwiLCJ0cmlnZ2VyIiwibW9kYWxDYWxsYmFja3MiLCJvbkNsb3NlIiwiY2xvc2UiLCJNb2RhbCIsIm9wZW4iLCJyaW1nIiwid2F0Y2giLCJ3aW5kb3ciLCJTaG9waWZ5IiwiUGF5bWVudEJ1dHRvbiIsImluaXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9wZW5pbmdBZGRUb0NhcnQiLCJmb2N1cyIsIl9jbGVhck5vdGlmaWNhdGlvbiIsInVubG9hZCIsInNob3J0Y29kZXMiLCJoYXNoIiwiQXN5bmNWaWV3IiwidmlldyIsInJlc3BvbnNlIiwiZGF0YSIsImh0bWwiLCJjb250ZXh0Iiwic2V0dGluZ3MiLCJwcm9kdWN0IiwiY29udGFpbmVyIiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsImZvcm1BcmVhIiwicXVlcnlTZWxlY3RvciIsImdhbGxlcnkiLCJkZXRhaWxzIiwiZGVzY3JpcHRpb24iLCJfb25BVENJbml0IiwiYmluZCIsIl9vbkFUQ0Vycm9yIiwiX29uQVRDU3VjY2VzcyIsIl9vbkFUQ0Nsb3NlIiwiYXRjQ2FsbGJhY2tzIiwib25Jbml0Iiwib25FcnJvciIsIm9uU3VjY2VzcyIsIlByb2R1Y3REZXRhaWxzIiwiJGZvcm1BcmVhIiwiJCIsIiRnYWxsZXJ5IiwiJGRldGFpbHMiLCJ1c2VIaXN0b3J5IiwiaXNRdWlja3Nob3AiLCJTaG9ydGNvZGVzIiwiUmljaFRleHQiLCJpbml0U2hvcGlmeVByb2R1Y3RSZXZpZXdzIiwibW9uZXlFbHMiLCJpIiwiQ3VycmVuY3lDb252ZXJ0ZXIiLCJ1cGRhdGUiLCJhcHBlbmRDaGlsZCIsImNhdGNoIiwibm90aWZpY2F0aW9uIiwiaXNWaXNpYmxlIiwic2hvdWxkRm9jdXMiLCJub3RpZmljYXRpb25Db250YWluZXIiLCJjbGFzc0xpc3QiLCJhZGQiLCJyZW1vdmUiLCJmaXJzdENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJlcnJvciIsIl9zZXROb3RpZmljYXRpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBTUEsU0FBU0EsYUFBVCxDQUF1QkMsS0FBdkIsRUFBOEJDLE1BQTlCLEVBQXNDO0FBQ3BDRCxPQUFLLENBQUNFLE9BQU4sQ0FBYyxVQUFBQyxJQUFJLEVBQUk7QUFDcEIsUUFBTUMsS0FBSyxHQUFHRCxJQUFJLENBQUNFLFlBQUwsQ0FBa0IsSUFBbEIsQ0FBZDtBQUNBLFFBQU1DLGNBQWMsR0FBR0MsUUFBUSxDQUFDQyxnQkFBVCxrQkFBbUNKLEtBQW5DLFVBQThDSyxNQUFyRTs7QUFFQSxRQUFJSCxjQUFjLEdBQUcsQ0FBckIsRUFBd0I7QUFDdEIsVUFBTUksS0FBSyxhQUFNSixjQUFOLFNBQXVCRixLQUF2QixDQUFYO0FBQ0FELFVBQUksQ0FBQ1EsWUFBTCxDQUFrQixJQUFsQixFQUF3QkQsS0FBeEIsRUFGc0IsQ0FJdEI7O0FBQ0FULFlBQU0sQ0FBQ0MsT0FBUCxDQUFlLFVBQUFVLEtBQUssRUFBSTtBQUN0QixZQUFJQSxLQUFLLENBQUNDLE9BQU4sa0JBQXVCVCxLQUF2QixTQUFKLEVBQXVDO0FBQ3JDUSxlQUFLLENBQUNELFlBQU4sQ0FBbUIsS0FBbkIsRUFBMEJELEtBQTFCO0FBQ0Q7QUFDRixPQUpEO0FBS0Q7Q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GUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvUHJvZHVjdFF1aWNrc2hvcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBc3luY1ZpZXcgZnJvbSAnc2hvcGlmeS1hc3luY3ZpZXcnO1xuaW1wb3J0IEN1cnJlbmN5Q29udmVydGVyIGZyb20gJ3Nob3BpZnktY3VycmVuY3ktY29udmVydGVyJztcbmltcG9ydCByaW1nIGZyb20gJ3JpbWctc2hvcGlmeSc7XG5pbXBvcnQgTW9kYWwgZnJvbSAnLi9Nb2RhbCc7XG5pbXBvcnQgUHJvZHVjdERldGFpbHMgZnJvbSAnLi9Qcm9kdWN0RGV0YWlscyc7XG5pbXBvcnQgUmljaFRleHQgZnJvbSAnLi9SaWNoVGV4dCc7XG5pbXBvcnQgaW5pdFNob3BpZnlQcm9kdWN0UmV2aWV3cyBmcm9tICcuLi9oZWxwZXJzL1Byb2R1Y3RSZXZpZXdzJztcbmltcG9ydCBTaG9ydGNvZGVzIGZyb20gJy4uL3Nob3J0Y29kZXMvU2hvcnRjb2Rlcyc7XG5cbi8qKlxuICogVXBkYXRlcyBlbGVtZW50IElEcyB0byBlbnN1cmUgdGhleSBhcmUgdW5pcXVlIHdpdGhpbiB0aGUgZG9jdW1lbnQgYnkgY2hlY2tpbmcgZm9yIGNvbmZsaWN0cy5cbiAqIEFsc28gY2hlY2tzIGFzc29jaWF0ZWQgbGFiZWxzIGFuZCB1cGRhdGVzIHRoZSBgZm9yYCBhdHRyaWJ1dGUgaWYgcmVxdWlyZWQuXG4gKiBAcGFyYW0ge05vZGVMaXN0fSBpZEVscyBFbGVtZW50cyB0byBjaGVjayBmb3IgSUQgdW5pcXVlbmVzcyB3aXRoaW4gdGhlIGRvY3VtZW50XG4gKiBAcGFyYW0ge05vZGVMaXN0fSBsYWJlbHMgTGFiZWxzIHRvIHVwZGF0ZSBpZiBlbGVtZW50IHdpdGggYXNzb2NpYXRlZCBJRCBpcyB1cGRhdGVkLlxuICovXG5mdW5jdGlvbiBtYWtlSURzVW5pcXVlKGlkRWxzLCBsYWJlbHMpIHtcbiAgaWRFbHMuZm9yRWFjaChpZEVsID0+IHtcbiAgICBjb25zdCBvbGRJZCA9IGlkRWwuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZUNvdW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2lkJD1cIiR7b2xkSWR9XCJdYCkubGVuZ3RoO1xuXG4gICAgaWYgKGR1cGxpY2F0ZUNvdW50ID4gMCkge1xuICAgICAgY29uc3QgbmV3SWQgPSBgJHtkdXBsaWNhdGVDb3VudH0ke29sZElkfWA7XG4gICAgICBpZEVsLnNldEF0dHJpYnV0ZSgnaWQnLCBuZXdJZCk7XG5cbiAgICAgIC8vIHVwZGF0ZSBsYWJlbFxuICAgICAgbGFiZWxzLmZvckVhY2gobGFiZWwgPT4ge1xuICAgICAgICBpZiAobGFiZWwubWF0Y2hlcyhgW2Zvcj1cIiR7b2xkSWR9XCJdYCkpIHtcbiAgICAgICAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoJ2ZvcicsIG5ld0lkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdFF1aWNrc2hvcCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuZWwgPSBudWxsO1xuICAgIHRoaXMubW9kYWwgPSBudWxsO1xuICAgIHRoaXMucmljaFRleHQgPSBudWxsO1xuICAgIHRoaXMucHJvZHVjdERldGFpbHMgPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbFZhcmlhbnQgPSB0aGlzLm9wdGlvbnMuaW5pdGlhbFZhcmlhbnQgfHwgbnVsbDtcblxuICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxvYWRlciA9IG51bGw7XG5cbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSB2YXJpYW50IHRvIGJlIHByZXNlbGVjdGVkIHdoZW4gcXVpY2tzaG9wIGlzIG9wZW5lZFxuICAgKiBAcGFyYW0ge2ludGVnZXJ9IHZhcmlhbnRJZCAtIFZhcmlhbnQgSUQgdG8gcHJlc2VsZWN0IHdoZW4gcXVpY2tzaG9wIGlzIG9wZW5lZFxuICAgKi9cbiAgc2V0SW5pdGlhbFZhcmlhbnQodmFyaWFudElkKSB7XG4gICAgdGhpcy5pbml0aWFsVmFyaWFudCA9IHZhcmlhbnRJZDtcbiAgfVxuXG4gIG9wZW4oZnVsbCkge1xuICAgIGNvbnN0IGxvYWRlciA9ICF0aGlzLmlzTG9hZGVkICYmIHRoaXMubG9hZGVyID8gdGhpcy5sb2FkZXIgOiB0aGlzLmxvYWQoKTtcblxuICAgIGxvYWRlci50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IHsgaWQsIHVybCwgdHJpZ2dlciB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgY29uc3QgbW9kYWxDYWxsYmFja3MgPSB7XG4gICAgICAgIG9uQ2xvc2U6ICgpID0+IHRoaXMuY2xvc2UoKSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMubW9kYWwgPSBuZXcgTW9kYWwobW9kYWxDYWxsYmFja3MpO1xuICAgICAgdGhpcy5tb2R
1hbC5vcGVuKFxuICAgICAgICBgI3Nob3BpZnktc2VjdGlvbi0ke2lkfSBbZGF0YS1wcm9kdWN0LXF1aWNrc2hvcC11cmw9XCIke3VybH1cIl1gLFxuICAgICAgICBmdWxsID8gJ3F1aWNrc2hvcC1mdWxsJyA6ICdxdWlja3Nob3Atc2xpbScsXG4gICAgICAgIHRyaWdnZXIsXG4gICAgICApO1xuXG4gICAgICByaW1nLndhdGNoKHRoaXMuZWwpO1xuXG4gICAgICBpZiAod2luZG93LlNob3BpZnkgJiYgU2hvcGlmeS5QYXltZW50QnV0dG9uKSB7XG4gICAgICAgIFNob3BpZnkuUGF5bWVudEJ1dHRvbi5pbml0KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGVkIHx8IHRoaXMubG9hZGVyKSB7XG4gICAgICBjb25zdCBsb2FkZXIgPSB0aGlzLmxvYWRlciB8fCBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgcmV0dXJuIGxvYWRlci50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5vcGVuaW5nQWRkVG9DYXJ0KSB7XG4gICAgICAgICAgY29uc3QgeyB0cmlnZ2VyIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgICAgdHJpZ2dlci5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2xlYXJOb3RpZmljYXRpb24oKTtcbiAgICAgICAgdGhpcy5tb2RhbC51bmxvYWQoKTtcblxuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGVkIHx8IHRoaXMubG9hZGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wcm9kdWN0RGV0YWlscykge1xuICAgICAgICAgIHRoaXMucHJvZHVjdERldGFpbHMudW5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yaWNoVGV4dCkge1xuICAgICAgICAgIHRoaXMucmljaFRleHQudW5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaG9ydGNvZGVzKSB7XG4gICAgICAgICAgdGhpcy5zaG9ydGNvZGVzLnVubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBsb2FkKCkge1xuICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgbG9hZGVkLCByZXR1cm4gdHJ1ZVxuICAgIGlmICh0aGlzLmlzTG9hZGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH1cblxuICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBsb2FkaW5nLCByZXR1cm4gdGhlIGV4aXN0aW5nIHByb21pc2VcbiAgICBpZiAodGhpcy5sb2FkZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlcjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGVsLCB1cmwsIGhhc2ggfSA9IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLm9wZW5pbmdBZGRUb0NhcnQgPSBmYWxzZTtcblxuICAgIHRoaXMubG9hZGVyID0gQXN5bmNWaWV3LmxvYWQodXJsLCB7IHZpZXc6ICdfcXVpY2tzaG9wJyB9LCB7IGhhc2ggfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBodG1sIH0gPSByZXNwb25zZTtcbiAgICAgICAgY29uc3QgeyBjb250ZXh0LCBzZXR0aW5ncywgcHJvZHVjdCB9ID0gZGF0YTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWw7XG5cbiAgICAgICAgY29uc3QgZm9ybUFyZWEgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignW2RhdGEtcHJvZHVjdC1mb3JtLWFyZWFdJyk7XG4gICAgICAgIG1ha2VJRHNVbmlxdWUoXG4gICAgICAgICAgZm9ybUFyZWEucXVlcnlTZWxlY3RvckFsbCgnc2VsZWN0W2lkXSwgaW5wdXRbaWRdJyksXG4gICAgICAgICAgZm9ybUFyZWEucXVlcnlTZWxlY3RvckFsbCgnbGFiZWxbZm9yXScpLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBnYWxsZXJ5ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXByb2R1Y3QtZ2FsbGVyeV0nKTtcbiAgICAgICAgY29uc3QgZGV0YWlscyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbZGF0YS1wcm9kdWN0LWRldGFpbHNdJyk7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgJ1tkYXRhLXByb2R1Y3QtZGVzY3JpcHRpb25dJyxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9vbkFUQ0luaXQgPSB0aGlzLl9vbkFUQ0luaXQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fb25BVENFcnJvciA9IHRoaXMuX29uQVRDRXJyb3IuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5fb25BVENTdWNjZXNzID0gdGhpcy5fb25BVENTdWNjZXNzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuX29uQVRDQ2xvc2UgPSB0aGlzLl9vbkFUQ0Nsb3NlLmJpbmQodGhpcyk7XG5cbiAgICAgICAgY29uc3QgYXRjQ2FsbGJhY2tzID0ge1xuICAgICAgICAgIG9uSW5pdDogdGhpcy5fb25BVENJbml0LFxuICAgICAgICAgIG9uRXJyb3I6IHRoaXMuX29uQVRDRXJyb3IsXG4gICAgICAgICAgb25TdWNjZXNzOiB0aGlzLl9vbkFUQ1N1Y2Nlc3MsXG4gICAgICAgICAgb25DbG9zZTogdGhpcy5fb25BVENDbG9zZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnByb2R1Y3REZXRhaWxzID0gbmV3IFByb2R1Y3REZXRhaWxzKHtcbiAgICAgICAgICAkZm9ybUFyZWE6ICQoZm9ybUFyZWEpLFxuICAgICAgICAgICRnYWxsZXJ5OiAkKGdhbGxlcnkpLFxuICAgICAgICAgICRkZXRhaWxzOiAkKGRldGFpbHMpLFxuICAgICAgICAgIGF0Y0NhbGxiYWNrcyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgIHByb2R1Y3QsXG4gICAgICAgICAgdXNlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgICAgaXNRdWlja3
1Nob3A6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2hvcnRjb2RlcyA9IG5ldyBTaG9ydGNvZGVzKGNvbnRhaW5lcik7XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5yaWNoVGV4dCA9IG5ldyBSaWNoVGV4dChkZXNjcmlwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpbml0U2hvcGlmeVByb2R1Y3RSZXZpZXdzKCk7XG5cbiAgICAgICAgY29uc3QgbW9uZXlFbHMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLm1vbmV5Jyk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb25leUVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIEN1cnJlbmN5Q29udmVydGVyLnVwZGF0ZShtb25leUVsc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbG9hZGVkJywgdHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5lbCA9IGVsLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBudWxsO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRlciA9IG51bGw7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMubG9hZGVyO1xuICB9XG5cbiAgX3NldE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIGlzVmlzaWJsZSA9IGZhbHNlLCBzaG91bGRGb2N1cyA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uQ29udGFpbmVyID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJ1tkYXRhLXByb2R1Y3QtcXVpY2tzaG9wLW1lc3NhZ2VdJyxcbiAgICApO1xuXG4gICAgbm90aWZpY2F0aW9uQ29udGFpbmVyLmFwcGVuZENoaWxkKG5vdGlmaWNhdGlvbik7XG5cbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICBub3RpZmljYXRpb25Db250YWluZXIuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25Db250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRGb2N1cykge1xuICAgICAgbm90aWZpY2F0aW9uLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgX2NsZWFyTm90aWZpY2F0aW9uKCkge1xuICAgIGlmICghdGhpcy5pc0xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbkNvbnRhaW5lciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihcbiAgICAgICdbZGF0YS1wcm9kdWN0LXF1aWNrc2hvcC1tZXNzYWdlXScsXG4gICAgKTtcblxuICAgIG5vdGlmaWNhdGlvbkNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyk7XG5cbiAgICB3aGlsZSAobm90aWZpY2F0aW9uQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIG5vdGlmaWNhdGlvbkNvbnRhaW5lci5yZW1vdmVDaGlsZChub3RpZmljYXRpb25Db250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICB9XG5cbiAgX29uQVRDSW5pdCgpIHtcbiAgICB0aGlzLm9wZW5pbmdBZGRUb0NhcnQgPSB0cnVlO1xuICAgIHRoaXMuX2NsZWFyTm90aWZpY2F0aW9uKCk7XG4gIH1cblxuICBfb25BVENFcnJvcihlcnJvcikge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgbm90aWZpY2F0aW9uLmNsYXNzTGlzdC5hZGQoJ3Byb2R1Y3QtbWVzc2FnZS0tZXJyb3InKTtcbiAgICBub3RpZmljYXRpb24uc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgIG5vdGlmaWNhdGlvbi5pbm5lckhUTUwgPSBlcnJvcjtcblxuICAgIHRoaXMuX3NldE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHRydWUsIHRydWUpO1xuICB9XG5cbiAgX29uQVRDU3VjY2VzcygpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBfb25BVENDbG9zZSgpIHtcbiAgICBjb25zdCB7IHRyaWdnZXIgfSA9IHRoaXMub3B0aW9ucztcbiAgICB0cmlnZ2VyLmZvY3VzKCk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/components/ProductQuickshop.js\n') },
1"./source/scripts/components/ProductRowScroller.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ProductRowScroller; });\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! just-debounce */ "./node_modules/just-debounce/index.js");\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(just_debounce__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flickity */ "./node_modules/flickity/js/index.js");\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flickity__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Layout */ "./source/scripts/Layout.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar ProductRowScroller =\n/*#__PURE__*/\nfunction () {\n function ProductRowScroller(productRow) {\n _classCallCheck(this, ProductRowScroller);\n\n this.$window = $(window);\n this.flickity = null;\n this.productRow = productRow;\n this.$productRow = $(this.productRow); // Activate flickity on mobile\n\n this._mobileSlider = this._mobileSlider.bind(this);\n _Layout__WEBPACK_IMPORTED_MODULE_2__["default"].onBreakpointChange(this._mobileSlider);\n\n this._mobileSlider();\n }\n\n _createClass(ProductRowScroller, [{\n key: "unload",\n value: function unload() {\n _Layout__WEBPACK_IMPORTED_MODULE_2__["default"].offBreakpointChange(this._mobileSlider);\n\n this._destroyFlickity();\n }\n }, {\n key: "_initFlickity",\n value: function _initFlickity() {\n this.flickity = new flickity__WEBPACK_IMPORTED_MODULE_1___default.a(this.productRow, {\n cellSelector: \'.productgrid--item\',\n contain: true,\n freeScroll: true,\n percentPosition: false,\n prevNextButtons: false,\n pageDots: false,\n setGallerySize: false\n });\n\n this._bindSlider();\n }\n }, {\n key: "_destroyFlickity",\n value: function _destroyFlickity() {\n if (!this.flickity) {\n return;\n }\n\n this.$window.off(\'.product-row\');\n this.$productRow.off(\'.product-row\');\n this.flickity.destroy();\n this.flickity = null;\n }\n }, {\n key: "_mobileSlider",\n value: function _mobileSlider() {\n // If is Large layout, attempt to destroy flickity\n if (_Layout__WEBPACK_IMPORTED_MODULE_2__["default"].isBreakpoint(\'L\')) {\n this._destroyFlickity();\n\n return;\n } // Is XS/S/M, and flickity is init\'d -- do nothing\n\n\n if (this.flickity) {\n return;\n } // Is XS/S/M, and flickity is not init\'d\n\n\n this._initFlickity();\n }\n }, {\n key: "_bindSlider",\n value: function _bindSlider() {\n var _this = this;\n\n var $slider = this.$productRow.find(\'.flickity-slider\');\n this.$window.on(\'resize.product-row\', just_debounce__WEBPACK_IMPORTED_MODULE_0___default()(function () {\n _this.$productRow.trigger(\'heightUpdate.product-row\');\n }));\n this.flickity.on(\'cellSelect\', function () {\n _this.$productRow.trigger(\'heightUpdate.product-row\');\n });\n this.$productRow.on(\'heightUpdate.product-row\', function () {\n if (!_this.flickity) {\n return;\n }\n\n $slider.height(Math.ceil(_this.flickity.maxCellHeight));\n }); // Sets the Slider to the height of the first slide\n\n this.$productRow.trigger(\'heightUpdate.product-row\');\n }\n }]);\n\n return ProductRowScroller;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL1Byb2R1Y3RSb3dTY3JvbGxlci5qcz8xNzI5Il0sIm5hbWVzIjpbIlByb2R1Y3RSb3dTY3JvbGxlciIsInByb2R1Y3RSb3ciLCIkd2luZG93IiwiJCIsIndpbmRvdyIsImZsaWNraXR5IiwiJHByb2R1Y3RSb3ciLCJfbW9iaWxlU2xpZGVyIiwiYmluZCIsImxheW91dCIsIm9uQnJlYWtwb2ludENoYW5nZSIsIm9mZkJyZWFrcG9pbnRDaGFuZ2UiLCJfZGVzdHJveUZsaWNraXR5IiwiRmxpY2tpdHkiLCJjZWxsU2VsZWN0b3IiLCJjb250YWluIiwiZnJlZVNjcm9sbCIsInBlcmNlbnRQb3NpdGlvbiIsInByZXZOZXh0QnV0dG9ucyIsInBhZ2VEb3RzIiwic2V0R2FsbGVyeVNpemUiLCJfYmluZFNsaWRlciIsIm9mZiIsImRlc3Ryb3kiLCJpc0JyZWFrcG9pbnQiLCJfaW5pdEZsaWNraXR5IiwiJHNsaWRlciIsImZpbmQiLCJvbiIsImRlYm91bmNlIiwidHJpZ2dlciIsImhlaWdodCIsIk1hdGgiLCJjZWls
1IiwibWF4Q2VsbEhlaWdodCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTs7SUFFcUJBLGtCOzs7QUFDbkIsOEJBQVlDLFVBQVosRUFBd0I7QUFBQTs7QUFDdEIsU0FBS0MsT0FBTCxHQUFlQyxDQUFDLENBQUNDLE1BQUQsQ0FBaEI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLElBQWhCO0FBQ0EsU0FBS0osVUFBTCxHQUFrQkEsVUFBbEI7QUFDQSxTQUFLSyxXQUFMLEdBQW1CSCxDQUFDLENBQUMsS0FBS0YsVUFBTixDQUFwQixDQUpzQixDQU10Qjs7QUFDQSxTQUFLTSxhQUFMLEdBQXFCLEtBQUtBLGFBQUwsQ0FBbUJDLElBQW5CLENBQXdCLElBQXhCLENBQXJCO0FBQ0FDLG1EQUFNLENBQUNDLGtCQUFQLENBQTBCLEtBQUtILGFBQS9COztBQUVBLFNBQUtBLGFBQUw7QUFDRDs7Ozs2QkFFUTtBQUNQRSxxREFBTSxDQUFDRSxtQkFBUCxDQUEyQixLQUFLSixhQUFoQzs7QUFDQSxXQUFLSyxnQkFBTDtBQUNEOzs7b0NBRWU7QUFDZCxXQUFLUCxRQUFMLEdBQWdCLElBQUlRLCtDQUFKLENBQWEsS0FBS1osVUFBbEIsRUFBOEI7QUFDNUNhLG9CQUFZLEVBQUUsb0JBRDhCO0FBRTVDQyxlQUFPLEVBQUUsSUFGbUM7QUFHNUNDLGtCQUFVLEVBQUUsSUFIZ0M7QUFJNUNDLHVCQUFlLEVBQUUsS0FKMkI7QUFLNUNDLHVCQUFlLEVBQUUsS0FMMkI7QUFNNUNDLGdCQUFRLEVBQUUsS0FOa0M7QUFPNUNDLHNCQUFjLEVBQUU7QUFQNEIsT0FBOUIsQ0FBaEI7O0FBVUEsV0FBS0MsV0FBTDtBQUNEOzs7dUNBRWtCO0FBQ2pCLFVBQUksQ0FBQyxLQUFLaEIsUUFBVixFQUFvQjtB
1QUNsQjtBQUNEOztBQUVELFdBQUtILE9BQUwsQ0FBYW9CLEdBQWIsQ0FBaUIsY0FBakI7QUFDQSxXQUFLaEIsV0FBTCxDQUFpQmdCLEdBQWpCLENBQXFCLGNBQXJCO0FBRUEsV0FBS2pCLFFBQUwsQ0FBY2tCLE9BQWQ7QUFDQSxXQUFLbEIsUUFBTCxHQUFnQixJQUFoQjtBQUNEOzs7b0NBRWU7QUFDZDtBQUNBLFVBQUlJLCtDQUFNLENBQUNlLFlBQVAsQ0FBb0IsR0FBcEIsQ0FBSixFQUE4QjtBQUM1QixhQUFLWixnQkFBTDs7QUFDQTtBQUNELE9BTGEsQ0FPZDs7O0FBQ0EsVUFBSSxLQUFLUCxRQUFULEVBQW1CO0FBQ2pCO0FBQ0QsT0FWYSxDQVlkOzs7QUFDQSxXQUFLb0IsYUFBTDtBQUNEOzs7a0NBRWE7QUFBQTs7QUFDWixVQUFNQyxPQUFPLEdBQUcsS0FBS3BCLFdBQUwsQ0FBaUJxQixJQUFqQixDQUFzQixrQkFBdEIsQ0FBaEI7QUFFQSxXQUFLekIsT0FBTCxDQUFhMEIsRUFBYixDQUNFLG9CQURGLEVBRUVDLG9EQUFRLENBQUMsWUFBTTtBQUNiLGFBQUksQ0FBQ3ZCLFdBQUwsQ0FBaUJ3QixPQUFqQixDQUF5QiwwQkFBekI7QUFDRCxPQUZPLENBRlY7QUFPQSxXQUFLekIsUUFBTCxDQUFjdUIsRUFBZCxDQUFpQixZQUFqQixFQUErQixZQUFNO0FBQ25DLGFBQUksQ0FBQ3RCLFdBQUwsQ0FBaUJ3QixPQUFqQixDQUF5QiwwQkFBekI7QUFDRCxPQUZEO0FBSUEsV0FBS3hCLFdBQUwsQ0FBaUJzQixFQUFqQixDQUFvQiwwQkFBcEIsRUFBZ0QsWUFBTTtBQUNwRCxZQUFJLENBQUMsS0FBSSxDQUFDdkIsUUFBVixFQUFvQjtBQUNsQjtBQUNEOztBQUVEcUIsZUFBTyxDQUFDSyxNQUFSLENBQWVDLElBQUksQ0FBQ0MsSUFBTCxDQUFVLEtBQUksQ0FBQzVCLFFBQUwsQ0FBYzZCLGFBQXhCLENBQWY7QUFDRCxPQU5ELEVBZFksQ0FzQlo7O0FBQ0EsV0FBSzVCLFdBQUwsQ0FBaUJ3QixPQUFqQixDQUF5QiwwQkFBekI7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvUHJvZHVjdFJvd1Njcm9sbGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlYm91bmNlIGZyb20gJ2p1c3QtZGVib3VuY2UnO1xuaW1wb3J0IEZsaWNraXR5IGZyb20gJ2ZsaWNraXR5JztcblxuaW1wb3J0IGxheW91dCBmcm9tICcuLi9MYXlvdXQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9kdWN0Um93U2Nyb2xsZXIge1xuICBjb25zdHJ1Y3Rvcihwcm9kdWN0Um93KSB7XG4gICAgdGhpcy4kd2luZG93ID0gJCh3aW5kb3cpO1xuICAgIHRoaXMuZmxpY2tpdHkgPSBudWxsO1xuICAgIHRoaXMucHJvZHVjdFJvdyA9IHByb2R1Y3RSb3c7XG4gICAgdGhpcy4kcHJvZHVjdFJvdyA9ICQodGhpcy5wcm9kdWN0Um93KTtcblxuICAgIC8vIEFjdGl2YXRlIGZsaWNraXR5IG9uIG1vYmlsZVxuICAgIHRoaXMuX21vYmlsZVNsaWRlciA9IHRoaXMuX21vYmlsZVNsaWRlci5iaW5kKHRoaXMpO1xuICAgIGxheW91dC5vbkJyZWFrcG9pbnRDaGFuZ2UodGhpcy5fbW9iaWxlU2xpZGVyKTtcblxuICAgIHRoaXMuX21vYmlsZVNsaWRlcigpO1xuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIGxheW91dC5vZmZCcmVha3BvaW50Q2hhbmdlKHRoaXMuX21vYmlsZVNsaWRlcik7XG4gICAgdGhpcy5fZGVzdHJveUZsaWNraXR5KCk7XG4gIH1cblxuICBfaW5pdEZsaWNraXR5KCkge1xuICAgIHRoaXMuZmxpY2tpdHkgPSBuZXcgRmxpY2tpdHkodGhpcy5wcm9kdWN0Um93LCB7XG4gICAgICBjZWxsU2VsZWN0b3I6ICcucHJvZHVjdGdyaWQtLWl0ZW0nLFxuICAgICAgY29udGFpbjogdHJ1ZSxcbiAgICAgIGZyZWVTY3JvbGw6IHRydWUsXG4gICAgICBwZXJjZW50UG9zaXRpb246IGZhbHNlLFxuICAgICAgcHJldk5leHRCdXR0b25zOiBmYWxzZSxcbiAgICAgIHBhZ2VEb3RzOiBmYWxzZSxcbiAgICAgIHNldEdhbGxlcnlTaXplOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHRoaXMuX2JpbmRTbGlkZXIoKTtcbiAgfVxuXG4gIF9kZXN0cm95RmxpY2tpdHkoKSB7XG4gICAgaWYgKCF0aGlzLmZsaWNraXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4kd2luZG93Lm9mZignLnByb2R1Y3Qtcm93Jyk7XG4gICAgdGhpcy4kcHJvZHVjdFJvdy5vZmYoJy5wcm9kdWN0LXJvdycpO1xuXG4gICAgdGhpcy5mbGlja2l0eS5kZXN0cm95KCk7XG4gICAgdGhpcy5mbGlja2l0eSA9IG51bGw7XG4gIH1cblxuICBfbW9iaWxlU2xpZGVyKCkge1xuICAgIC8vIElmIGlzIExhcmdlIGxheW91dCwgYXR0ZW1wdCB0byBkZXN0cm95IGZsaWNraXR5XG4gICAgaWYgKGxheW91dC5pc0JyZWFrcG9pbnQoJ0wnKSkge1xuICAgICAgdGhpcy5fZGVzdHJveUZsaWNraXR5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSXMgWFMvUy9NLCBhbmQgZmxpY2tpdHkgaXMgaW5pdCdkIC0tIGRvIG5vdGhpbmdcbiAgICBpZiAodGhpcy5mbGlja2l0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElzIFhTL1MvTSwgYW5kIGZsaWNraXR5IGlzIG5vdCBpbml0J2RcbiAgICB0aGlzLl9pbml0RmxpY2tpdHkoKTtcbiAgfVxuXG4gIF9iaW5kU2xpZGVyKCkge1xuICAgIGNvbnN0ICRzbGlkZXIgPSB0aGlzLiRwcm9kdWN0Um93LmZpbmQoJy5mbGlja2l0eS1zbGlkZXInKTtcblxuICAgIHRoaXMuJHdpbmRvdy5vbihcbiAgICAgICdyZXNpemUucHJvZHVjdC1yb3cnLFxuICAgICAgZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICB0aGlzLiRwcm9kdWN0Um93LnRyaWdnZXIoJ2hlaWdodFVwZGF0ZS5wcm9kdWN0LXJvdycpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuZmxpY2tpdHkub24oJ2NlbGxTZWxlY3QnLCAoKSA9PiB7XG4gICAgICB0aGlzLiRwcm9kdWN0Um93LnRyaWdnZXIoJ2hlaWdodFVwZGF0ZS5wcm9kdWN0LXJvdycpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kcHJvZHVjdFJvdy5vbignaGVpZ2h0VXBkYXRlLnByb2R1Y3Qtcm93JywgKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZsaWNraXR5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJHNsaWRlci5oZWlnaHQoTWF0aC5jZWlsKHRoaXMuZmxpY2tpdHkubWF4Q2VsbEhlaWdodCkpO1xuICAgIH0pO1xuXG4gICAgLy8gU2V0cyB0aGUgU2xpZGVyIHRvIHRoZSBoZWlnaHQgb2YgdGhlIGZpcnN0IHNsaWRlXG4gICAgdGhpcy4kcHJvZHVjdFJvdy50cmlnZ2VyKCdoZWlnaHRVcGRhdGUucHJvZHVjdC1yb3cnKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/components/ProductRowScroller.js\n') },
1"./source/scripts/components/ProductSlideshow.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ProductGallery; });\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flickity */ \"./node_modules/flickity/js/index.js\");\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flickity__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _helpers_flickityHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/flickityHelper */ \"./source/scripts/helpers/flickityHelper.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar ProductGallery =\n/*#__PURE__*/\nfunction () {\n function ProductGallery(_ref) {\n var $slideshow = _ref.$slideshow;\n\n _classCallCheck(this, ProductGallery);\n\n // Gallery\n this.flickity = null;\n this.$slideshow = $slideshow;\n this.slides = '[data-product-image]';\n this.$slides = this.$slideshow.find(this.slides);\n this.slideImages = this.$slideshow.find('[data-rimg]');\n this.lazyLoad = !document.querySelector('[data-lazy-loading-disabled]');\n this.slideImageLoaded = this._onSlideImageLoaded.bind(this);\n\n this._init();\n }\n\n _createClass(ProductGallery, [{\n key: \"unload\",\n value: function unload() {\n for (var i = 0; i < this.slideImages.length; i += 1) {\n // const eventName = this.lazyLoad ? 'rimg:load' : 'load';\n var eventName = 'load';\n this.slideImages[i].removeEventListener(eventName, this.slideImageLoaded);\n }\n\n this._unloadGallery();\n }\n }, {\n key: \"_init\",\n value: function _init() {\n for (var i = 0; i < this.slideImages.length; i += 1) {\n var slideImage = this.slideImages[i];\n slideImage.addEventListener('load', this.slideImageLoaded);\n\n if (this.lazyLoad) {\n slideImage.addEventListener('rimg:load', this.slideImageLoaded);\n } else if (slideImage.complete) {\n this.slideImageLoaded();\n } else {\n slideImage.addEventListener('load', this.slideImageLoaded);\n }\n }\n\n if (this.$slides.length) {\n this._initGallery();\n }\n }\n /**\n * Make sure Flickity updates viewport height when images load in\n * @private\n */\n\n }, {\n key: \"_onSlideImageLoaded\",\n value: function _onSlideImageLoaded() {\n Object(_helpers_flickityHelper__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this.flickity);\n }\n }, {\n key: \"_unloadGallery\",\n value: function _unloadGallery() {\n if (this.flickity) {\n this.$paginationTrigger.off('.gallery');\n this.flickity.destroy();\n this.flickity = null;\n this.$slideshow.find(this.slides).attr('style', '');\n }\n }\n }, {\n key: \"_initGallery\",\n value: function _initGallery() {\n // Options shared on Desktop and Mobile\n var flickityOptions = {\n autoPlay: 0,\n accessibility: true,\n adaptiveHeight: true,\n cellAlign: 'left',\n cellSelector: this.slides,\n pageDots: true,\n prevNextButtons: true,\n wrapAround: true,\n lazyLoad: true,\n friction: 0.8,\n selectedAttraction: 0.2\n };\n this.flickity = new flickity__WEBPACK_IMPORTED_MODULE_0___default.a(this.$slideshow[0], flickityOptions);\n }\n }]);\n\n return ProductGallery;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL1Byb2R1Y3RTbGlkZXNob3cuanM/YzY5ZSJdLCJuYW1lcyI6WyJQcm9kdWN0R2FsbGVyeSIsIiRzbGlkZXNob3ciLCJmbGlja2l0eSIsInNsaWRlcyIsIiRzbGlkZXMiLCJmaW5kIiwic2xpZGVJbWFnZXMiLCJsYXp5TG9hZCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInNsaWRlSW1hZ2VMb2FkZWQiLCJfb25TbGlkZUltYWdlTG9hZGVkIiwiYmluZCIsIl9pbml0IiwiaSIsImxlbmd0aCIsImV2ZW50TmFtZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfdW5sb2FkR2FsbGVyeSIsInNsaWRlSW1hZ2UiLCJhZGRFdmVudExpc3RlbmVyIiwiY29tcGxldGUiLCJfaW5pdEdhbGxlcnkiLCJyZXNpemVGbGlja2l0eUlmTmVlZGVkIiwiJHBhZ2luYXRpb25UcmlnZ2VyIiwib2ZmIiwiZGVzdHJveSIsImF0dHIiLCJmbGlja2l0eU9wdGlvbnMiLCJhdXRvUGxheSIsImFjY2Vzc2liaWxpdHkiLCJhZGFwdGl2ZUhlaWdodCIsImNlbGxBbGlnbiIsImNlbGxTZWxlY3RvciIsInBhZ2VEb3RzIiwicHJldk5leHRCdXR0b25zIiwid3JhcEFyb3VuZCIsImZyaWN0aW9uIiwic2VsZWN0ZWRBdHRyYWN0aW9uIiwiRmxpY2tpdHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7SUFFcUJBLGM7OztBQUNuQixnQ0FBNEI7QU
1FBQSxRQUFkQyxVQUFjLFFBQWRBLFVBQWM7O0FBQUE7O0FBQzFCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixJQUFoQjtBQUNBLFNBQUtELFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0UsTUFBTCxHQUFjLHNCQUFkO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtILFVBQUwsQ0FBZ0JJLElBQWhCLENBQXFCLEtBQUtGLE1BQTFCLENBQWY7QUFDQSxTQUFLRyxXQUFMLEdBQW1CLEtBQUtMLFVBQUwsQ0FBZ0JJLElBQWhCLENBQXFCLGFBQXJCLENBQW5CO0FBQ0EsU0FBS0UsUUFBTCxHQUFnQixDQUFDQyxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsOEJBQXZCLENBQWpCO0FBRUEsU0FBS0MsZ0JBQUwsR0FBd0IsS0FBS0MsbUJBQUwsQ0FBeUJDLElBQXpCLENBQThCLElBQTlCLENBQXhCOztBQUVBLFNBQUtDLEtBQUw7QUFDRDs7Ozs2QkFFUTtBQUNQLFdBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRyxLQUFLUixXQUFMLENBQWlCUyxNQUFyQyxFQUE2Q0QsQ0FBQyxJQUFJLENBQWxELEVBQXFEO0FBQ25EO0FBQ0EsWUFBTUUsU0FBUyxHQUFHLE1BQWxCO0FBQ0EsYUFBS1YsV0FBTCxDQUFpQlEsQ0FBakIsRUFBb0JHLG1CQUFwQixDQUF3Q0QsU0FBeEMsRUFBbUQsS0FBS04sZ0JBQXhEO0FBQ0Q7O0FBRUQsV0FBS1EsY0FBTDtBQUNEOzs7NEJBRU87QUFDTixXQUFLLElBQUlKLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcsS0FBS1IsV0FBTCxDQUFpQlMsTUFBckMsRUFBNkNELENBQUMsSUFBSSxDQUFsRCxFQUFxRDtBQUNuRCxZQUFNSyxVQUFVLEdBQUcsS0FBS2IsV0FBTCxDQUFpQlEsQ0FBakIsQ0FBbkI7QUFDQUssa0JBQVUsQ0FBQ0MsZ0JBQVgsQ0FBNEIsTUFBNUIsRUFBb0MsS0FBS1YsZ0JBQXpDOztBQUNBLFlBQUksS0FBS0gsUUFBVCxFQUFtQjtBQUNqQlksb0JBQVUsQ0FBQ0MsZ0JBQVgsQ0FBNEIsV0FBNUIsRUFBeUMsS0FBS1YsZ0JBQTlDO0FBQ0QsU0FGRCxNQUVPLElBQUlTLFVBQVUsQ0FBQ0UsUUFBZixFQUF5QjtBQUM5QixlQUFLWCxnQkFBTDtBQUNELFNBRk0sTUFFQTtBQUNMUyxvQkFBVSxDQUFDQyxnQkFBWCxDQUE0QixNQUE1QixFQUFvQyxLQUFLVixnQkFBekM7QUFDRDtBQUNGOztBQUVELFVBQUksS0FBS04sT0FBTCxDQUFhVyxNQUFqQixFQUF5QjtBQUN2QixhQUFLTyxZQUFMO0FBQ0Q7QUFDRjtBQUVEOzs7Ozs7OzBDQUlzQjtBQUNwQkMsNkVBQXNCLENBQUMsS0FBS3JCLFFBQU4sQ0FBdEI7QUFDRDs7O3FDQUVnQjtBQUNmLFVBQUksS0FBS0EsUUFBVCxFQUFtQjtBQUNqQixhQUFLc0Isa0JBQUwsQ0FBd0JDLEdBQXhCLENBQTRCLFVBQTVCO0FBRUEsYUFBS3ZCLFFBQUwsQ0FBY3dCLE9BQWQ7QUFDQSxhQUFLeEIsUUFBTCxHQUFnQixJQUFoQjtBQUNBLGFBQUtELFVBQUwsQ0FBZ0JJLElBQWhCLENBQXFCLEtBQUtGLE1BQTFCLEVBQWtDd0IsSUFBbEMsQ0FBdUMsT0FBdkMsRUFBZ0QsRUFBaEQ7QUFDRDtBQUNGOzs7bUNBRWM7QUFDYjtBQUNBLFVBQU1DLGVBQWUsR0FBRztBQUN0QkMsZ0JBQVEsRUFBRSxDQURZO0FBRXRCQyxxQkFBYSxFQUFFLElBRk87QUFHdEJDLHNCQUFjLEVBQUUsSUFITTtBQUl0QkMsaUJBQVMsRUFBRSxNQUpXO0FBS3RCQyxvQkFBWSxFQUFFLEtBQUs5QixNQUxHO0FBTXRCK0IsZ0JBQVEsRUFBRSxJQU5ZO0FBT3RCQyx1QkFBZSxFQUFFLElBUEs7QUFRdEJDLGtCQUFVLEVBQUUsSUFSVTtBQVN0QjdCLGdCQUFRLEVBQUUsSUFUWTtBQVV0QjhCLGdCQUFRLEVBQUUsR0FWWTtBQVd0QkMsMEJBQWtCLEVBQUU7QUFYRSxPQUF4QjtBQWNBLFdBQUtwQyxRQUFMLEdBQWdCLElBQUlxQywrQ0FBSixDQUFhLEtBQUt0QyxVQUFMLENBQWdCLENBQWhCLENBQWIsRUFBaUMyQixlQUFqQyxDQUFoQjtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9Qcm9kdWN0U2xpZGVzaG93LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEZsaWNraXR5IGZyb20gJ2ZsaWNraXR5JztcbmltcG9ydCByZXNpemVGbGlja2l0eUlmTmVlZGVkIGZyb20gJy4uL2hlbHBlcnMvZmxpY2tpdHlIZWxwZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9kdWN0R2FsbGVyeSB7XG4gIGNvbnN0cnVjdG9yKHsgJHNsaWRlc2hvdyB9KSB7XG4gICAgLy8gR2FsbGVyeVxuICAgIHRoaXMuZmxpY2tpdHkgPSBudWxsO1xuICAgIHRoaXMuJHNsaWRlc2hvdyA9ICRzbGlkZXNob3c7XG4gICAgdGhpcy5zbGlkZXMgPSAnW2RhdGEtcHJvZHVjdC1pbWFnZV0nO1xuICAgIHRoaXMuJHNsaWRlcyA9IHRoaXMuJHNsaWRlc2hvdy5maW5kKHRoaXMuc2xpZGVzKTtcbiAgICB0aGlzLnNsaWRlSW1hZ2VzID0gdGhpcy4kc2xpZGVzaG93LmZpbmQoJ1tkYXRhLXJpbWddJyk7XG4gICAgdGhpcy5sYXp5TG9hZCA9ICFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1sYXp5LWxvYWRpbmctZGlzYWJsZWRdJyk7XG5cbiAgICB0aGlzLnNsaWRlSW1hZ2VMb2FkZWQgPSB0aGlzLl9vblNsaWRlSW1hZ2VMb2FkZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2xpZGVJbWFnZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIC8vIGNvbnN0IGV2ZW50TmFtZSA9IHRoaXMubGF6eUxvYWQgPyAncmltZzpsb2FkJyA6ICdsb2FkJztcbiAgICAgIGNvbnN0IGV2ZW50TmFtZSA9ICdsb2FkJztcbiAgICAgIHRoaXMuc2xpZGVJbWFnZXNbaV0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMuc2xpZGVJbWFnZUxvYWRlZCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdW5sb2FkR2FsbGVyeSgpO1xuICB9XG5cbiAgX2luaXQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNsaWRlSW1hZ2VzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBzbGlkZUltYWdlID0gdGhpcy5zbGlkZUltYWdlc1tpXTtcbiAgICAgIHNsaWRlSW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuc2xpZGVJbWFnZUxvYWRlZCk7XG4gICAgICBpZiAodGhpcy5sYXp5TG9hZCkge1xuICAgICAgICBzbGlkZUltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ3JpbWc6bG9h
1ZCcsIHRoaXMuc2xpZGVJbWFnZUxvYWRlZCk7XG4gICAgICB9IGVsc2UgaWYgKHNsaWRlSW1hZ2UuY29tcGxldGUpIHtcbiAgICAgICAgdGhpcy5zbGlkZUltYWdlTG9hZGVkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZUltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLnNsaWRlSW1hZ2VMb2FkZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLiRzbGlkZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9pbml0R2FsbGVyeSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHN1cmUgRmxpY2tpdHkgdXBkYXRlcyB2aWV3cG9ydCBoZWlnaHQgd2hlbiBpbWFnZXMgbG9hZCBpblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uU2xpZGVJbWFnZUxvYWRlZCgpIHtcbiAgICByZXNpemVGbGlja2l0eUlmTmVlZGVkKHRoaXMuZmxpY2tpdHkpO1xuICB9XG5cbiAgX3VubG9hZEdhbGxlcnkoKSB7XG4gICAgaWYgKHRoaXMuZmxpY2tpdHkpIHtcbiAgICAgIHRoaXMuJHBhZ2luYXRpb25UcmlnZ2VyLm9mZignLmdhbGxlcnknKTtcblxuICAgICAgdGhpcy5mbGlja2l0eS5kZXN0cm95KCk7XG4gICAgICB0aGlzLmZsaWNraXR5ID0gbnVsbDtcbiAgICAgIHRoaXMuJHNsaWRlc2hvdy5maW5kKHRoaXMuc2xpZGVzKS5hdHRyKCdzdHlsZScsICcnKTtcbiAgICB9XG4gIH1cblxuICBfaW5pdEdhbGxlcnkoKSB7XG4gICAgLy8gT3B0aW9ucyBzaGFyZWQgb24gRGVza3RvcCBhbmQgTW9iaWxlXG4gICAgY29uc3QgZmxpY2tpdHlPcHRpb25zID0ge1xuICAgICAgYXV0b1BsYXk6IDAsXG4gICAgICBhY2Nlc3NpYmlsaXR5OiB0cnVlLFxuICAgICAgYWRhcHRpdmVIZWlnaHQ6IHRydWUsXG4gICAgICBjZWxsQWxpZ246ICdsZWZ0JyxcbiAgICAgIGNlbGxTZWxlY3RvcjogdGhpcy5zbGlkZXMsXG4gICAgICBwYWdlRG90czogdHJ1ZSxcbiAgICAgIHByZXZOZXh0QnV0dG9uczogdHJ1ZSxcbiAgICAgIHdyYXBBcm91bmQ6IHRydWUsXG4gICAgICBsYXp5TG9hZDogdHJ1ZSxcbiAgICAgIGZyaWN0aW9uOiAwLjgsXG4gICAgICBzZWxlY3RlZEF0dHJhY3Rpb246IDAuMixcbiAgICB9O1xuXG4gICAgdGhpcy5mbGlja2l0eSA9IG5ldyBGbGlja2l0eSh0aGlzLiRzbGlkZXNob3dbMF0sIGZsaWNraXR5T3B0aW9ucyk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/components/ProductSlideshow.js\n") },
1"./source/scripts/components/ProductZoom.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ProductZoom; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var pixelzoom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! pixelzoom */ \"./node_modules/pixelzoom/dist/index.es.js\");\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Layout */ \"./source/scripts/Layout.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar ProductZoom =\n/*#__PURE__*/\nfunction () {\n function ProductZoom(options) {\n _classCallCheck(this, ProductZoom);\n\n // Product zoom uses object-fit which is unsupported in IE\n if (navigator.userAgent.match(/(Trident)|(MSIE)/) !== null) {\n return;\n }\n\n this.$gallery = options.$gallery;\n this.settings = options.settings;\n this.$slider = this.$gallery.find('[data-product-slider]');\n this.$pixelzoomOverlay = this.$gallery.find('[data-pixelzoom-overlay]');\n this.$pixelzoomOverlayContainer = this.$pixelzoomOverlay.find('[data-pixelzoom-overlay-container]');\n this.imageZoom = {};\n this.zoomOverlay = null;\n this.index = 0;\n this._beforeOpen = this._beforeOpen.bind(this);\n this._onOpen = this._onOpen.bind(this);\n this._onClose = this._onClose.bind(this);\n this._showZoomInstructions = this._showZoomInstructions.bind(this);\n this.modalOpen = false;\n this.swipping = false;\n this.touched = false;\n\n this._bindEvents();\n\n this.enableZoom();\n }\n\n _createClass(ProductZoom, [{\n key: \"unload\",\n value: function unload() {\n var _this = this;\n\n if (Object.keys(this.imageZoom).length !== 0) {\n Object.keys(this.imageZoom).forEach(function (image) {\n _this.imageZoom[image].unload();\n });\n this.imageZoom = {};\n }\n\n if (this.zoomOverlay) {\n this.zoomOverlay.unload();\n this.zoomOverlay = null;\n }\n\n document.body.removeEventListener('touchmove', function (event) {\n event.preventDefault();\n }, {\n passive: false\n });\n this.$pixelzoomOverlayContainer.off('pixelzoom:pan');\n this.$pixelzoomOverlayContainer.off('pixelzoom:release');\n this.$slider.off('.product-zoom');\n }\n }, {\n key: \"enableZoom\",\n value: function enableZoom(index) {\n var _this2 = this;\n\n if (_Layout__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isBreakpoint('XS')) {\n this.unload();\n return;\n }\n\n if (index !== -1 && index || index === 0) {\n this.index = index;\n }\n\n var $newSlide = this.$slider.find(\"[data-product-image-index=\".concat(this.index, \"] .product-galley--image-background\"));\n var inObject = !this.imageZoom[this.index];\n var slideExists = this.$gallery.find(\"[data-product-image-index=\".concat(this.index, \"][data-product-image-zoom]\")).length;\n\n if (inObject && slideExists) {\n this.imageZoom[this.index] = new pixelzoom__WEBPACK_IMPORTED_MODULE_1__[\"default\"]($newSlide[0], {\n imageSource: $newSlide[0].dataset.image,\n initialZoom: this.settings.image_zoom_level === 'min' ? 1 : 9999,\n zoomSensitivity: 10,\n maxZoom: 9999,\n zoomSteps: 9999,\n naturalPan: true\n });\n $newSlide.on('pixelzoom:loaded', function () {\n _this2._showZoomInstructions($newSlide);\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('resize', function () {\n _this2._showZoomInstructions($newSlide);\n });\n });\n $newSlide.on('pixelzoom:touch', function () {\n var imageWidth = $newSlide.find('.pixelzoom--image').get(0).naturalWi
1dth;\n var imageHeight = $newSlide.find('.pixelzoom--image').get(0).naturalHeight;\n\n if (!_Layout__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isBreakpoint('XS') && (imageWidth / $newSlide.width() >= 2 || imageHeight / $newSlide.height() >= 2)) {\n _this2._toggleClass(jquery__WEBPACK_IMPORTED_MODULE_0___default()('body'), 'pixelzoom--active');\n }\n\n _this2.touched = true;\n });\n $newSlide.on('pixelzoom:release', function () {\n _this2._toggleClass(jquery__WEBPACK_IMPORTED_MODULE_0___default()('body'), 'pixelzoom--active', true);\n\n _this2.touched = false;\n });\n }\n }\n }, {\n key: \"_showZoomInstructions\",\n value: function _showZoomInstructions($newSlide) {\n setTimeout(function () {\n if ($newSlide.css('cursor') !== 'default') {\n $newSlide.find('.product-galley--zoom-instructions').css('display', 'block');\n }\n }, 200);\n }\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents() {\n var _this3 = this;\n\n this.$slider.on('dragStart.flickity', function () {\n _this3._preventClick();\n });\n this.$slider.on('settle.flickity', function () {\n _this3._resolveClick();\n });\n document.body.addEventListener('touchmove', function (event) {\n _this3._preventScroll(event);\n }, {\n passive: false\n });\n }\n }, {\n key: \"_toggleClass\",\n value: function _toggleClass(element, className, remove) {\n if (remove) {\n element.removeClass(className);\n } else {\n element.addClass(className);\n }\n }\n }, {\n key: \"_beforeOpen\",\n value: function _beforeOpen() {\n var $newSlide = this.$slider.find(\"[data-product-image-index=\".concat(this.index, \"] .product-galley--image-background\"));\n this.$pixelzoomOverlayContainer.find('[data-rimg]').replaceWith($newSlide.find('[data-rimg]').clone());\n }\n }, {\n key: \"_onOpen\",\n value: function _onOpen() {\n var _this4 = this;\n\n var $newSlide = this.$slider.find(\"[data-product-image-index=\".concat(this.index, \"] .product-galley--image-background\"));\n this.modalOpen = true;\n setTimeout(function () {\n _this4.zoomOverlay = new pixelzoom__WEBPACK_IMPORTED_MODULE_1__[\"default\"](document.querySelector('[data-modal-content]'), {\n imageSource: $newSlide[0].dataset.image,\n naturalPan: true,\n dragPan: true,\n initialZoom: _this4.settings.image_zoom_level === 'min' ? 1 : 9999,\n maxZoom: 9999,\n zoomSensitivity: 10,\n zoomSteps: 9999,\n overflowContainer: document.querySelector('.modal--pixelzoom')\n });\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-modal-content]').on('pixelzoom:loaded', function () {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-modal-content]').addClass('loaded');\n });\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-modal-content]').on('pixelzoom:touch', function () {\n _this4._toggleClass(jquery__WEBPACK_IMPORTED_MODULE_0___default()('body'), 'pixelzoom--active');\n });\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-modal-content]').on('pixelzoom:release', function () {\n _this4._toggleClass(jquery__WEBPACK_IMPORTED_MODULE_0___default()('body'), 'pixelzoom--active', true);\n });\n }, 500);\n }\n }, {\n key: \"_onClose\",\n value: function _onClose() {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-modal-content]').removeClass('loaded');\n this.zoomOverlay.unload();\n this.zoomOverlay = null;\n this.modalOpen = false;\n }\n }, {\n key: \"_preventScroll\",\n value: function _preventScroll(event) {\n if (this.modalOpen || this.touched && !_Layout__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isBreakpoint('XS')) {\n event.preventDefault();\n }\n }\n }, {\n key: \"_preventClick\",\n value: function _preventClick() {\
1n this.swipping = true;\n }\n }, {\n key: \"_resolveClick\",\n value: function _resolveClick() {\n this.swipping = false;\n }\n }]);\n\n return ProductZoom;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL1Byb2R1Y3Rab29tLmpzP2U4Y2QiXSwibmFtZXMiOlsiUHJvZHVjdFpvb20iLCJvcHRpb25zIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwibWF0Y2giLCIkZ2FsbGVyeSIsInNldHRpbmdzIiwiJHNsaWRlciIsImZpbmQiLCIkcGl4ZWx6b29tT3ZlcmxheSIsIiRwaXhlbHpvb21PdmVybGF5Q29udGFpbmVyIiwiaW1hZ2Vab29tIiwiem9vbU92ZXJsYXkiLCJpbmRleCIsIl9iZWZvcmVPcGVuIiwiYmluZCIsIl9vbk9wZW4iLCJfb25DbG9zZSIsIl9zaG93Wm9vbUluc3RydWN0aW9ucyIsIm1vZGFsT3BlbiIsInN3aXBwaW5nIiwidG91Y2hlZCIsIl9iaW5kRXZlbnRzIiwiZW5hYmxlWm9vbSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiaW1hZ2UiLCJ1bmxvYWQiLCJkb2N1bWVudCIsImJvZHkiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInBhc3NpdmUiLCJvZmYiLCJsYXlvdXQiLCJpc0JyZWFrcG9pbnQiLCIkbmV3U2xpZGUiLCJpbk9iamVjdCIsInNsaWRlRXhpc3RzIiwiUGl4ZWx6b29tIiwiaW1hZ2VTb3VyY2UiLCJkYXRhc2V0IiwiaW5pdGlhbFpvb20iLCJpbWFnZV96b29tX2xldmVsIiwiem9vbVNlbnNpdGl2aXR5IiwibWF4Wm9vbSIsInpvb21TdGVwcyIsIm5hdHVyYWxQYW4iLCJvbiIsIiQiLCJ3aW5kb3ciLCJpbWFnZVdpZHRoIiwiZ2V0IiwibmF0dXJhbFdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJuYXR1cmFsSGVpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJfdG9nZ2xlQ2xhc3MiLCJzZXRUaW1lb3V0IiwiY3NzIiwiX3ByZXZlbnRDbGljayIsIl9yZXNvbHZlQ2xpY2siLCJhZGRFdmVudExpc3RlbmVyIiwiX3ByZXZlbnRTY3JvbGwiLCJlbGVtZW50IiwiY2xhc3NOYW1lIiwicmVtb3ZlIiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsInJlcGxhY2VXaXRoIiwiY2xvbmUiLCJxdWVyeVNlbGVjdG9yIiwiZHJhZ1BhbiIsIm92ZXJmbG93Q29udGFpbmVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7O0lBRXFCQSxXOzs7QUFDbkIsdUJBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFDbkI7QUFDQSxRQUFJQyxTQUFTLENBQUNDLFNBQVYsQ0FBb0JDLEtBQXBCLENBQTBCLGtCQUExQixNQUFrRCxJQUF0RCxFQUE0RDtBQUMxRDtBQUNEOztBQUVELFNBQUtDLFFBQUwsR0FBZ0JKLE9BQU8sQ0FBQ0ksUUFBeEI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCTCxPQUFPLENBQUNLLFFBQXhCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtGLFFBQUwsQ0FBY0csSUFBZCxDQUFtQix1QkFBbkIsQ0FBZjtBQUVBLFNBQUtDLGlCQUFMLEdBQXlCLEtBQUtKLFFBQUwsQ0FBY0csSUFBZCxDQUFtQiwwQkFBbkIsQ0FBekI7QUFDQSxTQUFLRSwwQkFBTCxHQUFrQyxLQUFLRCxpQkFBTCxDQUF1QkQsSUFBdkIsQ0FDaEMsb0NBRGdDLENBQWxDO0FBSUEsU0FBS0csU0FBTCxHQUFpQixFQUFqQjtBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDQSxTQUFLQyxLQUFMLEdBQWEsQ0FBYjtBQUVBLFNBQUtDLFdBQUwsR0FBbUIsS0FBS0EsV0FBTCxDQUFpQkMsSUFBakIsQ0FBc0IsSUFBdEIsQ0FBbkI7QUFDQSxTQUFLQyxPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhRCxJQUFiLENBQWtCLElBQWxCLENBQWY7QUFDQSxTQUFLRSxRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBY0YsSUFBZCxDQUFtQixJQUFuQixDQUFoQjtBQUVBLFNBQUtHLHFCQUFMLEdBQTZCLEtBQUtBLHFCQUFMLENBQTJCSCxJQUEzQixD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jtBQUNELFNBRkQ7QUFJQUEscURBQUMsQ0FBQyxzQkFBRCxDQUFELENBQTBCRCxFQUExQixDQUE2QixtQkFBN0IsRUFBa0QsWUFBTTtBQUN0RCxnQkFBSSxDQUFDVSxZQU
1FMLENBQWtCVCw2Q0FBQyxDQUFDLE1BQUQsQ0FBbkIsRUFBNkIsbUJBQTdCLEVBQWtELElBQWxEO0FBQ0QsU0FGRDtBQUdELE9BMUJTLEVBMEJQLEdBMUJPLENBQVY7QUEyQkQ7OzsrQkFFVTtBQUNUQSxtREFBQyxDQUFDLHNCQUFELENBQUQsQ0FBMEJtQixXQUExQixDQUFzQyxRQUF0QztBQUVBLFdBQUszRCxXQUFMLENBQWlCaUIsTUFBakI7QUFDQSxXQUFLakIsV0FBTCxHQUFtQixJQUFuQjtBQUNBLFdBQUtPLFNBQUwsR0FBaUIsS0FBakI7QUFDRDs7O21DQUVjYyxLLEVBQU87QUFDcEIsVUFBSSxLQUFLZCxTQUFMLElBQW1CLEtBQUtFLE9BQUwsSUFBZ0IsQ0FBQ2dCLCtDQUFNLENBQUNDLFlBQVAsQ0FBb0IsSUFBcEIsQ0FBeEMsRUFBb0U7QUFDbEVMLGFBQUssQ0FBQ0MsY0FBTjtBQUNEO0FBQ0Y7OztvQ0FFZTtBQUNkLFdBQUtkLFFBQUwsR0FBZ0IsSUFBaEI7QUFDRDs7O29DQUVlO0FBQ2QsV0FBS0EsUUFBTCxHQUFnQixLQUFoQjtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9Qcm9kdWN0Wm9vbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgUGl4ZWx6b29tIGZyb20gJ3BpeGVsem9vbSc7XG5pbXBvcnQgbGF5b3V0IGZyb20gJy4uL0xheW91dCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2R1Y3Rab29tIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIC8vIFByb2R1Y3Qgem9vbSB1c2VzIG9iamVjdC1maXQgd2hpY2ggaXMgdW5zdXBwb3J0ZWQgaW4gSUVcbiAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvKFRyaWRlbnQpfChNU0lFKS8pICE9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4kZ2FsbGVyeSA9IG9wdGlvbnMuJGdhbGxlcnk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG9wdGlvbnMuc2V0dGluZ3M7XG4gICAgdGhpcy4kc2xpZGVyID0gdGhpcy4kZ2FsbGVyeS5maW5kKCdbZGF0YS1wcm9kdWN0LXNsaWRlcl0nKTtcblxuICAgIHRoaXMuJHBpeGVsem9vbU92ZXJsYXkgPSB0aGlzLiRnYWxsZXJ5LmZpbmQoJ1tkYXRhLXBpeGVsem9vbS1vdmVybGF5XScpO1xuICAgIHRoaXMuJHBpeGVsem9vbU92ZXJsYXlDb250YWluZXIgPSB0aGlzLiRwaXhlbHpvb21PdmVybGF5LmZpbmQoXG4gICAgICAnW2RhdGEtcGl4ZWx6b29tLW92ZXJsYXktY29udGFpbmVyXScsXG4gICAgKTtcblxuICAgIHRoaXMuaW1hZ2Vab29tID0ge307XG4gICAgdGhpcy56b29tT3ZlcmxheSA9IG51bGw7XG4gICAgdGhpcy5pbmRleCA9IDA7XG5cbiAgICB0aGlzLl9iZWZvcmVPcGVuID0gdGhpcy5fYmVmb3JlT3Blbi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uT3BlbiA9IHRoaXMuX29uT3Blbi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uQ2xvc2UgPSB0aGlzLl9vbkNsb3NlLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLl9zaG93Wm9vbUluc3RydWN0aW9ucyA9IHRoaXMuX3Nob3dab29tSW5zdHJ1Y3Rpb25zLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLm1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc3dpcHBpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnRvdWNoZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuX2JpbmRFdmVudHMoKTtcbiAgICB0aGlzLmVuYWJsZVpvb20oKTtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5pbWFnZVpvb20pLmxlbmd0aCAhPT0gMCkge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5pbWFnZVpvb20pLmZvckVhY2goaW1hZ2UgPT4ge1xuICAgICAgICB0aGlzLmltYWdlWm9vbVtpbWFnZV0udW5sb2FkKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pbWFnZVpvb20gPSB7fTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy56b29tT3ZlcmxheSkge1xuICAgICAgdGhpcy56b29tT3ZlcmxheS51bmxvYWQoKTtcbiAgICAgIHRoaXMuem9vbU92ZXJsYXkgPSBudWxsO1xuICAgIH1cblxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICd0b3VjaG1vdmUnLFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSxcbiAgICAgIHsgcGFzc2l2ZTogZmFsc2UgfSxcbiAgICApO1xuXG4gICAgdGhpcy4kcGl4ZWx6b29tT3ZlcmxheUNvbnRhaW5lci5vZmYoJ3BpeGVsem9vbTpwYW4nKTtcbiAgICB0aGlzLiRwaXhlbHpvb21PdmVybGF5Q29udGFpbmVyLm9mZigncGl4ZWx6b29tOnJlbGVhc2UnKTtcblxuICAgIHRoaXMuJHNsaWRlci5vZmYoJy5wcm9kdWN0LXpvb20nKTtcbiAgfVxuXG4gIGVuYWJsZVpvb20oaW5kZXgpIHtcbiAgICBpZiAobGF5b3V0LmlzQnJlYWtwb2ludCgnWFMnKSkge1xuICAgICAgdGhpcy51bmxvYWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoKGluZGV4ICE9PSAtMSAmJiBpbmRleCkgfHwgaW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB9XG5cbiAgICBjb25zdCAkbmV3U2xpZGUgPSB0aGlzLiRzbGlkZXIuZmluZChcbiAgICAgIGBbZGF0YS1wcm9kdWN0LWltYWdlLWluZGV4PSR7XG4gICAgICAgIHRoaXMuaW5kZXhcbiAgICAgIH1dIC5wcm9kdWN0LWdhbGxleS0taW1hZ2UtYmFja2dyb3VuZGAsXG4gICAgKTtcbiAgICBjb25zdCBpbk9iamVjdCA9ICF0aGlzLmltYWdlWm9vbVt0aGlzLmluZGV4XTtcbiAgICBjb25zdCBzbGlkZUV4aXN0cyA9IHRoaXMuJGdhbGxlcnkuZmluZChcbiAgICAgIGBbZGF0YS1wcm9kdWN0LWltYWdlLWluZGV4PSR7dGhpcy5pbmRleH1dW2RhdGEtcHJvZHVjdC1pbWFnZS16b29tXWAsXG4gICAgKS5sZW5ndGg7XG5cbiAgICBpZiAoaW5PYmplY3QgJiYgc2xpZGVFeGlzdHMpIHtcbiAgICAgIHRoaXMuaW1hZ2Vab29tW3RoaXMuaW5kZXhdID1cbiAgICAgICAgbmV3IFBpeGVsem9vbSgkbmV3U2xpZGVbMF0sIHtcbiAgICAgICAgICBpbWFnZVNvdXJjZTogJG5ld1NsaWRlWzBdLmRhdGFzZXQuaW1hZ2UsXG4gICAgICAgICAgaW5pdGlhbFpvb206IHRoaXMuc2V0dGluZ3MuaW1hZ2Vfem9vbV9sZXZlbCA9PT0gJ21pbicgPyAxIDogOTk5OSxcbiAgICAgICAgICB6b29t
1U2Vuc2l0aXZpdHk6IDEwLFxuICAgICAgICAgIG1heFpvb206IDk5OTksXG4gICAgICAgICAgem9vbVN0ZXBzOiA5OTk5LFxuICAgICAgICAgIG5hdHVyYWxQYW46IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAkbmV3U2xpZGUub24oJ3BpeGVsem9vbTpsb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dab29tSW5zdHJ1Y3Rpb25zKCRuZXdTbGlkZSk7XG5cbiAgICAgICAgJCh3aW5kb3cpLm9uKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fc2hvd1pvb21JbnN0cnVjdGlvbnMoJG5ld1NsaWRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgJG5ld1NsaWRlLm9uKCdwaXhlbHpvb206dG91Y2gnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSAkbmV3U2xpZGUuZmluZCgnLnBpeGVsem9vbS0taW1hZ2UnKS5nZXQoMClcbiAgICAgICAgICAubmF0dXJhbFdpZHRoO1xuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9ICRuZXdTbGlkZS5maW5kKCcucGl4ZWx6b29tLS1pbWFnZScpLmdldCgwKVxuICAgICAgICAgIC5uYXR1cmFsSGVpZ2h0O1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbGF5b3V0LmlzQnJlYWtwb2ludCgnWFMnKSAmJlxuICAgICAgICAgIChpbWFnZVdpZHRoIC8gJG5ld1NsaWRlLndpZHRoKCkgPj0gMiB8fFxuICAgICAgICAgICAgaW1hZ2VIZWlnaHQgLyAkbmV3U2xpZGUuaGVpZ2h0KCkgPj0gMilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fdG9nZ2xlQ2xhc3MoJCgnYm9keScpLCAncGl4ZWx6b29tLS1hY3RpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgICB9KTtcblxuICAgICAgJG5ld1NsaWRlLm9uKCdwaXhlbHpvb206cmVsZWFzZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlQ2xhc3MoJCgnYm9keScpLCAncGl4ZWx6b29tLS1hY3RpdmUnLCB0cnVlKTtcbiAgICAgICAgdGhpcy50b3VjaGVkID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBfc2hvd1pvb21JbnN0cnVjdGlvbnMoJG5ld1NsaWRlKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoJG5ld1NsaWRlLmNzcygnY3Vyc29yJykgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAkbmV3U2xpZGVcbiAgICAgICAgICAuZmluZCgnLnByb2R1Y3QtZ2FsbGV5LS16b29tLWluc3RydWN0aW9ucycpXG4gICAgICAgICAgLmNzcygnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgfVxuICAgIH0sIDIwMCk7XG4gIH1cblxuICBfYmluZEV2ZW50cygpIHtcbiAgICB0aGlzLiRzbGlkZXIub24oJ2RyYWdTdGFydC5mbGlja2l0eScsICgpID0+IHtcbiAgICAgIHRoaXMuX3ByZXZlbnRDbGljaygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kc2xpZGVyLm9uKCdzZXR0bGUuZmxpY2tpdHknLCAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlQ2xpY2soKTtcbiAgICB9KTtcblxuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICd0b3VjaG1vdmUnLFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICB0aGlzLl9wcmV2ZW50U2Nyb2xsKGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICB7IHBhc3NpdmU6IGZhbHNlIH0sXG4gICAgKTtcbiAgfVxuXG4gIF90b2dnbGVDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUsIHJlbW92ZSkge1xuICAgIGlmIChyZW1vdmUpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5hZGRDbGFzcyhjbGFzc05hbWUpO1xuICAgIH1cbiAgfVxuXG4gIF9iZWZvcmVPcGVuKCkge1xuICAgIGNvbnN0ICRuZXdTbGlkZSA9IHRoaXMuJHNsaWRlci5maW5kKFxuICAgICAgYFtkYXRhLXByb2R1Y3QtaW1hZ2UtaW5kZXg9JHtcbiAgICAgICAgdGhpcy5pbmRleFxuICAgICAgfV0gLnByb2R1Y3QtZ2FsbGV5LS1pbWFnZS1iYWNrZ3JvdW5kYCxcbiAgICApO1xuXG4gICAgdGhpcy4kcGl4ZWx6b29tT3ZlcmxheUNvbnRhaW5lclxuICAgICAgLmZpbmQoJ1tkYXRhLXJpbWddJylcbiAgICAgIC5yZXBsYWNlV2l0aCgkbmV3U2xpZGUuZmluZCgnW2RhdGEtcmltZ10nKS5jbG9uZSgpKTtcbiAgfVxuXG4gIF9vbk9wZW4oKSB7XG4gICAgY29uc3QgJG5ld1NsaWRlID0gdGhpcy4kc2xpZGVyLmZpbmQoXG4gICAgICBgW2RhdGEtcHJvZHVjdC1pbWFnZS1pbmRleD0ke1xuICAgICAgICB0aGlzLmluZGV4XG4gICAgICB9XSAucHJvZHVjdC1nYWxsZXktLWltYWdlLWJhY2tncm91bmRgLFxuICAgICk7XG4gICAgdGhpcy5tb2RhbE9wZW4gPSB0cnVlO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnpvb21PdmVybGF5ID0gbmV3IFBpeGVsem9vbShcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtbW9kYWwtY29udGVudF0nKSxcbiAgICAgICAge1xuICAgICAgICAgIGltYWdlU291cmNlOiAkbmV3U2xpZGVbMF0uZGF0YXNldC5pbWFnZSxcbiAgICAgICAgICBuYXR1cmFsUGFuOiB0cnVlLFxuICAgICAgICAgIGRyYWdQYW46IHRydWUsXG4gICAgICAgICAgaW5pdGlhbFpvb206IHRoaXMuc2V0dGluZ3MuaW1hZ2Vfem9vbV9sZXZlbCA9PT0gJ21pbicgPyAxIDogOTk5OSxcbiAgICAgICAgICBtYXhab29tOiA5OTk5LFxuICAgICAgICAgIHpvb21TZW5zaXRpdml0eTogMTAsXG4gICAgICAgICAgem9vbVN0ZXBzOiA5OTk5LFxuICAgICAgICAgIG92ZXJmbG93Q29udGFpbmVyOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubW9kYWwtLXBpeGVsem9vbScpLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgJCgnW2RhdGEtbW9kYWwtY29udGVudF0nKS5vbigncGl4ZWx6b29tOmxvYWRlZCcsICgpID0+IHtcbiAgICAgICAgJCgnW2RhdGEtbW9kYWwtY29udGVudF0nKS5hZGRDbGFzcygnbG9hZGVkJyk7XG4gICAgICB9KTtcblxuICAgICAgJCgnW2RhdGEtbW9kYWwtY29udGVudF0nKS5vbigncGl4ZWx6b29tOnRvdWNoJywgKCkgPT4ge1xuICAgICAgICB0aGlzLl90b2dnbGVDbGFzcygkKCdib2R5JyksICdwaXhlbHpvb20tLWFjdGl2ZScpO1xuICAgICAgfSk7XG5cbiAgICAgICQoJ1tkYXRhLW1vZGFsLWNvbnRlbn
1RdJykub24oJ3BpeGVsem9vbTpyZWxlYXNlJywgKCkgPT4ge1xuICAgICAgICB0aGlzLl90b2dnbGVDbGFzcygkKCdib2R5JyksICdwaXhlbHpvb20tLWFjdGl2ZScsIHRydWUpO1xuICAgICAgfSk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIF9vbkNsb3NlKCkge1xuICAgICQoJ1tkYXRhLW1vZGFsLWNvbnRlbnRdJykucmVtb3ZlQ2xhc3MoJ2xvYWRlZCcpO1xuXG4gICAgdGhpcy56b29tT3ZlcmxheS51bmxvYWQoKTtcbiAgICB0aGlzLnpvb21PdmVybGF5ID0gbnVsbDtcbiAgICB0aGlzLm1vZGFsT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgX3ByZXZlbnRTY3JvbGwoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5tb2RhbE9wZW4gfHwgKHRoaXMudG91Y2hlZCAmJiAhbGF5b3V0LmlzQnJlYWtwb2ludCgnWFMnKSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgX3ByZXZlbnRDbGljaygpIHtcbiAgICB0aGlzLnN3aXBwaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIF9yZXNvbHZlQ2xpY2soKSB7XG4gICAgdGhpcy5zd2lwcGluZyA9IGZhbHNlO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/components/ProductZoom.js\n") },
1"./source/scripts/components/RecentlyViewed.js": function (module, __webpack_exports__, __webpack_require__) { "use strict"; eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return RecentlyViewed; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flickity */ "./node_modules/flickity/js/index.js");\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flickity__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var rimg_shopify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rimg-shopify */ "./node_modules/rimg-shopify/dist/index.es.js");\n/* harmony import */ var _helpers_flickityHelper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers/flickityHelper */ "./source/scripts/helpers/flickityHelper.js");\n/* harmony import */ var _helpers_ProductReviews__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../helpers/ProductReviews */ "./source/scripts/helpers/ProductReviews.js");\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar RecentlyViewed =\n/*#__PURE__*/\nfunction () {\n function RecentlyViewed(section) {\n var _this = this;\n\n _classCallCheck(this, RecentlyViewed);\n\n this.namespace = \'pxu\';\n this.maxRecentlyViewed = 30; // Store a max of 30 items\n\n this.maxStorageTime = 30 * 24 * 3600; // Store items for 30 days only\n\n this.version = 1; // Version key is used to update localstorage when format changes\n\n this.storageKey = "".concat(this.namespace, "-recentlyViewed-").concat(this.version);\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(".product-recently-viewed--section");\n this.recentlyViewed = section.data.recently_viewed_info;\n this.time = section.data.time;\n this.flickity = null;\n this.cardSettings = section.data.product_card_settings;\n\n if (this.recentlyViewed && this.time) {\n this.recentlyViewed.timestamp = Math.round(new Date().getTime() / 1000);\n }\n\n this.slideImageLoaded = this._onSlideImageLoaded.bind(this);\n\n if (this.time) {\n var recentlyViewed = this._getRecentlyViewed();\n\n if (this.recentlyViewed) {\n this.removeRecentlyViewed(this.recentlyViewed.handle, recentlyViewed);\n recentlyViewed.push(this.recentlyViewed);\n }\n\n var promises = this._setRecentlyViewed(recentlyViewed); // Wait until promises are resolved before inserting markup into the DOM\n\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default.a.when.apply(jquery__WEBPACK_IMPORTED_MODULE_0___default.a, _toConsumableArray(promises)).done(function () {\n if (recentlyViewed.length) {\n var cardsMarkup = _this._getRecentlyViewedCards();\n\n var cardsData = _this._getRecentlyViewed();\n\n _this.$el.find(\'[data-recently-viewed-container]\').append(cardsMarkup);\n\n if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'.spr-badge\', _this.$el)) {\n Object(_helpers_ProductReviews__WEBPACK_IMPORTED_MODULE_4__["default"])();\n }\n\n cardsData.forEach(function (productData) {\n var timestamp = _this.timeSince(productData.timestamp);\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-product-handle=".concat(productData.handle, "]")).prepend(timestamp);\n });\n rimg_shopify__WEBPACK_IMPORTED_MODULE_2__["default"].watch(_this.$el[0]);\n _this.$carousel = _this.$el.find(\'.product-recently-viewed--content\');\n _this.slides = \'.product-recently-viewed-card\';\n\n if (_this.$carousel.find(_this.slides).length > 1) {\n _this._initSlider();\n }\n } else {\n _this.$el.find(\'.product-recently-viewed--section\').addClass(\'hide\');\n }\n });\n } else {\n if (this.recentlyViewed) {\n var _recentlyViewed;\n\n _recentlyViewed.push(this.recentlyViewed);\n\n this._setRecentlyViewed(_recentlyViewed);\n }\n\n this.$el.find(\'.product-recently-viewed--section\').addClass(\'hide\');\n }\n\n this.bindEvents();\n }\n\n _createClass(RecentlyViewed, [{\n key: "bindEvents",\n value: function bindEvents() {\n var _this2 = this;\n\n this.$el.on(\'click.recently-viewed\', \'[data-remove-recently-viewed]\', function (event) {\n var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget);
1\n var handle = $target.closest(\'[data-product-handle]\').data(\'product-handle\');\n\n var recentlyViewed = _this2._getRecentlyViewed();\n\n _this2.removeRecentlyViewed(handle, recentlyViewed);\n\n _this2._setRecentlyViewed(recentlyViewed);\n\n $target.parents(\'[data-recently-viewed-card]\').addClass(\'hide-card\');\n $target.parents(\'[data-recently-viewed-card]\').nextAll().addClass(\'move-card\');\n setTimeout(function () {\n var index = $target.parents(\'[data-recently-viewed-card]\').index();\n\n if (index !== 0) {\n index--;\n }\n\n $target.parents(\'[data-recently-viewed-card]\').nextAll().removeClass(\'move-card\');\n\n if ($target.parents(\'[data-recently-viewed-card]\').length) {\n _this2.flickity.remove($target.parents(\'[data-recently-viewed-card]\'));\n }\n\n _this2.flickity.selectCell(index);\n }, 500);\n });\n this.$el.on(\'click.recently-viewed\', \'[data-clear-recently-viewed]\', function () {\n _this2.clearRecentlyViewed();\n });\n }\n }, {\n key: "unload",\n value: function unload() {\n this.$el.off(\'.recently-viewed\');\n\n if (this.$carousel && this.$carousel[0]) {\n this.$carousel[0].removeEventListener(\'rimg:load\', this.slideImageLoaded);\n }\n }\n /* eslint-disable-next-line consistent-return */\n\n }, {\n key: "timeSince",\n value: function timeSince(timestamp) {\n var now = Math.round(new Date().getTime() / 1000);\n var secondsPast = now - timestamp;\n\n if (secondsPast < 60) {\n var secondsAgo = parseInt(secondsPast, 10);\n return secondsAgo === 1 ? "".concat(secondsAgo, " ").concat(this.time.second, " ").concat(this.time.ago) : "".concat(secondsAgo, " ").concat(this.time.seconds, " ").concat(this.time.ago);\n }\n\n if (secondsPast < 3600) {\n var minutesAgo = parseInt(secondsPast / 60, 10);\n return minutesAgo === 1 ? "".concat(minutesAgo, " ").concat(this.time.minute, " ").concat(this.time.ago) : "".concat(minutesAgo, " ").concat(this.time.minutes, " ").concat(this.time.ago);\n }\n\n if (secondsPast <= 86400) {\n var hoursAgo = parseInt(secondsPast / 3600, 10);\n return hoursAgo === 1 ? "".concat(hoursAgo, " ").concat(this.time.hour, " ").concat(this.time.ago) : "".concat(hoursAgo, " ").concat(this.time.hours, " ").concat(this.time.ago);\n }\n\n if (secondsPast > 86400) {\n var date = new Date(timestamp * 1000);\n var currentDate = new Date(now * 1000);\n var day = date.getDate();\n var month = date.toDateString().match(/ [a-zA-Z]*/)[0].replace(\' \', \'\');\n var year = date.getFullYear() === currentDate.getFullYear() ? \'\' : ", ".concat(date.getFullYear());\n return "".concat(month, " ").concat(day, " ").concat(year);\n }\n }\n }, {\n key: "removeRecentlyViewed",\n value: function removeRecentlyViewed(handle, recentlyViewed) {\n for (var i = 0; i < recentlyViewed.length; i++) {\n if (recentlyViewed[i].handle === handle) {\n recentlyViewed.splice(i, 1);\n }\n }\n\n this._setRecentlyViewed(recentlyViewed);\n\n var cards = sessionStorage.getItem(this.storageKey) ? JSON.parse(sessionStorage.getItem(this.storageKey)) : {};\n delete cards[handle];\n sessionStorage.setItem(this.storageKey, JSON.stringify(cards));\n\n if (recentlyViewed.length === 0) {\n this.$el.find(\'.product-recently-viewed--section\').addClass(\'hide\');\n }\n\n if (this.$carousel) {\n this.$carousel[0].removeEventListener(\'rimg:load\', this.slideImageLoaded);\n }\n }\n }, {\n key: "clearRecentlyViewed",\n value: function clearRecentlyViewed() {\n localStorage.removeItem(this.storageKey);\n sessionStorage.removeItem(this.storageKey);\n this.$el.find(\'[data-recently-viewed-card]\').remove();\n this.$el.find(\'.product-recently-viewed--section\').addClass(\'hide\');\n }\n }, {\n key: "_onSlideImageLoaded",\n value: function _onSlideImageLoaded() {\n Object(_helpers_flickityHelper__WEBPACK_IMPORTED_MODULE_3__["default"])(this.flickity);\n }\n }, {\n key: "_initSlider",\n value: function _initSlider() {\n this.flickityOptions = {\n autoPlay: 0,\n accessibility: true,\n cellAlign: \'left\',\n cellSelector: this.slides,\n groupCells: true,\n pageDots: false,\n contain: true,\n arrowShape: {\n x0: 10,\n x1: 60,\n y1: 50,\n x2: 65,\n y2: 45,\n x3: 20\n }\n };\n this.flickity = new flickity__WEBPACK_IMPORTED_MODULE_1___default.a(this.$carousel[0], this.flickityOptions);\n this.$carousel[0].addEventListener(\'rimg:load\', this.slideImageLoaded);\n }\n /**\n * Store recently viewed products\n *\n * @param {Object[]} productData - recently viewed products\n * @param {number} productData[].timestamp - Timestamp when product was added to productData\n * @param {string} productData[].handle - Shopify product handle\n * @private\n */\n\n }, {\n key: "_setRecentlyViewed",\n value: function _setRecentlyViewed(productData) {\n var _this3 = this;\n\n var now = Math.floor(Date.now() / 1000); // Unix timestamp for current date\n\n var minStorageTimestamp = now - this.maxStorageTime;
1\n var filteredData = productData.filter(function (item) {\n return item.timestamp > minStorageTimestamp;\n });\n\n if (filteredData.length > this.maxRecentlyViewed) {\n var removeCount = filteredData.length - this.maxRecentlyViewed;\n filteredData.splice(0, removeCount); // Remove oldest if more than max number have been stored\n }\n\n try {\n localStorage.setItem(this.storageKey, JSON.stringify(filteredData));\n } catch (error) {\n console.warn(error);\n } // Retrieve markup for recently viewed cards and store in session\n\n\n try {\n var handles = filteredData ? filteredData.map(function (x) {\n return x.handle;\n }) : [];\n var storedCards = sessionStorage.getItem(this.storageKey) ? JSON.parse(sessionStorage.getItem(this.storageKey)) : {};\n\n if (storedCards.cardSettings) {\n var cardSettings = Object.keys(storedCards.cardSettings);\n\n for (var i = 0; cardSettings.length > i; i++) {\n if (cardSettings[i] !== this.cardSettings[i]) {\n storedCards = {};\n sessionStorage.removeItem(this.storageKey);\n break;\n }\n }\n }\n\n storedCards.cardSettings = this.cardSettings;\n var promises = handles.map(function (handle) {\n if (storedCards[handle]) {\n return;\n }\n\n var fetchUrl = "/products/".concat(handle, "?view=_recently-viewed");\n /* eslint-disable consistent-return */\n\n return jquery__WEBPACK_IMPORTED_MODULE_0___default.a.get(fetchUrl).catch(function (error) {\n return console.error(\'Error:\', error);\n }).then(function (response) {\n if (response) {\n storedCards[handle] = response;\n\n try {\n sessionStorage.setItem(_this3.storageKey, JSON.stringify(storedCards));\n } catch (error) {\n console.warn(error);\n }\n }\n });\n /* eslint-enable consistent-return */\n });\n return promises;\n } catch (error) {\n console.warn(error);\n return false;\n }\n }\n /**\n * Get stored recently viewed products\n *\n * @returns {Array}\n * @private\n */\n\n }, {\n key: "_getRecentlyViewed",\n value: function _getRecentlyViewed() {\n try {\n var recentlyViewed = localStorage.getItem(this.storageKey) ? JSON.parse(localStorage.getItem(this.storageKey)) : [];\n return recentlyViewed;\n } catch (error) {\n console.warn(error);\n return [];\n }\n }\n }, {\n key: "_getRecentlyViewedCards",\n value: function _getRecentlyViewedCards() {\n var cards = sessionStorage.getItem(this.storageKey) ? JSON.parse(sessionStorage.getItem(this.storageKey)) : {};\n var orderedItems = localStorage.getItem(this.storageKey) ? JSON.parse(localStorage.getItem(this.storageKey)) : {};\n var markup = [];\n\n for (var i = orderedItems.length - 1; i >= 0; i--) {\n var cardKey = orderedItems[i].handle;\n markup.push(cards[cardKey]);\n }\n\n return markup.join(\'\');\n }\n }]);\n\n return RecentlyViewed;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL1JlY2VudGx5Vmlld2VkLmpzPzhmNmMiXSwibmFtZXMiOlsiUmVjZW50bHlWaWV3ZWQiLCJzZWN0aW9uIiwibmFtZXNwYWNlIiwibWF4UmVjZW50bHlWaWV3ZWQiLCJtYXhTdG9yYWdlVGltZSIsInZlcnNpb24iLCJzdG9yYWdlS2V5IiwiJGVsIiwiJCIsImVsIiwicmVjZW50bHlWaWV3ZWQiLCJkYXRhIiwicmVjZW50bHlfdmlld2VkX2luZm8iLCJ0aW1lIiwiZmxpY2tpdHkiLCJjYXJkU2V0dGluZ3MiLCJwcm9kdWN0X2NhcmRfc2V0dGluZ3MiLCJ0aW1lc3RhbXAiLCJNYXRoIiwicm91bmQiLCJEYXRlIiwiZ2V0VGltZSIsInNsaWRlSW1hZ2VMb2FkZWQiLCJfb25TbGlkZUltYWdlTG9hZGVkIiwiYmluZCIsIl9nZXRSZWNlbnRseVZpZXdlZCIsInJlbW92ZVJlY2VudGx5Vmlld2VkIiwiaGFuZGxlIiwicHVzaCIsInByb21pc2VzIiwiX3NldFJlY2VudGx5Vmlld2VkIiwid2hlbiIsImRvbmUiLCJsZW5ndGgiLCJjYXJkc01hcmt1cCIsIl9nZXRSZWNlbnRseVZpZXdlZENhcmRzIiwiY2FyZHNEYXRhIiwiZmluZCIsImFwcGVuZCIsImluaXRTaG9waWZ5UHJvZHVjdFJldmlld3MiLCJmb3JFYWNoIiwicHJvZHVjdERhdGEiLCJ0aW1lU2luY2UiLCJwcmVwZW5kIiwicmltZyIsIndhdGNoIiwiJGNhcm91c2VsIiwic2xpZGVzIiwiX2luaXRTbGlkZXIiLCJhZGRDbGFzcyIsImJpbmRFdmVudHMiLCJvbiIsImV2ZW50IiwiJHRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJ
1jbG9zZXN0IiwicGFyZW50cyIsIm5leHRBbGwiLCJzZXRUaW1lb3V0IiwiaW5kZXgiLCJyZW1vdmVDbGFzcyIsInJlbW92ZSIsInNlbGVjdENlbGwiLCJjbGVhclJlY2VudGx5Vmlld2VkIiwib2ZmIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm5vdyIsInNlY29uZHNQYXN0Iiwic2Vjb25kc0FnbyIsInBhcnNlSW50Iiwic2Vjb25kIiwiYWdvIiwic2Vjb25kcyIsIm1pbnV0ZXNBZ28iLCJtaW51dGUiLCJtaW51dGVzIiwiaG91cnNBZ28iLCJob3VyIiwiaG91cnMiLCJkYXRlIiwiY3VycmVudERhdGUiLCJkYXkiLCJnZXREYXRlIiwibW9udGgiLCJ0b0RhdGVTdHJpbmciLCJtYXRjaCIsInJlcGxhY2UiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJpIiwic3BsaWNlIiwiY2FyZHMiLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwibG9jYWxTdG9yYWdlIiwicmVtb3ZlSXRlbSIsInJlc2l6ZUZsaWNraXR5SWZOZWVkZWQiLCJmbGlja2l0eU9wdGlvbnMiLCJhdXRvUGxheSIsImFjY2Vzc2liaWxpdHkiLCJjZWxsQWxpZ24iLCJjZWxsU2VsZWN0b3IiLCJncm91cENlbGxzIiwicGFnZURvdHMiLCJjb250YWluIiwiYXJyb3dTaGFwZSIsIngwIiwieDEiLCJ5MSIsIngyIiwieTIiLCJ4MyIsIkZsaWNraXR5IiwiYWRkRXZlbnRMaXN0ZW5lciIsImZsb29yIiwibWluU3RvcmFnZVRpbWVzdGFtcCIsImZpbHRlcmVkRGF0YSIsImZpbHRlciIsIml0ZW0iLCJyZW1vdmVDb3VudCIsImVycm9yIiwiY29uc29sZSIsIndhcm4iLCJoYW5kbGVzIiwibWFwIiwieCIsInN0b3JlZENhcmRzIiwiT2JqZWN0Iiwia2V5cyIsImZldGNoVXJsIiwiZ2V0IiwiY2F0Y2giLCJ0aGVuIiwicmVzcG9uc2UiLCJvcmRlcmVkSXRlbXMiLCJtYXJrdXAiLCJjYX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DQUFDRyxTQUFMLENBQWVpQyxXQUFmLENBQXhDO0FBQ0QsZUFGRCxDQUVFLE9BQU9OLEtBQVAsRUFBYztBQUNkQyx1QkFBTyxDQUFDQyxJQUFSLENBQWFGLEtBQWI7QUFDRDtBQUNGO0FBQ0YsV0FYSSxDQUFQO0FBWUE7QUFDRCxTQXBCZ0IsQ0FBakI7QUFxQkEsZUFBTy9GLFFBQVA7QUFDRCxPQXpDRCxDQXlDRSxPQUFPK0YsS0FBUCxFQUFjO0FBQ2RDLGVBQU8sQ0FBQ0MsSUFBUixDQUFhRixLQUFiO0FBQ0EsZUFBTyxLQUFQO0FBQ0Q7QUFDRjtBQUVEOzs7Ozs7Ozs7eUNBTXFCO0FBQ25CLFVBQUk7QUFDRixZQUFNbEgsY0FBYyxHQUFHd0YsWUFBWSxDQUFDTCxPQUFiLENBQXFCLEtBQUt2RixVQUExQixJQUNuQndGLElBQUksQ0FBQ0MsS0FBTCxDQUFXRyxZQUFZLENBQUNMLE9BQWIsQ0FBcUIsS0FBS3ZGLFVBQTFCLENBQVgsQ0FEbUIsR0FFbkIsRUFGSjtBQUlBLGVBQU9JLGNBQVA7QUFDRCxPQU5ELENBTUUsT0FBT2tILEtBQVAsRUFBYztBQUNkQyxlQUFPLENBQUNDLElBQVIsQ0FBYUYsS0FBYjtBQUNBLGVBQU8sRUFBUDtBQUNEO0FBQ0Y7Ozs4Q0FFeUI7QUFDeEIsVUFBTWpDLEtBQUssR0FBR0MsY0FBYyxDQUFDQyxPQUFmLENBQXVCLEtBQUt2RixVQUE1QixJQUNWd0YsSUFBSSxDQUFDQyxLQUFMLENBQVd
1ILGNBQWMsQ0FBQ0MsT0FBZixDQUF1QixLQUFLdkYsVUFBNUIsQ0FBWCxDQURVLEdBRVYsRUFGSjtBQUlBLFVBQU1vSSxZQUFZLEdBQUd4QyxZQUFZLENBQUNMLE9BQWIsQ0FBcUIsS0FBS3ZGLFVBQTFCLElBQ2pCd0YsSUFBSSxDQUFDQyxLQUFMLENBQVdHLFlBQVksQ0FBQ0wsT0FBYixDQUFxQixLQUFLdkYsVUFBMUIsQ0FBWCxDQURpQixHQUVqQixFQUZKO0FBSUEsVUFBTXFJLE1BQU0sR0FBRyxFQUFmOztBQUVBLFdBQUssSUFBSWxELENBQUMsR0FBR2lELFlBQVksQ0FBQ3pHLE1BQWIsR0FBc0IsQ0FBbkMsRUFBc0N3RCxDQUFDLElBQUksQ0FBM0MsRUFBOENBLENBQUMsRUFBL0MsRUFBbUQ7QUFDakQsWUFBTW1ELE9BQU8sR0FBR0YsWUFBWSxDQUFDakQsQ0FBRCxDQUFaLENBQWdCOUQsTUFBaEM7QUFDQWdILGNBQU0sQ0FBQy9HLElBQVAsQ0FBWStELEtBQUssQ0FBQ2lELE9BQUQsQ0FBakI7QUFDRDs7QUFFRCxhQUFPRCxNQUFNLENBQUNFLElBQVAsQ0FBWSxFQUFaLENBQVA7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvUmVjZW50bHlWaWV3ZWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IEZsaWNraXR5IGZyb20gJ2ZsaWNraXR5JztcbmltcG9ydCByaW1nIGZyb20gJ3JpbWctc2hvcGlmeSc7XG5pbXBvcnQgcmVzaXplRmxpY2tpdHlJZk5lZWRlZCBmcm9tICcuLi9oZWxwZXJzL2ZsaWNraXR5SGVscGVyJztcbmltcG9ydCBpbml0U2hvcGlmeVByb2R1Y3RSZXZpZXdzIGZyb20gJy4uL2hlbHBlcnMvUHJvZHVjdFJldmlld3MnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWNlbnRseVZpZXdlZCB7XG4gIGNvbnN0cnVjdG9yKHNlY3Rpb24pIHtcbiAgICB0aGlzLm5hbWVzcGFjZSA9ICdweHUnO1xuICAgIHRoaXMubWF4UmVjZW50bHlWaWV3ZWQgPSAzMDsgLy8gU3RvcmUgYSBtYXggb2YgMzAgaXRlbXNcbiAgICB0aGlzLm1heFN0b3JhZ2VUaW1lID0gMzAgKiAyNCAqIDM2MDA7IC8vIFN0b3JlIGl0ZW1zIGZvciAzMCBkYXlzIG9ubHlcbiAgICB0aGlzLnZlcnNpb24gPSAxOyAvLyBWZXJzaW9uIGtleSBpcyB1c2VkIHRvIHVwZGF0ZSBsb2NhbHN0b3JhZ2Ugd2hlbiBmb3JtYXQgY2hhbmdlc1xuICAgIHRoaXMuc3RvcmFnZUtleSA9IGAke3RoaXMubmFtZXNwYWNlfS1yZWNlbnRseVZpZXdlZC0ke3RoaXMudmVyc2lvbn1gO1xuICAgIHRoaXMuJGVsID0gJChzZWN0aW9uLmVsKTtcbiAgICB0aGlzLnJlY2VudGx5Vmlld2VkID0gc2VjdGlvbi5kYXRhLnJlY2VudGx5X3ZpZXdlZF9pbmZvO1xuICAgIHRoaXMudGltZSA9IHNlY3Rpb24uZGF0YS50aW1lO1xuICAgIHRoaXMuZmxpY2tpdHkgPSBudWxsO1xuICAgIHRoaXMuY2FyZFNldHRpbmdzID0gc2VjdGlvbi5kYXRhLnByb2R1Y3RfY2FyZF9zZXR0aW5ncztcblxuICAgIGlmICh0aGlzLnJlY2VudGx5Vmlld2VkICYmIHRoaXMudGltZSkge1xuICAgICAgdGhpcy5yZWNlbnRseVZpZXdlZC50aW1lc3RhbXAgPSBNYXRoLnJvdW5kKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICB9XG5cbiAgICB0aGlzLnNsaWRlSW1hZ2VMb2FkZWQgPSB0aGlzLl9vblNsaWRlSW1hZ2VMb2FkZWQuYmluZCh0aGlzKTtcblxuICAgIGlmICh0aGlzLnRpbWUpIHtcbiAgICAgIGNvbnN0IHJlY2VudGx5Vmlld2VkID0gdGhpcy5fZ2V0UmVjZW50bHlWaWV3ZWQoKTtcbiAgICAgIGlmICh0aGlzLnJlY2VudGx5Vmlld2VkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUmVjZW50bHlWaWV3ZWQodGhpcy5yZWNlbnRseVZpZXdlZC5oYW5kbGUsIHJlY2VudGx5Vmlld2VkKTtcblxuICAgICAgICByZWNlbnRseVZpZXdlZC5wdXNoKHRoaXMucmVjZW50bHlWaWV3ZWQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMuX3NldFJlY2VudGx5Vmlld2VkKHJlY2VudGx5Vmlld2VkKTtcblxuICAgICAgLy8gV2FpdCB1bnRpbCBwcm9taXNlcyBhcmUgcmVzb2x2ZWQgYmVmb3JlIGluc2VydGluZyBtYXJrdXAgaW50byB0aGUgRE9NXG4gICAgICAkLndoZW4oLi4ucHJvbWlzZXMpLmRvbmUoKCkgPT4ge1xuICAgICAgICBpZiAocmVjZW50bHlWaWV3ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgY2FyZHNNYXJrdXAgPSB0aGlzLl9nZXRSZWNlbnRseVZpZXdlZENhcmRzKCk7XG4gICAgICAgICAgY29uc3QgY2FyZHNEYXRhID0gdGhpcy5fZ2V0UmVjZW50bHlWaWV3ZWQoKTtcbiAgICAgICAgICB0aGlzLiRlbC5maW5kKCdbZGF0YS1yZWNlbnRseS12aWV3ZWQtY29udGFpbmVyXScpLmFwcGVuZChjYXJkc01hcmt1cCk7XG5cbiAgICAgICAgICBpZiAoJCgnLnNwci1iYWRnZScsIHRoaXMuJGVsKSkge1xuICAgICAgICAgICAgaW5pdFNob3BpZnlQcm9kdWN0UmV2aWV3cygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhcmRzRGF0YS5mb3JFYWNoKHByb2R1Y3REYXRhID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IHRoaXMudGltZVNpbmNlKHByb2R1Y3REYXRhLnRpbWVzdGFtcCk7XG4gICAgICAgICAgICAkKGBbZGF0YS1wcm9kdWN0LWhhbmRsZT0ke3Byb2R1Y3REYXRhLmhhbmRsZX1dYClcbiAgICAgICAgICAgICAgLnByZXBlbmQodGltZXN0YW1wKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJpbWcud2F0Y2godGhpcy4kZWxbMF0pO1xuICAgICAgICAgIHRoaXMuJGNhcm91c2VsID0gdGhpcy4kZWwuZmluZCgnLnByb2R1Y3QtcmVjZW50bHktdmlld2VkLS1jb250ZW50Jyk7XG4gICAgICAgICAgdGhpcy5zbGlkZXMgPSAnLnByb2R1Y3QtcmVjZW50bHktdmlld2VkLWNhcmQnO1xuXG4gICAgICAgICAgaWYgKHRoaXMuJGNhcm91c2VsLmZpbmQodGhpcy5zbGlkZXMpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRTbGlkZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kZWwuZmluZCgnLnByb2R1Y3QtcmVjZW50bHktdmlld2VkLS1zZWN0aW9uJykuYWRkQ2xhc3MoJ2hpZGUnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnJlY2VudGx5Vmlld2VkKSB7XG4gICAgICAgIGxldCByZWNlbnRseVZpZXdlZDtcbiAgICAgICAgcmVjZW50bHlWaWV3ZWQucHVzaCh0aGlzLnJlY2VudGx5Vmlld2VkKTtcbiAgICAgICAgdGhpcy5fc2V0UmVjZW50bHlWaWV3ZWQocmVjZW50bHlWaWV3ZWQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiRlbC5maW5kKCcucHJvZHVjdC1yZWNlbnRseS12aWV3ZWQtLXNlY3Rpb24nKS5hZGRDbGFzcygnaGlkZScpO1xuICAgIH1cblxuICAgI
1HRoaXMuYmluZEV2ZW50cygpO1xuICB9XG5cbiAgYmluZEV2ZW50cygpIHtcbiAgICB0aGlzLiRlbC5vbignY2xpY2sucmVjZW50bHktdmlld2VkJywgJ1tkYXRhLXJlbW92ZS1yZWNlbnRseS12aWV3ZWRdJywgZXZlbnQgPT4ge1xuICAgICAgY29uc3QgJHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgICBjb25zdCBoYW5kbGUgPSAkdGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXByb2R1Y3QtaGFuZGxlXScpLmRhdGEoJ3Byb2R1Y3QtaGFuZGxlJyk7XG4gICAgICBjb25zdCByZWNlbnRseVZpZXdlZCA9IHRoaXMuX2dldFJlY2VudGx5Vmlld2VkKCk7XG5cbiAgICAgIHRoaXMucmVtb3ZlUmVjZW50bHlWaWV3ZWQoaGFuZGxlLCByZWNlbnRseVZpZXdlZCk7XG4gICAgICB0aGlzLl9zZXRSZWNlbnRseVZpZXdlZChyZWNlbnRseVZpZXdlZCk7XG5cbiAgICAgICR0YXJnZXQucGFyZW50cygnW2RhdGEtcmVjZW50bHktdmlld2VkLWNhcmRdJykuYWRkQ2xhc3MoJ2hpZGUtY2FyZCcpO1xuICAgICAgJHRhcmdldC5wYXJlbnRzKCdbZGF0YS1yZWNlbnRseS12aWV3ZWQtY2FyZF0nKS5uZXh0QWxsKCkuYWRkQ2xhc3MoJ21vdmUtY2FyZCcpO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbGV0IGluZGV4ID0gJHRhcmdldC5wYXJlbnRzKCdbZGF0YS1yZWNlbnRseS12aWV3ZWQtY2FyZF0nKS5pbmRleCgpO1xuICAgICAgICBpZiAoaW5kZXggIT09IDApIHtcbiAgICAgICAgICBpbmRleC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgJHRhcmdldC5wYXJlbnRzKCdbZGF0YS1yZWNlbnRseS12aWV3ZWQtY2FyZF0nKS5uZXh0QWxsKCkucmVtb3ZlQ2xhc3MoJ21vdmUtY2FyZCcpO1xuICAgICAgICBpZiAoJHRhcmdldC5wYXJlbnRzKCdbZGF0YS1yZWNlbnRseS12aWV3ZWQtY2FyZF0nKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmZsaWNraXR5LnJlbW92ZSgkdGFyZ2V0LnBhcmVudHMoJ1tkYXRhLXJlY2VudGx5LXZpZXdlZC1jYXJkXScpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZsaWNraXR5LnNlbGVjdENlbGwoaW5kZXgpO1xuICAgICAgfSwgNTAwKTtcbiAgICB9KTtcblxuICAgIHRoaXMuJGVsLm9uKCdjbGljay5yZWNlbnRseS12aWV3ZWQnLCAnW2RhdGEtY2xlYXItcmVjZW50bHktdmlld2VkXScsICgpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJSZWNlbnRseVZpZXdlZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIHRoaXMuJGVsLm9mZignLnJlY2VudGx5LXZpZXdlZCcpO1xuXG4gICAgaWYgKHRoaXMuJGNhcm91c2VsICYmIHRoaXMuJGNhcm91c2VsWzBdKSB7XG4gICAgICB0aGlzLiRjYXJvdXNlbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCdyaW1nOmxvYWQnLCB0aGlzLnNsaWRlSW1hZ2VMb2FkZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVybiAqL1xuICB0aW1lU2luY2UodGltZXN0YW1wKSB7XG4gICAgY29uc3Qgbm93ID0gTWF0aC5yb3VuZCgobmV3IERhdGUoKSkuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgY29uc3Qgc2Vjb25kc1Bhc3QgPSBub3cgLSB0aW1lc3RhbXA7XG5cbiAgICBpZiAoc2Vjb25kc1Bhc3QgPCA2MCkge1xuICAgICAgY29uc3Qgc2Vjb25kc0FnbyA9IHBhcnNlSW50KHNlY29uZHNQYXN0LCAxMCk7XG5cbiAgICAgIHJldHVybiBzZWNvbmRzQWdvID09PSAxXG4gICAgICAgID8gYCR7c2Vjb25kc0Fnb30gJHt0aGlzLnRpbWUuc2Vjb25kfSAke3RoaXMudGltZS5hZ299YFxuICAgICAgICA6IGAke3NlY29uZHNBZ299ICR7dGhpcy50aW1lLnNlY29uZHN9ICR7dGhpcy50aW1lLmFnb31gO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzUGFzdCA8IDM2MDApIHtcbiAgICAgIGNvbnN0IG1pbnV0ZXNBZ28gPSBwYXJzZUludChzZWNvbmRzUGFzdCAvIDYwLCAxMCk7XG5cbiAgICAgIHJldHVybiBtaW51dGVzQWdvID09PSAxXG4gICAgICAgID8gYCR7bWludXRlc0Fnb30gJHt0aGlzLnRpbWUubWludXRlfSAke3RoaXMudGltZS5hZ299YFxuICAgICAgICA6IGAke21pbnV0ZXNBZ299ICR7dGhpcy50aW1lLm1pbnV0ZXN9ICR7dGhpcy50aW1lLmFnb31gO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzUGFzdCA8PSA4NjQwMCkge1xuICAgICAgY29uc3QgaG91cnNBZ28gPSBwYXJzZUludChzZWNvbmRzUGFzdCAvIDM2MDAsIDEwKTtcblxuICAgICAgcmV0dXJuIGhvdXJzQWdvID09PSAxXG4gICAgICAgID8gYCR7aG91cnNBZ299ICR7dGhpcy50aW1lLmhvdXJ9ICR7dGhpcy50aW1lLmFnb31gXG4gICAgICAgIDogYCR7aG91cnNBZ299ICR7dGhpcy50aW1lLmhvdXJzfSAke3RoaXMudGltZS5hZ299YDtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kc1Bhc3QgPiA4NjQwMCkge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCAqIDEwMDApO1xuICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZShub3cgKiAxMDAwKTtcbiAgICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgY29uc3QgbW9udGggPSBkYXRlLnRvRGF0ZVN0cmluZygpLm1hdGNoKC8gW2EtekEtWl0qLylbMF0ucmVwbGFjZSgnICcsICcnKTtcbiAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgPyAnJ1xuICAgICAgICA6IGAsICR7ZGF0ZS5nZXRGdWxsWWVhcigpfWA7XG5cbiAgICAgIHJldHVybiBgJHttb250aH0gJHtkYXl9ICR7eWVhcn1gO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVJlY2VudGx5Vmlld2VkKGhhbmRsZSwgcmVjZW50bHlWaWV3ZWQpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY2VudGx5Vmlld2VkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVjZW50bHlWaWV3ZWRbaV0uaGFuZGxlID09PSBoYW5kbGUpIHtcbiAgICAgICAgcmVjZW50bHlWaWV3ZWQuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9zZXRSZWNlbnRseVZpZXdlZChyZWNlbnRseVZpZXdlZCk7XG4gICAgY29uc3QgY2FyZHMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSlcbiAgICAgID8gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSkpXG4gICAgICA6IHt9O1xuXG4gICAgZGVsZXRlIGNhcmRzW2hhbmRsZV07XG5cbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkoY2Fy
1ZHMpKTtcblxuICAgIGlmIChyZWNlbnRseVZpZXdlZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuJGVsLmZpbmQoJy5wcm9kdWN0LXJlY2VudGx5LXZpZXdlZC0tc2VjdGlvbicpLmFkZENsYXNzKCdoaWRlJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLiRjYXJvdXNlbCkge1xuICAgICAgdGhpcy4kY2Fyb3VzZWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmltZzpsb2FkJywgdGhpcy5zbGlkZUltYWdlTG9hZGVkKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclJlY2VudGx5Vmlld2VkKCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuc3RvcmFnZUtleSk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnN0b3JhZ2VLZXkpO1xuICAgIHRoaXMuJGVsLmZpbmQoJ1tkYXRhLXJlY2VudGx5LXZpZXdlZC1jYXJkXScpLnJlbW92ZSgpO1xuICAgIHRoaXMuJGVsLmZpbmQoJy5wcm9kdWN0LXJlY2VudGx5LXZpZXdlZC0tc2VjdGlvbicpLmFkZENsYXNzKCdoaWRlJyk7XG4gIH1cblxuICBfb25TbGlkZUltYWdlTG9hZGVkKCkge1xuICAgIHJlc2l6ZUZsaWNraXR5SWZOZWVkZWQodGhpcy5mbGlja2l0eSk7XG4gIH1cblxuICBfaW5pdFNsaWRlcigpIHtcbiAgICB0aGlzLmZsaWNraXR5T3B0aW9ucyA9IHtcbiAgICAgIGF1dG9QbGF5OiAwLFxuICAgICAgYWNjZXNzaWJpbGl0eTogdHJ1ZSxcbiAgICAgIGNlbGxBbGlnbjogJ2xlZnQnLFxuICAgICAgY2VsbFNlbGVjdG9yOiB0aGlzLnNsaWRlcyxcbiAgICAgIGdyb3VwQ2VsbHM6IHRydWUsXG4gICAgICBwYWdlRG90czogZmFsc2UsXG4gICAgICBjb250YWluOiB0cnVlLFxuICAgICAgYXJyb3dTaGFwZToge1xuICAgICAgICB4MDogMTAsXG4gICAgICAgIHgxOiA2MCxcbiAgICAgICAgeTE6IDUwLFxuICAgICAgICB4MjogNjUsXG4gICAgICAgIHkyOiA0NSxcbiAgICAgICAgeDM6IDIwLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdGhpcy5mbGlja2l0eSA9IG5ldyBGbGlja2l0eSh0aGlzLiRjYXJvdXNlbFswXSwgdGhpcy5mbGlja2l0eU9wdGlvbnMpO1xuXG4gICAgdGhpcy4kY2Fyb3VzZWxbMF0uYWRkRXZlbnRMaXN0ZW5lcigncmltZzpsb2FkJywgdGhpcy5zbGlkZUltYWdlTG9hZGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSByZWNlbnRseSB2aWV3ZWQgcHJvZHVjdHNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3RbXX0gcHJvZHVjdERhdGEgLSByZWNlbnRseSB2aWV3ZWQgcHJvZHVjdHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHByb2R1Y3REYXRhW10udGltZXN0YW1wIC0gVGltZXN0YW1wIHdoZW4gcHJvZHVjdCB3YXMgYWRkZWQgdG8gcHJvZHVjdERhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb2R1Y3REYXRhW10uaGFuZGxlIC0gU2hvcGlmeSBwcm9kdWN0IGhhbmRsZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFJlY2VudGx5Vmlld2VkKHByb2R1Y3REYXRhKSB7XG4gICAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7IC8vIFVuaXggdGltZXN0YW1wIGZvciBjdXJyZW50IGRhdGVcbiAgICBjb25zdCBtaW5TdG9yYWdlVGltZXN0YW1wID0gbm93IC0gdGhpcy5tYXhTdG9yYWdlVGltZTtcbiAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSBwcm9kdWN0RGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnRpbWVzdGFtcCA+IG1pblN0b3JhZ2VUaW1lc3RhbXApO1xuXG4gICAgaWYgKGZpbHRlcmVkRGF0YS5sZW5ndGggPiB0aGlzLm1heFJlY2VudGx5Vmlld2VkKSB7XG4gICAgICBjb25zdCByZW1vdmVDb3VudCA9IGZpbHRlcmVkRGF0YS5sZW5ndGggLSB0aGlzLm1heFJlY2VudGx5Vmlld2VkO1xuICAgICAgZmlsdGVyZWREYXRhLnNwbGljZSgwLCByZW1vdmVDb3VudCk7IC8vIFJlbW92ZSBvbGRlc3QgaWYgbW9yZSB0aGFuIG1heCBudW1iZXIgaGF2ZSBiZWVuIHN0b3JlZFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGZpbHRlcmVkRGF0YSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oZXJyb3IpO1xuICAgIH1cblxuICAgIC8vIFJldHJpZXZlIG1hcmt1cCBmb3IgcmVjZW50bHkgdmlld2VkIGNhcmRzIGFuZCBzdG9yZSBpbiBzZXNzaW9uXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhhbmRsZXMgPSBmaWx0ZXJlZERhdGFcbiAgICAgICAgPyBmaWx0ZXJlZERhdGEubWFwKHggPT4geC5oYW5kbGUpXG4gICAgICAgIDogW107XG4gICAgICBsZXQgc3RvcmVkQ2FyZHMgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSlcbiAgICAgICAgPyBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KSlcbiAgICAgICAgOiB7fTtcblxuICAgICAgaWYgKHN0b3JlZENhcmRzLmNhcmRTZXR0aW5ncykge1xuICAgICAgICBjb25zdCBjYXJkU2V0dGluZ3MgPSBPYmplY3Qua2V5cyhzdG9yZWRDYXJkcy5jYXJkU2V0dGluZ3MpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgY2FyZFNldHRpbmdzLmxlbmd0aCA+IGk7IGkrKykge1xuICAgICAgICAgIGlmIChjYXJkU2V0dGluZ3NbaV0gIT09IHRoaXMuY2FyZFNldHRpbmdzW2ldKSB7XG4gICAgICAgICAgICBzdG9yZWRDYXJkcyA9IHt9O1xuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnN0b3JhZ2VLZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdG9yZWRDYXJkcy5jYXJkU2V0dGluZ3MgPSB0aGlzLmNhcmRTZXR0aW5ncztcbiAgICAgIGNvbnN0IHByb21pc2VzID0gaGFuZGxlcy5tYXAoaGFuZGxlID0+IHtcbiAgICAgICAgaWYgKHN0b3JlZENhcmRzW2hhbmRsZV0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSBgL3Byb2R1Y3RzLyR7aGFuZGxlfT92aWV3PV9yZWNlbnRseS12aWV3ZWRgO1xuXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbnNpc3RlbnQtcmV0dXJuICovXG4gICAgICAgI
1HJldHVybiAkLmdldChmZXRjaFVybClcbiAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpKVxuICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICBzdG9yZWRDYXJkc1toYW5kbGVdID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KHN0b3JlZENhcmRzKSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIGNvbnNpc3RlbnQtcmV0dXJuICovXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwcm9taXNlcztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0b3JlZCByZWNlbnRseSB2aWV3ZWQgcHJvZHVjdHNcbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFJlY2VudGx5Vmlld2VkKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWNlbnRseVZpZXdlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSlcbiAgICAgICAgPyBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSkpXG4gICAgICAgIDogW107XG5cbiAgICAgIHJldHVybiByZWNlbnRseVZpZXdlZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKGVycm9yKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBfZ2V0UmVjZW50bHlWaWV3ZWRDYXJkcygpIHtcbiAgICBjb25zdCBjYXJkcyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KVxuICAgICAgPyBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KSlcbiAgICAgIDoge307XG5cbiAgICBjb25zdCBvcmRlcmVkSXRlbXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXkpXG4gICAgICA/IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KSlcbiAgICAgIDoge307XG5cbiAgICBjb25zdCBtYXJrdXAgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSBvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGNhcmRLZXkgPSBvcmRlcmVkSXRlbXNbaV0uaGFuZGxlO1xuICAgICAgbWFya3VwLnB1c2goY2FyZHNbY2FyZEtleV0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrdXAuam9pbignJyk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/components/RecentlyViewed.js\n')},
1"./source/scripts/components/RichText.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return RichText; });\n/* harmony import */ var fitvids__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fitvids */ "./node_modules/fitvids/index.js");\n/* harmony import */ var fitvids__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fitvids__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var grouped_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! grouped-content */ "./node_modules/grouped-content/dist/index.js");\n/* harmony import */ var grouped_content__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(grouped_content__WEBPACK_IMPORTED_MODULE_1__);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar RichText =\n/*#__PURE__*/\nfunction () {\n function RichText(el) {\n _classCallCheck(this, RichText);\n\n this.$el = $(el);\n\n this._initExternalLinks();\n\n this.groupedContent = null;\n\n if (this.$el.length) {\n this.groupedContent = new grouped_content__WEBPACK_IMPORTED_MODULE_1___default.a(this.$el.get(0), {\n layout: \'tabs\',\n intelliparse: false\n });\n fitvids__WEBPACK_IMPORTED_MODULE_0___default()(\'.rte\');\n }\n }\n\n _createClass(RichText, [{\n key: "unload",\n value: function unload() {\n if (this.groupedContent) {\n this.groupedContent.unload();\n }\n }\n /**\n * Open links within an RTE field in a new window if they point to external domains\n *\n * @private\n */\n\n }, {\n key: "_initExternalLinks",\n value: function _initExternalLinks() {\n var anchors = this.$el.find(\'a[href^="http"]\').filter(function (i, el) {\n return el.href.indexOf(location.hostname) === -1;\n });\n anchors.attr(\'target\', \'_blank\');\n }\n }]);\n\n return RichText;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL1JpY2hUZXh0LmpzPzViYTgiXSwibmFtZXMiOlsiUmljaFRleHQiLCJlbCIsIiRlbCIsIiQiLCJfaW5pdEV4dGVybmFsTGlua3MiLCJncm91cGVkQ29udGVudCIsImxlbmd0aCIsIkdyb3VwZWRDb250ZW50IiwiZ2V0IiwibGF5b3V0IiwiaW50ZWxsaXBhcnNlIiwiZml0dmlkcyIsInVubG9hZCIsImFuY2hvcnMiLCJmaW5kIiwiZmlsdGVyIiwiaSIsImhyZWYiLCJpbmRleE9mIiwibG9jYXRpb24iLCJob3N0bmFtZSIsImF0dHIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0lBRXFCQSxROzs7QUFDbkIsb0JBQVlDLEVBQVosRUFBZ0I7QUFBQTs7QUFDZCxTQUFLQyxHQUFMLEdBQVdDLENBQUMsQ0FBQ0YsRUFBRCxDQUFaOztBQUNBLFNBQUtHLGtCQUFMOztBQUNBLFNBQUtDLGNBQUwsR0FBc0IsSUFBdEI7O0FBRUEsUUFBSSxLQUFLSCxHQUFMLENBQVNJLE1BQWIsRUFBcUI7QUFDbkIsV0FBS0QsY0FBTCxHQUFzQixJQUFJRSxzREFBSixDQUFtQixLQUFLTCxHQUFMLENBQVNNLEdBQVQsQ0FBYSxDQUFiLENBQW5CLEVBQW9DO0FBQ3hEQyxjQUFNLEVBQUUsTUFEZ0Q7QUFFeERDLG9CQUFZLEVBQUU7QUFGMEMsT0FBcEMsQ0FBdEI7QUFLQUMsb0RBQU8sQ0FBQyxNQUFELENBQVA7QUFDRDtBQUNGOzs7OzZCQUVRO0FBQ1AsVUFBSSxLQUFLTixjQUFULEVBQXlCO0FBQ3ZCLGFBQUtBLGNBQUwsQ0FBb0JPLE1BQXBCO0FBQ0Q7QUFDRjtBQUVEOzs7Ozs7Ozt5Q0FLcUI7QUFDbkIsVUFBTUMsT0FBTyxHQUFHLEtBQUtYLEdBQUwsQ0FBU1ksSUFBVCxDQUFjLGlCQUFkLEVBQWlDQyxNQUFqQyxDQUF3QyxVQUFDQyxDQUFELEVBQUlmLEVBQUo7QUFBQSxlQUFXQSxFQUFFLENBQUNnQixJQUFILENBQVFDLE9BQVIsQ0FBZ0JDLFFBQVEsQ0FBQ0MsUUFBekIsTUFBdUMsQ0FBQyxDQUFuRDtBQUFBLE9BQXhDLENBQWhCO0FBRUFQLGFBQU8sQ0FBQ1EsSUFBUixDQUFhLFFBQWIsRUFBdUIsUUFBdkI7QU
1FDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvUmljaFRleHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZml0dmlkcyBmcm9tICdmaXR2aWRzJztcbmltcG9ydCBHcm91cGVkQ29udGVudCBmcm9tICdncm91cGVkLWNvbnRlbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dCB7XG4gIGNvbnN0cnVjdG9yKGVsKSB7XG4gICAgdGhpcy4kZWwgPSAkKGVsKTtcbiAgICB0aGlzLl9pbml0RXh0ZXJuYWxMaW5rcygpO1xuICAgIHRoaXMuZ3JvdXBlZENvbnRlbnQgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuJGVsLmxlbmd0aCkge1xuICAgICAgdGhpcy5ncm91cGVkQ29udGVudCA9IG5ldyBHcm91cGVkQ29udGVudCh0aGlzLiRlbC5nZXQoMCksIHtcbiAgICAgICAgbGF5b3V0OiAndGFicycsXG4gICAgICAgIGludGVsbGlwYXJzZTogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgZml0dmlkcygnLnJ0ZScpO1xuICAgIH1cbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICBpZiAodGhpcy5ncm91cGVkQ29udGVudCkge1xuICAgICAgdGhpcy5ncm91cGVkQ29udGVudC51bmxvYWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBsaW5rcyB3aXRoaW4gYW4gUlRFIGZpZWxkIGluIGEgbmV3IHdpbmRvdyBpZiB0aGV5IHBvaW50IHRvIGV4dGVybmFsIGRvbWFpbnNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0RXh0ZXJuYWxMaW5rcygpIHtcbiAgICBjb25zdCBhbmNob3JzID0gdGhpcy4kZWwuZmluZCgnYVtocmVmXj1cImh0dHBcIl0nKS5maWx0ZXIoKGksIGVsKSA9PiBlbC5ocmVmLmluZGV4T2YobG9jYXRpb24uaG9zdG5hbWUpID09PSAtMSk7XG5cbiAgICBhbmNob3JzLmF0dHIoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/components/RichText.js\n')},
1"./source/scripts/components/Video.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Video; });\n/* harmony import */ var _Youtube__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Youtube */ \"./source/scripts/components/Youtube.js\");\n/* harmony import */ var _Vimeo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Vimeo */ \"./source/scripts/components/Vimeo.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar Video =\n/*#__PURE__*/\nfunction () {\n function Video(el, options) {\n _classCallCheck(this, Video);\n\n this.el = el;\n this.options = options;\n this.platform = el.getAttribute('data-video').trim();\n this.playButton = el.querySelector('[data-video-play-button]');\n this.videoEl = el.querySelector('[data-video-element]');\n this.onPlayClick = this._onPlayClick.bind(this);\n this.onPauseClick = this._onPauseClick.bind(this);\n this.autoplay = this._autoplay.bind(this);\n this.video = null;\n this.videoData = {\n el: this.videoEl.childNodes[0],\n videoUrl: this.videoEl.getAttribute('data-video-url')\n };\n\n switch (this.platform) {\n case 'youtube':\n this.video = new _Youtube__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.videoData);\n break;\n\n case 'vimeo':\n this.video = new _Vimeo__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this.videoData);\n break;\n\n default:\n this.video = null;\n break;\n }\n\n if (this.playButton) {\n if (this.options && this.options.autoplay) {\n this.autoplay();\n }\n\n this.playButton.addEventListener('click', this.onPlayClick);\n }\n }\n\n _createClass(Video, [{\n key: \"_onPlayClick\",\n value: function _onPlayClick() {\n var _this = this;\n\n this.el.classList.add('video-loading');\n this.video.play().then(function () {\n _this.el.classList.add('video-transitioning');\n\n setTimeout(function () {\n _this.el.classList.remove('video-loading');\n\n _this.el.classList.remove('video-transitioning');\n\n _this.el.classList.add('video-playing');\n }, 200);\n });\n }\n }, {\n key: \"_onPauseClick\",\n value: function _onPauseClick() {\n this.video.pause();\n }\n }, {\n key: \"_autoplay\",\n value: function _autoplay() {\n var _this2 = this;\n\n this.el.classList.add('video-loading');\n this.video.autoplay().then(function () {\n _this2.el.classList.add('video-transitioning');\n\n setTimeout(function () {\n _this2.el.classList.remove('video-loading');\n\n _this2.el.classList.remove('video-transitioning');\n\n _this2.el.classList.add('video-playing');\n }, 200);\n });\n }\n }, {\n key: \"unload\",\n value: function unload() {\n if (this.playButton) {\n this.playButton.removeEventListener('click', this.onPlayClick);\n }\n\n if (this.video) {\n this.video.unload();\n }\n }\n }]);\n\n return Video;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL1ZpZGVvLmpzPzZhMDUiXSwibmFtZXMiOlsiVmlkZW8iLCJlbCIsIm9wdGlvbnMiLCJwbGF0Zm9ybSIsImdldEF0dHJpYnV0ZSIsInRyaW0iLCJwbGF5QnV0dG9uIiwicXVlcnlTZWxlY3RvciIsInZpZGVvRWwiLCJvblBsYXlDbGljayIsIl9vblBsYXlDbGljayIsImJpbmQiLCJvblBhdXNlQ2xpY2siLCJfb25QYXVzZUNsaWNrIiwiYXV0b3BsYXkiLCJfYXV0b3BsYXkiLCJ2aWRlbyIsInZpZGVvRGF0YSIsImNoaWxkTm9kZXMiLCJ2aWRlb1VybCIsIllvdXR1YmUiLCJWaW1lbyIsImFkZEV2ZW50TGlzdGVuZXIiLCJjbGFzc0xpc3QiLCJhZGQiLCJwbGF5IiwidGhlbiIsInNldFRpbWVvdXQiLCJyZW1vdmUiLCJwYXVzZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ1bmxvYWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztJQUVxQkEsSzs7O0FBQ25CLGlCQUFZQyxFQUFaLEVBQWdCQyxPQUFoQixFQUF5QjtBQUFBOztBQUN2QixTQUFLRCxFQUFMLEdBQVVBLEVBQVY7QUFDQSxTQUFLQyxPQUFMLEdBQWVBLE9BQWY7QUFDQSxTQUFLQyxRQUFMLEdBQWdCRixFQUFFLENBQUNHLFlBQUgsQ0FBZ0IsWUFBaEIsRUFBOEJDLElBQTlCLEVBQWhCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQkwsRUFBRSxDQUFDT
1SxhQUFILENBQWlCLDBCQUFqQixDQUFsQjtBQUNBLFNBQUtDLE9BQUwsR0FBZVAsRUFBRSxDQUFDTSxhQUFILENBQWlCLHNCQUFqQixDQUFmO0FBRUEsU0FBS0UsV0FBTCxHQUFtQixLQUFLQyxZQUFMLENBQWtCQyxJQUFsQixDQUF1QixJQUF2QixDQUFuQjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsS0FBS0MsYUFBTCxDQUFtQkYsSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBcEI7QUFDQSxTQUFLRyxRQUFMLEdBQWdCLEtBQUtDLFNBQUwsQ0FBZUosSUFBZixDQUFvQixJQUFwQixDQUFoQjtBQUVBLFNBQUtLLEtBQUwsR0FBYSxJQUFiO0FBRUEsU0FBS0MsU0FBTCxHQUFpQjtBQUNmaEIsUUFBRSxFQUFFLEtBQUtPLE9BQUwsQ0FBYVUsVUFBYixDQUF3QixDQUF4QixDQURXO0FBRWZDLGNBQVEsRUFBRSxLQUFLWCxPQUFMLENBQWFKLFlBQWIsQ0FBMEIsZ0JBQTFCO0FBRkssS0FBakI7O0FBS0EsWUFBUSxLQUFLRCxRQUFiO0FBQ0UsV0FBSyxTQUFMO0FBQ0UsYUFBS2EsS0FBTCxHQUFhLElBQUlJLGdEQUFKLENBQVksS0FBS0gsU0FBakIsQ0FBYjtBQUNBOztBQUNGLFdBQUssT0FBTDtBQUNFLGFBQUtELEtBQUwsR0FBYSxJQUFJSyw4Q0FBSixDQUFVLEtBQUtKLFNBQWYsQ0FBYjtBQUNBOztBQUNGO0FBQ0UsYUFBS0QsS0FBTCxHQUFhLElBQWI7QUFDQTtBQVRKOztBQVlBLFFBQUksS0FBS1YsVUFBVCxFQUFxQjtBQUNuQixVQUFJLEtBQUtKLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhWSxRQUFqQyxFQUEyQztBQUN6QyxhQUFLQSxRQUFMO0FBQ0Q7O0FBRUQsV0FBS1IsVUFBTCxDQUFnQmdCLGdCQUFoQixDQUFpQyxPQUFqQyxFQUEwQyxLQUFLYixXQUEvQztBQUNEO0FBQ0Y7Ozs7bUNBRWM7QUFBQTs7QUFDYixXQUFLUixFQUFMLENBQVFzQixTQUFSLENBQWtCQyxHQUFsQixDQUFzQixlQUF0QjtBQUVBLFdBQUtSLEtBQUwsQ0FBV1MsSUFBWCxHQUFrQkMsSUFBbEIsQ0FBdUIsWUFBTTtBQUMzQixhQUFJLENBQUN6QixFQUFMLENBQVFzQixTQUFSLENBQWtCQyxHQUFsQixDQUFzQixxQkFBdEI7O0FBRUFHLGtCQUFVLENBQUMsWUFBTTtBQUNmLGVBQUksQ0FBQzFCLEVBQUwsQ0FBUXNCLFNBQVIsQ0FBa0JLLE1BQWxCLENBQXlCLGVBQXpCOztBQUNBLGVBQUksQ0FBQzNCLEVBQUwsQ0FBUXNCLFNBQVIsQ0FBa0JLLE1BQWxCLENBQXlCLHFCQUF6Qjs7QUFDQSxlQUFJLENBQUMzQixFQUFMLENBQVFzQixTQUFSLENBQWtCQyxHQUFsQixDQUFzQixlQUF0QjtBQUNELFNBSlMsRUFJUCxHQUpPLENBQVY7QUFLRCxPQVJEO0FBU0Q7OztvQ0FFZTtBQUNkLFdBQUtSLEtBQUwsQ0FBV2EsS0FBWDtBQUNEOzs7Z0NBRVc7QUFBQTs7QUFDVixXQUFLNUIsRUFBTCxDQUFRc0IsU0FBUixDQUFrQkMsR0FBbEIsQ0FBc0IsZUFBdEI7QUFFQSxXQUFLUixLQUFMLENBQVdGLFFBQVgsR0FBc0JZLElBQXRCLENBQTJCLFlBQU07QUFDL0IsY0FBSSxDQUFDekIsRUFBTCxDQUFRc0IsU0FBUixDQUFrQkMsR0FBbEIsQ0FBc0IscUJBQXRCOztBQUVBRyxrQkFBVSxDQUFDLFlBQU07QUFDZixnQkFBSSxDQUFDMUIsRUFBTCxDQUFRc0IsU0FBUixDQUFrQkssTUFBbEIsQ0FBeUIsZUFBekI7O0FBQ0EsZ0JBQUksQ0FBQzNCLEVBQUwsQ0FBUXNCLFNBQVIsQ0FBa0JLLE1BQWxCLENBQXlCLHFCQUF6Qjs7QUFDQSxnQkFBSSxDQUFDM0IsRUFBTCxDQUFRc0IsU0FBUixDQUFrQkMsR0FBbEIsQ0FBc0IsZUFBdEI7QUFDRCxTQUpTLEVBSVAsR0FKTyxDQUFWO0FBS0QsT0FSRDtBQVNEOzs7NkJBRVE7QUFDUCxVQUFJLEtBQUtsQixVQUFULEVBQXFCO0FBQ25CLGFBQUtBLFVBQUwsQ0FBZ0J3QixtQkFBaEIsQ0FBb0MsT0FBcEMsRUFBNkMsS0FBS3JCLFdBQWxEO0FBQ0Q7O0FBRUQsVUFBSSxLQUFLTyxLQUFULEVBQWdCO0FBQ2QsYUFBS0EsS0FBTCxDQUFXZSxNQUFYO0FBQ0Q7QUFDRiIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvVmlkZW8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgWW91dHViZSBmcm9tICcuL1lvdXR1YmUnO1xuaW1wb3J0IFZpbWVvIGZyb20gJy4vVmltZW8nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlbyB7XG4gIGNvbnN0cnVjdG9yKGVsLCBvcHRpb25zKSB7XG4gICAgdGhpcy5lbCA9IGVsO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5wbGF0Zm9ybSA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS12aWRlbycpLnRyaW0oKTtcbiAgICB0aGlzLnBsYXlCdXR0b24gPSBlbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS12aWRlby1wbGF5LWJ1dHRvbl0nKTtcbiAgICB0aGlzLnZpZGVvRWwgPSBlbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS12aWRlby1lbGVtZW50XScpO1xuXG4gICAgdGhpcy5vblBsYXlDbGljayA9IHRoaXMuX29uUGxheUNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vblBhdXNlQ2xpY2sgPSB0aGlzLl9vblBhdXNlQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmF1dG9wbGF5ID0gdGh
1pcy5fYXV0b3BsYXkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudmlkZW8gPSBudWxsO1xuXG4gICAgdGhpcy52aWRlb0RhdGEgPSB7XG4gICAgICBlbDogdGhpcy52aWRlb0VsLmNoaWxkTm9kZXNbMF0sXG4gICAgICB2aWRlb1VybDogdGhpcy52aWRlb0VsLmdldEF0dHJpYnV0ZSgnZGF0YS12aWRlby11cmwnKSxcbiAgICB9O1xuXG4gICAgc3dpdGNoICh0aGlzLnBsYXRmb3JtKSB7XG4gICAgICBjYXNlICd5b3V0dWJlJzpcbiAgICAgICAgdGhpcy52aWRlbyA9IG5ldyBZb3V0dWJlKHRoaXMudmlkZW9EYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd2aW1lbyc6XG4gICAgICAgIHRoaXMudmlkZW8gPSBuZXcgVmltZW8odGhpcy52aWRlb0RhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMudmlkZW8gPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wbGF5QnV0dG9uKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5hdXRvcGxheSkge1xuICAgICAgICB0aGlzLmF1dG9wbGF5KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGxheUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25QbGF5Q2xpY2spO1xuICAgIH1cbiAgfVxuXG4gIF9vblBsYXlDbGljaygpIHtcbiAgICB0aGlzLmVsLmNsYXNzTGlzdC5hZGQoJ3ZpZGVvLWxvYWRpbmcnKTtcblxuICAgIHRoaXMudmlkZW8ucGxheSgpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKCd2aWRlby10cmFuc2l0aW9uaW5nJyk7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoJ3ZpZGVvLWxvYWRpbmcnKTtcbiAgICAgICAgdGhpcy5lbC5jbGFzc0xpc3QucmVtb3ZlKCd2aWRlby10cmFuc2l0aW9uaW5nJyk7XG4gICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LmFkZCgndmlkZW8tcGxheWluZycpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9vblBhdXNlQ2xpY2soKSB7XG4gICAgdGhpcy52aWRlby5wYXVzZSgpO1xuICB9XG5cbiAgX2F1dG9wbGF5KCkge1xuICAgIHRoaXMuZWwuY2xhc3NMaXN0LmFkZCgndmlkZW8tbG9hZGluZycpO1xuXG4gICAgdGhpcy52aWRlby5hdXRvcGxheSgpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKCd2aWRlby10cmFuc2l0aW9uaW5nJyk7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoJ3ZpZGVvLWxvYWRpbmcnKTtcbiAgICAgICAgdGhpcy5lbC5jbGFzc0xpc3QucmVtb3ZlKCd2aWRlby10cmFuc2l0aW9uaW5nJyk7XG4gICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LmFkZCgndmlkZW8tcGxheWluZycpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICBpZiAodGhpcy5wbGF5QnV0dG9uKSB7XG4gICAgICB0aGlzLnBsYXlCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uUGxheUNsaWNrKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlbykge1xuICAgICAgdGhpcy52aWRlby51bmxvYWQoKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/components/Video.js\n")},
1"./source/scripts/components/Vimeo.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return VimeoPlayer; });\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scriptjs */ "./node_modules/scriptjs/dist/script.js");\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(scriptjs__WEBPACK_IMPORTED_MODULE_0__);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\nvar api = \'https://player.vimeo.com/api/player.js\';\nvar apiLoaded = false;\n\nvar VimeoPlayer =\n/*#__PURE__*/\nfunction () {\n function VimeoPlayer(_ref) {\n var el = _ref.el,\n videoUrl = _ref.videoUrl;\n\n _classCallCheck(this, VimeoPlayer);\n\n this.el = el;\n var urlParts = videoUrl.split(\'/\');\n this.id = urlParts[urlParts.length - 1];\n this.onReadyCallback = null;\n this.onApiLoaded = this._onApiLoaded.bind(this);\n this.onProgress = this._onProgress.bind(this);\n this.onProgressCallback = null;\n\n if (apiLoaded) {\n this._onApiLoaded();\n } else {\n scriptjs__WEBPACK_IMPORTED_MODULE_0___default()(api, this.onApiLoaded);\n }\n }\n\n _createClass(VimeoPlayer, [{\n key: "play",\n value: function play() {\n var _this = this;\n\n return new Promise(function (resolve) {\n _this.onProgressCallback = resolve;\n\n if (apiLoaded) {\n _this.player.on(\'progress\', _this.onProgress);\n\n _this.player.play();\n } else {\n _this.onReadyCallback = function () {\n _this.player.on(\'progress\', _this.onProgress);\n\n _this.player.play();\n };\n }\n });\n }\n }, {\n key: "pause",\n value: function pause() {\n var _this2 = this;\n\n return new Promise(function (resolve) {\n _this2.onProgressCallback = resolve;\n\n if (apiLoaded) {\n _this2.player.on(\'progress\', _this2.onProgress);\n\n _this2.player.pause();\n } else {\n _this2.onReadyCallback = function () {\n _this2.player.on(\'progress\', _this2.onProgress);\n\n _this2.player.pause();\n };\n }\n });\n }\n }, {\n key: "autoplay",\n value: function autoplay() {\n var _this3 = this;\n\n return new Promise(function (resolve) {\n _this3.onProgressCallback = resolve;\n\n if (apiLoaded) {\n _this3.player.on(\'progress\', _this3.onProgress);\n\n _this3.player.setVolume(0);\n\n _this3.player.play();\n } else {\n _this3.onReadyCallback = function () {\n _this3.player.on(\'progress\', _this3.onProgress);\n\n _this3.player.setVolume(0);\n\n _this3.player.play();\n };\n }\n });\n }\n }, {\n key: "unload",\n value: function unload() {\n this.player.unload().catch();\n }\n }, {\n key: "_onApiLoaded",\n value: function _onApiLoaded() {\n this.player = new window.Vimeo.Player(this.el, {\n id: this.id\n });\n this.player.ready().then().catch();\n apiLoaded = true;\n\n if (this.onReadyCallback) {\n this.onReadyCallback();\n }\n }\n }, {\n key: "_onProgress",\n value: function _onProgress() {\n this.player.off(\'progress\', this.onProgress);\n\n if (this.onProgressCallback) {\n this.onProgressCallback();\n this.onProgressCallback = null;\n }\n }\n }]);\n\n return VimeoPlayer;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL1ZpbWVvLmpzP2U2MzEiXSwibmFtZXMiOlsiYXBpIiwiYXBpTG9hZGVkIiwiVmltZW9QbGF5ZXIiLCJlbCIsInZpZGVvVXJsIiwidXJsUGFydHMiLCJzcGxpdCIsImlkIiwibGVuZ3RoIiwib25SZWFkeUNhbGxiYWNrIiwib25BcGlMb2FkZWQiLCJfb25BcGlMb2FkZWQiLCJiaW5kIiwib25Qcm9ncmVzcyIsIl9vblByb2dyZXNzIiwib25Qcm9ncmVzc0NhbGxiYWNrIiwiJHNjcmlwdCIsIlByb21pc2UiLCJyZXNvbHZlIiwicGxheWVyIiwib24iLCJwbGF5IiwicGF1c2UiLCJzZXRWb2x1bWUiLCJ1bmxvYWQiLCJjYXRjaCIsIndpbmRvdyIsIlZpbWVvIiwiUGxheWVyIiwicmVhZHkiLCJ0aGVuIiwib2ZmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFFQSxJQUFNQSxHQU
1FHLEdBQUcsd0NBQVo7QUFDQSxJQUFJQyxTQUFTLEdBQUcsS0FBaEI7O0lBRXFCQyxXOzs7QUFDbkIsNkJBQThCO0FBQUEsUUFBaEJDLEVBQWdCLFFBQWhCQSxFQUFnQjtBQUFBLFFBQVpDLFFBQVksUUFBWkEsUUFBWTs7QUFBQTs7QUFDNUIsU0FBS0QsRUFBTCxHQUFVQSxFQUFWO0FBQ0EsUUFBTUUsUUFBUSxHQUFHRCxRQUFRLENBQUNFLEtBQVQsQ0FBZSxHQUFmLENBQWpCO0FBRUEsU0FBS0MsRUFBTCxHQUFVRixRQUFRLENBQUNBLFFBQVEsQ0FBQ0csTUFBVCxHQUFrQixDQUFuQixDQUFsQjtBQUNBLFNBQUtDLGVBQUwsR0FBdUIsSUFBdkI7QUFFQSxTQUFLQyxXQUFMLEdBQW1CLEtBQUtDLFlBQUwsQ0FBa0JDLElBQWxCLENBQXVCLElBQXZCLENBQW5CO0FBRUEsU0FBS0MsVUFBTCxHQUFrQixLQUFLQyxXQUFMLENBQWlCRixJQUFqQixDQUFzQixJQUF0QixDQUFsQjtBQUNBLFNBQUtHLGtCQUFMLEdBQTBCLElBQTFCOztBQUVBLFFBQUlkLFNBQUosRUFBZTtBQUNiLFdBQUtVLFlBQUw7QUFDRCxLQUZELE1BRU87QUFDTEsscURBQU8sQ0FBQ2hCLEdBQUQsRUFBTSxLQUFLVSxXQUFYLENBQVA7QUFDRDtBQUNGOzs7OzJCQUVNO0FBQUE7O0FBQ0wsYUFBTyxJQUFJTyxPQUFKLENBQVksVUFBQUMsT0FBTyxFQUFJO0FBQzVCLGFBQUksQ0FBQ0gsa0JBQUwsR0FBMEJHLE9BQTFCOztBQUVBLFlBQUlqQixTQUFKLEVBQWU7QUFDYixlQUFJLENBQUNrQixNQUFMLENBQVlDLEVBQVosQ0FBZSxVQUFmLEVBQTJCLEtBQUksQ0FBQ1AsVUFBaEM7O0FBQ0EsZUFBSSxDQUFDTSxNQUFMLENBQVlFLElBQVo7QUFDRCxTQUhELE1BR087QUFDTCxlQUFJLENBQUNaLGVBQUwsR0FBdUIsWUFBTTtBQUMzQixpQkFBSSxDQUFDVSxNQUFMLENBQVlDLEVBQVosQ0FBZSxVQUFmLEVBQTJCLEtBQUksQ0FBQ1AsVUFBaEM7O0FBQ0EsaUJBQUksQ0FBQ00sTUFBTCxDQUFZRSxJQUFaO0FBQ0QsV0FIRDtBQUlEO0FBQ0YsT0FaTSxDQUFQO0FBYUQ7Ozs0QkFFTztBQUFBOztBQUNOLGFBQU8sSUFBSUosT0FBSixDQUFZLFVBQUFDLE9BQU8sRUFBSTtBQUM1QixjQUFJLENBQUNILGtCQUFMLEdBQTBCRyxPQUExQjs7QUFFQSxZQUFJakIsU0FBSixFQUFlO0FBQ2IsZ0JBQUksQ0FBQ2tCLE1BQUwsQ0FBWUMsRUFBWixDQUFlLFVBQWYsRUFBMkIsTUFBSSxDQUFDUCxVQUFoQzs7QU
1FDQSxnQkFBSSxDQUFDTSxNQUFMLENBQVlHLEtBQVo7QUFDRCxTQUhELE1BR087QUFDTCxnQkFBSSxDQUFDYixlQUFMLEdBQXVCLFlBQU07QUFDM0Isa0JBQUksQ0FBQ1UsTUFBTCxDQUFZQyxFQUFaLENBQWUsVUFBZixFQUEyQixNQUFJLENBQUNQLFVBQWhDOztBQUNBLGtCQUFJLENBQUNNLE1BQUwsQ0FBWUcsS0FBWjtBQUNELFdBSEQ7QUFJRDtBQUNGLE9BWk0sQ0FBUDtBQWFEOzs7K0JBRVU7QUFBQTs7QUFDVCxhQUFPLElBQUlMLE9BQUosQ0FBWSxVQUFBQyxPQUFPLEVBQUk7QUFDNUIsY0FBSSxDQUFDSCxrQkFBTCxHQUEwQkcsT0FBMUI7O0FBRUEsWUFBSWpCLFNBQUosRUFBZTtBQUNiLGdCQUFJLENBQUNrQixNQUFMLENBQVlDLEVBQVosQ0FBZSxVQUFmLEVBQTJCLE1BQUksQ0FBQ1AsVUFBaEM7O0FBQ0EsZ0JBQUksQ0FBQ00sTUFBTCxDQUFZSSxTQUFaLENBQXNCLENBQXRCOztBQUNBLGdCQUFJLENBQUNKLE1BQUwsQ0FBWUUsSUFBWjtBQUNELFNBSkQsTUFJTztBQUNMLGdCQUFJLENBQUNaLGVBQUwsR0FBdUIsWUFBTTtBQUMzQixrQkFBSSxDQUFDVSxNQUFMLENBQVlDLEVBQVosQ0FBZSxVQUFmLEVBQTJCLE1BQUksQ0FBQ1AsVUFBaEM7O0FBQ0Esa0JBQUksQ0FBQ00sTUFBTCxDQUFZSSxTQUFaLENBQXNCLENBQXRCOztBQUNBLGtCQUFJLENBQUNKLE1BQUwsQ0FBWUUsSUFBWjtBQUNELFdBSkQ7QUFLRDtBQUNGLE9BZE0sQ0FBUDtBQWVEOzs7NkJBRVE7QUFDUCxXQUFLRixNQUFMLENBQVlLLE1BQVosR0FBcUJDLEtBQXJCO0FBQ0Q7OzttQ0FFYztBQUNiLFdBQUtOLE1BQUwsR0FBYyxJQUFJTyxNQUFNLENBQUNDLEtBQVAsQ0FBYUMsTUFBakIsQ0FBd0IsS0FBS3pCLEVBQTdCLEVBQWlDO0FBQUVJLFVBQUUsRUFBRSxLQUFLQTtBQUFYLE9BQWpDLENBQWQ7QUFFQSxXQUFLWSxNQUFMLENBQ0dVLEtBREgsR0FFR0MsSUFGSCxHQUdHTCxLQUhIO0FBS0F4QixlQUFTLEdBQUcsSUFBWjs7QUFFQSxVQUFJLEtBQUtRLGVBQVQsRUFBMEI7QUFDeEIsYUFBS0EsZUFBTDtBQUNEO0FBQ0Y7OztrQ0FFYTtBQUNaLFdBQUtVLE1BQUwsQ0FBWVksR0FBWixDQUFnQixVQUFoQixFQUE0QixLQUFLbEIsVUFBakM7O0FBRUEsVUFBSSxLQUFLRSxrQkFBVCxFQUE2QjtBQUMzQixhQUFLQSxrQkFBTDtBQUNBLGFBQUtBLGtCQUFMLEdBQTBCLElBQTFCO0FBQ0Q7QUFDRiIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvVmltZW8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJHNjcmlwdCBmcm9tICdzY3JpcHRqcyc7XG5cbmNvbnN0IGFwaSA9ICdodHRwczovL3BsYXllci52aW1lby5jb20vYXBpL3BsYXllci5qcyc7XG5sZXQgYXBpTG9hZGVkID0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpbWVvUGxheWVyIHtcbiAgY29uc3RydWN0b3IoeyBlbCwgdmlkZW9VcmwgfSkge1xuICAgIHRoaXMuZWwgPSBlbDtcbiAgICBjb25zdCB1cmxQYXJ0cyA9IHZpZGVvVXJsLnNwbGl0KCcvJyk7XG5cbiAgICB0aGlzLmlkID0gdXJsUGFydHNbdXJsUGFydHMubGVuZ3RoIC0gMV07XG4gICAgdGhpcy5vblJlYWR5Q2FsbGJhY2sgPSBudWxsO1xuXG4gICAgdGhpcy5vbkFwaUxvYWRlZCA9IHRoaXMuX29uQXBpTG9hZGVkLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vblByb2dyZXNzQ2FsbGJhY2sgPSBudWxsO1xuXG4gICAgaWYgKGFwaUxvYWRlZCkge1xuICAgICAgdGhpcy5fb25BcGlMb2FkZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHNjcmlwdChhcGksIHRoaXMub25BcGlMb2FkZWQpO1xuICAgIH1cbiAgfVxuXG4gIHBsYXkoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5vblByb2dyZXNzQ2FsbGJhY2sgPSByZXNvbHZlO1xuXG4gICAgICBpZiAoYXBpTG9hZGVkKSB7XG4gICAgICAgIHRoaXMucGxheWVyLm9uKCdwcm9ncmVzcycsIHRoaXMub25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMucGxheWVyLnBsYXkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25SZWFkeUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMucGxheWVyLm9uKCdwcm9ncmVzcycsIHRoaXMub25Qcm9ncmVzcyk7XG4gICAgICAgICAgdGhpcy5wbGF5ZXIucGxheSgpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcGF1c2UoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5vblByb2dyZXNzQ2FsbGJhY2sgPSByZXNvbHZlO1xuXG4gICAgICBpZiAoYXBpTG9hZGVkKSB7XG4gICAgICAgIHRoaXMucGxheWVyLm9uKCdwcm9ncmVzcycsIHRoaXMub25Qcm9ncmVzcyk7XG4gICAgICAgIHRoaXMucGxheWVyLnBhdXNlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uUmVhZHlDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnBsYXllci5vbigncHJvZ3Jlc3MnLCB0aGlzLm9uUHJvZ3Jlc3MpO1xuICAgICAgICAgIHRoaXMucGxheWVyLnBhdXNlKCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhdXRvcGxheSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLm9uUHJvZ3Jlc3NDYWxsYmFjayA9IHJlc29sdmU7XG5cbiAgICAgIGlmIChhcGlMb2FkZWQpIHtcbiAgICAgICAgdGhpcy5wbGF5ZXIub24oJ3Byb2dyZXNzJywgdGhpcy5vblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5wbGF5ZXIuc2V0Vm9sdW1lKDApO1xuICAgICAgICB0aGlzLnBsYXllci5wbGF5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uUmVhZHlDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnBsYXllci5vbigncHJvZ3Jlc3MnLCB0aGlzLm9uUHJvZ3Jlc3MpO1xuICAgICAgICAgIHRoaXMucGxheWVyLnNldFZvbHVtZSgwKTtcbiAgICAgICAgICB0aGlzLnBsYXllci5wbGF5KCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1bmxvYWQoKSB7XG4gICAgdGhpcy5wbGF5ZXIudW5sb2FkKCkuY2F0Y2goKTtcbiAgfVxuXG4gIF9vbkFwaUxvYWRlZCgpIHtcbiAgICB0aGlzLnBsYXllciA9IG5ldyB3aW5kb3cuVmltZW8uUGxheWVyKHRoaXMuZWwsIHsgaWQ6IHRoaXMuaWQgfSk7XG5cbiAgICB0aGlzLnBsYXllclxuICAgICAgLnJlYWR5KClcbiAgICAgIC50aGVuKClcbiAgICAgIC5jYXRjaCgpO1xuXG4gICAgYXBpTG9hZGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLm9uUmVhZHlDYWxsYmFjaykge1xuICAgICAgdGhpcy5vblJlYWR5Q2FsbGJhY2soKTtcbiAgICB9XG4gI
1H1cblxuICBfb25Qcm9ncmVzcygpIHtcbiAgICB0aGlzLnBsYXllci5vZmYoJ3Byb2dyZXNzJywgdGhpcy5vblByb2dyZXNzKTtcblxuICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3NDYWxsYmFjaykge1xuICAgICAgdGhpcy5vblByb2dyZXNzQ2FsbGJhY2soKTtcbiAgICAgIHRoaXMub25Qcm9ncmVzc0NhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/components/Vimeo.js\n')},
1"./source/scripts/components/Youtube.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Youtube; });\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scriptjs */ "./node_modules/scriptjs/dist/script.js");\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(scriptjs__WEBPACK_IMPORTED_MODULE_0__);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\nvar api = \'https://www.youtube.com/iframe_api\';\nvar apiLoadedCallbacks = [];\nvar apiLoaded = false;\n\nwindow.onYouTubeIframeAPIReady = function () {\n apiLoadedCallbacks.forEach(function (apiLoadedCallback) {\n return apiLoadedCallback();\n });\n apiLoadedCallbacks = [];\n apiLoaded = true;\n};\n\nvar Youtube =\n/*#__PURE__*/\nfunction () {\n function Youtube(_ref) {\n var el = _ref.el,\n videoUrl = _ref.videoUrl;\n\n _classCallCheck(this, Youtube);\n\n var regex = /(?:youtube\\.com\\/(?:[^/]+\\/.+\\/|(?:v|e(?:mbed)?)\\/|.*[?&]v=)|youtu\\.be\\/)([^"&?/ ]{11})/i;\n this.el = el;\n this.id = videoUrl.match(regex)[1] || null;\n this.onApiLoaded = this._onApiLoaded.bind(this);\n this.isReady = false;\n this.onReady = this._onReady.bind(this);\n this.onReadyCallback = null;\n this.onStateChange = this._onStateChange.bind(this);\n this.onPlayCallback = null;\n\n if (apiLoaded) {\n this._onApiLoaded();\n } else {\n apiLoadedCallbacks.push(this.onApiLoaded);\n scriptjs__WEBPACK_IMPORTED_MODULE_0___default()(api);\n }\n }\n\n _createClass(Youtube, [{\n key: "play",\n value: function play() {\n var _this = this;\n\n return new Promise(function (resolve) {\n _this.onPlayCallback = resolve;\n\n if (_this.isReady) {\n _this.player.playVideo();\n } else {\n _this.onReadyCallback = function () {\n _this.player.playVideo();\n };\n }\n });\n }\n }, {\n key: "pause",\n value: function pause() {\n var _this2 = this;\n\n return new Promise(function (resolve) {\n _this2.onPlayCallback = resolve;\n\n if (_this2.isReady) {\n _this2.player.pauseVideo();\n } else {\n _this2.onReadyCallback = function () {\n _this2.player.pauseVideo();\n };\n }\n });\n }\n }, {\n key: "autoplay",\n value: function autoplay() {\n var _this3 = this;\n\n return new Promise(function (resolve) {\n _this3.onPlayCallback = resolve;\n\n if (_this3.isReady) {\n _this3.player.playVideo();\n\n _this3.player.mute();\n } else {\n _this3.onReadyCallback = function () {\n _this3.player.playVideo();\n\n _this3.player.mute();\n };\n }\n });\n }\n }, {\n key: "unload",\n value: function unload() {\n this.player.destroy();\n }\n }, {\n key: "_onApiLoaded",\n value: function _onApiLoaded() {\n this.player = new YT.Player(this.el, {\n videoId: this.id,\n playerVars: {\n modestbranding: true,\n showinfo: false,\n controls: false,\n rel: 0\n },\n events: {\n onReady: this.onReady,\n onStateChange: this.onStateChange\n }\n });\n }\n }
1, {\n key: "_onReady",\n value: function _onReady() {\n this.isReady = true;\n\n if (this.onReadyCallback) {\n this.onReadyCallback();\n }\n }\n }, {\n key: "_onStateChange",\n value: function _onStateChange(event) {\n var state = event.data;\n\n if (this.onPlayCallback && state === YT.PlayerState.PLAYING) {\n this.onPlayCallback();\n this.onPlayCallback = null;\n }\n }\n }]);\n\n return Youtube;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL1lvdXR1YmUuanM/MTgzYSJdLCJuYW1lcyI6WyJhcGkiLCJhcGlMb2FkZWRDYWxsYmFja3MiLCJhcGlMb2FkZWQiLCJ3aW5kb3ciLCJvbllvdVR1YmVJZnJhbWVBUElSZWFkeSIsImZvckVhY2giLCJhcGlMb2FkZWRDYWxsYmFjayIsIllvdXR1YmUiLCJlbCIsInZpZGVvVXJsIiwicmVnZXgiLCJpZCIsIm1hdGNoIiwib25BcGlMb2FkZWQiLCJfb25BcGlMb2FkZWQiLCJiaW5kIiwiaXNSZWFkeSIsIm9uUmVhZHkiLCJfb25SZWFkeSIsIm9uUmVhZHlDYWxsYmFjayIsIm9uU3RhdGVDaGFuZ2UiLCJfb25TdGF0ZUNoYW5nZSIsIm9uUGxheUNhbGxiYWNrIiwicHVzaCIsIiRzY3JpcHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInBsYXllciIsInBsYXlWaWRlbyIsInBhdXNlVmlkZW8iLCJtdXRlIiwiZGVzdHJveSIsIllUIiwiUGxheWVyIiwidmlkZW9JZCIsInBsYXllclZhcnMiLCJtb2Rlc3RicmFuZGluZyIsInNob3dpbmZvIiwiY29udHJvbHMiLCJyZWwiLCJldmVudHMiLCJldmVudCIsInN0YXRlIiwiZGF0YSIsIlBsYXllclN0YXRlIiwiUExBWUlORyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBRUEsSUFBTUEsR0FBRyxHQUFHLG9DQUFaO0FBQ0EsSUFBSUMsa0JBQWtCLEdBQUcsRUFBekI7QUFDQSxJQUFJQyxTQUFTLEdBQUcsS0FBaEI7O0FBRUFDLE1BQU0sQ0FBQ0MsdUJBQVAsR0FBaUMsWUFBTTtBQUNyQ0gsb0JBQWtCLENBQUNJLE9BQW5CLENBQTJCLFVBQUFDLGlCQUFpQjtBQUFBLFdBQUlBLGlCQUFpQixFQUFyQjtBQUFBLEdBQTVDO0FBQ0FMLG9CQUFrQixHQUFHLEVBQXJCO0FBQ0FDLFdBQVMsR0FBRyxJQUFaO0FBQ0QsQ0FKRDs7SUFNcUJLLE87OztBQUNuQix5QkFBOEI7QUFBQSxRQUFoQkMsRUFBZ0IsUUFBaEJBLEVBQWdCO0FBQUEsUUFBWkMsUUFBWSxRQUFaQSxRQUFZOztBQUFBOztBQUM1QixRQUFNQyxLQUFLLEdBQUcsMEZBQWQ7QUFFQSxTQUFLRixFQUFMLEdBQVVBLEVBQVY7QUFDQSxTQUFLRyxFQUFMLEdBQVVGLFFBQVEsQ0FBQ0csS0FBVCxDQUFlRixLQUFmLEVBQXNCLENBQXRCLEtBQTRCLElBQXRDO0FBRUEsU0FBS0csV0FBTCxHQUFtQixLQUFLQyxZQUFMLENBQWtCQyxJQUFsQixDQUF1QixJQUF2QixDQUFuQjtBQUVBLFNBQUtDLE9BQUwsR0FBZSxLQUFmO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtDLFFBQUwsQ0FBY0gsSUFBZCxDQUFtQixJQUFuQixDQUFmO0FBQ0EsU0FBS0ksZUFBTCxHQUF1QixJQUF2QjtBQUVBLFNBQUtDLGFBQUwsR0FBcUIsS0FBS0MsY0FBTCxDQUFvQk4sSUFBcEIsQ0FBeUIsSUFBekIsQ0FBckI7QUFDQSxTQUFLTyxjQUFMLEdBQXNCLElBQXRCOztBQUVBLFFBQUlwQixTQUFKLEVBQWU7QUFDYixXQUFLWSxZQUFMO0FBQ0QsS0FGRCxNQUVPO0FBQ0xiLHdCQUFrQixDQUFDc0IsSUFBbkIsQ0FBd0IsS0FBS1YsV0FBN0I7QUFDQVcscURBQU8sQ0FBQ3hCLEdBQUQsQ0FBUDtBQUNEO0FBQ0Y7Ozs7MkJBRU07QUFBQTs7QUFDTCxhQUFPLElBQUl5QixPQUFKLENBQVksVUFBQUMsT0FBTyxFQUFJO0FBQzVCLGFBQUksQ0FBQ0osY0FBTCxHQUFzQkksT0FBdEI7O0FBRUEsWUFBSSxLQUFJLENBQUNWLE9BQVQsRUFBa0I7QUFDaEIsZUFBSSxDQUFDVyxNQUFMLENBQVlDLFNBQVo7QUFDRCxTQUZELE1BRU87QUFDTCxlQUFJLENBQUNULGVBQUwsR0FBdUIsWUFBTTtBQUMzQixpQkFBSSxDQUFDUSxNQUFMLENBQVlDLFNBQVo7QUFDRCxXQUZEO0FBR0Q7QUFDRixPQVZNLENBQVA7QUFXRDs7OzRCQUVPO0FBQUE7O0FBQ04sYUFBTyxJQUFJSCxPQUFKLENBQVksVUFBQUMsT0FBTyxFQUFJO0FBQzVCLGNBQUksQ0FBQ0osY0FBTCxHQUFzQkksT0FBdEI7O0FBRUEsWUFBSSxNQUFJLENBQUNWLE9BQVQsRUFBa0I7QUFDaEIsZ0JBQUksQ0FBQ1csTUFBTCxDQUFZRSxVQUFaO0FBQ0QsU0FGRCxNQUVPO0FBQ0wsZ0JBQUksQ0FBQ1YsZUFBTCxHQUF1QixZQUFNO0FBQzNCLGtCQUFJLENBQUNRLE1BQUwsQ0FBWUUsVUFBWjtBQUNELFdBRkQ7QUFHRDtBQUNGLE9BVk0sQ0FBUDtBQVdEOzs7K0JBRVU7QUFBQTs7QUFDVCxhQUFPLElBQUlKLE9BQUosQ0FBWSxVQUFBQyxPQUFPLEVBQUk7QUFDNUIsY0FBSSxDQUFDSixjQUFMLEdBQXNCSSxPQUF0Qjs7QUFFQSxZQUFJLE1BQUksQ0FBQ1YsT0FBVCxFQUFrQjtBQUNoQixnQkFBSSxDQUFDVyxNQUFMLENBQVlDLFNBQVo7O0FBQ0EsZ0JBQUksQ0FBQ0QsTUFBTCxDQUFZRyxJQUFaO0FBQ0QsU0FIRCxNQUdPO0FBQ0wsZ0JBQUksQ0FBQ1gsZUFBTCxHQUF1QixZQUFNO0FBQzNCLGtCQUFJLENBQUNRLE1BQUwsQ0FBWUMsU0FBWjs7QUFDQSxrQkFBSSxDQUFDRCxNQUFMLENBQVlHLElBQVo7QUFDRCxXQUhEO0FBSUQ7QUFDRixPQVpNLENBQVA7QUFhRDs7OzZCQUVRO0FBQ1AsV0FBS0gsTUFBTCxDQUFZSSxPQUFaO0F
1BQ0Q7OzttQ0FFYztBQUNiLFdBQUtKLE1BQUwsR0FBYyxJQUFJSyxFQUFFLENBQUNDLE1BQVAsQ0FBYyxLQUFLekIsRUFBbkIsRUFBdUI7QUFDbkMwQixlQUFPLEVBQUUsS0FBS3ZCLEVBRHFCO0FBRW5Dd0Isa0JBQVUsRUFBRTtBQUNWQyx3QkFBYyxFQUFFLElBRE47QUFFVkMsa0JBQVEsRUFBRSxLQUZBO0FBR1ZDLGtCQUFRLEVBQUUsS0FIQTtBQUlWQyxhQUFHLEVBQUU7QUFKSyxTQUZ1QjtBQVFuQ0MsY0FBTSxFQUFFO0FBQ052QixpQkFBTyxFQUFFLEtBQUtBLE9BRFI7QUFFTkcsdUJBQWEsRUFBRSxLQUFLQTtBQUZkO0FBUjJCLE9BQXZCLENBQWQ7QUFhRDs7OytCQUVVO0FBQ1QsV0FBS0osT0FBTCxHQUFlLElBQWY7O0FBRUEsVUFBSSxLQUFLRyxlQUFULEVBQTBCO0FBQ3hCLGFBQUtBLGVBQUw7QUFDRDtBQUNGOzs7bUNBRWNzQixLLEVBQU87QUFDcEIsVUFBTUMsS0FBSyxHQUFHRCxLQUFLLENBQUNFLElBQXBCOztBQUVBLFVBQUksS0FBS3JCLGNBQUwsSUFBdUJvQixLQUFLLEtBQUtWLEVBQUUsQ0FBQ1ksV0FBSCxDQUFlQyxPQUFwRCxFQUE2RDtBQUMzRCxhQUFLdkIsY0FBTDtBQUNBLGFBQUtBLGNBQUwsR0FBc0IsSUFBdEI7QUFDRDtBQUNGIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9Zb3V0dWJlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICRzY3JpcHQgZnJvbSAnc2NyaXB0anMnO1xuXG5jb25zdCBhcGkgPSAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vaWZyYW1lX2FwaSc7XG5sZXQgYXBpTG9hZGVkQ2FsbGJhY2tzID0gW107XG5sZXQgYXBpTG9hZGVkID0gZmFsc2U7XG5cbndpbmRvdy5vbllvdVR1YmVJZnJhbWVBUElSZWFkeSA9ICgpID0+IHtcbiAgYXBpTG9hZGVkQ2FsbGJhY2tzLmZvckVhY2goYXBpTG9hZGVkQ2FsbGJhY2sgPT4gYXBpTG9hZGVkQ2FsbGJhY2soKSk7XG4gIGFwaUxvYWRlZENhbGxiYWNrcyA9IFtdO1xuICBhcGlMb2FkZWQgPSB0cnVlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWW91dHViZSB7XG4gIGNvbnN0cnVjdG9yKHsgZWwsIHZpZGVvVXJsIH0pIHtcbiAgICBjb25zdCByZWdleCA9IC8oPzp5b3V0dWJlXFwuY29tXFwvKD86W14vXStcXC8uK1xcL3woPzp2fGUoPzptYmVkKT8pXFwvfC4qWz8mXXY9KXx5b3V0dVxcLmJlXFwvKShbXlwiJj8vIF17MTF9KS9pO1xuXG4gICAgdGhpcy5lbCA9IGVsO1xuICAgIHRoaXMuaWQgPSB2aWRlb1VybC5tYXRjaChyZWdleClbMV0gfHwgbnVsbDtcblxuICAgIHRoaXMub25BcGlMb2FkZWQgPSB0aGlzLl9vbkFwaUxvYWRlZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5pc1JlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5vblJlYWR5ID0gdGhpcy5fb25SZWFkeS5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25SZWFkeUNhbGxiYWNrID0gbnVsbDtcblxuICAgIHRoaXMub25TdGF0ZUNoYW5nZSA9IHRoaXMuX29uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uUGxheUNhbGxiYWNrID0gbnVsbDtcblxuICAgIGlmIChhcGlMb2FkZWQpIHtcbiAgICAgIHRoaXMuX29uQXBpTG9hZGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaUxvYWRlZENhbGxiYWNrcy5wdXNoKHRoaXMub25BcGlMb2FkZWQpO1xuICAgICAgJHNjcmlwdChhcGkpO1xuICAgIH1cbiAgfVxuXG4gIHBsYXkoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5vblBsYXlDYWxsYmFjayA9IHJlc29sdmU7XG5cbiAgICAgIGlmICh0aGlzLmlzUmVhZHkpIHtcbiAgICAgICAgdGhpcy5wbGF5ZXIucGxheVZpZGVvKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uUmVhZHlDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnBsYXllci5wbGF5VmlkZW8oKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZS
1hyZXNvbHZlID0+IHtcbiAgICAgIHRoaXMub25QbGF5Q2FsbGJhY2sgPSByZXNvbHZlO1xuXG4gICAgICBpZiAodGhpcy5pc1JlYWR5KSB7XG4gICAgICAgIHRoaXMucGxheWVyLnBhdXNlVmlkZW8oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25SZWFkeUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMucGxheWVyLnBhdXNlVmlkZW8oKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGF1dG9wbGF5KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHRoaXMub25QbGF5Q2FsbGJhY2sgPSByZXNvbHZlO1xuXG4gICAgICBpZiAodGhpcy5pc1JlYWR5KSB7XG4gICAgICAgIHRoaXMucGxheWVyLnBsYXlWaWRlbygpO1xuICAgICAgICB0aGlzLnBsYXllci5tdXRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uUmVhZHlDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnBsYXllci5wbGF5VmlkZW8oKTtcbiAgICAgICAgICB0aGlzLnBsYXllci5tdXRlKCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1bmxvYWQoKSB7XG4gICAgdGhpcy5wbGF5ZXIuZGVzdHJveSgpO1xuICB9XG5cbiAgX29uQXBpTG9hZGVkKCkge1xuICAgIHRoaXMucGxheWVyID0gbmV3IFlULlBsYXllcih0aGlzLmVsLCB7XG4gICAgICB2aWRlb0lkOiB0aGlzLmlkLFxuICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICBtb2Rlc3RicmFuZGluZzogdHJ1ZSxcbiAgICAgICAgc2hvd2luZm86IGZhbHNlLFxuICAgICAgICBjb250cm9sczogZmFsc2UsXG4gICAgICAgIHJlbDogMCxcbiAgICAgIH0sXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgb25SZWFkeTogdGhpcy5vblJlYWR5LFxuICAgICAgICBvblN0YXRlQ2hhbmdlOiB0aGlzLm9uU3RhdGVDaGFuZ2UsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgX29uUmVhZHkoKSB7XG4gICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLm9uUmVhZHlDYWxsYmFjaykge1xuICAgICAgdGhpcy5vblJlYWR5Q2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBfb25TdGF0ZUNoYW5nZShldmVudCkge1xuICAgIGNvbnN0IHN0YXRlID0gZXZlbnQuZGF0YTtcblxuICAgIGlmICh0aGlzLm9uUGxheUNhbGxiYWNrICYmIHN0YXRlID09PSBZVC5QbGF5ZXJTdGF0ZS5QTEFZSU5HKSB7XG4gICAgICB0aGlzLm9uUGxheUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLm9uUGxheUNhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/components/Youtube.js\n')},
1"./source/scripts/components/header/BasicHeader.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return BasicHeader; });\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Layout */ \"./source/scripts/Layout.js\");\n/* harmony import */ var _Header__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Header */ \"./source/scripts/components/header/Header.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\n\nvar BasicHeader =\n/*#__PURE__*/\nfunction (_Header) {\n _inherits(BasicHeader, _Header);\n\n function BasicHeader(options, settings) {\n var _this;\n\n _classCallCheck(this, BasicHeader);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(BasicHeader).call(this, options, settings));\n _this.headerContent = _this.header.querySelector('[data-site-header-main]');\n _this.logo = _this.header.querySelector('.site-logo');\n _this.logoImage = _this.logo.querySelector('img');\n _this.logoText = _this.logo.querySelector('.desktop-logo-text');\n _this.logoPosition = settings.desktop_logo_position;\n _this.navList = _this.header.querySelector('.site-navigation > [data-navmenu]');\n _this.headerActions = _this.header.querySelector('.site-header-main-actions');
1\n _this.searchWrapper = _this.header.querySelector('[data-search-wrapper]');\n _this.searchButton = _this.headerActions.querySelector('[data-search-toggle]');\n _this.searchInput = _this.header.querySelector('[data-live-search-input]');\n _this.searchClose = _this.header.querySelector('[data-search-close]');\n _this.takeoverCancel = _this.header.querySelector('[data-live-search-takeover-cancel]');\n _this._adjustSizeAndPlacement = _this._adjustSizeAndPlacement.bind(_assertThisInitialized(_this));\n _this._openSearch = _this._openSearch.bind(_assertThisInitialized(_this));\n _this._closeSearch = _this._closeSearch.bind(_assertThisInitialized(_this)); // Need to watch for logo load so we can determin nav placement based on its width\n\n if (_this.logoImage) {\n _this.logoImage.addEventListener('load', _this._adjustSizeAndPlacement);\n }\n\n _this._adjustSizeAndPlacement();\n\n _this.windowResize = function () {\n _this._adjustSizeAndPlacement();\n\n};\n\n _this._closeEsc = function (e) {\n if (e.key === 'Escape') {\n _this._closeSearch();\n }\n };\n\n _this._searchFocusIn = function () {\n /*if (!_this.searchWrapper.contains(document.activeElement)) {\n _this._closeSearch();\n }\n*/ };\n\n _this.searchButton.addEventListener('click', _this._openSearch);\n\n _this.searchClose.addEventListener('click', _this._closeSearch);\n\n _this.takeoverCancel.addEventListener('click', _this._closeSearch);\n\n window.addEventListener('resize', _this.windowResize);\n window.addEventListener('load', _this._adjustSizeAndPlacement);\n window.addEventListener('keydown', _this._closeEsc);\n return _this;\n }\n\n _createClass(BasicHeader, [{\n key: \"_adjustSizeAndPlacement\",\n value: function _adjustSizeAndPlacement() {\n var headerStyles = window.getComputedStyle(this.headerContent);\n var headerWidth = this.headerContent.clientWidth - headerStyles.paddingLeft.replace('px', '');\n var headerActionsWidth = this.headerActions.clientWidth;\n var logoWidth = this.logo.clientWidth;\n var logoHeight = this.logo.clientHeight;\n var navListWidth = this.navList.clientWidth;\n\n if (this.logoPosition === 'center') {\n var logoContentWidth = this.logoImage ? this.logoImage.clientWidth : this.logoText.clientWidth;\n\n if (navListWidth > logoWidth / 2 - logoContentWidth / 2) {\n this.headerContent.classList.add('site-header-stacked');\n } else {\n this.headerContent.classList.remove('site-header-stacked');\n }\n } else {\n var widestSide = headerActionsWidth > logoWidth ? headerActionsWidth : logoWidth;\n\n if (_Layout__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBreakpoint('XS', 'S', 'M')) {\n this.headerContent.style.minHeight = '';\n } else {\n var paddingTop = parseInt(headerStyles.paddingTop.replace('px', ''), 10);\n var paddingBottom = parseInt(headerStyles.paddingBottom.replace('px', ''), 10);\n this.headerContent.style.minHeight = \"\".concat(logoHeight + paddingTop + paddingBottom, \"px\");\n }\n\n if (headerWidth / 2 <= navListWidth / 2 + widestSide) {\n this.headerContent.classList.add('site-header-stacked');\n } else {\n this.headerContent.classList.remove('site-header-stacked');\n }\n }\n\n this.header.classList.remove('site-header-loading');\n }\n }, {\n key: \"_openSearch\",\n value: function _openSearch(e) {\n e.stopPropagation();\n\n if (this.liveSearch && _Layout__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBreakpoint('XS', 'S')) {\n // If LiveSearch is enabled, open the mobile search takeover\n this.liveSearch.openMobileTakeover();\n }\n\n this.headerContent.classList.remove('live-search--hidden');\n this.searchInput.focus();\n window.addEventListener('focusin', this._searchFocusIn);\n }\n }, {\n key: \"_closeSearch\",\n value: function _closeSearch() {\n this.headerContent.classList.add('live-search--hidden');
1\n\n if (this.searchWrapper.contains(document.activeElement)) {\n this.searchButton.focus();\n }\n\n window.removeEventListener('focusin', this._searchFocusIn);\n }\n }, {\n key: \"unload\",\n value: function unload() {\n _get(_getPrototypeOf(BasicHeader.prototype), \"unload\", this).call(this);\n\n if (this.logoImage) {\n this.logoImage.removeEventListener('load', this._adjustSizeAndPlacement);\n }\n\n this.searchButton.removeEventListener('click', this._openSearch);\n this.searchClose.removeEventListener('click', this._closeSearch);\n this.takeoverCancel.removeEventListener('click', this._closeSearch);\n window.removeEventListener('resize', this.windowResize);\n window.removeEventListener('load', this._adjustSizeAndPlacement);\n window.removeEventListener('keydown', this._closeEsc);\n }\n }]);\n\n return BasicHeader;\n}(_Header__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL2hlYWRlci9CYXNpY0hlYWRlci5qcz9lODI2Il0sIm5hbWVzIjpbIkJhc2ljSGVhZGVyIiwib3B0aW9ucyIsInNldHRpbmdzIiwiaGVhZGVyQ29udGVudCIsImhlYWRlciIsInF1ZXJ5U2VsZWN0b3IiLCJsb2dvIiwibG9nb0ltYWdlIiwibG9nb1RleHQiLCJsb2dvUG9zaXRpb24iLCJkZXNrdG9wX2xvZ29fcG9zaXRpb24iLCJuYXZMaXN0IiwiaGVhZGVyQWN0aW9ucyIsInNlYXJjaFdyYXBwZXIiLCJzZWFyY2hCdXR0b24iLCJzZWFyY2hJbnB1dCIsInNlYXJjaENsb3NlIiwidGFrZW92ZXJDYW5jZWwiLCJfYWRqdXN0U2l6ZUFuZFBsYWNlbWVudCIsImJpbmQiLCJfb3BlblNlYXJjaCIsIl9jbG9zZVNlYXJjaCIsImFkZEV2ZW50TGlzdGVuZXIiLCJ3aW5kb3dSZXNpemUiLCJfY2xvc2VFc2MiLCJlIiwia2V5IiwiX3NlYXJjaEZvY3VzSW4iLCJjb250YWlucyIsImRvY3VtZW50IiwiYWN0aXZlRWxlbWVudCIsIndpbmRvdyIsImhlYWRlclN0eWxlcyIsImdldENvbXB1dGVkU3R5bGUiLCJoZWFkZXJXaWR0aCIsImNsaWVudFdpZHRoIiwicGFkZGluZ0xlZnQiLCJyZXBsYWNlIiwiaGVhZGVyQWN0aW9uc1dpZHRoIiwibG9nb1dpZHRoIiwibG9nb0hlaWdodCIsImNsaWVudEhlaWdodCIsIm5hdkxpc3RXaWR0aCIsImxvZ29Db250ZW50V2lkdGgiLCJjbGFzc0xpc3QiLCJhZGQiLCJyZW1vdmUiLCJ3aWRlc3RTaWRlIiwibGF5b3V0IiwiaXNCcmVha3BvaW50Iiwic3R5bGUiLCJtaW5IZWlnaHQiLCJwYWRkaW5nVG9wIiwicGFyc2VJbnQiLCJwYWRkaW5nQm90dG9tIiwic3RvcFByb3BhZ2F0aW9uIiwibGl2ZVNlYXJjaCIsIm9wZW5Nb2JpbGVUYWtlb3ZlciIsImZvY3VzIiwicmVt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xtQkFBcEIsQ0FBd0MsT0FBeEMsRUFBaUQsS0FBS3RDLFlBQXREO0FBQ0FVLFlBQU0sQ0FBQzRCLG1CQUFQLENBQTJCLFFBQTNCLEVBQXFDLEtBQUtwQyxZQUExQztBQUNBUSxZQUFNLENBQUM0QixtQkFBUCxDQUEyQixNQUEzQixFQUFtQyxLQUFLekMsdUJBQXhDO0FBQ0FhLFlBQU0sQ0FBQzRCLG1CQUFQLENBQTJCLFNBQTNCLEVBQXNDLEtB
1QUtuQyxTQUEzQztBQUNEOzs7O0VBOUhzQ29DLCtDIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9oZWFkZXIvQmFzaWNIZWFkZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbGF5b3V0IGZyb20gJy4uLy4uL0xheW91dCc7XG5pbXBvcnQgSGVhZGVyIGZyb20gJy4vSGVhZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNIZWFkZXIgZXh0ZW5kcyBIZWFkZXIge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBzZXR0aW5ncykge1xuICAgIHN1cGVyKG9wdGlvbnMsIHNldHRpbmdzKTtcblxuICAgIHRoaXMuaGVhZGVyQ29udGVudCA9IHRoaXMuaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXNpdGUtaGVhZGVyLW1haW5dJyk7XG4gICAgdGhpcy5sb2dvID0gdGhpcy5oZWFkZXIucXVlcnlTZWxlY3RvcignLnNpdGUtbG9nbycpO1xuICAgIHRoaXMubG9nb0ltYWdlID0gdGhpcy5sb2dvLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuICAgIHRoaXMubG9nb1RleHQgPSB0aGlzLmxvZ28ucXVlcnlTZWxlY3RvcignLmRlc2t0b3AtbG9nby10ZXh0Jyk7XG4gICAgdGhpcy5sb2dvUG9zaXRpb24gPSBzZXR0aW5ncy5kZXNrdG9wX2xvZ29fcG9zaXRpb247XG4gICAgdGhpcy5uYXZMaXN0ID0gdGhpcy5oZWFkZXIucXVlcnlTZWxlY3RvcignLnNpdGUtbmF2aWdhdGlvbiA+IFtkYXRhLW5hdm1lbnVdJyk7XG4gICAgdGhpcy5oZWFkZXJBY3Rpb25zID0gdGhpcy5oZWFkZXIucXVlcnlTZWxlY3RvcignLnNpdGUtaGVhZGVyLW1haW4tYWN0aW9ucycpO1xuICAgIHRoaXMuc2VhcmNoV3JhcHBlciA9IHRoaXMuaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXNlYXJjaC13cmFwcGVyXScpO1xuICAgIHRoaXMuc2VhcmNoQnV0dG9uID0gdGhpcy5oZWFkZXJBY3Rpb25zLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXNlYXJjaC10b2dnbGVdJyk7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IHRoaXMuaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWxpdmUtc2VhcmNoLWlucHV0XScpO1xuICAgIHRoaXMuc2VhcmNoQ2xvc2UgPSB0aGlzLmhlYWRlci5xdWVyeVNlbGVjdG9yKCdbZGF0YS1zZWFyY2gtY2xvc2VdJyk7XG4gICAgdGhpcy50YWtlb3ZlckNhbmNlbCA9IHRoaXMuaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWxpdmUtc2VhcmNoLXRha2VvdmVyLWNhbmNlbF0nKTtcblxuICAgIHRoaXMuX2FkanVzdFNpemVBbmRQbGFjZW1lbnQgPSB0aGlzLl9hZGp1c3RTaXplQW5kUGxhY2VtZW50LmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb3BlblNlYXJjaCA9IHRoaXMuX29wZW5TZWFyY2guYmluZCh0aGlzKTtcbiAgICB0aGlzLl9jbG9zZVNlYXJjaCA9IHRoaXMuX2Nsb3NlU2VhcmNoLmJpbmQodGhpcyk7XG5cbiAgICAvLyBOZWVkIHRvIHdhdGNoIGZvciBsb2dvIGxvYWQgc28gd2UgY2FuIGRldGVybWluIG5hdiBwbGFjZW1lbnQgYmFzZWQgb24gaXRzIHdpZHRoXG4gICAgaWYgKHRoaXMubG9nb0ltYWdlKSB7XG4gICAgICB0aGlzLmxvZ29JbWFnZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYWRqdXN0U2l6ZUFuZFBsYWNlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5fYWRqdXN0U2l6ZUFuZFBsYWNlbWVudCgpO1xuXG4gICAgdGhpcy53aW5kb3dSZXNpemUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9hZGp1c3RTaXplQW5kUGxhY2VtZW50KCk7XG4gICAgICB0aGlzLl9jbG9zZVNlYXJjaCgpO1xuICAgIH07XG5cbiAgICB0aGlzLl9jbG9zZUVzYyA9IGUgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICB0aGlzLl9jbG9zZVNlYXJjaCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLl9zZWFyY2hGb2N1c0luID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnNlYXJjaFdyYXBwZXIuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgdGhpcy5fY2xvc2VTZWFyY2goKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zZWFyY2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vcGVuU2VhcmNoKTtcbiAgICB0aGlzLnNlYXJjaENsb3NlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fY2xvc2VTZWFyY2gpO1xuICAgIHRoaXMudGFrZW92ZXJDYW5jZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9jbG9zZVNlYXJjaCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMud2luZG93UmVzaXplKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2FkanVzdFNpemVBbmRQbGFjZW1lbnQpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fY2xvc2VFc2MpO1xuICB9XG5cbiAgX2FkanVzdFNpemVBbmRQbGFjZW1lbnQoKSB7XG4gICAgY29uc3QgaGVhZGVyU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5oZWFkZXJDb250ZW50KTtcbiAgICBjb25zdCBoZWFkZXJXaWR0aCA9IHRoaXMuaGVhZGVyQ29udGVudC5jbGllbnRXaWR0aCAtIGhlYWRlclN0eWxlcy5wYWRkaW5nTGVmdC5yZXBsYWNlKCdweCcsICcnKTtcbiAgICBjb25zdCBoZWFkZXJBY3Rpb25zV2lkdGggPSB0aGlzLmhlYWRlckFjdGlvbnMuY2xpZW50V2lkdGg7XG4gICAgY29uc3QgbG9nb1dpZHRoID0gdGhpcy5sb2dvLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGxvZ29IZWlnaHQgPSB0aGlzLmxvZ28uY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IG5hdkxpc3RXaWR0aCA9IHRoaXMubmF2TGlzdC5jbGllbnRXaWR0aDtcblxuICAgIGlmICh0aGlzLmxvZ29Qb3NpdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgIGNvbnN0IGxvZ29Db250ZW50V2lkdGggPSB0aGlzLmxvZ29JbWFnZVxuICAgICAgICA/IHRoaXMubG9nb0ltYWdlLmNsaWVudFdpZHRoIDogdGhpcy5sb2dvVGV4dC5jbGllbnRXaWR0aDtcblxuICAgICAgaWYgKG5hdkxpc3RXaWR0aCA+IGxvZ29XaWR0aCAvIDIgLSBsb2dvQ29udGVudFdpZHRoIC8gMikge1xuICAgICAgICB0aGlzLmhlYWRlckNvbnRlbnQuY2xhc3NMaXN0LmFkZCgnc2l0ZS1oZWFkZXItc3RhY2tlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oZWFkZXJDb250ZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3NpdGUtaGVhZGVyLXN0YWNrZWQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgd2lkZXN0U2lkZSA9IGhlYWRlckFjdGlvbnNXaWR0aCA+IGxvZ29XaWR0aCA/IGhlYWRlckFjdGlvbnNXaWR0aCA6IGxvZ29XaWR0a
1DtcblxuICAgICAgaWYgKGxheW91dC5pc0JyZWFrcG9pbnQoJ1hTJywgJ1MnLCAnTScpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyQ29udGVudC5zdHlsZS5taW5IZWlnaHQgPSAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUludChoZWFkZXJTdHlsZXMucGFkZGluZ1RvcC5yZXBsYWNlKCdweCcsICcnKSwgMTApO1xuICAgICAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VJbnQoaGVhZGVyU3R5bGVzLnBhZGRpbmdCb3R0b20ucmVwbGFjZSgncHgnLCAnJyksIDEwKTtcbiAgICAgICAgdGhpcy5oZWFkZXJDb250ZW50LnN0eWxlLm1pbkhlaWdodCA9IGAke2xvZ29IZWlnaHQgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbX1weGA7XG4gICAgICB9XG5cbiAgICAgIGlmIChoZWFkZXJXaWR0aCAvIDIgPD0gbmF2TGlzdFdpZHRoIC8gMiArIHdpZGVzdFNpZGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJDb250ZW50LmNsYXNzTGlzdC5hZGQoJ3NpdGUtaGVhZGVyLXN0YWNrZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGVhZGVyQ29udGVudC5jbGFzc0xpc3QucmVtb3ZlKCdzaXRlLWhlYWRlci1zdGFja2VkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5oZWFkZXIuY2xhc3NMaXN0LnJlbW92ZSgnc2l0ZS1oZWFkZXItbG9hZGluZycpO1xuICB9XG5cbiAgX29wZW5TZWFyY2goZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5saXZlU2VhcmNoICYmIChsYXlvdXQuaXNCcmVha3BvaW50KCdYUycsICdTJykpKSB7XG4gICAgICAvLyBJZiBMaXZlU2VhcmNoIGlzIGVuYWJsZWQsIG9wZW4gdGhlIG1vYmlsZSBzZWFyY2ggdGFrZW92ZXJcbiAgICAgIHRoaXMubGl2ZVNlYXJjaC5vcGVuTW9iaWxlVGFrZW92ZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlckNvbnRlbnQuY2xhc3NMaXN0LnJlbW92ZSgnbGl2ZS1zZWFyY2gtLWhpZGRlbicpO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQuZm9jdXMoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMuX3NlYXJjaEZvY3VzSW4pO1xuICB9XG5cbiAgX2Nsb3NlU2VhcmNoKCkge1xuICAgIHRoaXMuaGVhZGVyQ29udGVudC5jbGFzc0xpc3QuYWRkKCdsaXZlLXNlYXJjaC0taGlkZGVuJyk7XG4gICAgaWYgKHRoaXMuc2VhcmNoV3JhcHBlci5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgdGhpcy5zZWFyY2hCdXR0b24uZm9jdXMoKTtcbiAgICB9XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMuX3NlYXJjaEZvY3VzSW4pO1xuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIHN1cGVyLnVubG9hZCgpO1xuXG4gICAgaWYgKHRoaXMubG9nb0ltYWdlKSB7XG4gICAgICB0aGlzLmxvZ29JbWFnZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fYWRqdXN0U2l6ZUFuZFBsYWNlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2hCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vcGVuU2VhcmNoKTtcbiAgICB0aGlzLnNlYXJjaENsb3NlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fY2xvc2VTZWFyY2gpO1xuICAgIHRoaXMudGFrZW92ZXJDYW5jZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9jbG9zZVNlYXJjaCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMud2luZG93UmVzaXplKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX2FkanVzdFNpemVBbmRQbGFjZW1lbnQpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fY2xvc2VFc2MpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/components/header/BasicHeader.js\n")},
1"./source/scripts/components/header/Header.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Header; });\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scriptjs */ "./node_modules/scriptjs/dist/script.js");\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(scriptjs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _search_LiveSearch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../search/LiveSearch */ "./source/scripts/components/search/LiveSearch.js");\n/* harmony import */ var _search_SearchForm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../search/SearchForm */ "./source/scripts/components/search/SearchForm.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar Header =\n/*#__PURE__*/\nfunction () {\n function Header(options, settings) {\n var _this = this;\n\n _classCallCheck(this, Header);\n\n this.$scripts = options.$scripts;\n this.section = options.section;\n this.header = this.section.querySelector(\'.site-header\');\n this.searchBar = this.header.querySelector(\'[data-live-search]\');\n this.postMessage = options.postMessage;\n this.settings = settings;\n this.stickyClass = \'site-header--sticky\';\n\n if (this.settings.sticky_header) {\n this.section.classList.add(this.stickyClass);\n } // Setup search form/live search\n\n\n this.liveSearch = null;\n this.searchForm = null;\n\n if (this.settings.live_search.enable) {\n scriptjs__WEBPACK_IMPORTED_MODULE_0___default()(this.$scripts.data(\'shopify-api-url\'), function () {\n _this.liveSearch = new _search_LiveSearch__WEBPACK_IMPORTED_MODULE_1__["default"]({\n el: _this.searchBar,\n header: _this.header\n }, _this.settings.live_search);\n });\n } else {\n this.searchForm = new _search_SearchForm__WEBPACK_IMPORTED_MODULE_2__["default"](this.searchBar);\n }\n }\n\n _createClass(Header, [{\n key: "unload",\n value: function unload() {\n this.section.classList.remove(this.stickyClass);\n\n if (this.settings.live_search.enable) {\n this.liveSearch.unload();\n } else {\n this.searchForm.unload();\n }\n }\n }, {\n key: "onSectionBlockSelect",\n value: function onSectionBlockSelect() {// Do nothing\n }\n }, {\n key: "onSectionBlockDeselect",\n value: function onSectionBlockDeselect() {// Do nothing\n }\n }, {\n key: "sectionDeselect",\n value: function sectionDeselect() {// Do nothing\n }\n }]);\n\n return Header;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL2hlYWRlci9IZWFkZXIuanM/ZDUxYSJdLCJuYW1lcyI6WyJIZWFkZXIiLCJvcHRpb25zIiwic2V0dGluZ3MiLCIkc2NyaXB0cyIsInNlY3Rpb24iLCJoZWFkZXIiLCJxdWVyeVNlbGVjdG9yIiwic2VhcmNoQmFyIiwicG9zdE1lc3NhZ2UiLCJzdGlja3lDbGFzcyIsInN0aWNreV9oZWFkZXIiLCJjbGFzc0xpc3QiLCJhZGQiLCJsaXZlU2VhcmNoIiwic2VhcmNoRm9ybSIsImxpdmVfc2VhcmNoIiwiZW5hYmxlIiwiJHNjcmlwdCIsImRhdGEiLCJMaXZlU2VhcmNoIiwiZWwiLCJTZWFyY2hGb3JtIiwicmVtb3ZlIiwidW5sb2FkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUVBO0FBQ0E7O0lBRXFCQSxNOzs7QUFDbkIsa0JBQVlDLE9BQVosRUFBcUJDLFFBQXJCLEVBQStCO0FBQUE7O0FBQUE7O0FBQzdCLFNBQUtDLFFBQUwsR0FBZ0JGLE9BQU8sQ0FBQ0UsUUFBeEI7QUFDQSxTQUFLQyxPQUFMLEdBQWVILE9BQU8sQ0FBQ0csT0FBdkI7QU
1FDQSxTQUFLQyxNQUFMLEdBQWMsS0FBS0QsT0FBTCxDQUFhRSxhQUFiLENBQTJCLGNBQTNCLENBQWQ7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLEtBQUtGLE1BQUwsQ0FBWUMsYUFBWixDQUEwQixvQkFBMUIsQ0FBakI7QUFFQSxTQUFLRSxXQUFMLEdBQW1CUCxPQUFPLENBQUNPLFdBQTNCO0FBRUEsU0FBS04sUUFBTCxHQUFnQkEsUUFBaEI7QUFFQSxTQUFLTyxXQUFMLEdBQW1CLHFCQUFuQjs7QUFFQSxRQUFJLEtBQUtQLFFBQUwsQ0FBY1EsYUFBbEIsRUFBaUM7QUFDL0IsV0FBS04sT0FBTCxDQUFhTyxTQUFiLENBQXVCQyxHQUF2QixDQUEyQixLQUFLSCxXQUFoQztBQUNELEtBZDRCLENBZ0I3Qjs7O0FBQ0EsU0FBS0ksVUFBTCxHQUFrQixJQUFsQjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsSUFBbEI7O0FBRUEsUUFBSSxLQUFLWixRQUFMLENBQWNhLFdBQWQsQ0FBMEJDLE1BQTlCLEVBQXNDO0FBQ3BDQyxxREFBTyxDQUFDLEtBQUtkLFFBQUwsQ0FBY2UsSUFBZCxDQUFtQixpQkFBbkIsQ0FBRCxFQUF3QyxZQUFNO0FBQ25ELGFBQUksQ0FBQ0wsVUFBTCxHQUFrQixJQUFJTSwwREFBSixDQUNoQjtBQUNFQyxZQUFFLEVBQUUsS0FBSSxDQUFDYixTQURYO0FBRUVGLGdCQUFNLEVBQUUsS0FBSSxDQUFDQTtBQUZmLFNBRGdCLEVBS2hCLEtBQUksQ0FBQ0gsUUFBTCxDQUFjYSxXQUxFLENBQWxCO0FBT0QsT0FSTSxDQUFQO0FBU0QsS0FWRCxNQVVPO0FBQ0wsV0FBS0QsVUFBTCxHQUFrQixJQUFJTywwREFBSixDQUFlLEtBQUtkLFNBQXBCLENBQWxCO0FBQ0Q7QUFDRjs7Ozs2QkFFUTtBQUNQLFdBQUtILE9BQUwsQ0FBYU8sU0FBYixDQUF1QlcsTUFBdkIsQ0FBOEIsS0FBS2IsV0FBbkM7O0FBRUEsVUFBSSxLQUFLUCxRQUFMLENBQWNhLFdBQWQsQ0FBMEJDLE1BQTlCLEVBQXNDO0FBQ3BDLGFBQUtILFVBQUwsQ0FBZ0JVLE1BQWhCO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsYUFBS1QsVUFBTCxDQUFnQlMsTUFBaEI7QUFDRDtBQUNGOzs7MkNBRXNCLENBQ3JCO0FBQ0Q7Ozs2Q0FFd0IsQ0FDdkI7QUFDRDs7O3NDQUVpQixDQUNoQjtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9oZWFkZXIvSGVhZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICRzY3JpcHQgZnJvbSAnc2NyaXB0anMnO1xuXG5pbXBvcnQgTGl2ZVNlYXJjaCBmcm9tICcuLi9zZWFyY2gvTGl2ZVNlYXJjaCc7XG5pbXBvcnQgU2VhcmNoRm9ybSBmcm9tICcuLi9zZWFyY2gvU2VhcmNoRm9ybSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhlYWRlciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIHNldHRpbmdzKSB7XG4gICAgdGhpcy4kc2NyaXB0cyA9IG9wdGlvbnMuJHNjcmlwdHM7XG4gICAgdGhpcy5zZWN0aW9uID0gb3B0aW9ucy5zZWN0aW9uO1xuICAgIHRoaXMuaGVhZGVyID0gdGhpcy5zZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoJy5zaXRlLWhlYWRlcicpO1xuICAgIHRoaXMuc2VhcmNoQmFyID0gdGhpcy5oZWFkZXIucXVlcnlTZWxlY3RvcignW2RhdGEtbGl2ZS1zZWFyY2hdJyk7XG5cbiAgICB0aGlzLnBvc3RNZXNzYWdlID0gb3B0aW9ucy5wb3N0TWVzc2FnZTtcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcblxuICAgIHRoaXMuc3RpY2t5Q2xhc3MgPSAnc2l0ZS1oZWFkZXItLXN0aWNreSc7XG5cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5zdGlja3lfaGVhZGVyKSB7XG4gICAgICB0aGlzLnNlY3Rpb24uY2xhc3NMaXN0LmFkZCh0aGlzLnN0aWNreUNsYXNzKTtcbiAgICB9XG5cbiAgICAvLyBTZXR1cCBzZWFyY2ggZm9ybS9saXZlIHNlYXJjaFxuICAgIHRoaXMubGl2ZVNlYXJjaCA9IG51bGw7XG4gICAgdGhpcy5zZWFyY2hGb3JtID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnNldHRpbmdzLmxpdmVfc2VhcmNoLmVuYWJsZSkge1xuICAgICAgJHNjcmlwdCh0aGlzLiRzY3JpcHRzLmRhdGEoJ3Nob3BpZnktYXBpLXVybCcpLCAoKSA9PiB7XG4gICAgICAgIHRoaXMubGl2ZVNlYXJjaCA9IG5ldyBMaXZlU2VhcmNoKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVsOiB0aGlzLnNlYXJjaEJhcixcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy5oZWFkZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmxpdmVfc2VhcmNoLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IG5ldyBTZWFyY2hGb3JtKHRoaXMuc2VhcmNoQmFyKTtcbiAgICB9XG4gIH1cblxuICB1bmxvYWQoKSB7XG4gICAgdGhpcy5zZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5zdGlja3lDbGFzcyk7XG5cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5saXZlX3NlYXJjaC5lbmFibGUpIHtcbiAgICAgIHRoaXMubGl2ZVNlYXJjaC51bmxvYWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hGb3JtLnVubG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VjdGlvbkJsb2NrU2VsZWN0KCkge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uU2VjdGlvbkJsb2NrRGVzZWxlY3QoKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgc2VjdGlvbkRlc2VsZWN0KCkge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/components/header/Header.js\n')},
1"./source/scripts/components/header/MinimalHeader.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return MinimalHeader; });\n/* harmony import */ var _Header__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Header */ \"./source/scripts/components/header/Header.js\");\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Layout */ \"./source/scripts/Layout.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\n\nvar MinimalHeader =\n/*#__PURE__*/\nfunction (_Header) {\n _inherits(MinimalHeader, _Header);\n\n function MinimalHeader(options, settings) {\n var _this;\n\n _classCallCheck(this, MinimalHeader);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(MinimalHeader).call(this, options, settings));\n _this.navOpenClass = 'site-header-nav--open';\n _this.menuToggle = _this.header.querySelector('[data-menu-toggle]');\n _this.menu = _this.section.querySelector('[data-site-navigation]');\n _this.searchOpenClass = 'site-header-search--open';\n _this.searchToggle = _this.header.querySelector('[data-search-toggle]');\n _this.searchInput = _this.header.querySelector('[data-live-search-input]');\n _this.transitioning = false; // Setup Menu toggles\n\n _this._toggleMenu = _this._toggleMenu.bind(_assertThisInitialized(_this));\n\n _this.toggleClick = function (event) {\n event.preventDefault();\n if (_Layout__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isBreakpoint('L')) _this._toggleMenu();\n };\n\n _this.menuToggle.addEventListener('click', _this.toggleClick); // Setup Search toggles\n\n\n _this._toggleSearchBar = _this._toggleSearchBar.bind(_assertThisInitialized(_this));\n _this._closeSearchBar = _this._closeSearchBar.bind(_assertThisInitialized(_this));\n _this.searchTransitioning = false; // Show the menu briefly to get its height and then replace its style\n\n _this.menu.setAttribute('style', 'display: block; visibility: hidden;');\n\n _this.menu.setAttribute('style', \"margin-top: -\".concat(_this.menu.getBoundingClientRect().height, \"px;\"));\n\n _this._closeEsc = function (e) {\n if (e.key === 'Escape') {\n if (_this.searchBar.contains(document.activeElement)) {\n _this.searchToggle.focus();\n }\n\n _this._closeSearchBar();\n }\n };\n\n _this.stopProp = function (e) {\n return e.stopPropagation();\n }; // If reloading in the editor close the search bar so it doesn't interfere with other settings\n\n\n _this._closeSearchBar();\n\n _this.searchToggle.addEventListener('click', _this._toggleSearchBar);\n\n _this.searchBar.addEventListener('click', _this.stopProp);\n\n window.addEventListener('resize', _this._closeSearchBar);\n window.addEventListener('click', _this._closeSearchBar);\n window.addEventListener('keydown', _this._closeEsc);\n return _this;\n }\n\n _createClass(MinimalHeader, [{\n key: \"closeNavigation\",\n value: function closeNavigation() {\
1n var _this2 = this;\n\n if (this.searchTransitioning || this.transitioning) {\n return;\n }\n\n this.menuToggle.classList.remove('active');\n\n this.navTransitionOutEvent = function () {\n _this2.header.classList.remove(_this2.navOpenClass);\n\n _this2.transitioning = false;\n\n _this2.menu.removeEventListener('transitionend', _this2.navTransitionOutEvent);\n };\n\n this.menu.addEventListener('transitionend', this.navTransitionOutEvent);\n this.transitioning = true;\n this.menu.setAttribute('style', \"margin-top: -\".concat(this.menu.getBoundingClientRect().height, \"px;\"));\n this.postMessage('nav:close-all');\n }\n }, {\n key: \"openNavigation\",\n value: function openNavigation() {\n var _this3 = this;\n\n if (this.searchTransitioning) {\n return;\n }\n\n this._closeSearchBar();\n\n if (this.transitioning || this.header.classList.contains(this.navOpenClass)) {\n return;\n }\n\n this.menuToggle.classList.add('active');\n\n this.navTransitionInEvent = function () {\n _this3.transitioning = false;\n\n _this3.menu.removeEventListener('transitionend', _this3.navTransitionInEvent);\n };\n\n this.menu.addEventListener('transitionend', this.navTransitionInEvent);\n this.transitioning = true; // We need to wait for the browser to set the display to 'block' before we set the margin\n // This will help with ensuring the different animations/transitions happen in sequence\n // and not at the same time.\n\n window.requestAnimationFrame(function () {\n _this3.header.classList.add(_this3.navOpenClass);\n\n window.requestAnimationFrame(function () {\n _this3.menu.setAttribute('style', 'margin-top: 0;');\n });\n });\n }\n }, {\n key: \"_toggleMenu\",\n value: function _toggleMenu() {\n if (this.header.classList.contains(this.navOpenClass)) {\n this.closeNavigation();\n } else {\n this.openNavigation();\n }\n }\n }, {\n key: \"_toggleSearchBar\",\n value: function _toggleSearchBar(e) {\n e.stopPropagation();\n e.preventDefault();\n\n if (_Layout__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isBreakpoint('XS', 'S')) {\n if (this.header.classList.contains(this.searchOpenClass)) {\n // This will only be called on mobile if LiveSearch is not enabled.\n this._closeSearchBar();\n } else if (this.liveSearch) {\n // If LiveSearch is enabled, open the mobile search takeover\n this.liveSearch.openMobileTakeover();\n } else {\n // If LiveSearch is not enabled, we need to show the mobile search bar without takeover\n this._openSearchBar();\n }\n } else if (this.header.classList.contains(this.searchOpenClass)) {\n // If the search bar is open\n this._closeSearchBar();\n } else {\n this._openSearchBar();\n }\n }\n }, {\n key: \"_openSearchBar\",\n value: function _openSearchBar() {\n var _this4 = this;\n\n if (this.searchTransitioning || this.header.classList.contains(this.searchOpenClass)) {\n return;\n }\n\n if (this.header.classList.contains(this.navOpenClass)) {\n this.closeNavigation();\n }\n\n this.searchTransitioning = true;\n\n this.searchAnimatingInEvent = function () {\n _this4.searchBar.classList.remove('animating-in');\n\n _this4.searchTransitioning = false;\n\n _this4.searchBar.removeEventListener('animationend', _this4.searchAnimatingInEvent);\n };\n\n this.header.classList.add(this.searchOpenClass);\n this.searchBar.addEventListener('animationend', this.searchAnimatingInEvent);\n this.searchBar.classList.add('animating-in');\n this.searchInput.focus();\n }\n }, {\n key: \"_closeSearchBar\",\n value: function _closeSearchBar() {\n var _this5 = this;\n\n if (this.searchTransitioning || !this.header.classList.contains(this.searchOpenClass)) {\n return;\n }\n\n this.searchTransitioning = true;\n\n this.searchAnimatingOutEvent = function () {\n _this5.searchBar.classList.remove('animating-out');\n\n _this5.header.classList.remove(_this5.searchOpenClass);\n\n _this5.searchTransitioning = false;\n\n _this5.searchBar.removeEventListener('animationend', _this5.searchAnimatingOutEvent);\n };\n\n this.searchBar.addEventListener('animationend', this.searchAnimatingOutEvent);\n this.searchBar.classList.add('animating-out');\n }\n }, {\n key: \"unload\",\n value: function unload() {\n _get(_getPrototypeOf(MinimalHeader.prototype), \"unload\", this).call(this);\n\n this.menuToggle.removeEventListener('click', this.toggleClick);\n this.searchToggle.removeEventListener('click', this._toggleSearchBar);\n this.searchBar.removeEventListener('click', this.stopProp);\n window.removeEventListener('resize', this._closeSearchBar);\n window.removeEventListener('click', this._closeSearchBar);\n window.removeEventListener('keydown', this._closeEsc);\n }\n }, {\n key: \"onSectionBlockSelect\",\n value: function onSectionBlockSelect() {\n this.menuToggle.classList.add('active');\n this.header.classList.add(this.navOpenClass);\n this.openNavigation();\n }\n }, {\n key: \"onSectionBlockDeselect\",\n value: function onSectionBlockDeselect() {\n this.menuToggle.classList.remove('active');\n }\n }, {\n key: \"sectionDeselect\",\n value: function sectionDeselect() {\n this.closeNavigation();\n }\n }]);\n\n return MinimalHeader;\n}(_Header__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL2hlYWRlci9NaW5pbWFsSGVhZGVyLmpzPzdhMTYiXSwibmFtZXMiOlsiTWluaW1hbEhlYWRlciIsIm9wdGlvbnMiLCJzZXR0aW5ncyIsIm5hdk9wZW5DbGFzcyIsIm1lbnVUb2dnbGUiLCJoZWFkZXIiLCJxdWVyeVNlbGVjdG9yIiwibWVudSIsInNlY3Rpb24iLCJzZWFyY2hPcGVuQ2xhc3MiLCJzZWFyY2hUb2dnbGUiLCJzZWFyY2hJbnB1dCIsInRyYW5zaXRpb25pbmciLCJfdG9nZ2xlTWVudSIsImJpbmQiLCJ0b2dnbGVDbGljayIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJsYXlvdXQiLCJpc0JyZWFrcG9pbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiX3RvZ2dsZVNlYXJjaEJhciIsIl9jbG9zZVNlYXJjaEJhciIsInNlYXJjaFRyYW5zaXRpb25pbmciLCJzZXRBdHRyaWJ1dGUiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJoZWlnaHQiLCJfY2xvc2VFc2MiLCJlIiwia2V5Iiwic2VhcmNoQmFyIiwiY29udGFpbnMiLCJkb2N1bWVudCIsImFjdGl2ZUVsZW1lbnQiLCJmb2N1cyIsInN0b3BQcm9wIiwic3RvcFByb3BhZ2F0aW9uIiwid2luZG93IiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwibmF2VHJhbnNpdGlvbk91dEV2ZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInBvc3RNZXNzYWdlIiwiYWRkIiwibmF2VHJhbnNpdGlvbkluRXZlbnQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjbG9zZU5hdmlnYXRpb24iLCJvcGVuTmF2aWdhdGlvbiIsImxpdmVTZWFyY2giLCJvcGVuTW9iaWxlVGFrZW92ZXIiLCJfb3BlblNlYXJjaEJhciIsInNlYXJjaEFuaW1hdGluZ0luRXZlbnQiLCJzZWFyY2hBbmltYXRpbmdPdXRFdmVudCIsIkhlYWRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7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UFJLENBQUNsQyxNQUFMLENBQVlpQyxTQUFaLENBQXNCQyxNQUF0QixDQUE2QixNQUFJLENBQUM5QixlQUFsQzs7QUFDQSxjQUFJLENBQUNjLG1CQUFMLEdBQTJCLEtBQTNCOztBQUNBLGNBQUksQ0FBQ08sU0FBTCxDQUFlVyxtQkFBZixDQUNFLGNBREYsRUFFRSxNQUFJLENBQUNXLHVCQUZQO0FBSUQsT0FSRDs7QUFVQSxXQUFLdEIsU0FBTCxDQUFlVixnQkFBZixDQUNFLGNBREYsRUFFRSxLQUFLZ0MsdUJBRlA7QUFJQSxXQUFLdEIsU0FBTCxDQUFlUSxTQUFmLENBQXlCSyxHQUF6QixDQUE2QixlQUE3QjtBQUNEOzs7NkJBRVE7QUFDUDs7QUFDQSxXQUFLdkMsVUFBTCxDQUFnQnFDLG1CQUFoQixDQUFvQyxPQUFwQyxFQUE2QyxLQUFLMUIsV0FBbEQ7QUFDQSxXQUFLTCxZQUFMLENBQWtCK0IsbUJBQWxCLENBQXNDLE9BQXRDLEVBQStDLEtBQUtwQixnQkFBcEQ7QUFDQSxXQUFLUyxTQUFMLENBQWVXLG1CQUFmLENBQW1DLE9BQW5DLEVBQTRDLEtBQUtOLFFBQWpEO0FBQ0FFLFlBQU0sQ0FBQ0ksbUJBQVAsQ0FBMkIsUUFBM0IsRUFBcUMsS0FBS25CLGVBQTFDO0FBQ0FlLFlBQU0sQ0FBQ0ksbUJBQVAsQ0FBMkIsT0FBM0IsRUFBb0MsS0FBS25CLGVBQXpDO0FBQ0FlLFlBQU0sQ0FBQ0ksbUJBQVAsQ0FBMkIsU0FBM0IsRUFBc0MsS0FBS2QsU0FBM0M7QUFDRDs7OzJDQUVzQjtBQUNyQixXQUFLdkIsVUFBTCxDQUFnQmtDLFNBQWhCLENBQTBCSyxHQUExQixDQUE4QixRQUE5QjtBQUNBLFdBQUt0QyxNQUFMLENBQVlpQyxTQUFaLENBQXNCSyxHQUF0QixDQUEwQixLQUFLeEMsWUFBL0I7QUFDQSxXQUFLNEMsY0FBTDtBQUNEOzs7NkNBRXdCO0FBQ3ZCLFdBQUszQyxVQUFMLENBQWdCa0MsU0FBaEIsQ0FBMEJDLE1BQTFCLENBQWlDLFFBQWpDO0FBQ0Q7OztzQ0FFaUI7QUFDaEIsV0FBS08
1sZUFBTDtBQUNEOzs7O0VBM093Q08sK0MiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL2hlYWRlci9NaW5pbWFsSGVhZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEhlYWRlciBmcm9tICcuL0hlYWRlcic7XG5pbXBvcnQgbGF5b3V0IGZyb20gJy4uLy4uL0xheW91dCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pbmltYWxIZWFkZXIgZXh0ZW5kcyBIZWFkZXIge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBzZXR0aW5ncykge1xuICAgIHN1cGVyKG9wdGlvbnMsIHNldHRpbmdzKTtcblxuICAgIHRoaXMubmF2T3BlbkNsYXNzID0gJ3NpdGUtaGVhZGVyLW5hdi0tb3Blbic7XG4gICAgdGhpcy5tZW51VG9nZ2xlID0gdGhpcy5oZWFkZXIucXVlcnlTZWxlY3RvcignW2RhdGEtbWVudS10b2dnbGVdJyk7XG4gICAgdGhpcy5tZW51ID0gdGhpcy5zZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXNpdGUtbmF2aWdhdGlvbl0nKTtcblxuICAgIHRoaXMuc2VhcmNoT3BlbkNsYXNzID0gJ3NpdGUtaGVhZGVyLXNlYXJjaC0tb3Blbic7XG4gICAgdGhpcy5zZWFyY2hUb2dnbGUgPSB0aGlzLmhlYWRlci5xdWVyeVNlbGVjdG9yKCdbZGF0YS1zZWFyY2gtdG9nZ2xlXScpO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQgPSB0aGlzLmhlYWRlci5xdWVyeVNlbGVjdG9yKCdbZGF0YS1saXZlLXNlYXJjaC1pbnB1dF0nKTtcblxuICAgIHRoaXMudHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuXG4gICAgLy8gU2V0dXAgTWVudSB0b2dnbGVzXG4gICAgdGhpcy5fdG9nZ2xlTWVudSA9IHRoaXMuX3RvZ2dsZU1lbnUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudG9nZ2xlQ2xpY2sgPSBldmVudCA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGxheW91dC5pc0JyZWFrcG9pbnQoJ0wnKSkgdGhpcy5fdG9nZ2xlTWVudSgpO1xuICAgIH07XG5cbiAgICB0aGlzLm1lbnVUb2dnbGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnRvZ2dsZUNsaWNrKTtcblxuICAgIC8vIFNldHVwIFNlYXJjaCB0b2dnbGVzXG4gICAgdGhpcy5fdG9nZ2xlU2VhcmNoQmFyID0gdGhpcy5fdG9nZ2xlU2VhcmNoQmFyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fY2xvc2VTZWFyY2hCYXIgPSB0aGlzLl9jbG9zZVNlYXJjaEJhci5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5zZWFyY2hUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG5cbiAgICAvLyBTaG93IHRoZSBtZW51IGJyaWVmbHkgdG8gZ2V0IGl0cyBoZWlnaHQgYW5kIHRoZW4gcmVwbGFjZSBpdHMgc3R5bGVcbiAgICB0aGlzLm1lbnUuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBibG9jazsgdmlzaWJpbGl0eTogaGlkZGVuOycpO1xuICAgIHRoaXMubWVudS5zZXRBdHRyaWJ1dGUoXG4gICAgICAnc3R5bGUnLFxuICAgICAgYG1hcmdpbi10b3A6IC0ke3RoaXMubWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHR9cHg7YCxcbiAgICApO1xuXG4gICAgdGhpcy5fY2xvc2VFc2MgPSBlID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoQmFyLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgdGhpcy5zZWFyY2hUb2dnbGUuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jbG9zZVNlYXJjaEJhcigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnN0b3BQcm9wID0gZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gSWYgcmVsb2FkaW5nIGluIHRoZSBlZGl0b3IgY2xvc2UgdGhlIHNlYXJjaCBiYXIgc28gaXQgZG9lc24ndCBpbnRlcmZlcmUgd2l0aCBvdGhlciBzZXR0aW5nc1xuICAgIHRoaXMuX2Nsb3NlU2VhcmNoQmFyKCk7XG5cbiAgICB0aGlzLnNlYXJjaFRvZ2dsZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX3RvZ2dsZVNlYXJjaEJhcik7XG4gICAgdGhpcy5zZWFyY2hCYXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnN0b3BQcm9wKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fY2xvc2VTZWFyY2hCYXIpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2Nsb3NlU2VhcmNoQmFyKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX2Nsb3NlRXNjKTtcbiAgfVxuXG4gIGNsb3NlTmF2aWdhdGlvbigpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUcmFuc2l0aW9uaW5nIHx8IHRoaXMudHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWVudVRvZ2dsZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcblxuICAgIHRoaXMubmF2VHJhbnNpdGlvbk91dEV2ZW50ID0gKCkgPT4ge1xuICAgICAgdGhpcy5oZWFkZXIuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm5hdk9wZW5DbGFzcyk7XG4gICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWVudS5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAndHJhbnNpdGlvbmVuZCcsXG4gICAgICAgIHRoaXMubmF2VHJhbnNpdGlvbk91dEV2ZW50LFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgdGhpcy5tZW51LmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCB0aGlzLm5hdlRyYW5zaXRpb25PdXRFdmVudCk7XG5cbiAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIHRoaXMubWVudS5zZXRBdHRyaWJ1dGUoXG4gICAgICAnc3R5bGUnLFxuICAgICAgYG1hcmdpbi10b3A6IC0ke3RoaXMubWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHR9cHg7YCxcbiAgICApO1xuXG4gICAgdGhpcy5wb3N0TWVzc2FnZSgnbmF2OmNsb3NlLWFsbCcpO1xuICB9XG5cbiAgb3Blbk5hdmlnYXRpb24oKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Nsb3NlU2VhcmNoQmFyKCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnRyYW5zaXRpb25pbmcgfHxcbiAgICAgIHRoaXMuaGVhZGVyLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLm5hdk9wZW5DbGFzcylcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVUb2dnbGUuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG5cbiAgICB0aGlzLm5hdlRyYW5zaXRpb25JbkV2ZW50ID0gKCkgPT4ge1xuICAgICAgdGhpcy50cmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1lbnUucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHRoaXMubmF2VHJhbnNpdGlvbkluRXZlbnQpO1xuICAgIH07XG5cbiAgICB0aGlzLm1lbnUuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHRoaXMubmF2VHJhbnNpdGlvbkluRXZlbnQpO1xuXG4gICAgdGhpcy50cmFuc2l0aW9uaW5nID0gdHJ1ZTtcblxuICAgIC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGJyb3dzZXIgdG8gc2V0IHRoZSBkaXNwbGF5IHRvICdibG9jaycgYmVmb3JlIHdlIHNldCB0aGUgbWFyZ2luXG4gICAgLy8gVGhpcyB3aWxsIGhlbHAgd2l0aCBlbnN1cmluZyB0aGUgZGlmZmVyZW50IGFuaW1hdGlvbnMvdHJhbnNpdGlvbnMgaGFwcGVuIGluIHNlcXVlbmNlXG4gICAgLy8gYW5kIG5vdCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5oZWFkZXIuY2xhc3NMaXN0LmFkZCh0aGlzLm5hdk9wZW5DbGFzcyk7XG5cbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLm1lbnUuc2V0QXR0cmlidXRlKCdzdHlsZScsICdtYXJnaW4tdG9wOiAwOycpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBfdG9nZ2xlTWVudSgpIHtcbiAgICBpZiAodGhpcy5oZWFkZXIuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMubmF2T3BlbkNsYXNzKSkge1xuICAgICAgdGhpcy5jbG9zZU5hdmlnYXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuTmF2aWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIF90b2dnbGVTZWFyY2hCYXIoZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKGxheW91dC5pc0JyZWFrcG9pbnQoJ1hTJywgJ1MnKSkge1xuICAgICAgaWYgKHRoaXMuaGVhZGVyLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLnNlYXJjaE9wZW5DbGFzcykpIHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIG9ubHkgYmUgY2FsbGVkIG9uIG1vYmlsZSBpZiBMaXZlU2VhcmNoIGlzIG5vdCBlbmFibGVkLlxuICAgICAgICB0aGlzLl9jbG9zZVNlYXJjaEJhcigpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmxpdmVTZWFyY2gpIHtcbiAgICAgICAgLy8gSWYgTGl2ZVNlYXJjaCBpcyBlbmFibGVkLCBvcGVuIHRoZSBtb2JpbGUgc2VhcmNoIHRha2VvdmVyXG4gICAgICAgI
1HRoaXMubGl2ZVNlYXJjaC5vcGVuTW9iaWxlVGFrZW92ZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIExpdmVTZWFyY2ggaXMgbm90IGVuYWJsZWQsIHdlIG5lZWQgdG8gc2hvdyB0aGUgbW9iaWxlIHNlYXJjaCBiYXIgd2l0aG91dCB0YWtlb3ZlclxuICAgICAgICB0aGlzLl9vcGVuU2VhcmNoQmFyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmhlYWRlci5jbGFzc0xpc3QuY29udGFpbnModGhpcy5zZWFyY2hPcGVuQ2xhc3MpKSB7XG4gICAgICAvLyBJZiB0aGUgc2VhcmNoIGJhciBpcyBvcGVuXG4gICAgICB0aGlzLl9jbG9zZVNlYXJjaEJhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcGVuU2VhcmNoQmFyKCk7XG4gICAgfVxuICB9XG5cbiAgX29wZW5TZWFyY2hCYXIoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWFyY2hUcmFuc2l0aW9uaW5nIHx8XG4gICAgICB0aGlzLmhlYWRlci5jbGFzc0xpc3QuY29udGFpbnModGhpcy5zZWFyY2hPcGVuQ2xhc3MpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGVhZGVyLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLm5hdk9wZW5DbGFzcykpIHtcbiAgICAgIHRoaXMuY2xvc2VOYXZpZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2hUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuc2VhcmNoQW5pbWF0aW5nSW5FdmVudCA9ICgpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoQmFyLmNsYXNzTGlzdC5yZW1vdmUoJ2FuaW1hdGluZy1pbicpO1xuICAgICAgdGhpcy5zZWFyY2hUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnNlYXJjaEJhci5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnYW5pbWF0aW9uZW5kJyxcbiAgICAgICAgdGhpcy5zZWFyY2hBbmltYXRpbmdJbkV2ZW50LFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgdGhpcy5oZWFkZXIuY2xhc3NMaXN0LmFkZCh0aGlzLnNlYXJjaE9wZW5DbGFzcyk7XG4gICAgdGhpcy5zZWFyY2hCYXIuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdhbmltYXRpb25lbmQnLFxuICAgICAgdGhpcy5zZWFyY2hBbmltYXRpbmdJbkV2ZW50LFxuICAgICk7XG4gICAgdGhpcy5zZWFyY2hCYXIuY2xhc3NMaXN0LmFkZCgnYW5pbWF0aW5nLWluJyk7XG5cbiAgICB0aGlzLnNlYXJjaElucHV0LmZvY3VzKCk7XG4gIH1cblxuICBfY2xvc2VTZWFyY2hCYXIoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWFyY2hUcmFuc2l0aW9uaW5nIHx8XG4gICAgICAhdGhpcy5oZWFkZXIuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMuc2VhcmNoT3BlbkNsYXNzKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoVHJhbnNpdGlvbmluZyA9IHRydWU7XG5cbiAgICB0aGlzLnNlYXJjaEFuaW1hdGluZ091dEV2ZW50ID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hCYXIuY2xhc3NMaXN0LnJlbW92ZSgnYW5pbWF0aW5nLW91dCcpO1xuICAgICAgdGhpcy5oZWFkZXIuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLnNlYXJjaE9wZW5DbGFzcyk7XG4gICAgICB0aGlzLnNlYXJjaFRyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VhcmNoQmFyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdhbmltYXRpb25lbmQnLFxuICAgICAgICB0aGlzLnNlYXJjaEFuaW1hdGluZ091dEV2ZW50LFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZWFyY2hCYXIuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdhbmltYXRpb25lbmQnLFxuICAgICAgdGhpcy5zZWFyY2hBbmltYXRpbmdPdXRFdmVudCxcbiAgICApO1xuICAgIHRoaXMuc2VhcmNoQmFyLmNsYXNzTGlzdC5hZGQoJ2FuaW1hdGluZy1vdXQnKTtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICBzdXBlci51bmxvYWQoKTtcbiAgICB0aGlzLm1lbnVUb2dnbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnRvZ2dsZUNsaWNrKTtcbiAgICB0aGlzLnNlYXJjaFRvZ2dsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX3RvZ2dsZVNlYXJjaEJhcik7XG4gICAgdGhpcy5zZWFyY2hCYXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnN0b3BQcm9wKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fY2xvc2VTZWFyY2hCYXIpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2Nsb3NlU2VhcmNoQmFyKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX2Nsb3NlRXNjKTtcbiAgfVxuXG4gIG9uU2VjdGlvbkJsb2NrU2VsZWN0KCkge1xuICAgIHRoaXMubWVudVRvZ2dsZS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICB0aGlzLmhlYWRlci5jbGFzc0xpc3QuYWRkKHRoaXMubmF2T3BlbkNsYXNzKTtcbiAgICB0aGlzLm9wZW5OYXZpZ2F0aW9uKCk7XG4gIH1cblxuICBvblNlY3Rpb25CbG9ja0Rlc2VsZWN0KCkge1xuICAgIHRoaXMubWVudVRvZ2dsZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgfVxuXG4gIHNlY3Rpb25EZXNlbGVjdCgpIHtcbiAgICB0aGlzLmNsb3NlTmF2aWdhdGlvbigpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/components/header/MinimalHeader.js\n")},
1"./source/scripts/components/header/TraditionalHeader.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return TraditionalHeader; });\n/* harmony import */ var _Header__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Header */ \"./source/scripts/components/header/Header.js\");\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Layout */ \"./source/scripts/Layout.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\n\nvar TraditionalHeader =\n/*#__PURE__*/\nfunction (_Header) {\n _inherits(TraditionalHeader, _Header);\n\n function TraditionalHeader(options, settings) {\n var _this;\n\n _classCallCheck(this, TraditionalHeader);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(TraditionalHeader).call(this, options, settings));\n _this.body = document.querySelector('body');\n _this.menuToggle = _this.header.querySelector('[data-menu-toggle]');\n _this.menu = _this.section.querySelector('[data-site-navigation]');\n _this.searchInput = _this.header.querySelector('[data-live-search-input]');\n _this.lastToggle = Date.now() - 1000;\n _this.transitioning = false;\n _this.navOpenClass = 'site-header-nav--open';\n _this.scrolledClass = 'traditional-header--scrolled'; // Setup Menu toggles\n\n _this._toggleMenu = _this._toggleMenu.bind(_assertThisInitialized(_this));\n _this._toggleStickyHeader = _this._toggleStickyHeader.bind(_assertThisInitialized(_this));\n\n _this.toggleClick = function (e) {\n e.preventDefault();\n if (_Layout__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isBreakpoint('L')) _this._toggleMenu();\n };\n\n _this.menuToggle.addEventListener('click', _this.toggleClick); // Setup Search Toggle for mobile\n\n\n _this.searchInputFocused = function (e) {\n e.preventDefault();\n\n if (_this.liveSearch && _Layout__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isBreakpoint('XS', 'S')) {\
1n _this.liveSearch.openMobileTakeover();\n }\n };\n\n _this.searchInput.addEventListener('focus', _this.searchInputFocused); // Setup sticky header collapse\n\n\n if (_this.settings.sticky_header) {\n _this.observer = new IntersectionObserver(function (entries) {\n return _this._toggleStickyHeader(entries);\n });\n\n _this.observer.observe(document.querySelector('.intersection-target'));\n }\n\n return _this;\n }\n\n _createClass(TraditionalHeader, [{\n key: \"closeNavigation\",\n value: function closeNavigation() {\n var _this2 = this;\n\n if (this.transitioning) {\n return;\n }\n\n this.menuToggle.classList.remove('active');\n\n this.navTransitionOutEvent = function () {\n _this2.header.classList.remove(_this2.navOpenClass);\n\n _this2.transitioning = false;\n\n _this2.menu.removeEventListener('transitionend', _this2.navTransitionOutEvent);\n };\n\n this.menu.addEventListener('transitionend', this.navTransitionOutEvent);\n this.transitioning = true;\n this.menu.setAttribute('style', \"margin-top: -\".concat(this.menu.getBoundingClientRect().height, \"px;\"));\n this.postMessage('nav:close-all');\n }\n }, {\n key: \"openNavigation\",\n value: function openNavigation() {\n var _this3 = this;\n\n if (this.transitioning || this.header.classList.contains(this.navOpenClass)) {\n return;\n }\n\n this.menuToggle.classList.add('active');\n\n this.navTransitionInEvent = function () {\n _this3.transitioning = false;\n\n _this3.menu.removeEventListener('transitionend', _this3.navTransitionInEvent);\n };\n\n this.menu.addEventListener('transitionend', this.navTransitionInEvent);\n this.transitioning = true; // We need to wait for the browser to set the display to 'block' before we set the margin\n // This will help with ensuring the different animations/transitions happen in sequence\n // and not at the same time.\n\n window.requestAnimationFrame(function () {\n _this3.header.classList.add(_this3.navOpenClass);\n\n window.requestAnimationFrame(function () {\n _this3.menu.setAttribute('style', 'margin-top: 0;');\n });\n });\n }\n }, {\n key: \"_toggleMenu\",\n value: function _toggleMenu() {\n if (this.header.classList.contains(this.navOpenClass)) {\n this.closeNavigation();\n } else {\n this.openNavigation();\n }\n }\n /**\n * Sticky header only shows as sticky after scroll\n *\n * @private\n */\n\n }, {\n key: \"_toggleStickyHeader\",\n value: function _toggleStickyHeader(entries) {\n if (this.body.classList.contains('scroll-lock') || !_Layout__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isBreakpoint('L')) {\n return;\n }\n\n var shouldShrink = !entries[0].isIntersecting; // Sticky header is scrolled, is and is visible -- nothing more to do!\n\n if (shouldShrink && this.header.classList.contains(this.scrolledClass)) {\n return;\n } // We also check to make sure the toggle hasnt activated recently to stop jerky transitions\n\n\n if (this.lastToggle + 500 > Date.now()) {\n return;\n }\n\n this.lastToggle = Date.now();\n\n if (shouldShrink) {\n this._shrink();\n } else {\n this._expand();\n }\n }\n }, {\n key: \"_shrink\",\n value: function _shrink() {\n this.closeNavigation();\n this.header.classList.add(this.scrolledClass);\n }\n }, {\n key: \"_expand\",\n value: function _expand() {\n this.openNavigation();\n this.header.classList.remove(this.scrolledClass);\n this.menuToggle.classList.remove('active');\n }\n }, {\n key: \"onSectionBlockSelect\",\n value: function onSectionBlockSelect() {\n this.header.classList.add(this.navOpenClass);\n this.menuToggle.classList.add('active');\n this.menu.setAttribute('style', 'margin-top: 0;');\n this.openNavigation();\n }\n }, {\n key: \"unload\",\n value: function unload() {\n _get(_getPrototypeOf(TraditionalHeader.prototype), \"unload\", this).call(this);\n\n this.body.classList.remove(this.scrolledClass);\n this.menuToggle.removeEventListener('click', this.toggleClick);\n this.searchInput.removeEventListener('focus', this.searchInputFocused);\n window.removeEventListener('scroll', this._toggleStickyHeader);\n\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n }]);\n\n return TraditionalHeader;\n}(_Header__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL2hlYWRlci9UcmFkaXRpb25hbEhlYWRlci5qcz8wYWMxIl0sIm5hbWVzIjpbIlRyYWRpdGlvbmFsSGVhZGVyIiwib3B0aW9ucyIsInNldHRpbmdzIiwiYm9keSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsIm1lbnVUb2dnbGUiLCJoZWFkZXIiLCJtZW51Iiwic2VjdGlvbiIsInNlYXJjaElucHV0IiwibGFzdF
1RvZ2dsZSIsIkRhdGUiLCJub3ciLCJ0cmFuc2l0aW9uaW5nIiwibmF2T3BlbkNsYXNzIiwic2Nyb2xsZWRDbGFzcyIsIl90b2dnbGVNZW51IiwiYmluZCIsIl90b2dnbGVTdGlja3lIZWFkZXIiLCJ0b2dnbGVDbGljayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImxheW91dCIsImlzQnJlYWtwb2ludCIsImFkZEV2ZW50TGlzdGVuZXIiLCJzZWFyY2hJbnB1dEZvY3VzZWQiLCJsaXZlU2VhcmNoIiwib3Blbk1vYmlsZVRha2VvdmVyIiwic3RpY2t5X2hlYWRlciIsIm9ic2VydmVyIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJlbnRyaWVzIiwib2JzZXJ2ZSIsImNsYXNzTGlzdCIsInJlbW92ZSIsIm5hdlRyYW5zaXRpb25PdXRFdmVudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJzZXRBdHRyaWJ1dGUiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJoZWlnaHQiLCJwb3N0TWVzc2FnZSIsImNvbnRhaW5zIiwiYWRkIiwibmF2VHJhbnNpdGlvbkluRXZlbnQiLCJ3aW5kb3ciLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjbG9zZU5hdmlnYXRpb24iLCJvcGVuTmF2aWdhdGlvbiIsInNob3VsZFNocmluayIsImlzSW50ZXJzZWN0aW5nIiwiX3NocmluayIsIl9leHBhbmQiLCJkaXNjb25uZWN0IiwiSGVhZGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0lBRXFCQSxpQjs7Ozs7QUFDbkIsNkJBQVlDLE9BQVosRUFBcUJDLFFBQXJCLEVBQStCO0FBQUE7O0FBQUE7O0FBQzdCLDJGQUFNRCxPQUFOLEVBQWVDLFFBQWY7QUFFQSxVQUFLQyxJQUFMLEdBQVlDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixNQUF2QixDQUFaO0FBQ0EsVUFBS0MsVUFBTCxHQUFrQixNQUFLQyxNQUFMLENBQVlGLGFBQVosQ0FBMEIsb0JBQTFCLENBQWxCO0FBQ0EsVUFBS0csSUFBT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CLGFBQWxDO0FBQ0EsV0FBS1YsVUFBTCxDQUFnQjRCLFNBQWhCLENBQTBCQyxNQUExQixDQUFpQyxRQUFqQztBQUNEOzs7MkNBRXNCO0FBQ3JCLFdBQUs1QixNQUFMLENBQVkyQixTQUFaLENBQXNCUyxHQUF0QixDQUEwQixLQUFLNUIsWUFBL0I7QUFDQSxXQUFLVCxVQUFMLENBQWdCNEIsU0FBaEIsQ0FBMEJTLEdBQTFCLENBQThCLFFBQTlCO0FBQ0EsV0FBS25DLElBQUwsQ0FBVThCLFlBQVYsQ0FBdUIsT0FBdkIsRUFBZ0MsZ0JBQWhDO0FBQ0EsV0FBS1UsY0FBTDtBQUNEOzs7NkJBRVE7QUFDUDs7QUFDQSxXQUFLN0MsSUFBTCxDQUFVK0IsU0FBVixDQUFvQkMsTUFBcEIsQ0FBMkIsS0FBS25CLGFBQWhDO0FBRUEsV0FBS1YsVUFBTCxDQUFnQitCLG1CQUFoQixDQUFvQyxPQUFwQyxFQUE2QyxLQUFLakIsV0FBbEQ7QUFDQSxXQUFLVixXQUFMLENBQWlCMkIsbUJBQWpCLENBQXFDLE9BQXJDLEVBQThDLEtBQUtYLGtCQUFuRDtBQUNBbUIsWUFBTSxDQUFDUixtQkFBUCxDQUEyQixRQUEzQixFQUFxQyxLQUFLbEIsbUJBQTFDOztBQUVBLFVBQUksS0FBS1csUUFBVCxFQUFtQjtBQUNqQixhQUFLQSxRQUFMLENBQWN1QixVQUFkO0FBQ0Q7QUFDRjs7OztFQTdLNENDLCtDIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9oZWFkZXIvVHJhZGl0aW9uYWxIZWFkZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSGVhZGVyIGZyb20gJy4vSGVhZGVyJztcbmltcG9ydCBsYXlvdXQgZnJvbSAnLi4vLi4vTGF5b3V0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHJhZGl0aW9uYWxIZWFkZXIgZXh0ZW5kcyBIZWFkZXIge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBzZXR0aW5ncykge1xuICAgIHN1cGVyKG9wdGlvbnMsIHNldHRpbmdzKTtcblxuICAgIHRoaXMuYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKTtcbiAgICB0aGlzLm1lbnVUb2dnbGUgPSB0aGlzLmhlYWRlci5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tZW51LXRvZ2dsZV0nKTtcbiAgICB0aGlzLm1lbnUgPSB0aGlzLnNlY3Rpb24ucXVlcnlTZWxlY3RvcignW2RhdGEtc2l0ZS1uYXZpZ2F0aW9uXScpO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQgPSB0aGlzLmhlYWRlci5xdWVyeVNlbGVjdG9yKCdbZGF0YS1saXZlLXNlYXJjaC1pbnB1dF0nKTtcblxuICAgIHRoaXMubGFzdFRvZ2dsZSA9IERhdGUubm93KCkgLSAxMDAwO1xuICAgIHRoaXMudHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5uYXZPcGVuQ2xhc3MgPSAnc2l0ZS1oZWFkZXItbmF2LS1vcGVuJztcbiAgICB0aGlzLnNjcm9sbGVkQ2xhc3MgPSAndHJhZGl0aW9uYWwtaGVhZGVyLS1zY3JvbGxlZCc7XG5cbiAgICAvLyBTZXR1cCBNZW51IHRvZ2dsZXNcbiAgICB0aGlzLl90b2dnbGVNZW51ID0gdGhpcy5fdG9nZ2xlTWVudS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX3RvZ2dsZVN0aWNreUhlYWRlciA9IHRoaXMuX3RvZ2dsZVN0aWNreUhlYWRlci5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy50b2dnbGVDbGljayA9IGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGxheW91dC5pc0JyZWFrcG9pbnQoJ0wnKSkgdGhpcy5fdG9nZ2xlTWVudSgpO1xuICAgIH07XG5cbiAgICB0aGlzLm1lbnVUb2dnbGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnRvZ2dsZUNsaWNrKTtcblxuICAgIC8vIFNldHVwIFNlYXJjaCBUb2dnbGUgZm9yIG1vYmlsZVxuXG4gICAgdGhpcy5zZWFyY2hJbnB1dEZvY3VzZWQgPSBlID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmICh0aGlzLmxpdmVTZWFyY2ggJiYgbGF5b3V0LmlzQnJlYWtwb2ludCgnWFMnLCAnUycpKSB7XG4gICAgICAgIHRoaXMubGl2ZVNlYXJjaC5vcGVuTW9iaWxlVGFrZW92ZXIoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuc2VhcmNoSW5wdXRGb2N1c2VkKTtcblxuICAgIC8vIFNldHVwIHN0aWNreSBoZWFkZXIgY29sbGFwc2VcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5zdGlja3lfaGVhZGVyKSB7XG4gICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5fdG9nZ2xlU3RpY2t5SGVhZGVyKGVudHJpZXMpKTtcbiAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaW50ZXJzZWN0aW9uLXRhcmdldCcpKTtcbiAgICB9XG4gI
1H1cblxuICBjbG9zZU5hdmlnYXRpb24oKSB7XG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWVudVRvZ2dsZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcblxuICAgIHRoaXMubmF2VHJhbnNpdGlvbk91dEV2ZW50ID0gKCkgPT4ge1xuICAgICAgdGhpcy5oZWFkZXIuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm5hdk9wZW5DbGFzcyk7XG4gICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWVudS5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAndHJhbnNpdGlvbmVuZCcsXG4gICAgICAgIHRoaXMubmF2VHJhbnNpdGlvbk91dEV2ZW50LFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgdGhpcy5tZW51LmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCB0aGlzLm5hdlRyYW5zaXRpb25PdXRFdmVudCk7XG5cbiAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIHRoaXMubWVudS5zZXRBdHRyaWJ1dGUoXG4gICAgICAnc3R5bGUnLFxuICAgICAgYG1hcmdpbi10b3A6IC0ke3RoaXMubWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHR9cHg7YCxcbiAgICApO1xuXG4gICAgdGhpcy5wb3N0TWVzc2FnZSgnbmF2OmNsb3NlLWFsbCcpO1xuICB9XG5cbiAgb3Blbk5hdmlnYXRpb24oKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy50cmFuc2l0aW9uaW5nXG4gICAgICB8fCB0aGlzLmhlYWRlci5jbGFzc0xpc3QuY29udGFpbnModGhpcy5uYXZPcGVuQ2xhc3MpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5tZW51VG9nZ2xlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuXG4gICAgdGhpcy5uYXZUcmFuc2l0aW9uSW5FdmVudCA9ICgpID0+IHtcbiAgICAgIHRoaXMudHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCB0aGlzLm5hdlRyYW5zaXRpb25JbkV2ZW50KTtcbiAgICB9O1xuXG4gICAgdGhpcy5tZW51LmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCB0aGlzLm5hdlRyYW5zaXRpb25JbkV2ZW50KTtcblxuICAgIHRoaXMudHJhbnNpdGlvbmluZyA9IHRydWU7XG5cbiAgICAvLyBXZSBuZWVkIHRvIH
1dhaXQgZm9yIHRoZSBicm93c2VyIHRvIHNldCB0aGUgZGlzcGxheSB0byAnYmxvY2snIGJlZm9yZSB3ZSBzZXQgdGhlIG1hcmdpblxuICAgIC8vIFRoaXMgd2lsbCBoZWxwIHdpdGggZW5zdXJpbmcgdGhlIGRpZmZlcmVudCBhbmltYXRpb25zL3RyYW5zaXRpb25zIGhhcHBlbiBpbiBzZXF1ZW5jZVxuICAgIC8vIGFuZCBub3QgYXQgdGhlIHNhbWUgdGltZS5cbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMuaGVhZGVyLmNsYXNzTGlzdC5hZGQodGhpcy5uYXZPcGVuQ2xhc3MpO1xuXG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy5tZW51LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnbWFyZ2luLXRvcDogMDsnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgX3RvZ2dsZU1lbnUoKSB7XG4gICAgaWYgKHRoaXMuaGVhZGVyLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLm5hdk9wZW5DbGFzcykpIHtcbiAgICAgIHRoaXMuY2xvc2VOYXZpZ2F0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Blbk5hdmlnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RpY2t5IGhlYWRlciBvbmx5IHNob3dzIGFzIHN0aWNreSBhZnRlciBzY3JvbGxcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90b2dnbGVTdGlja3lIZWFkZXIoZW50cmllcykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3Njcm9sbC1sb2NrJylcbiAgICAgIHx8ICFsYXlvdXQuaXNCcmVha3BvaW50KCdMJylcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRTaHJpbmsgPSAhZW50cmllc1swXS5pc0ludGVyc2VjdGluZztcblxuICAgIC8vIFN0aWNreSBoZWFkZXIgaXMgc2Nyb2xsZWQsIGlzIGFuZCBpcyB2aXNpYmxlIC0tIG5vdGhpbmcgbW9yZSB0byBkbyFcbiAgICBpZiAoc2hvdWxkU2hyaW5rICYmIHRoaXMuaGVhZGVyLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLnNjcm9sbGVkQ2xhc3MpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2UgYWxzbyBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHRvZ2dsZSBoYXNudCBhY3RpdmF0ZWQgcmVjZW50bHkgdG8gc3RvcCBqZXJreSB0cmFuc2l0aW9uc1xuICAgIGlmICh0aGlzLmxhc3RUb2dnbGUgKyA1MDAgPiBEYXRlLm5vdygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0VG9nZ2xlID0gRGF0ZS5ub3coKTtcblxuICAgIGlmIChzaG91bGRTaHJpbmspIHtcbiAgICAgIHRoaXMuX3NocmluaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9leHBhbmQoKTtcbiAgICB9XG4gIH1cblxuICBfc2hyaW5rKCkge1xuICAgIHRoaXMuY2xvc2VOYXZpZ2F0aW9uKCk7XG4gICAgdGhpcy5oZWFkZXIuY2xhc3NMaXN0LmFkZCh0aGlzLnNjcm9sbGVkQ2xhc3MpO1xuICB9XG5cbiAgX2V4cGFuZCgpIHtcbiAgICB0aGlzLm9wZW5OYXZpZ2F0aW9uKCk7XG4gICAgdGhpcy5oZWFkZXIuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLnNjcm9sbGVkQ2xhc3MpO1xuICAgIHRoaXMubWVudVRvZ2dsZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgfVxuXG4gIG9uU2VjdGlvbkJsb2NrU2VsZWN0KCkge1xuICAgIHRoaXMuaGVhZGVyLmNsYXNzTGlzdC5hZGQodGhpcy5uYXZPcGVuQ2xhc3MpO1xuICAgIHRoaXMubWVudVRvZ2dsZS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICB0aGlzLm1lbnUuc2V0QXR0cmlidXRlKCdzdHlsZScsICdtYXJnaW4tdG9wOiAwOycpO1xuICAgIHRoaXMub3Blbk5hdmlnYXRpb24oKTtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICBzdXBlci51bmxvYWQoKTtcbiAgICB0aGlzLmJvZHkuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLnNjcm9sbGVkQ2xhc3MpO1xuXG4gICAgdGhpcy5tZW51VG9nZ2xlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy50b2dnbGVDbGljayk7XG4gICAgdGhpcy5zZWFyY2hJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuc2VhcmNoSW5wdXRGb2N1c2VkKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5fdG9nZ2xlU3RpY2t5SGVhZGVyKTtcblxuICAgIGlmICh0aGlzLm9ic2VydmVyKSB7XG4gICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/components/header/TraditionalHeader.js\n")},
1"./source/scripts/components/navigation/MegaNavScroller.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return MegaNavScroller; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _helpers_scrollLeft__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../helpers/scrollLeft */ "./source/scripts/helpers/scrollLeft.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar MegaNavScroller =\n/*#__PURE__*/\nfunction () {\n function MegaNavScroller($el) {\n var block = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n _classCallCheck(this, MegaNavScroller);\n\n this.$el = $el;\n this.$menuList = this.$el.find(\'.navmenu-meganav-items\');\n\n this._bindEvents();\n\n this._addScrollClasses();\n\n if (block) {\n Object(_helpers_scrollLeft__WEBPACK_IMPORTED_MODULE_1__["default"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(block.el));\n }\n }\n\n _createClass(MegaNavScroller, [{\n key: "unload",\n value: function unload() {\n this.$menuList.off(\'.meganav\');\n }\n }, {\n key: "_bindEvents",\n value: function _bindEvents() {\n var _this = this;\n\n this.$menuList.on(\'scroll.meganav\', function () {\n return _this._addScrollClasses();\n });\n }\n }, {\n key: "_addScrollClasses",\n value: function _addScrollClasses() {\n var scrollLeftPosition = this.$menuList.scrollLeft();\n var scrollWidth = this.$menuList[0].scrollWidth;\n var width = this.$menuList.width();\n this.$el.toggleClass(\'meganav--overflows-left\', scrollLeftPosition > 0);\n this.$el.toggleClass(\'meganav--overflows-right\', scrollLeftPosition < scrollWidth - width);\n }\n }]);\n\n return MegaNavScroller;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL25hdmlnYXRpb24vTWVnYU5hdlNjcm9sbGVyLmpzP2Q0YjAiXSwibmFtZXMiOlsiTWVnYU5hdlNjcm9sbGVyIiwiJGVsIiwiYmxvY2siLCIkbWVudUxpc3QiLCJmaW5kIiwiX2JpbmRFdmVudHMiLCJfYWRkU2Nyb2xsQ2xhc3NlcyIsInNjcm9sbExlZnQiLCIkIiwiZWwiLCJvZmYiLCJvbiIsInNjcm9sbExlZnRQb3NpdGlvbiIsInNjcm9sbFdpZHR
1oIiwid2lkdGgiLCJ0b2dnbGVDbGFzcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztJQUVxQkEsZTs7O0FBQ25CLDJCQUFZQyxHQUFaLEVBQStCO0FBQUEsUUFBZEMsS0FBYyx1RUFBTixJQUFNOztBQUFBOztBQUM3QixTQUFLRCxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLRSxTQUFMLEdBQWlCLEtBQUtGLEdBQUwsQ0FBU0csSUFBVCxDQUFjLHdCQUFkLENBQWpCOztBQUVBLFNBQUtDLFdBQUw7O0FBQ0EsU0FBS0MsaUJBQUw7O0FBRUEsUUFBSUosS0FBSixFQUFXO0FBQ1RLLHlFQUFVLENBQUNDLDZDQUFDLENBQUNOLEtBQUssQ0FBQ08sRUFBUCxDQUFGLENBQVY7QUFDRDtBQUNGOzs7OzZCQUVRO0FBQ1AsV0FBS04sU0FBTCxDQUFlTyxHQUFmLENBQW1CLFVBQW5CO0FBQ0Q7OztrQ0FFYTtBQUFBOztBQUNaLFdBQUtQLFNBQUwsQ0FBZVEsRUFBZixDQUFrQixnQkFBbEIsRUFBb0M7QUFBQSxlQUFNLEtBQUksQ0FBQ0wsaUJBQUwsRUFBTjtBQUFBLE9BQXBDO0FBQ0Q7Ozt3Q0FFbUI7QUFDbEIsVUFBTU0sa0JBQWtCLEdBQUcsS0FBS1QsU0FBTCxDQUFlSSxVQUFmLEVBQTNCO0FBRGtCLFVBRVZNLFdBRlUsR0FFTSxLQUFLVixTQUFMLENBQWUsQ0FBZixDQUZOLENBRVZVLFdBRlU7QUFHbEIsVUFBTUMsS0FBSyxHQUFHLEtBQUtYLFNBQUwsQ0FBZVcsS0FBZixFQUFkO0FBRUEsV0FBS2IsR0FBTCxDQUFTYyxXQUFULENBQXFCLHlCQUFyQixFQUFnREgsa0JBQWtCLEdBQUcsQ0FBckU7QUFDQSxXQUFLWCxHQUFMLENBQVNjLFdBQVQsQ0FDRSwwQkFERixFQUVFSCxrQkFBa0IsR0FBR0MsV0FBVyxHQUFHQyxLQUZyQztBQUlEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9uYXZpZ2F0aW9uL01lZ2FOYXZTY3JvbGxlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgc2Nyb2xsTGVmdCBmcm9tICcuLi8uLi9oZWxwZXJzL3Njcm9sbExlZnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWdhTmF2U2Nyb2xsZXIge1xuICBjb25zdHJ1Y3RvcigkZWwsIGJsb2NrID0gbnVsbCkge1xuICAgIHRoaXMuJGVsID0gJGVsO1xuICAgIHRoaXMuJG1lbnVMaXN0ID0gdGhpcy4kZWwuZmluZCgnLm5hdm1lbnUtbWVnYW5hdi1pdGVtcycpO1xuXG4gICAgdGhpcy5fYmluZEV2ZW50cygpO1xuICAgIHRoaXMuX2FkZFNjcm9sbENsYXNzZXMoKTtcblxuICAgIGlmIChibG9jaykge1xuICAgICAgc2Nyb2xsTGVmdCgkKGJsb2NrLmVsKSk7XG4gICAgfVxuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIHRoaXMuJG1lbnVMaXN0Lm9mZignLm1lZ2FuYXYnKTtcbiAgfVxuXG4gIF9iaW5kRXZlbnRzKCkge1xuICAgIHRoaXMuJG1lbnVMaXN0Lm9uKCdzY3JvbGwubWVnYW5hdicsICgpID0+IHRoaXMuX2FkZFNjcm9sbENsYXNzZXMoKSk7XG4gIH1cblxuICBfYWRkU2Nyb2xsQ2xhc3NlcygpIHtcbiAgICBjb25zdCBzY3JvbGxMZWZ0UG9zaXRpb24gPSB0aGlzLiRtZW51TGlzdC5zY3JvbGxMZWZ0KCk7XG4gICAgY29uc3QgeyBzY3JvbGxXaWR0aCB9ID0gdGhpcy4kbWVudUxpc3RbMF07XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLiRtZW51TGlzdC53aWR0aCgpO1xuXG4gICAgdGhpcy4kZWwudG9nZ2xlQ2xhc3MoJ21lZ2FuYXYtLW92ZXJmbG93cy1sZWZ0Jywgc2Nyb2xsTGVmdFBvc2l0aW9uID4gMCk7XG4gICAgdGhpcy4kZWwudG9nZ2xlQ2xhc3MoXG4gICAgICAnbWVnYW5hdi0tb3ZlcmZsb3dzLXJpZ2h0JyxcbiAgICAgIHNjcm9sbExlZnRQb3NpdGlvbiA8IHNjcm9sbFdpZHR
1oIC0gd2lkdGgsXG4gICAgKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/components/navigation/MegaNavScroller.js\n')},
1"./source/scripts/components/navigation/NavDesktopMenu.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return NavDesktopMenu; });\n/* harmony import */ var _NavDesktopParent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NavDesktopParent */ "./source/scripts/components/navigation/NavDesktopParent.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/* eslint-disable-next-line import/no-cycle */\n\n\nvar NavDesktopMenu =\n/*#__PURE__*/\nfunction () {\n function NavDesktopMenu(_ref) {\n var _this = this;\n\n var children = _ref.children;\n\n _classCallCheck(this, NavDesktopMenu);\n\n this.parents = [];\n this.children = children;\n\n this.closeSiblings = function (current) {\n _this.parents.forEach(function (parent) {\n if (parent !== current) {\n parent.close();\n }\n });\n };\n\n for (var i = 0; i < this.children.length; i++) {\n if (this.children[i].dataset.navmenuParent !== undefined) {\n this.parents.push(new _NavDesktopParent__WEBPACK_IMPORTED_MODULE_0__["default"](this.children[i], {\n closeSiblings: this.closeSiblings\n }));\n } else if (children[i].classList.contains(\'navmenu-item\')) {\n this.children[i].addEventListener(\'focusin\', this.closeSiblings);\n }\n }\n }\n\n _createClass(NavDesktopMenu, [{\n key: "openMeganavBlock",\n value: function openMeganavBlock(meganav) {\n this.parents.forEach(function (parent) {\n parent.openMeganavBlock(meganav);\n });\n }\n }, {\n key: "unload",\n value: function unload() {\n this.parents.forEach(function (parent) {\n parent.unload();\n });\n\n for (var i = 0; i < this.children.length; i++) {\n this.children[i].removeEventListener(\'focusin\', this.closeSiblings);\n }\n }\n }]);\n\n return NavDesktopMenu;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL25hdmlnYXRpb24vTmF2RGVza3RvcE1lbnUuanM/ZTY1OCJdLCJuYW1lcyI6WyJOYXZEZXNrdG9wTWVudSIsImNoaWxkcmVuIiwicGFyZW50cyIsImNsb3NlU2libGluZ3MiLCJjdXJyZW50Iiwi
1Zm9yRWFjaCIsInBhcmVudCIsImNsb3NlIiwiaSIsImxlbmd0aCIsImRhdGFzZXQiLCJuYXZtZW51UGFyZW50IiwidW5kZWZpbmVkIiwicHVzaCIsIk5hdkRlc2t0b3BQYXJlbnQiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImFkZEV2ZW50TGlzdGVuZXIiLCJtZWdhbmF2Iiwib3Blbk1lZ2FuYXZCbG9jayIsInVubG9hZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7O0lBRXFCQSxjOzs7QUFDbkIsZ0NBQTBCO0FBQUE7O0FBQUEsUUFBWkMsUUFBWSxRQUFaQSxRQUFZOztBQUFBOztBQUN4QixTQUFLQyxPQUFMLEdBQWUsRUFBZjtBQUNBLFNBQUtELFFBQUwsR0FBZ0JBLFFBQWhCOztBQUVBLFNBQUtFLGFBQUwsR0FBcUIsVUFBQUMsT0FBTyxFQUFJO0FBQzlCLFdBQUksQ0FBQ0YsT0FBTCxDQUFhRyxPQUFiLENBQXFCLFVBQUFDLE1BQU0sRUFBSTtBQUM3QixZQUFJQSxNQUFNLEtBQUtGLE9BQWYsRUFBd0I7QUFDdEJFLGdCQUFNLENBQUNDLEtBQVA7QUFDRDtBQUNGLE9BSkQ7QUFLRCxLQU5EOztBQVFBLFNBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRyxLQUFLUCxRQUFMLENBQWNRLE1BQWxDLEVBQTBDRCxDQUFDLEVBQTNDLEVBQStDO0FBQzdDLFVBQUksS0FBS1AsUUFBTCxDQUFjTyxDQUFkLEVBQWlCRSxPQUFqQixDQUF5QkMsYUFBekIsS0FBMkNDLFNBQS9DLEVBQTBEO0FBQ3hELGFBQUtWLE9BQUwsQ0FBYVcsSUFBYixDQUNFLElBQUlDLHlEQUFKLENBQXFCLEtBQUtiLFFBQUwsQ0FBY08sQ0FBZCxDQUFyQixFQUF1QztBQUNyQ0wsdUJBQWEsRU
1FBRSxLQUFLQTtBQURpQixTQUF2QyxDQURGO0FBS0QsT0FORCxNQU1PLElBQUlGLFFBQVEsQ0FBQ08sQ0FBRCxDQUFSLENBQVlPLFNBQVosQ0FBc0JDLFFBQXRCLENBQStCLGNBQS9CLENBQUosRUFBb0Q7QUFDekQsYUFBS2YsUUFBTCxDQUFjTyxDQUFkLEVBQWlCUyxnQkFBakIsQ0FBa0MsU0FBbEMsRUFBNkMsS0FBS2QsYUFBbEQ7QUFDRDtBQUNGO0FBQ0Y7Ozs7cUNBRWdCZSxPLEVBQVM7QUFDeEIsV0FBS2hCLE9BQUwsQ0FBYUcsT0FBYixDQUFxQixVQUFBQyxNQUFNLEVBQUk7QUFDN0JBLGNBQU0sQ0FBQ2EsZ0JBQVAsQ0FBd0JELE9BQXhCO0FBQ0QsT0FGRDtBQUdEOzs7NkJBRVE7QUFDUCxXQUFLaEIsT0FBTCxDQUFhRyxPQUFiLENBQXFCLFVBQUFDLE1BQU0sRUFBSTtBQUM3QkEsY0FBTSxDQUFDYyxNQUFQO0FBQ0QsT0FGRDs7QUFHQSxXQUFLLElBQUlaLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcsS0FBS1AsUUFBTCxDQUFjUSxNQUFsQyxFQUEwQ0QsQ0FBQyxFQUEzQyxFQUErQztBQUM3QyxhQUFLUCxRQUFMLENBQWNPLENBQWQsRUFBaUJhLG1CQUFqQixDQUFxQyxTQUFyQyxFQUFnRCxLQUFLbEIsYUFBckQ7QUFDRDtBQUNGIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9uYXZpZ2F0aW9uL05hdkRlc2t0b3BNZW51LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZSAqL1xuaW1wb3J0IE5hdkRlc2t0b3BQYXJlbnQgZnJvbSAnLi9OYXZEZXNrdG9wUGFyZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF2RGVza3RvcE1lbnUge1xuICBjb25zdHJ1Y3Rvcih7IGNoaWxkcmVuIH0pIHtcbiAgICB0aGlzLnBhcmVudHMgPSBbXTtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICB0aGlzLmNsb3NlU2libGluZ3MgPSBjdXJyZW50ID0+IHtcbiAgICAgIHRoaXMucGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICAgIGlmIChwYXJlbnQgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICBwYXJlbnQuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY2hpbGRyZW5baV0uZGF0YXNldC5uYXZtZW51UGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRzLnB1c2goXG4gICAgICAgICAgbmV3IE5hdkRlc2t0b3BQYXJlbnQodGhpcy5jaGlsZHJlbltpXSwge1xuICAgICAgICAgICAgY2xvc2VTaWJsaW5nczogdGhpcy5jbG9zZVNpYmxpbmdzLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZHJlbltpXS5jbGFzc0xpc3QuY29udGFpbnMoJ25hdm1lbnUtaXRlbScpKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0uYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMuY2xvc2VTaWJsaW5ncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3Blbk1lZ2FuYXZCbG9jayhtZWdhbmF2KSB7XG4gICAgdGhpcy5wYXJlbnRzLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICAgIHBhcmVudC5vcGVuTWVnYW5hdkJsb2NrKG1lZ2FuYXYpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIHRoaXMucGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICBwYXJlbnQudW5sb2FkKCk7XG4gICAgfSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuW2ldLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLmNsb3NlU2libGluZ3MpO1xuICAgIH1cbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/components/navigation/NavDesktopMenu.js\n')},
1"./source/scripts/components/navigation/NavDesktopParent.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return NavDesktopParent; });\n/* harmony import */ var _NavDesktopMenu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NavDesktopMenu */ \"./source/scripts/components/navigation/NavDesktopMenu.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/* eslint-disable-next-line import/no-cycle */\n\n\nvar NavDesktopParent =\n/*#__PURE__*/\nfunction () {\n function NavDesktopParent(el, options) {\n var _this = this;\n\n _classCallCheck(this, NavDesktopParent);\n\n this.listitem = el;\n this.link = null;\n this.submenu = null;\n this.isOpen = false;\n this.menu = null;\n this.closeSiblings = options.closeSiblings;\n var children = this.listitem.children;\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].classList.contains('navmenu-link')) {\n this.link = children[i];\n } else if (children[i].classList.contains('navmenu-submenu')) {\n this.submenu = children[i];\n }\n }\n\n this.open = function () {\n _this._open();\n };\n\n this.close = function () {\n _this._close();\n };\n\n this.closeEsc = function (e) {\n if (e.key === 'Escape') {\n _this.link.focus();\n\n _this.close();\n }\n };\n\n this.timer = null;\n\n this.mouseover = function () {\n _this.open();\n\n clearTimeout(_this.timer);\n };\n\n this.mouseout = function () {\n _this.timer = setTimeout(_this.close, 400);\n };\n\n this.click = function (e) {\n e.stopPropagation(); // if already open, continue to link destination\n\n if (!e.target.classList.contains('navmenu-link-parent') || _this.isOpen) {\n return;\n }\n\n e.preventDefault();\n\n _this.open();\n };\n\n this.focusin = function (e) {\n e.stopPropagation();\n\n if (e.target.classList.contains('navmenu-link-parent')) {\n _this.closeSiblings(_this);\n }\n };\n\n this.listitem.addEventListener('mouseover', this.mouseover);\n this.listitem.addEventListener('mouseout', this.mouseout);\n this.listitem.addEventListener('touchend', this.click);\n this.listitem.addEventListener('click', this.click);\n this.listitem.addEventListener('focusin', this.focusin);\n document.body.addEventListener('click', this.close);\n document.body.addEventListener('focusin', this.close);\n }\n\n _createClass(NavDesktopParent, [{\n key: \"_setMeganavOffset\",\n value: function _setMeganavOffset() {\n var offset = this.listitem.getBoundingClientRect().x;\n this.submenu.style.left = \"-\".concat(offset, \"px\");\n }\n }, {\n key: \"_open\",\n value: function _open() {\n var _this2 = this;\n\n this.closeSiblings(this);\n window.addEventListener('keydown', this.closeEsc);\n\n if (!this.listitem.classList.contains('open')) {\n this.listitem.classList.add('open');\n this.link.setAttribute('aria-expanded', true);\n\n this.submenuEndInAnimation = function () {\n _this2.submenu.classList.remove('animating-in');\n\n _this2.submenu.removeEventListener('animationend', _this2.submenuEndInAnimation);\n };\n\n this.submenu.addEventListener('animationend', this.submenuEndInAnimation);\n this.submenu.classList.add('animating-in');\n }\n\n if (!this.menu) {\n this.menu = new _NavDesktopMenu__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.submenu);\n } // Determine if submenu needs to use alternate side for dropdown\n // Only applicable for regular drop down menus, not meganav\n\n\n if (!this.submenu.classList.contains('navmenu-meganav')) {\n var bounds = this.submenu.getBoundingClientRect();\n\n if (bounds.right > document.documentElement.clientWidth) {\n this.listitem.classList.add('alternate-drop');\n }\n } else {\n // We need to offset the meganav to be flush with the left side of the screen\n this._setMeganavOffset();\n }\n\n this.isOpen = true;\n }\n }, {\n key: \"_close\",\n value: function _close() {\n var _this3 = this;\n\n if (this.listitem.classList.contains('open') && !this.submenu.classList.contains('animating-out')) {\n this.submenuEndOutAnimation = function () {\n _this3.listitem.classList.remove('open');\n\n _this3.listitem.classList.remove('alternate-drop');\n\n _this3.link.setAttribute('aria-expanded', false);\n\n _this3.submenu.classList.remove('animating-out');\n\n _this3.submenu.removeEventListener('animationend', _this3.submenuEndOutAnimation);\n };\n\n this.submenu.addEventListener('animationend', this.submenuEndOutAnimation);\n this.submenu.classList.add('animating-out');\n }\n\n if (this.menu) {\n this.menu.unload();\n this.menu = null;\n }\n\n window.removeEventListener('keydown', this.closeEsc);\n this.isOpen = false;\n }\n }, {\n key: \"openMeganavBlock\",\n value: function openMeganavBlock(meganav) {\n if (this.submenu === meganav) {\n this.submenu.classList.add('meganav-editing-block');\n\n this._setMeganavOffset();\n }\n }\n }, {\n key: \"unload\",\n value: function unload() {\n this.close();\n this.listitem.removeEventListener('mouseover', this.mouseover);\n this.listitem.removeEventListener('mouseout', this.mouseout);\n this.listitem.removeEventListener('touchend', this.click);\n this.listitem.removeEventListener('click', this.click);\n this.listitem.removeEventListener('focusin', this.focusin);\n window.removeEventListener('keydown', this.closeEsc);\n document.body.removeEventListener('click', this.bodyClose);\n document.body.removeEventListener('focusin', this.focusInClose);\n }\n }]);\n\n return NavDesktopParent;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL25hdmlnYXRpb24vTmF2RGVza3RvcFBhcmVudC5qcz9iZjg3Il0sIm5hbWVzIjpbIk5hdkRlc2t0b3BQYXJlbnQiLCJlbCIsIm9wdGlvbnMiLCJsaXN0aXRlbSIsImxpbmsiLCJzdWJtZW51IiwiaXNPcGVuIiwibWVudSIsImNsb3NlU2libGluZ3MiLCJjaGlsZHJlbiIsImkiLCJsZW5ndGgiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsIm9wZW4iLCJfb3BlbiIsImNsb3NlIiwiX2Nsb3NlIiwiY2xvc2VFc2MiLCJlIiwia2V5IiwiZm9jdXMiLCJ0aW1lciIsIm1vdXNlb3ZlciIsImNsZWFyVGltZW91dCIsIm1vdXNlb3V0Iiwic2V0VGltZW91dCIsImNsaWNrIiwic3RvcFByb3BhZ2F0aW9uIiwidGFyZ2V0IiwicHJldmVudERlZmF1bHQiLCJmb2N1c2luIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRvY3VtZW50IiwiYm9keSIsIm9mZnNldCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIngiLCJzdHlsZSIsImxlZnQiLCJ3aW5kb3ciLCJhZGQiLCJzZXRBdHRyaWJ1dGUiLCJzdWJtZW51RW5kSW5BbmltYXRpb24iLCJyZW1vdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiTmF2RGVza3RvcE1lbnUiLCJib3VuZHMiLCJyaWdodCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiX3NldE1lZ2FuYXZPZmZzZXQiLCJzdWJtZW51RW5kT3V0QW5pbWF0aW9uIiwidW5sb2FkIiwibWVnYW5hdiIsImJvZHlDbG9zZSIsImZvY3VzSW5DbG9zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTs7SUFFcUJBLGdCOzs7QUFDbkIsNEJBQVlDLEVBQVosRUFBZ0JDLE9BQWhCLEVBQXlCO0FBQUE7O0FBQUE7O0FBQ3ZCLFNBQUtDLFFBQUwsR0FBZ0JGLEVBQWhCO0FBQ0EsU0FBS0cs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TQUFkLENBQXdCNkIsR0FBeEIsQ0FBNEIsZ0JBQTVCO0FBQ0Q7QUFDRixPQUxELE1BS087QUFDTDtBQUNBLGFBQUtVLGlCQUFMO0FBQ0Q7O0FBRUQsV0FBSzdDLE1BQUwsR0FBYyxJQUFkO0FBQ0Q7Ozs2QkFFUTtBQUFBOztBQUNQLFVBQ0UsS0FBS0gsUUFBTCxDQUFjUyxTQUFkLENBQXdCQyxRQUF4QixDQUFpQyxNQUFqQyxLQUNHLENBQUMsS0FBS1IsT0FBTCxDQUFhTyxTQUFiLENBQXVCQyxRQUF2QixDQUFnQyxlQUFoQyxDQUZOLEVBR0U7QUFDQSxhQUFLdUMsc0JBQUwsR0FBOEIsWUFBTTtBQUNsQyxnQkFBSSxDQUFDakQsUUFBTCxDQUFjUyxTQUFkLENBQXdCZ0MsTUFBeEIsQ0FBK0IsTUFBL0I7O0FBQ0EsZ0JBQUksQ0FBQ3pDLFFBQUwsQ0FBY1MsU0FBZCxDQUF3QmdDLE1BQXhCLENBQStCLGdCQUEvQjs7QUFDQSxnQkFBSSxDQUFDeEMsSUFBTCxDQUFVc0MsWUFBVixDQUF1QixlQUF2QixFQUF3QyxLQUF4Qzs7QUFDQSxnQkFBSSxDQUFDckMsT0FBTCxDQUFhTyxTQUFiLENBQXVCZ0MsTUFBdkIsQ0FBOEIsZUFBOUI7O0FBQ0EsZ0JBQUksQ0FBQ3ZDLE9BQUwsQ0FBYXdDLG1CQUFiLENBQ0UsY0FERixFQUVFLE1BQUksQ0FBQ08sc0JBRlA7QUFJRCxTQVREOztBQVdBLGFBQUsvQyxPQUFMLENBQWEyQixnQkFBYixDQUNFLGNBREYsRUFFRSxLQUFLb0Isc0JBRlA7QUFJQSxhQUFLL0MsT0FBTCxDQUFhTyxTQUFiLENBQXVCNkIsR0FBdkIsQ0FBMkIsZUFBM0I7QUFDRDs7QUFFRCxVQUFJLEtBQUtsQyxJQUFULEVBQWU7QUFDYixhQUFLQSxJQUFMLENBQVU4QyxNQUFWO0FBQ0EsYUFBSzlDLElBQUwsR0FBWSxJQUFaO0FBQ0Q7O0FBRURpQyxZQUFNLENBQUNLLG1CQUFQLENBQTJCLFNBQTNCLEVBQXNDLEtB
1QUszQixRQUEzQztBQUVBLFdBQUtaLE1BQUwsR0FBYyxLQUFkO0FBQ0Q7OztxQ0FFZ0JnRCxPLEVBQVM7QUFDeEIsVUFBSSxLQUFLakQsT0FBTCxLQUFpQmlELE9BQXJCLEVBQThCO0FBQzVCLGFBQUtqRCxPQUFMLENBQWFPLFNBQWIsQ0FBdUI2QixHQUF2QixDQUEyQix1QkFBM0I7O0FBQ0EsYUFBS1UsaUJBQUw7QUFDRDtBQUNGOzs7NkJBRVE7QUFDUCxXQUFLbkMsS0FBTDtBQUNBLFdBQUtiLFFBQUwsQ0FBYzBDLG1CQUFkLENBQWtDLFdBQWxDLEVBQStDLEtBQUt0QixTQUFwRDtBQUNBLFdBQUtwQixRQUFMLENBQWMwQyxtQkFBZCxDQUFrQyxVQUFsQyxFQUE4QyxLQUFLcEIsUUFBbkQ7QUFDQSxXQUFLdEIsUUFBTCxDQUFjMEMsbUJBQWQsQ0FBa0MsVUFBbEMsRUFBOEMsS0FBS2xCLEtBQW5EO0FBQ0EsV0FBS3hCLFFBQUwsQ0FBYzBDLG1CQUFkLENBQWtDLE9BQWxDLEVBQTJDLEtBQUtsQixLQUFoRDtBQUNBLFdBQUt4QixRQUFMLENBQWMwQyxtQkFBZCxDQUFrQyxTQUFsQyxFQUE2QyxLQUFLZCxPQUFsRDtBQUVBUyxZQUFNLENBQUNLLG1CQUFQLENBQTJCLFNBQTNCLEVBQXNDLEtBQUszQixRQUEzQztBQUNBZSxjQUFRLENBQUNDLElBQVQsQ0FBY1csbUJBQWQsQ0FBa0MsT0FBbEMsRUFBMkMsS0FBS1UsU0FBaEQ7QUFDQXRCLGNBQVEsQ0FBQ0MsSUFBVCxDQUFjVyxtQkFBZCxDQUFrQyxTQUFsQyxFQUE2QyxLQUFLVyxZQUFsRDtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9uYXZpZ2F0aW9uL05hdkRlc2t0b3BQYXJlbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWN5Y2xlICovXG5pbXBvcnQgTmF2RGVza3RvcE1lbnUgZnJvbSAnLi9OYXZEZXNrdG9wTWVudSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdkRlc2t0b3BQYXJlbnQge1xuICBjb25zdHJ1Y3RvcihlbCwgb3B0aW9ucykge1xuICAgIHRoaXMubGlzdGl0ZW0gPSBlbDtcbiAgICB0aGlzLmxpbmsgPSBudWxsO1xuICAgIHRoaXMuc3VibWVudSA9IG51bGw7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm1lbnUgPSBudWxsO1xuICAgIHRoaXMuY2xvc2VTaWJsaW5ncyA9IG9wdGlvbnMuY2xvc2VTaWJsaW5ncztcblxuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHRoaXMubGlzdGl0ZW07XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY2hpbGRyZW5baV0uY2xhc3NMaXN0LmNvbnRhaW5zKCduYXZtZW51LWxpbmsnKSkge1xuICAgICAgICB0aGlzLmxpbmsgPSBjaGlsZHJlbltpXTtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRyZW5baV0uY2xhc3NMaXN0LmNvbnRhaW5zKCduYXZtZW51LXN1Ym1lbnUnKSkge1xuICAgICAgICB0aGlzLnN1Ym1lbnUgPSBjaGlsZHJlbltpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9wZW4gPSAoKSA9PiB7XG4gICAgICB0aGlzLl9vcGVuKCk7XG4gICAgfTtcbiAgICB0aGlzLmNsb3NlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fY2xvc2UoKTtcbiAgICB9O1xuICAgIHRoaXMuY2xvc2VFc2MgPSBlID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgdGhpcy5saW5rLmZvY3VzKCk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgdGhpcy5tb3VzZW92ZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICB9O1xuICAgIHRoaXMubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCh0aGlzLmNsb3NlLCA0MDApO1xuICAgIH07XG5cbiAgICB0aGlzLmNsaWNrID0gZSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgLy8gaWYgYWxyZWFkeSBvcGVuLCBjb250aW51ZSB0byBsaW5rIGRlc3RpbmF0aW9uXG4gICAgICBpZiAoIWUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbmF2bWVudS1saW5rLXBhcmVudCcpIHx8IHRoaXMuaXNPcGVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH07XG4gICAgdGhpcy5mb2N1c2luID0gZSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbmF2bWVudS1saW5rLXBhcmVudCcpKSB7XG4gICAgICAgIHRoaXMuY2xvc2VTaWJsaW5ncyh0aGlzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5saXN0aXRlbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLm1vdXNlb3Zlcik7XG4gICAgdGhpcy5saXN0aXRlbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIHRoaXMubW91c2VvdXQpO1xuICAgIHRoaXMubGlzdGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLmNsaWNrKTtcbiAgICB0aGlzLmxpc3RpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGljayk7XG4gICAgdGhpcy5saXN0aXRlbS5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5mb2N1c2luKTtcblxuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsb3NlKTtcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLmNsb3NlKTtcbiAgfVxuXG4gIF9zZXRNZWdhbmF2T2Zmc2V0KCkge1xuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMubGlzdGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueDtcbiAgICB0aGlzLnN1Ym1lbnUuc3R5bGUubGVmdCA9IGAtJHtvZmZzZXR9cHhgO1xuICB9XG5cbiAgX29wZW4oKSB7XG4gICAgdGhpcy5jbG9zZVNpYmxpbmdzKHRoaXMpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5jbG9zZUVzYyk7XG5cbiAgICBpZiAoIXRoaXMubGlzdGl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJykpIHtcbiAgICAgIHRoaXMubGlzdGl0ZW0uY2xhc3NMaXN0LmFkZCgnb3BlbicpO1xuICAgICAgdGhpcy5saW5rLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIHRydWUpO1xuXG4gICAgICB0aGlzLnN1Ym1lbnVFbmRJbkFuaW1hdGlvbiA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5zdWJtZW51LmNsYXNzTGlzdC5yZW1vdmUoJ2FuaW1hdGluZy1pbicpO1xuICAgICAgICB0aGlzLnN1Ym1lbnUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAnYW5pbWF0aW9uZW5kJyxcbiAgICAgICAgICB0aGlzLnN1Ym1lbnVFbmRJbkFuaW1hdGlvbixcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc3VibWVudS5hZGR
1FdmVudExpc3RlbmVyKCdhbmltYXRpb25lbmQnLCB0aGlzLnN1Ym1lbnVFbmRJbkFuaW1hdGlvbik7XG4gICAgICB0aGlzLnN1Ym1lbnUuY2xhc3NMaXN0LmFkZCgnYW5pbWF0aW5nLWluJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm1lbnUpIHtcbiAgICAgIHRoaXMubWVudSA9IG5ldyBOYXZEZXNrdG9wTWVudSh0aGlzLnN1Ym1lbnUpO1xuICAgIH1cblxuICAgIC8vIERldGVybWluZSBpZiBzdWJtZW51IG5lZWRzIHRvIHVzZSBhbHRlcm5hdGUgc2lkZSBmb3IgZHJvcGRvd25cbiAgICAvLyBPbmx5IGFwcGxpY2FibGUgZm9yIHJlZ3VsYXIgZHJvcCBkb3duIG1lbnVzLCBub3QgbWVnYW5hdlxuICAgIGlmICghdGhpcy5zdWJtZW51LmNsYXNzTGlzdC5jb250YWlucygnbmF2bWVudS1tZWdhbmF2JykpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuc3VibWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmIChib3VuZHMucmlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpIHtcbiAgICAgICAgdGhpcy5saXN0aXRlbS5jbGFzc0xpc3QuYWRkKCdhbHRlcm5hdGUtZHJvcCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIG9mZnNldCB0aGUgbWVnYW5hdiB0byBiZSBmbHVzaCB3aXRoIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHNjcmVlblxuICAgICAgdGhpcy5fc2V0TWVnYW5hdk9mZnNldCgpO1xuICAgIH1cblxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIF9jbG9zZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmxpc3RpdGVtLmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpXG4gICAgICAmJiAhdGhpcy5zdWJtZW51LmNsYXNzTGlzdC5jb250YWlucygnYW5pbWF0aW5nLW91dCcpXG4gICAgKSB7XG4gICAgICB0aGlzLnN1Ym1lbnVFbmRPdXRBbmltYXRpb24gPSAoKSA9PiB7XG4gICAgICAgIHRoaXMubGlzdGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpO1xuICAgICAgICB0aGlzLmxpc3RpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FsdGVybmF0ZS1kcm9wJyk7XG4gICAgICAgIHRoaXMubGluay5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuc3VibWVudS5jbGFzc0xpc3QucmVtb3ZlKCdhbmltYXRpbmctb3V0Jyk7XG4gICAgICAgIHRoaXMuc3VibWVudS5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAgICdhbmltYXRpb25lbmQnLFxuICAgICAgICAgIHRoaXMuc3VibWVudUVuZE91dEFuaW1hdGlvbixcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc3VibWVudS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnYW5pbWF0aW9uZW5kJyxcbiAgICAgICAgdGhpcy5zdWJtZW51RW5kT3V0QW5pbWF0aW9uLFxuICAgICAgKTtcbiAgICAgIHRoaXMuc3VibWVudS5jbGFzc0xpc3QuYWRkKCdhbmltYXRpbmctb3V0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWVudSkge1xuICAgICAgdGhpcy5tZW51LnVubG9hZCgpO1xuICAgICAgdGhpcy5tZW51ID0gbnVsbDtcbiAgICB9XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuY2xvc2VFc2MpO1xuXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIG9wZW5NZWdhbmF2QmxvY2sobWVnYW5hdikge1xuICAgIGlmICh0aGlzLnN1Ym1lbnUgPT09IG1lZ2FuYXYpIHtcbiAgICAgIHRoaXMuc3VibWVudS5jbGFzc0xpc3QuYWRkKCdtZWdhbmF2LWVkaXRpbmctYmxvY2snKTtcbiAgICAgIHRoaXMuX3NldE1lZ2FuYXZPZmZzZXQoKTtcbiAgICB9XG4gIH1cblxuICB1bmxvYWQoKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIHRoaXMubGlzdGl0ZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgdGhpcy5tb3VzZW92ZXIpO1xuICAgIHRoaXMubGlzdGl0ZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCB0aGlzLm1vdXNlb3V0KTtcbiAgICB0aGlzLmxpc3RpdGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5jbGljayk7XG4gICAgdGhpcy5saXN0aXRlbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuY2xpY2spO1xuICAgIHRoaXMubGlzdGl0ZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMuZm9jdXNpbik7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuY2xvc2VFc2MpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmJvZHlDbG9zZSk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5mb2N1c0luQ2xvc2UpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/components/navigation/NavDesktopParent.js\n")},
1"./source/scripts/components/navigation/NavMobile.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return NavMobile; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _shopify_theme_a11y__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @shopify/theme-a11y */ \"./node_modules/@shopify/theme-a11y/theme-a11y.js\");\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Layout */ \"./source/scripts/Layout.js\");\n/* harmony import */ var _NavMobileSubMenus__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./NavMobileSubMenus */ \"./source/scripts/components/navigation/NavMobileSubMenus.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar NavMobile =\n/*#__PURE__*/\nfunction () {\n function NavMobile(elements) {\n var _this = this;\n\n _classCallCheck(this, NavMobile);\n\n this.$body = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body);\n this.$window = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window);\n this.$el = elements.$el;\n this.$toggleOpen = elements.$toggleOpen;\n this.isOpen = false;\n this.subMenus = null;\n this.$mobileNav = this.$el.find('[data-mobile-nav]');\n this.$panel = this.$el.find('[data-mobile-nav-panel]');\n this.$overlay = this.$el.find('[data-mobile-nav-overlay]');\n this.$toggleClose = this.$el.find('[data-mobile-nav-close]'); // Revert navigation to original state on breakpoint change\n\n this.layoutHandler = this.onBreakpointChange.bind(this);\n _Layout__WEBPACK_IMPORTED_MODULE_2__[\"default\"].onBreakpointChange(this.layoutHandler);\n\n this._closeEsc = function (e) {\n if (e.key === 'Escape') {\n _this._close();\n }\n };\n\n this._bindEvents();\n }\n\n _createClass(NavMobile, [{\n key: \"unload\",\n value: function unload() {\n this._close();\n\n this.$window.off('resize.mobile-nav');\n _Layout__WEBPACK_IMPORTED_MODULE_2__[\"default\"].offBreakpointChange(this.layoutHandler);\n }\n }, {\n key: \"onBreakpointChange\",\n value: function onBreakpointChange() {\n if (_Layout__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isBreakpoint('L') && this.isOpen) {\n this._close();\n }\n }\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents() {\n var _this2 = this;\n\n this.$toggleOpen.on('click.mobile-nav', function (event) {\n event.preventDefault();\n if (!_Layout__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isBreakpoint('L')) _this2._open();\n });\n this.$window.on('resize.mobile-nav', function () {\n _this2.$el.find('[data-menu-toggle]').removeClass('active');\n\n if (_this2.isOpen) {\n _this2._setPanelHeight();\n }\n });\n }\n }, {\n key: \"_setPanelHeight\",\n value: function _setPanelHeight() {\n this.$panel.height(window.innerHeight);\n }\n }, {\n key: \"_open\",\n value: function _open() {\n var _this3 = this;\n\n this.$body.addClass('scroll-lock');\n this.isOpen = true; // Activate Submenu handler\n\n this.subMenus = new _NavMobileSubMenus__WEBPACK_IMPORTED_MODULE_3__[\"default\"](this.$panel);\n\n this._setPanelHeight(); // Animate in elements\n\n\n this.$mobileNav.addClass('animating animating-in').one('trend', function () {\n _this3.$mobileNav.removeClass('animating animating-in').addClass('visible').off('trend');\n });\n Object(_shopify_theme_a11y__WEBPACK_IMPORTED_MODULE_1__[\"trapFocus\"])(this.$mobileNav[0]); // Event handlers\n\n window.addEventListener('keydown', this._closeEsc);\n this.events = [// Close menu when clicking on the overlay\n this.$overlay.on('click.mobile-nav', function (event) {\n return _this3._close(event);\n }), this.$toggleClose.on('click.mobile-nav', function (event) {\n return _this3._close(event);\n }), // Disable scrolling on overlay and contactbar\n this.$overlay.on('touchmove.mobile-nav', function (event) {\n return event.preventDefault();\n })];\n }\n }, {\n key: \"_close\",\n value: function _close() {\n var _this4 = this;\n\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (event) event.preventDefault();\n this.$mobileNav.addClass('animating animating-out').one('trend', function () {\n _this4.$mobileNav.removeClass('animating animating-out').removeClass('visible').off('trend');\n });\n this.$body.removeClass('scroll-lock');\n this.isOpen = false;\n Object(_shopify_theme_a11y__WEBPACK_IMPORTED_MODULE_1__[\"removeTrapFocus\"])(this.$mobileNav);\n this.$toggleOpen.focus(); // Close any open drop down menus\n\n if (this.subMenus) {\n this.subMenus.closeSubMenus(this.$el);\n this.subMenus.closeAllSubmenus(); // Unbind Mobile sub menus\n\n this.subMenus.unload();\n } // Unbind events\n\n\n window.removeEventListener('keydown', this._closeEsc);
1\n\n if (this.events) {\n this.events.forEach(function ($el) {\n return $el.off('.mobile-nav');\n });\n this.events = [];\n }\n }\n }]);\n\n return NavMobile;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL25hdmlnYXRpb24vTmF2TW9iaWxlLmpzPzE0OWYiXSwibmFtZXMiOlsiTmF2TW9iaWxlIiwiZWxlbWVudHMiLCIkYm9keSIsIiQiLCJkb2N1bWVudCIsImJvZHkiLCIkd2luZG93Iiwid2luZG93IiwiJGVsIiwiJHRvZ2dsZU9wZW4iLCJpc09wZW4iLCJzdWJNZW51cyIsIiRtb2JpbGVOYXYiLCJmaW5kIiwiJHBhbmVsIiwiJG92ZXJsYXkiLCIkdG9nZ2xlQ2xvc2UiLCJsYXlvdXRIYW5kbGVyIiwib25CcmVha3BvaW50Q2hhbmdlIiwiYmluZCIsImxheW91dCIsIl9jbG9zZUVzYyIsImUiLCJrZXkiLCJfY2xvc2UiLCJfYmluZEV2ZW50cyIsIm9mZiIsIm9mZkJyZWFrcG9pbnRDaGFuZ2UiLCJpc0JyZWFrcG9pbnQiLCJvbiIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJfb3BlbiIsInJlbW92ZUNsYXNzIiwiX3NldFBhbmVsSGVpZ2h0IiwiaGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJhZGRDbGFzcyIsIk5hdk1vYmlsZVN1Yk1lbnVzIiwib25lIiwidHJhcEZvY3VzIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50cyIsInJlbW92ZVRyYXBGb2N1cyIsImZvY3VzIiwiY2xvc2VTdWJNZW51cyIsImNsb3NlQWxsU3VibWVudXMiLCJ1bmxvYWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZm9yRWFjaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBOztJQUVxQkEsUzs7O0FBQ25CLHFCQUFZQyxRQUFaLEVBQXNCO0FBQUE7O0FBQUE7O0FBQ3BCLFNBQUtDLEtBQUwsR0FBYUMsNkNBQUMsQ0FBQ0MsUUFBUSxDQUFDQyxJQUFWLENBQWQ7QUFDQSxTQUFLQyxPQUFMLEdBQWVILDZDQUFDLENBQUNJLE1BQUQsQ0FBaEI7QUFDQSxTQUFLQyxHQUFMLEdBQVdQ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0FBQ0Q7QUFDRiIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9OYXZNb2JpbGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHsgdHJhcEZvY3VzLCByZW1vdmVUcmFwRm9jdXMgfSBmcm9tICdAc2hvcGlmeS90aGVtZS1hMTF5JztcblxuaW1wb3J0IGxheW91dCBmcm9tICcuLi8uLi9MYXlvdXQnO1xuaW1wb3J0IE5hdk1vYmlsZVN1Yk1lbnVzIGZyb20gJy4vTmF2TW9iaWxlU3ViTWVudXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXZNb2JpbGUge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50cykge1xuICAgIHRoaXMuJGJvZHkgPSAkKGRvY3VtZW50LmJvZHkpO1xuICAgIHRoaXMuJHdpbmRvdyA9ICQod2luZG93KTtcbiAgICB0aGlzLiRlbCA9IGVsZW1lbnRzLiRlbDtcbiAgICB0aGlzLiR0b2dnbGVPcGVuID0gZWxlbWVudHMuJHRvZ2dsZU9wZW47XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnN1Yk1lbnVzID0gbnVsbDtcblxuICAgIHRoaXMuJG1vYmlsZU5hdiA9IHRoaXMuJGVsLmZpbmQoJ1tkYXRhLW1vYmlsZS1uYXZdJyk7XG4gICAgdGhpcy4kcGFuZWwgPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1tb2JpbGUtbmF2LXBhbmVsXScpO1xuICAgIHRoaXMuJG92ZXJsYXkgPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1tb2JpbGUtbmF2LW92ZXJsYXldJyk7XG4gICAgdGhpcy4kdG9nZ2xlQ2xvc2UgPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1tb2JpbGUtbmF2LWNsb3NlXScpO1xuXG4gICAgLy8gUmV2ZXJ0IG5hdmlnYXRpb24gdG8gb3JpZ2luYWwgc3RhdGUgb24gYnJlYWtwb2ludCBjaGFuZ2VcbiAgICB0aGlzLmxheW91dEhhbmRsZXIgPSB0aGlzLm9uQnJlYWtwb2ludENoYW5nZS5iaW5kKHRoaXMpO1xuICAgIGxheW91dC5vbkJyZWFrcG9pbnRDaGFuZ2UodGhpcy5sYXlvdXRIYW5kbGVyKTtcblxuICAgIHRoaXMuX2Nsb3NlRXNjID0gZSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIHRoaXMuX2Nsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX2JpbmRFdmVudHMoKTtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICB0aGlzLl9jbG9zZSgpO1xuICAgIHRoaXMuJHdpbmRvdy5vZmYoJ3Jlc2l6ZS5tb2JpbGUtbmF2Jyk7XG4gICAgbGF5b3V0Lm9mZkJyZWFrcG9pbnRDaGFuZ2UodGhpcy5sYXlvdXRIYW5kbGVyKTtcbiAgfVxuXG4gIG9uQnJlYWtwb2ludENoYW5nZSgpIHtcbiAgICBpZiAobGF5b3V0LmlzQnJlYWtwb2ludCgnTCcpICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLl9jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIF9iaW5kRXZlbnRzKCkge1xuICAgIHRoaXMuJHRvZ2dsZU9wZW4ub24oJ2NsaWNrLm1vYmlsZS1uYXYnLCBldmVudCA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBpZiAoIWxheW91dC5pc0JyZWFrcG9pbnQoJ0wnKSkgdGhpcy5fb3BlbigpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kd2luZG93Lm9uKCdyZXNpemUubW9iaWxlLW5hdicsICgpID0+IHtcbiAgICAgIHRoaXMuJGVsLmZpbmQoJ1tkYXRhLW1lbnUtdG9nZ2xlXScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcblxuICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMuX3NldFBhbmVsSGVpZ2h0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBfc2V0UGFuZWxIZWlnaHQoKSB7XG4gICAgdGhpcy4kcGFuZWwuaGVpZ2h0KHdpbmRvdy5pbm5lckhlaWdodCk7XG4gIH1cblxuICBfb3BlbigpIHtcbiAgICB0aGlzLiRib2R5LmFkZENsYXNzKCdzY3JvbGwtbG9jaycpO1xuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcblxuICAgIC8vIEFjdGl2YXRlIFN1Ym1lbnUgaGFuZGxlclxuICAgIHRoaXMuc3ViTWVudXMgPSBuZXcgTmF2TW9iaWxlU3ViTWVudXModGhpcy4kcGFuZWwpO1xuICAgIHRoaXMuX3NldFBhbmVsSGVpZ2h0KCk7XG5cbiAgICAvLyBBbmltYXRlIGluIGVsZW1lbnRzXG4gICAgdGhpcy4kbW9iaWxlTmF2LmFkZENsYXNzKCdhbmltYXRpbmcgYW5pbWF0aW5nLWluJykub25lKCd0cmVuZCcsICgpID0+IHtcbiAgICAgIHRoaXMuJG1vYmlsZU5hdlxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2FuaW1hdGluZyBhbmltYXRpbmctaW4nKVxuICAgICAgICAuYWRkQ2xhc3MoJ3Zpc2libGUnKVxuICAgICAgICAub2ZmKCd0cmVuZCcpO1xuICAgIH0pO1xuXG4gICAgdHJhcEZvY3VzKHR
1oaXMuJG1vYmlsZU5hdlswXSk7XG5cbiAgICAvLyBFdmVudCBoYW5kbGVyc1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fY2xvc2VFc2MpO1xuXG4gICAgdGhpcy5ldmVudHMgPSBbXG4gICAgICAvLyBDbG9zZSBtZW51IHdoZW4gY2xpY2tpbmcgb24gdGhlIG92ZXJsYXlcbiAgICAgIHRoaXMuJG92ZXJsYXkub24oJ2NsaWNrLm1vYmlsZS1uYXYnLCBldmVudCA9PiB0aGlzLl9jbG9zZShldmVudCkpLFxuICAgICAgdGhpcy4kdG9nZ2xlQ2xvc2Uub24oJ2NsaWNrLm1vYmlsZS1uYXYnLCBldmVudCA9PiB0aGlzLl9jbG9zZShldmVudCkpLFxuXG4gICAgICAvLyBEaXNhYmxlIHNjcm9sbGluZyBvbiBvdmVybGF5IGFuZCBjb250YWN0YmFyXG4gICAgICB0aGlzLiRvdmVybGF5Lm9uKCd0b3VjaG1vdmUubW9iaWxlLW5hdicsIGV2ZW50ID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpLFxuICAgIF07XG4gIH1cblxuICBfY2xvc2UoZXZlbnQgPSBmYWxzZSkge1xuICAgIGlmIChldmVudCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuJG1vYmlsZU5hdi5hZGRDbGFzcygnYW5pbWF0aW5nIGFuaW1hdGluZy1vdXQnKS5vbmUoJ3RyZW5kJywgKCkgPT4ge1xuICAgICAgdGhpcy4kbW9iaWxlTmF2XG4gICAgICAgIC5yZW1vdmVDbGFzcygnYW5pbWF0aW5nIGFuaW1hdGluZy1vdXQnKVxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuICAgICAgICAub2ZmKCd0cmVuZCcpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kYm9keS5yZW1vdmVDbGFzcygnc2Nyb2xsLWxvY2snKTtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuXG4gICAgcmVtb3ZlVHJhcEZvY3VzKHRoaXMuJG1vYmlsZU5hdik7XG4gICAgdGhpcy4kdG9nZ2xlT3Blbi5mb2N1cygpO1xuXG4gICAgLy8gQ2xvc2UgYW55IG9wZW4gZHJvcCBkb3duIG1lbnVzXG4gICAgaWYgKHRoaXMuc3ViTWVudXMpIHtcbiAgICAgIHRoaXMuc3ViTWVudXMuY2xvc2VTdWJNZW51cyh0aGlzLiRlbCk7XG4gICAgICB0aGlzLnN1Yk1lbnVzLmNsb3NlQWxsU3VibWVudXMoKTtcblxuICAgICAgLy8gVW5iaW5kIE1vYmlsZSBzdWIgbWVudXNcbiAgICAgIHRoaXMuc3ViTWVudXMudW5sb2FkKCk7XG4gICAgfVxuXG4gICAgLy8gVW5iaW5kIGV2ZW50c1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fY2xvc2VFc2MpO1xuXG4gICAgaWYgKHRoaXMuZXZlbnRzKSB7XG4gICAgICB0aGlzLmV2ZW50cy5mb3JFYWNoKCRlbCA9PiAkZWwub2ZmKCcubW9iaWxlLW5hdicpKTtcbiAgICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgfVxuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/components/navigation/NavMobile.js\n")},
1"./source/scripts/components/navigation/NavMobileSubMenus.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return NavMobileSubMenus; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Accordion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Accordion */ \"./source/scripts/Accordion.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar NavMobileSubMenus =\n/*#__PURE__*/\nfunction () {\n function NavMobileSubMenus($el) {\n _classCallCheck(this, NavMobileSubMenus);\n\n this.$el = $el;\n this.Accordion = new _Accordion__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this.$el, {\n activeClass: 'visible',\n content: '[data-accordion-content]'\n }); // Sub menu selectors\n\n this.activeMenuClass = 'navmenu-link-parent-active';\n this.activeMenu = \".\".concat(this.activeMenuClass);\n this.linkClass = 'navmenu-link-parent';\n this.linkSelector = \".\".concat(this.linkClass);\n this.navTrigger = '[data-navmenu-parent]';\n this.subMenu = '[data-navmenu-submenu]';\n this.buttonClass = 'navmenu-button';\n this.buttonSelector = \".\".concat(this.buttonClass);\n\n this._bindEvents();\n }\n\n _createClass(NavMobileSubMenus, [{\n key: \"unload\",\n value: function unload() {\n this.$el.off('.mobile-nav');\n delete this.Accordion;\n }\n }, {\n key: \"closeSubMenus\",\n value: function closeSubMenus($current) {\n var _this = this;\n\n $current.find(this.activeMenu).each(function (index, el) {\n _this._closeSubmenu(jquery__WEBPACK_IMPORTED_MODULE_0___default()(el));\n });\n }\n }, {\n key: \"closeAllSubmenus\",\n value: function closeAllSubmenus() {\n this.Accordion.closeOpen();\n }\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents() {\n var _this2 = this;\n\n // Prevent focus state from applying on mouse click\n this.$el.on('mousedown.mobile-nav', '.navmenu-link', function (event) {\n event.preventDefault();\n });\n this.$el.on('click.mobile-nav', \"\".concat(this.navTrigger, \" > .navmenu-link-parent\"), this._linkClicked.bind(this));\n this.$el.on('click.mobile-nav', \"\".concat(this.navTrigger, \" > .navmenu-button\"), function (event) {\n event.preventDefault();\n\n _this2._toggleSubmenu(event);\n });\n }\n }, {\n key: \"_linkClicked\",\n value: function _linkClicked(event) {\n var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget);\n\n if (!$target.hasClass(this.activeMenuClass)) {\n event.preventDefault();\n\n this._openSubmenu($target);\n }\n }\n }, {\n key: \"_toggleSubmenu\",\n value: function _toggleSubmenu(event) {\n var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget);\n var $link = $target.hasClass(this.linkClass) ? $target : $target.siblings(this.linkSelector).first();\n\n if ($link.hasClass(this.activeMenuClass)) {\n this._closeSubmenu($target);\n } else {\n this._openSubmenu($target);\n }\n }\n }, {\n key: \"_openSubmenu\",\n value: function _openSubmenu($target) {\n var $menu = $target.siblings(this.subMenu).first();\n var $link = $target.hasClass(this.linkClass) ? $target : $target.siblings(this.linkSelector).first();\n var $button = $target.hasClass(this.buttonClass) ? $target : $target.siblings(this.buttonSelector).first();\n $menu.css('display', 'flex');\n $link.addClass(this.activeMenuClass).attr('aria-expanded', true);\n $button.attr('aria-expanded', true);\n this.Accordion.toggle($menu);\n }\n }, {\n key: \"_closeSubmenu\",\n value: function _closeSubmenu($target) {\n var $menu = $target.siblings(this.subMenu).first();\n var $link = $target.hasClass(this.linkClass) ? $target : $target.siblings(this.linkSelector).first();\n var $button = $target.hasClass(this.buttonClass) ? $target : $target.siblings(this.buttonSelector).first();\n $menu.one('transitionend', function () {\n return $menu.css('display', '');\n });\n $link.removeClass(this.activeMenuClass).attr('aria-expanded', false);\n $button.attr('aria-expanded', false);\n this.Accordion.toggle($menu);\n this.closeSubMenus($menu);\n }\n }]);\n\n return NavMobileSubMenus;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL25hdmlnYXRpb24vTmF2TW9iaWxlU3ViTWVudXMuanM/YjdjMyJdLCJuYW1lcyI6WyJOYXZNb2JpbGVTdWJNZW51cyIsIiRlbCIsIkFjY29yZGlvbiIsImFjdGl2ZUNsYXNzIiwiY29udGVudCIsImFjdGl2ZU1lbnVDbGFzcyIsImFjdGl2ZU1lbnUiLCJ
1saW5rQ2xhc3MiLCJsaW5rU2VsZWN0b3IiLCJuYXZUcmlnZ2VyIiwic3ViTWVudSIsImJ1dHRvbkNsYXNzIiwiYnV0dG9uU2VsZWN0b3IiLCJfYmluZEV2ZW50cyIsIm9mZiIsIiRjdXJyZW50IiwiZmluZCIsImVhY2giLCJpbmRleCIsImVsIiwiX2Nsb3NlU3VibWVudSIsIiQiLCJjbG9zZU9wZW4iLCJvbiIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJfbGlua0NsaWNrZWQiLCJiaW5kIiwiX3RvZ2dsZVN1Ym1lbnUiLCIkdGFyZ2V0IiwiY3VycmVudFRhcmdldCIsImhhc0NsYXNzIiwiX29wZW5TdWJtZW51IiwiJGxpbmsiLCJzaWJsaW5ncyIsImZpcnN0IiwiJG1lbnUiLCIkYnV0dG9uIiwiY3NzIiwiYWRkQ2xhc3MiLCJhdHRyIiwidG9nZ2xlIiwib25lIiwicmVtb3ZlQ2xhc3MiLCJjbG9zZVN1Yk1lbnVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBRUE7O0lBRXFCQSxpQjs7O0FBQ25CLDZCQUFZQyxHQUFaLEVBQWlCO0FBQUE7O0FBQ2YsU0FBS0EsR0FBTCxHQUFXQSxHQUFYO0FBRUEsU0FBS0MsU0FBTCxHQUFpQixJQUFJQSxrREFBSixDQUFjLEtBQUtELEdBQW5CLEVBQXdCO0FBQ3ZDRSxpQkFBVyxFQUFFLFNBRDBCO0FBRXZDQyxhQUFPLEVBQUU7QUFGOEIsS0FBeEIsQ0FBakIsQ0FIZSxDQVFmOztBQUNBLFNBQUtDLGVBQUwsR0FBdUIsNEJBQXZCO0FBQ0EsU0FBS0MsVUFBTCxjQUFzQixLQUFLRCxlQUEzQjtBQUNBLFNBQUtFLFNBQUwsR0FBaUIscUJBQWpCO0FBQ0EsU0FBS0MsWUFBTCxjQUF3QixLQUFLRCxTQUE3QjtBQUNBLFNBQUtFLFVBQUwsR0FBa0IsdUJBQWxCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLHdCQUFmO0FBQ0EsU0FBS0MsV0FBTCxHQUFtQixnQkFBbkI7QUFDQSxTQUFLQyxjQUFMLGNBQTBCLEtBQUtELFdBQS9COztBQUVBLFNBQUtFLFdBQUw7QU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NyQixVQUFNTyxLQUFLLEdBQUdQLE9BQU8sQ0FBQ0ssUUFBUixDQUFpQixLQUFLeEIsT0FBdEIsRUFBK0J5QixLQUEvQixFQUFkO0FBQ0EsVUFBTUYsS0FBSyxHQUFHSixPQUFPLENBQUNFLFFBQVIsQ0FBaUIsS0FBS3hCLFNBQXRCLElBQ1ZzQixPQURVLEdBRVZBLE9BQU8sQ0FBQ0ssUUFBUixDQUFpQixLQUFLMUIsWUFBdEIsRUFBb0MyQixLQUFwQyxFQUZKO0FBR0EsVUFBTUUsT0FBTyxHQUFHUixPQUFPLENBQUNFLFFBQVIsQ0FBaUIsS0FBS3BCLFdBQXRCLElBQ1prQixPQURZLEdBRVpBLE9BQU8sQ0FBQ0ssUUFBUixDQUFpQixLQUFLdEIsY0FBdEIsRUFBc0N1QixLQUF0QyxFQUZKO0FBSUFDLFdBQUssQ0FBQ00sR0FBTixDQUFVLGVBQVYsRUFBMkI7QUFBQSxlQUFNTixL
1QUFLLENBQUNFLEdBQU4sQ0FBVSxTQUFWLEVBQXFCLEVBQXJCLENBQU47QUFBQSxPQUEzQjtBQUVBTCxXQUFLLENBQUNVLFdBQU4sQ0FBa0IsS0FBS3RDLGVBQXZCLEVBQXdDbUMsSUFBeEMsQ0FBNkMsZUFBN0MsRUFBOEQsS0FBOUQ7QUFFQUgsYUFBTyxDQUFDRyxJQUFSLENBQWEsZUFBYixFQUE4QixLQUE5QjtBQUVBLFdBQUt0QyxTQUFMLENBQWV1QyxNQUFmLENBQXNCTCxLQUF0QjtBQUNBLFdBQUtRLGFBQUwsQ0FBbUJSLEtBQW5CO0FBQ0QiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL25hdmlnYXRpb24vTmF2TW9iaWxlU3ViTWVudXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5pbXBvcnQgQWNjb3JkaW9uIGZyb20gJy4uLy4uL0FjY29yZGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdk1vYmlsZVN1Yk1lbnVzIHtcbiAgY29uc3RydWN0b3IoJGVsKSB7XG4gICAgdGhpcy4kZWwgPSAkZWw7XG5cbiAgICB0aGlzLkFjY29yZGlvbiA9IG5ldyBBY2NvcmRpb24odGhpcy4kZWwsIHtcbiAgICAgIGFjdGl2ZUNsYXNzOiAndmlzaWJsZScsXG4gICAgICBjb250ZW50OiAnW2RhdGEtYWNjb3JkaW9uLWNvbnRlbnRdJyxcbiAgICB9KTtcblxuICAgIC8vIFN1YiBtZW51IHNlbGVjdG9yc1xuICAgIHRoaXMuYWN0aXZlTWVudUNsYXNzID0gJ25hdm1lbnUtbGluay1wYXJlbnQtYWN0aXZlJztcbiAgICB0aGlzLmFjdGl2ZU1lbnUgPSBgLiR7dGhpcy5hY3RpdmVNZW51Q2xhc3N9YDtcbiAgICB0aGlzLmxpbmtDbGFzcyA9ICduYXZtZW51LWxpbmstcGFyZW50JztcbiAgICB0aGlzLmxpbmtTZWxlY3RvciA9IGAuJHt0aGlzLmxpbmtDbGFzc31gO1xuICAgIHRoaXMubmF2VHJpZ2dlciA9ICdbZGF0YS1uYXZtZW51LXBhcmVudF0nO1xuICAgIHRoaXMuc3ViTWVudSA9ICdbZGF0YS1uYXZtZW51LXN1Ym1lbnVdJztcbiAgICB0aGlzLmJ1dHRvbkNsYXNzID0gJ25hdm1lbnUtYnV0dG9uJztcbiAgICB0aGlzLmJ1dHRvblNlbGVjdG9yID0gYC4ke3RoaXMuYnV0dG9uQ2xhc3N9YDtcblxuICAgIHRoaXMuX2JpbmRFdmVudHMoKTtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICB0aGlzLiRlbC5vZmYoJy5tb2JpbGUtbmF2Jyk7XG5cbiAgICBkZWxldGUgdGhpcy5BY2NvcmRpb247XG4gIH1cblxuICBjbG9zZVN1Yk1lbnVzKCRjdXJyZW50KSB7XG4gICAgJGN1cnJlbnQuZmluZCh0aGlzLmFjdGl2ZU1lbnUpLmVhY2goKGluZGV4LCBlbCkgPT4ge1xuICAgICAgdGhpcy5fY2xvc2VTdWJtZW51KCQoZWwpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsb3NlQWxsU3VibWVudXMoKSB7XG4gICAgdGhpcy5BY2NvcmRpb24uY2xvc2VPcGVuKCk7XG4gIH1cblxuICBfYmluZEV2ZW50cygpIHtcbiAgICAvLyBQcmV2ZW50IGZvY3VzIHN0YXRlIGZyb20gYXBwbHlpbmcgb24gbW91c2UgY2xpY2tcbiAgICB0aGlzLiRlbC5vbignbW91c2Vkb3duLm1vYmlsZS1uYXYnLCAnLm5hdm1lbnUtbGluaycsIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRlbC5vbihcbiAgICAgICdjbGljay5tb2JpbGUtbmF2JyxcbiAgICAgIGAke3RoaXMubmF2VHJpZ2dlcn0gPiAubmF2bWVudS1saW5rLXBhcmVudGAsXG4gICAgICB0aGlzLl9saW5rQ2xpY2tlZC5iaW5kKHRoaXMpLFxuICAgICk7XG5cbiAgICB0aGlzLiRlbC5vbihcbiAgICAgICdjbGljay5tb2JpbGUtbmF2JyxcbiAgICAgIGAke3RoaXMubmF2VHJpZ2dlcn0gPiAubmF2bWVudS1idXR0b25gLFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl90b2dnbGVTdWJtZW51KGV2ZW50KTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIF9saW5rQ2xpY2tlZChldmVudCkge1xuICAgIGNvbnN0ICR0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuXG4gICAgaWYgKCEkdGFyZ2V0Lmhhc0NsYXNzKHRoaXMuYWN0aXZlTWVudUNsYXNzKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuX29wZW5TdWJtZW51KCR0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIF90b2dnbGVTdWJtZW51KGV2ZW50KSB7XG4gICAgY29uc3QgJHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgJGxpbmsgPSAkdGFyZ2V0Lmhhc0NsYXNzKHRoaXMubGlua0NsYXNzKVxuICAgICAgPyAkdGFyZ2V0XG4gICAgICA6ICR0YXJnZXQuc2libGluZ3ModGhpcy5saW5rU2VsZWN0b3IpLmZpcnN0KCk7XG5cbiAgICBpZiAoJGxpbmsuaGFzQ2xhc3ModGhpcy5hY3RpdmVNZW51Q2xhc3MpKSB7XG4gICAgICB0aGlzLl9jbG9zZVN1Ym1lbnUoJHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29wZW5TdWJtZW51KCR0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIF9vcGVuU3VibWVudSgkdGFyZ2V0KSB7XG4gICAgY29uc3QgJG1lbnUgPSAkdGFyZ2V0LnNpYmxpbmdzKHRoaXMuc3ViTWVudSkuZmlyc3QoKTtcbiAgICBjb25zdCAkbGluayA9ICR0YXJnZXQuaGFzQ2xhc3ModGhpcy5saW5rQ2xhc3MpXG4gICAgICA/ICR0YXJnZXRcbiAgICAgIDogJHRhcmdldC5zaWJsaW5ncyh0aGlzLmxpbmtTZWxlY3RvcikuZmlyc3QoKTtcbiAgICBjb25zdCAkYnV0dG9uID0gJHRhcmdldC5oYXNDbGFzcyh0aGlzLmJ1dHRvbkNsYXNzKVxuICAgICAgPyAkdGFyZ2V0XG4gICAgICA6ICR0YXJnZXQuc2libGluZ3ModGhpcy5idXR0b25TZWxlY3RvcikuZmlyc3QoKTtcblxuICAgICRtZW51LmNzcygnZGlzcGxheScsICdmbGV4Jyk7XG5cbiAgICAkbGluay5hZGRDbGFzcyh0aGlzLmFjdGl2ZU1lbnVDbGFzcykuYXR0cignYXJpYS1leHBhbmRlZCcsIHRydWUpO1xuXG4gICAgJGJ1dHRvbi5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG5cbiAgICB0aGlzLkFjY29yZGlvbi50b2dnbGUoJG1lbnUpO1xuICB9XG5cbiAgX2Nsb3NlU3VibWVudSgkdGFyZ2V0KSB7XG4gICAgY29uc3QgJG1lbnUgPSAkdGFyZ2V0LnNpYmxpbmdzKHRoaXMuc3ViTWVudSkuZmlyc3QoKTtcbiAgICBjb25zdCAkbGluayA9ICR0YXJnZXQuaGFzQ2xhc3ModGhpcy5saW5rQ2xhc3MpXG4gICAgICA/ICR0YXJnZXRcbiAgICAgIDogJHRhcmdldC5zaWJsaW5ncyh0aGlzLmxpbmtTZWxlY3RvcikuZmlyc3QoKTtcbiAgICBjb25zdCAkYnV0dG9uID0gJHRhcmdldC5oYXNDbGFzcyh0aGlzLmJ1dHRvbkNsYXNzKVxuICAgICAgPyAkdGFyZ2V0XG4gICAgICA6ICR0YXJnZXQuc2libGluZ3ModGhpcy5idXR0b25TZWxlY3RvcikuZmlyc3QoKTtcblxuICAgICRtZW51Lm9uZSgndHJhbnNpdGlvbmVuZCcsICgpID0+ICRtZW51LmNzcygnZGlzcGxheScsICcnKSk7XG5cbiAgICAkbGluay5yZW1vdmVDbGFzcyh0aGlzLmFjdGl2ZU1lbnVDbGFzcykuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKTtcblxuICAgICRidXR0b24uYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKTtcblxuICAgI
1HRoaXMuQWNjb3JkaW9uLnRvZ2dsZSgkbWVudSk7XG4gICAgdGhpcy5jbG9zZVN1Yk1lbnVzKCRtZW51KTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/components/navigation/NavMobileSubMenus.js\n")},
1"./source/scripts/components/search/LiveSearch.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return LiveSearch; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! just-debounce */ \"./node_modules/just-debounce/index.js\");\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(just_debounce__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shopify-currency-converter */ \"./node_modules/shopify-currency-converter/dist/index.js\");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Search__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../Search */ \"./source/scripts/Search.js\");\n/* harmony import */ var _SearchForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./SearchForm */ \"./source/scripts/components/search/SearchForm.js\");\n/* harmony import */ var _LiveSearchTemplates__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./LiveSearchTemplates */ \"./source/scripts/components/search/LiveSearchTemplates.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar MAX_RESULTS = 5;\n\nvar LiveSearch =\n/*#__PURE__*/\nfunction () {\n function LiveSearch(els, settings) {\n var _this = this;\n\n _classCallCheck(this, LiveSearch);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(els.el);\n this.$body = jquery__WEBPACK_IMPORTED_MODULE_0___default()('body');\n this.$header = jquery__WEBPACK_IMPORTED_MODULE_0___default()(els.header);\n this.$document = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document);\n this.settings = settings;\n this.formOptions = {\n liveSearch: true\n };\n this.contentTypes = this.settings.content_types;\n this.enableImages = true;\n this.flyDownActive = false;\n this.takeOverActive = false;\n this.showFlyDown = false;\n this.searchOpenClass = 'site-header-search--open';\n this.$form = this.$el.find('[data-live-search-form]');\n this.$input = this.$form.find('[data-live-search-input]');\n this.$button = this.$form.find('[data-live-search-submit]');\n this.$takeOverCancel = this.$form.find('[data-live-search-takeover-cancel]');\n this.$flyDown = this.$el.find('[data-live-search-flydown]');\n this.$searchResults = this.$flyDown.find('[data-live-search-results]');\n this.$searchPlaceholder = this.$flyDown.find('[data-live-search-placeholder]');\n this.$quickLinks = this.$flyDown.find('[data-live-search-quick-links]');\n this.staticSearch = new _SearchForm__WEBPACK_IMPORTED_MODULE_4__[\"default\"](this.$el, this.formOptions);\n this.search = new _Search__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n view: 'header',\n type: this.contentTypes\n });\n this._search = this._search.bind(this);\n this._toggleTakeOver = this._toggleTakeOver.bind(this);\n this._searchFocused = this._searchFocused.bind(this);\n this._documentFocus = this._documentFocus.bind(this);\n this._searchCancelled = this._searchCancelled.bind(this);\n this._searchComplete = this._searchComplete.bind(this);\n this._searchError = this._searchError.bind(this);\n this.search.on('cancelled', this._searchCancelled);\n this.search.on('complete', this._searchComplete);\n this.search.on('error', this._searchError);\n\n this._closeEsc = function (e) {\n if (e.key === 'Escape') {\n e.stopPropagation();\n\n _this.$input.focus();\n\n _this._closeFlyDown(true);\n }\n };\n\n this.events = [this.$button.on('click.live-search', function (event) {\n event.preventDefault();\n\n _this.$form.submit();\n }), this.$input.on('keyup.live-search', just_debounce__WEBPACK_IMPORTED_MODULE_1___default()(this._search, 250)), this.$input.on('focus.live-search', this._searchFocused), this.$takeOverCancel.on('click.live-search', this._toggleTakeOver)];\n }\n\n _createClass(LiveSearch, [{\n key: \"unload\",\n value: function unload() {\n this.events.forEac
1h(function ($el) {\n return $el.off('.live-search');\n });\n this.search.off('cancelled', this._searchCancelled);\n this.search.off('complete', this._searchComplete);\n this.search.off('error', this._searchError);\n this.staticSearch.unload();\n }\n /**\n * If is searching, only show placeholder\n *\n * @private\n */\n\n }, {\n key: \"_flyDownSearching\",\n value: function _flyDownSearching() {\n this.$searchResults.removeClass('visible');\n this.$quickLinks.removeClass('visible');\n this.$searchPlaceholder.addClass('visible');\n }\n /**\n * Search field has been focused, or has been cleared of contents\n * - If previous search contents, show\n * - If no previous search contents, show quicklinks if exists\n *\n * @param hasTerms\n * @private\n */\n\n }, {\n key: \"_flyDownInitial\",\n value: function _flyDownInitial(hasTerms) {\n this.showFlyDown = false;\n var hasNoResults = this.$searchResults.find('[data-live-search-no-products]').length === 0;\n var hasPreviousResults = this.$searchResults.children().length > 0;\n\n if (hasTerms && hasNoResults && hasPreviousResults) {\n this.$searchResults.addClass('visible');\n this.$quickLinks.removeClass('visible');\n this.showFlyDown = true;\n } else if (this.$quickLinks.length) {\n this.$searchResults.removeClass('visible');\n this.$quickLinks.addClass('visible');\n this.showFlyDown = true;\n }\n }\n }, {\n key: \"_search\",\n value: function _search(event) {\n // Ignore non character key strokes\n var invalidKeyStrokes = ['Alt', 'ArrowRight', 'ArrowLeft', 'ArrowUp', 'ArrowDown', 'Capslock', 'Control', 'Escape', 'Meta', 'Shift', 'Tab', 'Enter'];\n\n if (event.key && invalidKeyStrokes.indexOf(event.key) !== -1) {\n return;\n }\n\n var terms = this.$input.val();\n var hasTerms = terms.length > 0;\n\n if (!hasTerms) {\n if (!this.takeOverActive) {\n this._flyDownInitial(true);\n }\n\n if (!this.showFlyDown) {\n this._closeFlyDown(true);\n }\n\n return;\n }\n\n this._flyDownSearching(); // Clear previous results\n\n\n this.$searchResults.html(''); // If terms has length, this will be true\n\n this._toggleButton(hasTerms); // Show the flyout if it isn't open\n\n\n if (!this.$flyDown.data('is-open')) {\n this.showFlyDown = true;\n\n this._openFlyDown();\n } // Adds `*` after each word in search terms, doesn't add to last word\n\n\n if (terms.indexOf(' ') > 0) {\n terms = terms.split(' ').join('* ').trim();\n } // Adds `*` at the end of the search terms\n\n\n terms = \"\".concat(terms, \"*\");\n this.search.execute(terms);\n }\n }, {\n key: \"_searchError\",\n value: function _searchError(response) {\n console.warn('Search had error');\n console.info(response.message, response.error, response.event);\n\n this._toggleButton(false);\n }\n /**\n * Search has been cancelled due to new search being performed\n *\n * @private\n */\n\n }, {\n key: \"_searchCancelled\",\n value: function _searchCancelled() {// Searches are canceled on user interaction, UI should remain unchanged\n }\n }, {\n key: \"_searchComplete\",\n value: function _searchComplete(response) {\n var _this2 = this;\n\n var content = response.content,\n products = response.products;\n var terms = response.terms,\n sanitizedTerms = response.sanitizedTerms;\n content = content.slice(0, MAX_RESULTS);\n products = products.slice(0, MAX_RESULTS);\n var settings = {\n products: {\n results: {\n products: products,\n enableImages: this.enableImages,\n context: this.settings.context\n },\n noResults: {\n context: this.settings.context,\n terms: sanitizedTerms\n }\n },\n content: {\n results: {\n context: this.settings.context,\n content: content\n },\n noResults: {\n context: this.settings.context\n }\n },\n footer: {\n context: this.settings.context,\n terms: terms,\n type: this.searchType\n }\n };\n var $productResults = products.length ? Object(_LiveSearchTemplates__WEBPACK_IMPORTED_MODULE_5__[\"ProductResults\"])(settings.products.results) : Object(_LiveSearchTemplates__WEBPACK_IMPORTED_MODULE_5__[\"ProductNoResults\"])(settings.products.noResults);\n var $contentResults = content.length ? Object(_LiveSearchTemplates__WEBPACK_IMPORTED_MODULE_5__[\"ContentResults\"])(settings.content.results) : Object(_LiveSearchTemplates__WEBPACK_IMPORTED_MODULE_5__[\"ContentNoResults\"])(settings.content.noResults);\n $productResults.find('.money').each(function (i, el) {\n el.innerHTML = Shopify.formatMoney(el.innerHTML, _this2.settings.money_format);\n shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2___default.a.update(el);\n }); // Hide placeholder\n // TODO: Lock minimum height?\n\n this.$searchPlaceholder.removeClass('visible'); // Show results\n\n this.$searchResults.html($productResults).addClass('visible');\n\n if (this.contentTypes !== 'product') {\n this.$searchResults.append($contentResults);\n }\n\n this.$searchResults.append(Object(_LiveSearchTemplates__WEBPACK_IMPORTED_MODULE_5__[\"ResultsFooter\"])(settings.footer));\n\n this._toggleButton(false);\n }\n /**\n * Toggles search button while processing\n *\n * @param disable\n * @private\n */\n\n }, {\n key: \"_toggleButton\",\n value: function _toggleButton(disable) {\n if (disable) {\n this.$button.addClass('search-icon--processing').attr('disabled');\n } else {\n this.$button.removeClass('search-icon--processing').removeAttr('disabled');\n }\n }\n }, {\n key: \"_searchFocused\",\n value: function _searchFocused(e) {\n e.stopPropagation();\n\n if (this.flyDownActive) {\n return;\n }\n\n var hasTerms = this.$input.val().length > 0; // Only listen for events outside of the search flydown when its open\n\n this.closeEvents = [this.$document.on('focusin.live-search', this._documentFocus), this.$document.on('touchstart.live-search', this._documentFocus), this.$document.on('click.live-search', this._documentFocus)];\n this.$el.addClass('live-search--focused');\n\n this._flyDownInitial(hasTerms);\n\n this._openFlyDown();\n }\n }
1, {\n key: \"_openFlyDown\",\n value: function _openFlyDown() {\n if (!this.showFlyDown) {\n return;\n }\n\n window.addEventListener('keydown', this._closeEsc);\n this.$el.addClass('live-search--active');\n this.$flyDown.data('is-open', true);\n this.flyDownActive = true;\n }\n /**\n * Close the FlyDown when no longer needed\n * - Keep focus styling if input is still being interacted with\n *\n * @param retainFocus\n * @private\n */\n\n }, {\n key: \"_closeFlyDown\",\n value: function _closeFlyDown() {\n var retainFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (!this.flyDownActive) {\n if (!retainFocus) {\n this.$el.removeClass('live-search--focused');\n }\n\n return;\n }\n\n if (this.takeOverActive) {\n this._toggleTakeOver(null, false);\n }\n\n this.$flyDown.data('is-open', false);\n this.$el.removeClass('live-search--active');\n\n if (!retainFocus) {\n this.$el.removeClass('live-search--focused');\n }\n\n this.flyDownActive = false;\n\n if (this.closeEvents && this.closeEvents.length) {\n this.closeEvents.forEach(function ($el) {\n $el.off('.live-search');\n });\n }\n\n window.removeEventListener('keydown', this._closeEsc);\n this.closeEvents = [];\n }\n /**\n * Open or close the Take over for mobile\n *\n *\n * @param event\n * @param enable\n * @private\n */\n\n }, {\n key: \"_toggleTakeOver\",\n value: function _toggleTakeOver() {\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var enable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n this.takeOverActive = enable;\n\n if (event) {\n event.preventDefault();\n }\n\n if (!enable) {\n this._closeFlyDown(false);\n }\n\n if (this.$header.hasClass('search--section')) {\n this.$body.toggleClass('search-takeover-active', enable);\n }\n\n this.$el.toggleClass('live-search--takeover', enable);\n this.$body.toggleClass('scroll-lock', enable);\n }\n }, {\n key: \"openMobileTakeover\",\n value: function openMobileTakeover() {\n this._toggleTakeOver(null, true);\n\n window.addEventListener('keydown', this._closeEsc);\n this.$input.focus();\n }\n /**\n * When the focus element has changed, either by clicking, touching, or tabbing\n * check to see if it is within the flydown\n *\n * @param event\n * @private\n */\n\n }, {\n key: \"_documentFocus\",\n value: function _documentFocus(event) {\n var $parent = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.target).parents('[data-live-search]');\n\n if ($parent.length) {\n return;\n }\n\n this._closeFlyDown();\n }\n }]);\n\n return LiveSearch;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL3NlYXJjaC9MaXZlU2VhcmNoLmpzP2IwOTUiXSwibmFtZXMiOlsiTUFYX1JFU1VMVFMiLCJMaXZlU2VhcmNoIiwiZWxzIiwic2V0dGluZ3MiLCIkZWwiLCIkIiwiZWwiLCIkYm9keSIsIiRoZWFkZXIiLCJoZWFkZXIiLCIkZG9jdW1lbnQiLCJkb2N1bWVudCIsImZvcm1PcHRpb25zIiwibGl2ZVNlYXJjaCIsImNvbnRlbnRUeXBlcyIsImNvbnRlbnRfdHlwZXMiLCJlbmFibGVJbWFnZXMiLCJmbHlEb3duQWN0aXZlIiwidGFrZU92ZXJBY3RpdmUiLCJzaG93Rmx5RG93biIsInNlYXJjaE9wZW5DbGFzcyIsIiRmb3JtIiwiZmluZCIsIiRpbnB1dCIsIiRidXR0b24iLCIkdGFrZU92ZXJDYW5jZWwiLCIkZmx5RG93biIsIiRzZWFyY2hSZXN1bHRzIiwiJHNlYXJjaFBsYWNlaG9sZGVyIiwiJHF1aWNrTGlua3MiLCJzdGF0aWNTZWFyY2giLCJTZWFyY2hGb3JtIiwic2VhcmNoIiwiU2VhcmNoIiwidmlldyIsInR5cGUiLCJfc2VhcmNoIiwiYmluZCIsIl90b2dnbGVUYWtlT3ZlciIsIl9zZWFyY2hGb2N1c2VkIiwiX2RvY3VtZW50Rm9jdXMiLCJfc2VhcmNoQ2FuY2VsbGVkIiwiX3NlYXJjaENvbXBsZXRlIiwiX3NlYXJjaEVycm9yIiwib24iLCJfY2xvc2VFc2MiLCJlIiwia2V5Iiwic3RvcFByb3BhZ2F0aW9uIiwiZm9jdXMiLCJfY2xvc2VGbHlEb3duIiwiZXZlbnRzIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInN1Ym1pdCIsImRlYm91bmNlIiwiZm9yRWFjaCIsIm9mZiIsInVubG9hZCIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJoYXNUZXJtcyIsImhhc05vUmVzdWx0cyIsImxlbmd0aCIsImhhc1ByZX
1Zpb3VzUmVzdWx0cyIsImNoaWxkcmVuIiwiaW52YWxpZEtleVN0cm9rZXMiLCJpbmRleE9mIiwidGVybXMiLCJ2YWwiLCJfZmx5RG93bkluaXRpYWwiLCJfZmx5RG93blNlYXJjaGluZyIsImh0bWwiLCJfdG9nZ2xlQnV0dG9uIiwiZGF0YSIsIl9vcGVuRmx5RG93biIsInNwbGl0Iiwiam9pbiIsInRyaW0iLCJleGVjdXRlIiwicmVzcG9uc2UiLCJjb25zb2xlIiwid2FybiIsImluZm8iLCJtZXNzYWdlIiwiZXJyb3IiLCJjb250ZW50IiwicHJvZHVjdHMiLCJzYW5pdGl6ZWRUZXJtcyIsInNsaWNlIiwicmVzdWx0cyIsImNvbnRleHQiLCJub1Jlc3VsdHMiLCJmb290ZXIiLCJzZWFyY2hUeXBlIiwiJHByb2R1Y3RSZXN1bHRzIiwiUHJvZHVjdFJlc3VsdHMiLCJQcm9kdWN0Tm9SZXN1bHRzIiwiJGNvbnRlbnRSZXN1bHRzIiwiQ29udGVudFJlc3VsdHMiLCJDb250ZW50Tm9SZXN1bHRzIiwiZWFjaCIsImkiLCJpbm5lckhUTUwiLCJTaG9waWZ5IiwiZm9ybWF0TW9uZXkiLCJtb25leV9mb3JtYXQiLCJDdXJyZW5jeUNvbnZlcnRlciIsInVwZGF0ZSIsImFwcGVuZCIsIlJlc3VsdHNGb290ZXIiLCJkaXNhYmxlIiwiYXR0ciIsInJlbW92ZUF0dHIiLCJjbG9zZUV2ZW50cyIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZXRhaW5Gb2N1cyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJlbmFibGUiLCJoYXNDbGFzcyIsInRvZ2dsZUNsYXNzIiwiJHBhcmVudCIsInRhcmdldCIsInBhcmVudHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBUUEsSUFBTUEsV0FBVyxHQUFHLENBQXBCOztJQUVxQkMsVTs7O0FBQ25CLHNCQUFZQyxHQUFaLEVBQWlCQyxRQUFqQixFQUEyQjtBQUFBOztBQUFBOztBQUN6QixTQUFLQyxHQUFMLEdBQ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UFFRDBELFlBQU0sQ0FBQ0csbUJBQVAsQ0FBMkIsU0FBM0IsRUFBc0MsS0FBS3pFLFNBQTNDO0FBRUEsV0FBS3FFLFdBQUwsR0FBbUIsRUFBbkI7QUFDRDtBQUVEOzs7Ozs7Ozs7OztzQ0FROEM7QUFBQSxVQUE5QjlELEtBQThCLHVFQUF0QixJQUFzQjtBQUFBLFVBQWhCbUUsTUFBZ0IsdUVBQVAsS0FBTztBQUM1QyxXQUFLckcsY0FBTCxHQUFzQnFHLE1BQXRCOztBQUVBLFVBQUluRSxLQUFKLEVBQVc7QUFDVEEsYUFBSyxDQUFDQyxjQUFOO0FBQ0Q7O0FBRUQsVUFBSSxDQUFDa0UsTUFBTCxFQUFhO0FBQ1gsYUFBS3JFLGFBQUwsQ0FBbUIsS0FBbkI7QUFDRDs7QUFFRCxVQUFJLEtBQUsxQyxPQUFMLENBQWFnSCxRQUFiLENBQXNCLGlCQUF0QixDQUFKLEVBQThDO0FBQzVDLGFBQUtqSCxLQUFMLENBQVdrSCxXQUFYLENBQXVCLHdCQUF2QixFQUFpREYsTUFBakQ7QUFDRDs7QUFFRCxXQUFLbkgsR0FBTCxDQUFTcUgsV0FBVCxDQUFxQix1QkFBckIsRUFBOENGLE1BQTlDO0FBQ0EsV0FBS2hILEtB
1QUwsQ0FBV2tILFdBQVgsQ0FBdUIsYUFBdkIsRUFBc0NGLE1BQXRDO0FBQ0Q7Ozt5Q0FFb0I7QUFDbkIsV0FBS2pGLGVBQUwsQ0FBcUIsSUFBckIsRUFBMkIsSUFBM0I7O0FBRUE2RSxZQUFNLENBQUNDLGdCQUFQLENBQXdCLFNBQXhCLEVBQW1DLEtBQUt2RSxTQUF4QztBQUVBLFdBQUt0QixNQUFMLENBQVkwQixLQUFaO0FBQ0Q7QUFFRDs7Ozs7Ozs7OzttQ0FPZUcsSyxFQUFPO0FBQ3BCLFVBQU1zRSxPQUFPLEdBQUdySCw2Q0FBQyxDQUFDK0MsS0FBSyxDQUFDdUUsTUFBUCxDQUFELENBQWdCQyxPQUFoQixDQUF3QixvQkFBeEIsQ0FBaEI7O0FBRUEsVUFBSUYsT0FBTyxDQUFDM0QsTUFBWixFQUFvQjtBQUNsQjtBQUNEOztBQUVELFdBQUtiLGFBQUw7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvc2VhcmNoL0xpdmVTZWFyY2guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2p1c3QtZGVib3VuY2UnO1xuaW1wb3J0IEN1cnJlbmN5Q29udmVydGVyIGZyb20gJ3Nob3BpZnktY3VycmVuY3ktY29udmVydGVyJztcblxuaW1wb3J0IFNlYXJjaCBmcm9tICcuLi8uLi9TZWFyY2gnO1xuaW1wb3J0IFNlYXJjaEZvcm0gZnJvbSAnLi9TZWFyY2hGb3JtJztcblxuaW1wb3J0IHtcbiAgQ29udGVudFJlc3VsdHMsXG4gIENvbnRlbnROb1Jlc3VsdHMsXG4gIFByb2R1Y3RSZXN1bHRzLFxuICBQcm9kdWN0Tm9SZXN1bHRzLFxuICBSZXN1bHRzRm9vdGVyLFxufSBmcm9tICcuL0xpdmVTZWFyY2hUZW1wbGF0ZXMnO1xuXG5jb25zdCBNQVhfUkVTVUxUUyA9IDU7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpdmVTZWFyY2gge1xuICBjb25zdHJ1Y3RvcihlbHMsIHNldHRpbmdzKSB7XG4gICAgdGhpcy4kZWwgPSAkKGVscy5lbCk7XG4gICAgdGhpcy4kYm9keSA9ICQoJ2JvZHknKTtcbiAgICB0aGlzLiRoZWFkZXIgPSAkKGVscy5oZWFkZXIpO1xuICAgIHRoaXMuJGRvY3VtZW50ID0gJChkb2N1bWVudCk7XG5cbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5mb3JtT3B0aW9ucyA9IHsgbGl2ZVNlYXJjaDogdHJ1ZSB9O1xuICAgIHRoaXMuY29udGVudFR5cGVzID0gdGhpcy5zZXR0aW5ncy5jb250ZW50X3R5cGVzO1xuICAgIHRoaXMuZW5hYmxlSW1hZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLmZseURvd25BY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnRha2VPdmVyQWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5zaG93Rmx5RG93biA9IGZhbHNlO1xuXG4gICAgdGhpcy5zZWFyY2hPcGVuQ2xhc3MgPSAnc2l0ZS1oZWFkZXItc2VhcmNoLS1vcGVuJztcblxuICAgIHRoaXMuJGZvcm0gPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1saXZlLXNlYXJjaC1mb3JtXScpO1xuICAgIHRoaXMuJGlucHV0ID0gdGhpcy4kZm9ybS5maW5kKCdbZGF0YS1saXZlLXNlYXJjaC1pbnB1dF0nKTtcbiAgICB0aGlzLiRidXR0b24gPSB0aGlzLiRmb3JtLmZpbmQoJ1tkYXRhLWxpdmUtc2VhcmNoLXN1Ym1pdF0nKTtcbiAgICB0aGlzLiR0YWtlT3ZlckNhbmNlbCA9IHRoaXMuJGZvcm0uZmluZChcbiAgICAgICdbZGF0YS1saXZlLXNlYXJjaC10YWtlb3Zlci1jYW5jZWxdJyxcbiAgICApO1xuXG4gICAgdGhpcy4kZmx5RG93biA9IHRoaXMuJGVsLmZpbmQoJ1tkYXRhLWxpdmUtc2VhcmNoLWZseWRvd25dJyk7XG4gICAgdGhpcy4kc2VhcmNoUmVzdWx0cyA9IHRoaXMuJGZseURvd24uZmluZCgnW2RhdGEtbGl2ZS1zZWFyY2gtcmVzdWx0c10nKTtcbiAgICB0aGlzLiRzZWFyY2hQbGFjZWhvbGRlciA9IHRoaXMuJGZseURvd24uZmluZChcbiAgICAgICdbZGF0YS1saXZlLXNlYXJjaC1wbGFjZWhvbGRlcl0nLFxuICAgICk7XG4gICAgdGhpcy4kcXVpY2tMaW5rcyA9IHRoaXMuJGZseURvd24uZmluZCgnW2RhdGEtbGl2ZS1zZWFyY2gtcXVpY2stbGlua3NdJyk7XG5cbiAgICB0aGlzLnN0YXRpY1NlYXJjaCA9IG5ldyBTZWFyY2hGb3JtKHRoaXMuJGVsLCB0aGlzLmZvcm1PcHRpb25zKTtcblxuICAgIHRoaXMuc2VhcmNoID0gbmV3IFNlYXJjaCh7XG4gICAgICB2aWV3OiAnaGVhZGVyJyxcbiAgICAgIHR5cGU6IHRoaXMuY29udGVudFR5cGVzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fc2VhcmNoID0gdGhpcy5fc2VhcmNoLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fdG9nZ2xlVGFrZU92ZXIgPSB0aGlzLl90b2dnbGVUYWtlT3Zlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX3NlYXJjaEZvY3VzZWQgPSB0aGlzLl9zZWFyY2hGb2N1c2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fZG9jdW1lbnRGb2N1cyA9IHRoaXMuX2RvY3VtZW50Rm9jdXMuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuX3NlYXJjaENhbmNlbGxlZCA9IHRoaXMuX3NlYXJjaENhbmNlbGxlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX3NlYXJjaENvbXBsZXRlID0gdGhpcy5fc2VhcmNoQ29tcGxldGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9zZWFyY2hFcnJvciA9IHRoaXMuX3NlYXJjaEVycm9yLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnNlYXJjaC5vbignY2FuY2VsbGVkJywgdGhpcy5fc2VhcmNoQ2FuY2VsbGVkKTtcbiAgICB0aGlzLnNlYXJjaC5vbignY29tcGxldGUnLCB0aGlzLl9zZWFyY2hDb21wbGV0ZSk7XG4gICAgdGhpcy5zZWFyY2gub24oJ2Vycm9yJywgdGhpcy5fc2VhcmNoRXJyb3IpO1xuXG4gICAgdGhpcy5fY2xvc2VFc2MgPSBlID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy4kaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5fY2xvc2VGbHlEb3duKHRydWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmV2ZW50cyA9IFtcbiAgICAgIHRoaXMuJGJ1dHRvbi5vbignY2xpY2subGl2ZS1zZWFyY2gnLCBldmVudCA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuJGZvcm0uc3VibWl0KCk7XG4gICAgICB9KSxcbiAgICAgIHRoaXMuJGlucHV0Lm9uKCdrZXl1cC5saXZlLXNlYXJjaCcsIGRlYm91bmNlKHRoaXMuX3NlYXJjaCwgMjUwKSksXG4gICAgICB0aGlzLiRpbnB1dC5vbignZm9jdXMubGl2ZS1zZWFyY2gnLCB0aGlzLl9zZWFyY2hGb2N1c2VkKSxcbiAgICAgIHRoaXMuJHRha2VPdmVyQ2FuY2VsLm9uKCdjbGljay5saXZlLXNlYXJjaCcsIHRoaXMuX3RvZ2dsZVRha2VPdmVyKSxcbiAgICBdO1xuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIHRoaXMuZXZlbnRzLmZvckVhY2goJGVsID0+ICRlbC5vZmYoJy5saXZlLXNlYXJjaCcpKTtcblxuICAgI
1HRoaXMuc2VhcmNoLm9mZignY2FuY2VsbGVkJywgdGhpcy5fc2VhcmNoQ2FuY2VsbGVkKTtcbiAgICB0aGlzLnNlYXJjaC5vZmYoJ2NvbXBsZXRlJywgdGhpcy5fc2VhcmNoQ29tcGxldGUpO1xuICAgIHRoaXMuc2VhcmNoLm9mZignZXJyb3InLCB0aGlzLl9zZWFyY2hFcnJvcik7XG5cbiAgICB0aGlzLnN0YXRpY1NlYXJjaC51bmxvYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBpcyBzZWFyY2hpbmcsIG9ubHkgc2hvdyBwbGFjZWhvbGRlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZseURvd25TZWFyY2hpbmcoKSB7XG4gICAgdGhpcy4kc2VhcmNoUmVzdWx0cy5yZW1vdmVDbGFzcygndmlzaWJsZScpO1xuICAgIHRoaXMuJHF1aWNrTGlua3MucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcblxuICAgIHRoaXMuJHNlYXJjaFBsYWNlaG9sZGVyLmFkZENsYXNzKCd2aXNpYmxlJyk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZpZWxkIGhhcyBiZWVuIGZvY3VzZWQsIG9yIGhhcyBiZWVuIGNsZWFyZWQgb2YgY29udGVudHNcbiAgICogICAtIElmIHByZXZpb3VzIHNlYXJjaCBjb250ZW50cywgc2hvd1xuICAgKiAgIC0gSWYgbm8gcHJldmlvdXMgc2VhcmNoIGNvbnRlbnRzLCBzaG93IHF1aWNrbGlua3MgaWYgZXhpc3RzXG4gICAqXG4gICAqIEBwYXJhbSBoYXNUZXJtc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZseURvd25Jbml0aWFsKGhhc1Rlcm1zKSB7XG4gICAgdGhpcy5zaG93Rmx5RG93biA9IGZhbHNlO1xuXG4gICAgY29uc3QgaGFzTm9SZXN1bHRzID1cbiAgICAgIHRoaXMuJHNlYXJjaFJlc3VsdHMuZmluZCgnW2RhdGEtbGl2ZS1zZWFyY2gtbm8tcHJvZHVjdHNdJykubGVuZ3RoID09PSAwO1xuICAgIGNvbnN0IGhhc1ByZXZpb3VzUmVzdWx0cyA9IHRoaXMuJHNlYXJjaFJlc3VsdHMuY2hpbGRyZW4oKS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKGhhc1Rlcm1zICYmIGhhc05vUmVzdWx0cyAmJiBoYXNQcmV2aW91c1Jlc3VsdHMpIHtcbiAgICAgIHRoaXMuJHNlYXJjaFJlc3VsdHMuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcbiAgICAgIHRoaXMuJHF1aWNrTGlua3MucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcbiAgICAgIHRoaXMuc2hvd0ZseURvd24gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy4kcXVpY2tMaW5rcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuJHNlYXJjaFJlc3VsdHMucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcbiAgICAgIHRoaXMuJHF1aWNrTGlua3MuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcbiAgICAgIHRoaXMuc2hvd0ZseURvd24gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIF9zZWFyY2goZXZlbnQpIHtcbiAgICAvLyBJZ25vcmUgbm9uIGNoYXJhY3RlciBrZXkgc3Ryb2tlc1xuICAgIGNvbnN0IGludmFsaWRLZXlTdHJva2VzID0gW1xuICAgICAgJ0FsdCcsXG4gICAgICAnQXJyb3dSaWdodCcsXG4gICAgICAnQXJyb3dMZWZ0JyxcbiAgICAgICdBcnJvd1VwJyxcbiAgICAgICdBcnJvd0Rvd24nLFxuICAgICAgJ0NhcHNsb2NrJyxcbiAgICAgICdDb250cm9sJyxcbiAgICAgICdFc2NhcGUnLFxuICAgICAgJ01ldGEnLFxuICAgICAgJ1NoaWZ0JyxcbiAgICAgICdUYWInLFxuICAgICAgJ0VudGVyJyxcbiAgICBdO1xuXG4gICAgaWYgKGV2ZW50LmtleSAmJiBpbnZhbGlkS2V5U3Ryb2tlcy5pbmRleE9mKGV2ZW50LmtleSkgIT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHRlcm1zID0gdGhpcy4kaW5wdXQudmFsKCk7XG4gICAgY29uc3QgaGFzVGVybXMgPSB0ZXJtcy5sZW5ndGggPiAwO1xuXG4gICAgaWYgKCFoYXNUZXJtcykge1xuICAgICAgaWYgKCF0aGlzLnRha2VPdmVyQWN0aXZlKSB7XG4gICAgICAgIHRoaXMuX2ZseURvd25Jbml0aWFsKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuc2hvd0ZseURvd24pIHtcbiAgICAgICAgdGhpcy5fY2xvc2VGbHlEb3duKHRydWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZmx5RG93blNlYXJjaGluZygpO1xuXG4gICAgLy8gQ2xlYXIgcHJldmlvdXMgcmVzdWx0c1xuICAgIHRoaXMuJHNlYXJjaFJlc3VsdHMuaHRtbCgnJyk7XG5cbiAgICAvLyBJZiB0ZXJtcyBoYXMgbGVuZ3RoLCB0aGlzIHdpbGwgYmUgdHJ1ZVxuICAgIHRoaXMuX3RvZ2dsZUJ1dHRvbihoYXNUZXJtcyk7XG5cbiAgICAvLyBTaG93IHRoZSBmbHlvdXQgaWYgaXQgaXNuJ3Qgb3BlblxuICAgIGlmICghdGhpcy4kZmx5RG93bi5kYXRhKCdpcy1vcGVuJykpIHtcbiAgICAgIHRoaXMuc2hvd0ZseURvd24gPSB0cnVlO1xuICAgICAgdGhpcy5fb3BlbkZseURvd24oKTtcbiAgICB9XG5cbiAgICAvLyBBZGRzIGAqYCBhZnRlciBlYWNoIHdvcmQgaW4gc2VhcmNoIHRlcm1zLCBkb2Vzbid0IGFkZCB0byBsYXN0IHdvcmRcbiAgICBpZiAodGVybXMuaW5kZXhPZignICcpID4gMCkge1xuICAgICAgdGVybXMgPSB0ZXJtc1xuICAgICAgICAuc3BsaXQoJyAnKVxuICAgICAgICAuam9pbignKiAnKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIC8vIEFkZHMgYCpgIGF0IHRoZSBlbmQgb2YgdGhlIHNlYXJjaCB0ZXJtc1xuICAgIHRlcm1zID0gYCR7dGVybXN9KmA7XG5cbiAgICB0aGlzLnNlYXJjaC5leGVjdXRlKHRlcm1zKTtcbiAgfVxuXG4gIF9zZWFyY2hFcnJvcihyZXNwb25zZSkge1xuICAgIGNvbnNvbGUud2FybignU2VhcmNoIGhhZCBlcnJvcicpO1xuICAgIGNvbnNvbGUuaW5mbyhyZXNwb25zZS5tZXNzYWdlLCByZXNwb25zZS5lcnJvciwgcmVzcG9uc2UuZXZlbnQpO1xuICAgIHRoaXMuX3RvZ2dsZUJ1dHRvbihmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGhhcyBiZWVuIGNhbmNlbGxlZCBkdWUgdG8gbmV3IHNlYXJjaCBiZWluZyBwZXJmb3JtZWRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZWFyY2hDYW5jZWxsZWQoKSB7XG4gICAgLy8gU2VhcmNoZXMgYXJlIGNhbmNlbGVkIG9uIHVzZXIgaW50ZXJhY3Rpb24sIFVJIHNob3VsZCByZW1haW4gdW5jaGFuZ2VkXG4gIH1cblxuICBfc2VhcmNoQ29tcGxldGUocmVzcG9uc2UpIHtcbiAgICBsZXQgeyBjb250ZW50LCBwcm9kdWN0cyB9ID0gcmVzcG9uc2U7XG4gICAgY29uc3QgeyB0ZXJtcywgc2FuaXRpemVkVGVybXMgfSA9IHJlc3BvbnNlO1xuXG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMCwgTUFYX1JFU1VMVFMpO1xuICAgIHByb2R1Y3RzID0gcHJvZHVjdHMuc2xpY2UoMCwgTUFYX1JFU1VMVFMpO1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICBwcm9kdWN0czoge1xuICAgICAgICByZXN1bHRzOiB7XG4gICAgICAgICAgcHJvZHVjdHMsXG4gICAgICAgICAgZW5hYmxlSW1hZ2VzOiB0aGlzLmVuYWJsZUltYWdlcyxcbiAgICAgICAgICBjb250ZXh0OiB0aGlzLnNldHRpbmdzLmNvbn
1RleHQsXG4gICAgICAgIH0sXG4gICAgICAgIG5vUmVzdWx0czoge1xuICAgICAgICAgIGNvbnRleHQ6IHRoaXMuc2V0dGluZ3MuY29udGV4dCxcbiAgICAgICAgICB0ZXJtczogc2FuaXRpemVkVGVybXMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29udGVudDoge1xuICAgICAgICByZXN1bHRzOiB7XG4gICAgICAgICAgY29udGV4dDogdGhpcy5zZXR0aW5ncy5jb250ZXh0LFxuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgIH0sXG4gICAgICAgIG5vUmVzdWx0czoge1xuICAgICAgICAgIGNvbnRleHQ6IHRoaXMuc2V0dGluZ3MuY29udGV4dCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBmb290ZXI6IHtcbiAgICAgICAgY29udGV4dDogdGhpcy5zZXR0aW5ncy5jb250ZXh0LFxuICAgICAgICB0ZXJtcyxcbiAgICAgICAgdHlwZTogdGhpcy5zZWFyY2hUeXBlLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgJHByb2R1Y3RSZXN1bHRzID0gcHJvZHVjdHMubGVuZ3RoXG4gICAgICA/IFByb2R1Y3RSZXN1bHRzKHNldHRpbmdzLnByb2R1Y3RzLnJlc3VsdHMpXG4gICAgICA6IFByb2R1Y3ROb1Jlc3VsdHMoc2V0dGluZ3MucHJvZHVjdHMubm9SZXN1bHRzKTtcblxuICAgIGNvbnN0ICRjb250ZW50UmVzdWx0cyA9IGNvbnRlbnQubGVuZ3RoXG4gICAgICA/IENvbnRlbnRSZXN1bHRzKHNldHRpbmdzLmNvbnRlbnQucmVzdWx0cylcbiAgICAgIDogQ29udGVudE5vUmVzdWx0cyhzZXR0aW5ncy5jb250ZW50Lm5vUmVzdWx0cyk7XG5cbiAgICAkcHJvZHVjdFJlc3VsdHMuZmluZCgnLm1vbmV5JykuZWFjaCgoaSwgZWwpID0+IHtcbiAgICAgIGVsLmlubmVySFRNTCA9IFNob3BpZnkuZm9ybWF0TW9uZXkoXG4gICAgICAgIGVsLmlubmVySFRNTCxcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5tb25leV9mb3JtYXQsXG4gICAgICApO1xuICAgICAgQ3VycmVuY3lDb252ZXJ0ZXIudXBkYXRlKGVsKTtcbiAgICB9KTtcblxuICAgIC8vIEhpZGUgcGxhY2Vob2xkZXJcbiAgICAvLyBUT0RPOiBMb2NrIG1pbmltdW0gaGVpZ2h0P1xuICAgIHRoaXMuJHNlYXJjaFBsYWNlaG9sZGVyLnJlbW92ZUNsYXNzKCd2aXNpYmxlJyk7XG5cbiAgICAvLyBTaG93IHJlc3VsdHNcbiAgICB0aGlzLiRzZWFyY2hSZXN1bHRzLmh0bWwoJHByb2R1Y3RSZXN1bHRzKS5hZGRDbGFzcygndmlzaWJsZScpO1xuXG4gICAgaWYgKHRoaXMuY29udGVudFR5cGVzICE9PSAncHJvZHVjdCcpIHtcbiAgICAgIHRoaXMuJHNlYXJjaFJlc3VsdHMuYXBwZW5kKCRjb250ZW50UmVzdWx0cyk7XG4gICAgfVxuXG4gICAgdGhpcy4kc2VhcmNoUmVzdWx0cy5hcHBlbmQoUmVzdWx0c0Zvb3RlcihzZXR0aW5ncy5mb290ZXIpKTtcblxuICAgIHRoaXMuX3RvZ2dsZUJ1dHRvbihmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBzZWFyY2ggYnV0dG9uIHdoaWxlIHByb2Nlc3NpbmdcbiAgICpcbiAgICogQHBhcmFtIGRpc2FibGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90b2dnbGVCdXR0b24oZGlzYWJsZSkge1xuICAgIGlmIChkaXNhYmxlKSB7XG4gICAgICB0aGlzLiRidXR0b24uYWRkQ2xhc3MoJ3NlYXJjaC1pY29uLS1wcm9jZXNzaW5nJykuYXR0cignZGlzYWJsZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4kYnV0dG9uXG4gICAgICAgIC5yZW1vdmVDbGFzcygnc2VhcmNoLWljb24tLXByb2Nlc3NpbmcnKVxuICAgICAgICAucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cblxuICBfc2VhcmNoRm9jdXNlZChlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLmZseURvd25BY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNUZXJtcyA9IHRoaXMuJGlucHV0LnZhbCgpLmxlbmd0aCA+IDA7XG5cbiAgICAvLyBPbmx5IGxpc3RlbiBmb3IgZXZlbnRzIG91dHNpZGUgb2YgdGhlIHNlYXJjaCBmbHlkb3duIHdoZW4gaXRzIG9wZW5cbiAgICB0aGlzLmNsb3NlRXZlbnRzID0gW1xuICAgICAgdGhpcy4kZG9jdW1lbnQub24oJ2ZvY3VzaW4ubGl2ZS1zZWFyY2gnLCB0aGlzLl9kb2N1bWVudEZvY3VzKSxcbiAgICAgIHRoaXMuJGRvY3VtZW50Lm9uKCd0b3VjaHN0YXJ0LmxpdmUtc2VhcmNoJywgdGhpcy5fZG9jdW1lbnRGb2N1cyksXG4gICAgICB0aGlzLiRkb2N1bWVudC5vbignY2xpY2subGl2ZS1zZWFyY2gnLCB0aGlzLl9kb2N1bWVudEZvY3VzKSxcbiAgICBdO1xuXG4gICAgdGhpcy4kZWwuYWRkQ2xhc3MoJ2xpdmUtc2VhcmNoLS1mb2N1c2VkJyk7XG5cbiAgICB0aGlzLl9mbHlEb3duSW5pdGlhbChoYXNUZXJtcyk7XG5cbiAgICB0aGlzLl9vcGVuRmx5RG93bigpO1xuICB9XG5cbiAgX29wZW5GbHlEb3duKCkge1xuICAgIGlmICghdGhpcy5zaG93Rmx5RG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fY2xvc2VFc2MpO1xuXG4gICAgdGhpcy4kZWwuYWRkQ2xhc3MoJ2xpdmUtc2VhcmNoLS1hY3RpdmUnKTtcbiAgICB0aGlzLiRmbHlEb3duLmRhdGEoJ2lzLW9wZW4nLCB0cnVlKTtcbiAgICB0aGlzLmZseURvd25BY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSBGbHlEb3duIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZFxuICAgKiAgLSBLZWVwIGZvY3VzIHN0eWxpbmcgaWYgaW5wdXQgaXMgc3RpbGwgYmVpbmcgaW50ZXJhY3RlZCB3aXRoXG4gICAqXG4gICAqIEBwYXJhbSByZXRhaW5Gb2N1c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2Nsb3NlRmx5RG93bihyZXRhaW5Gb2N1cyA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLmZseURvd25BY3RpdmUpIHtcbiAgICAgIGlmICghcmV0YWluRm9jdXMpIHtcbiAgICAgICAgdGhpcy4kZWwucmVtb3ZlQ2xhc3MoJ2xpdmUtc2VhcmNoLS1mb2N1c2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWtlT3ZlckFjdGl2ZSkge1xuICAgICAgdGhpcy5fdG9nZ2xlVGFrZU92ZXIobnVsbCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuJGZseURvd24uZGF0YSgnaXMtb3BlbicsIGZhbHNlKTtcbiAgICB0aGlzLiRlbC5yZW1vdmVDbGFzcygnbGl2ZS1zZWFyY2gtLWFjdGl2ZScpO1xuXG4gICAgaWYgKCFyZXRhaW5Gb2N1cykge1xuICAgICAgdGhpcy4kZWwucmVtb3ZlQ2xhc3MoJ2xpdmUtc2VhcmNoLS1mb2N1c2VkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5mbHlEb3duQWN0aXZlID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuY2xvc2VFdmVudHMgJiYgdGhpcy5jbG9zZUV2ZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2xvc2VFdmVudHMuZm9yRWFjaCgkZWwgPT4ge1xuICAgICAgICAkZWwub2ZmKCcubGl2ZS1zZWFyY2gnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgI
1HdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fY2xvc2VFc2MpO1xuXG4gICAgdGhpcy5jbG9zZUV2ZW50cyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gb3IgY2xvc2UgdGhlIFRha2Ugb3ZlciBmb3IgbW9iaWxlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gZW5hYmxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdG9nZ2xlVGFrZU92ZXIoZXZlbnQgPSBudWxsLCBlbmFibGUgPSBmYWxzZSkge1xuICAgIHRoaXMudGFrZU92ZXJBY3RpdmUgPSBlbmFibGU7XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKCFlbmFibGUpIHtcbiAgICAgIHRoaXMuX2Nsb3NlRmx5RG93bihmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuJGhlYWRlci5oYXNDbGFzcygnc2VhcmNoLS1zZWN0aW9uJykpIHtcbiAgICAgIHRoaXMuJGJvZHkudG9nZ2xlQ2xhc3MoJ3NlYXJjaC10YWtlb3Zlci1hY3RpdmUnLCBlbmFibGUpO1xuICAgIH1cblxuICAgIHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCdsaXZlLXNlYXJjaC0tdGFrZW92ZXInLCBlbmFibGUpO1xuICAgIHRoaXMuJGJvZHkudG9nZ2xlQ2xhc3MoJ3Njcm9sbC1sb2NrJywgZW5hYmxlKTtcbiAgfVxuXG4gIG9wZW5Nb2JpbGVUYWtlb3ZlcigpIHtcbiAgICB0aGlzLl90b2dnbGVUYWtlT3ZlcihudWxsLCB0cnVlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fY2xvc2VFc2MpO1xuXG4gICAgdGhpcy4kaW5wdXQuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHRoZSBmb2N1cyBlbGVtZW50IGhhcyBjaGFuZ2VkLCBlaXRoZXIgYnkgY2xpY2tpbmcsIHRvdWNoaW5nLCBvciB0YWJiaW5nXG4gICAqIGNoZWNrIHRvIHNlZSBpZiBpdCBpcyB3aXRoaW4gdGhlIGZseWRvd25cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZG9jdW1lbnRGb2N1cyhldmVudCkge1xuICAgIGNvbnN0ICRwYXJlbnQgPSAkKGV2ZW50LnRhcmdldCkucGFyZW50cygnW2RhdGEtbGl2ZS1zZWFyY2hdJyk7XG5cbiAgICBpZiAoJHBhcmVudC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jbG9zZUZseURvd24oKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/components/search/LiveSearch.js\n")},
1"./source/scripts/components/search/LiveSearchTemplates.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContentResults", function() { return ContentResults; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContentNoResults", function() { return ContentNoResults; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ProductResults", function() { return ProductResults; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ProductNoResults", function() { return ProductNoResults; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ResultsFooter", function() { return ResultsFooter; });\n/**\n * Shows a list item component when result is an article, or a page\n *\n * @param contentItem\n * @returns {string}\n * @constructor\n */\nfunction ContentItem(contentItem) {\n return "\\n <li class=\\"search-flydown--content-item\\">\\n <a href=\\"".concat(contentItem.url, "\\">").concat(contentItem.title, "</a>\\n </li>\\n ");\n}\n/**\n * Shows a header for the article and page results\n *\n * @param context\n * @returns {string}\n * @constructor\n */\n\n\nfunction ContentResultsHeader(context) {\n return "\\n <h5 class=\\"search-flydown--content-title\\">\\n ".concat(context.content_results.title, "\\n </h5>\\n ");\n}\n/**\n * Shows a list of results from articles, or pages\n *\n * @param props\n * @returns {jQuery|HTMLElement}\n * @constructor\n */\n\n\nfunction ContentResults(props) {\n var content = props.content,\n context = props.context;\n var $title = ContentResultsHeader(context);\n var contentItems = content.map(function (contentItem) {\n return ContentItem(contentItem);\n });\n return $("\\n <div class=\\"search-flydown--content-items\\">\\n ".concat($title, "\\n\\n <ul class=\\"search-flydown--content-items-list\\" role=\\"listbox\\" aria-label=\\"content results\\">\\n ").concat(contentItems.join(\'\'), "\\n </ul>\\n </div>\\n "));\n}\n/**\n * Shows a message when there are no article or page results\n *\n * @param props\n * @returns {jQuery|HTMLElement}\n * @constructor\n */\n\n\nfunction ContentNoResults(props) {\n var context = props.context;\n var $title = ContentResultsHeader(context);\n return $("\\n <div class=\\"search-flydown--content-items\\">\\n ".concat($title, "\\n\\n <p class=\\"search-flydown--content-items-none\\">\\n ").concat(context.content_results.no_results, "\\n </p>\\n </div>\\n "));\n}\n/**\n * Shows the product\'s compare_at_price, with connection for CurrencyConverter\n *\n * @param price\n * @returns {string}\n * @constructor\n */\n\n\nfunction ProductPriceCompareAt(price) {\n return "\\n <span class=\\"search-flydown--product-price--compare-at\\">\\n <span class=\\"money\\">".concat(price.compare_at_price, "</span>\\n </span>\\n ");\n}\n/**\n * Shows the product\'s price, with connection for CurrencyConverter\n *\n * @param price\n * @returns {string}\n * @constructor\n */\n\n\nfunction ProductPriceMain(price) {\n return "\\n <span class=\\"search-flydown--product-price--main\\">\\n <span class=\\"money\\">".concat(price.price, "</span>\\n </span>\\n ");\n}\n/**\n * Shows the product\'s prices\n *\n * @param props\n * @returns {string}\n * @constructor\n */\n\n\nfunction ProductPrice(props) {\n var onSale = props.onSale;\n var price = props.price,\n consistentSaved = props.consistentSaved;\n\n if (price.price_min <= 0) {\n onSale = false;\n }\n\n var $compareAt = onSale && consistentSaved ? ProductPriceCompareAt(price) : \'\';\n var $price = ProductPriceMain(price);\n return "\\n <span class=\\"search-flydown--product-price ".concat(onSale ? \'search-flydown--product-price-has-sale\' : \'\', "\\">\\n ").concat($price, "\\n ").concat($compareAt, "\\n </span>\\n ");\n}\n/**\n * Shows a product\'s main content\n *\n * @param product\n * @returns {string}\n * @constructor\n */\n\n\nfunction ProductContent(product) {\n var $price = ProductPrice({\n price: product.price,\n onSale: product.on_sale,\n consistentSaved: product.consistent_saved\n });\n return "\\n <div class=\\"search-flydown--product-text\\">
1\\n <span class=\\"search-flydown--product-title\\">\\n ".concat(product.title, "\\n </span>\\n ").concat($price, "\\n </div>\\n ");\n}\n/**\n * Shows a product\'s image\n *\n * @param image\n * @returns {string}\n * @constructor\n */\n\n\nfunction ProductImage(image) {\n return "\\n <div class=\\"search-flydown--product-image\\">\\n ".concat(image, "\\n </div>\\n ");\n}\n/**\n * Shows a product list item component when result is a product\n *\n * @param product\n * @param enableImages\n * @returns {string}\n * @constructor\n */\n\n\nfunction ProductItem(product, enableImages) {\n var $image = enableImages ? ProductImage(product.image) : \'\';\n var $content = ProductContent(product);\n return "\\n <a class=\\"search-flydown--product search-flydown--product\\" href=\\"".concat(product.url, "\\">\\n ").concat($image, "\\n ").concat($content, "\\n </a>\\n ");\n}\n/**\n * Shows a list of product results\n *\n * @param props\n * @returns {jQuery|HTMLElement}\n * @constructor\n */\n\n\nfunction ProductResults(props) {\n var products = props.products,\n enableImages = props.enableImages,\n context = props.context;\n var productItems = products.map(function (product) {\n return ProductItem(product, enableImages);\n });\n return $("\\n <h5 class=\\"visually-hidden\\">\\n ".concat(context.search_products, "\\n </h5>\\n <div class=\\"search-flydown--product-items\\" role=\\"listbox\\" aria-label=\\"results\\" aria-live=\\"polite\\">\\n ").concat(productItems.join(\'\'), "\\n </div>\\n "));\n}\n/**\n * Show a message when no product results are found\n *\n * @param props\n * @returns {jQuery|HTMLElement}\n * @constructor\n */\n\n\nfunction ProductNoResults(props) {\n var context = props.context,\n terms = props.terms;\n return $("\\n <div class=\\"search-flydown--product-items--none\\" data-live-search-no-products>\\n <h5>\\n ".concat(context.no_results_products.title.replace(\'*terms*\', terms), "\\n </h5>\\n <p>\\n ").concat(context.no_results_products.message, "\\n </p>\\n <p>\\n <a class=\\"search-flydown--continue\\" href=\\"/collections/all\\">\\n ").concat(context.view_all_products, "\\n </a>\\n </p>\\n </div>\\n "));\n}\n/**\n * Show\'s the Results footer, directing customers to all products\n *\n * @param props\n * @returns {jQuery|HTMLElement}\n * @constructor\n */\n\n\nfunction ResultsFooter(props) {\n var context = props.context,\n terms = props.terms,\n type = props.type;\n return $("\\n <div class=\\"search-flydown--footer\\">\\n <a class=\\"search-flydown--continue\\" href=\\"/search?q=".concat(terms, "&type=").concat(type, "\\">\\n ").concat(context.view_all_results, "\\n </a>\\n </div>\\n "));\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL3NlYXJjaC9MaXZlU2VhcmNoVGVtcGxhdGVzLmpzPzI3NzkiXSwibmFtZXMiOlsiQ29udGVudEl0ZW0iLCJjb250ZW50SXRlbSIsInVybCIsInRpdGxlIiwiQ29udGVudFJlc3VsdHNIZWFkZXIiLCJjb250ZXh0IiwiY29udGVudF9yZXN1bHRzIiwiQ29udGVudFJlc3VsdHMiLCJwcm9wcyIsImNvbnRlbnQiLCIkdGl0bGUiLCJjb250ZW50SXRlbXMiLCJtYXAiLCIkIiwiam9pbiIsIkNvbnRlbnROb1Jlc3VsdHMiLCJub19yZXN1bHRzIiwiUHJvZHVjdFByaWNlQ29tcGFyZUF0IiwicHJpY2UiLCJjb21wYXJlX2F0X3ByaWNlIiwiUHJvZHVjdFByaWNlTWFpbiIsIlByb2R1Y3RQcmljZSIsIm9uU2FsZSIsImNvbnNpc3RlbnRTYXZlZCIsInByaWNlX21pbiIsIiRjb21wYXJlQXQiLCIkcHJpY2UiLCJQcm9kdWN0Q29udGVudCIsInByb2R1Y3QiLCJvbl9zYWxlIiwiY29uc2lzdGVudF9zYXZlZCIsIlByb2R1Y3RJbWFnZSIsImltYWdlIiwiUHJvZHVjdEl0ZW0iLCJlbmFibGVJbWFnZXMiLCIkaW1hZ2UiLCIkY29udGVudCIsIlByb2R1Y3RSZXN1bHRzIiwicHJvZHVjdHMiLCJwcm9kdWN0SXRlbXMiLCJzZWFyY2hfcHJvZHVjdHMiLCJQcm9kdWN0Tm9SZXN1bHRzIiwidGVybXMiLCJub19yZXN1bHRzX3Byb2R1Y3RzIiwicmVwbGFjZSIsIm1lc3NhZ2UiLCJ2aWV3X2FsbF9wcm9kdWN0cyIsIlJlc3VsdHNGb290ZXIiLCJ0eXBlIiwidmlld19hbGxfcmVzdWx0cyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7QUFPQSxTQUFTQSxXQUFULENBQXFCQyxXQUFyQixFQUFrQztBQUNoQyxrRkFFYUEsV0FBVyxDQUFDQyxHQUZ6QixnQkFF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yxJQURJO0FBRzVCLFNBQU9uQyxDQUFDLHNIQUVrRDZCLEtBRmxELG1CQUVnRU0sSUFGaEUsMEJBR0EzQyxPQUFPLENBQUM0QyxnQkFIUixrQ0FBUjtBQU9EIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy9zZWFyY2gvTGl2ZVNlYXJjaFRlbXBsYXRlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2hvd3MgYSBsaXN0IGl0ZW0gY29tcG9uZW50IHdoZW4gcmVzdWx0IGlzIGFuIGFydGljbGUsIG9yIGEgcGFnZVxuICpcbiAqIEBwYXJhbSBjb250ZW50SXRlbVxuICogQHJldHVybnMge3N0cmluZ31cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBDb250ZW50SXRlbShjb250ZW50SXRlbSkge1xuICByZXR1cm4gYFxuICA8bGkgY2x
1hc3M9XCJzZWFyY2gtZmx5ZG93bi0tY29udGVudC1pdGVtXCI+XG4gICAgPGEgaHJlZj1cIiR7Y29udGVudEl0ZW0udXJsfVwiPiR7Y29udGVudEl0ZW0udGl0bGV9PC9hPlxuICA8L2xpPlxuICBgO1xufVxuXG4vKipcbiAqIFNob3dzIGEgaGVhZGVyIGZvciB0aGUgYXJ0aWNsZSBhbmQgcGFnZSByZXN1bHRzXG4gKlxuICogQHBhcmFtIGNvbnRleHRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gQ29udGVudFJlc3VsdHNIZWFkZXIoY29udGV4dCkge1xuICByZXR1cm4gYFxuICAgIDxoNSBjbGFzcz1cInNlYXJjaC1mbHlkb3duLS1jb250ZW50LXRpdGxlXCI+XG4gICAgICAke2NvbnRleHQuY29udGVudF9yZXN1bHRzLnRpdGxlfVxuICAgIDwvaDU+XG4gIGA7XG59XG5cbi8qKlxuICogU2hvd3MgYSBsaXN0IG9mIHJlc3VsdHMgZnJvbSBhcnRpY2xlcywgb3IgcGFnZXNcbiAqXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEByZXR1cm5zIHtqUXVlcnl8SFRNTEVsZW1lbnR9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gQ29udGVudFJlc3VsdHMocHJvcHMpIHtcbiAgY29uc3QgeyBjb250ZW50LCBjb250ZXh0IH0gPSBwcm9wcztcbiAgY29uc3QgJHRpdGxlID0gQ29udGVudFJlc3VsdHNIZWFkZXIoY29udGV4dCk7XG4gIGNvbnN0IGNvbnRlbnRJdGVtcyA9IGNvbnRlbnQubWFwKGNvbnRlbnRJdGVtID0+IENvbnRlbnRJdGVtKGNvbnRlbnRJdGVtKSk7XG5cbiAgcmV0dXJuICQoYFxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtZmx5ZG93bi0tY29udGVudC1pdGVtc1wiPlxuICAgICAgJHskdGl0bGV9XG5cbiAgICAgIDx1bCBjbGFzcz1cInNlYXJjaC1mbHlkb3duLS1jb250ZW50LWl0ZW1zLWxpc3RcIiByb2xlPVwibGlzdGJveFwiIGFyaWEtbGFiZWw9XCJjb250ZW50IHJlc3VsdHNcIj5cbiAgICAgICAgJHtjb250ZW50SXRlbXMuam9pbignJyl9XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICBgKTtcbn1cblxuLyoqXG4gKiBTaG93cyBhIG1lc3NhZ2Ugd2hlbiB0aGVyZSBhcmUgbm8gYXJ0aWNsZSBvciBwYWdlIHJlc3VsdHNcbiAqXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEByZXR1cm5zIHtqUXVlcnl8SFRNTEVsZW1lbnR9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gQ29udGVudE5vUmVzdWx0cyhwcm9wcykge1xuICBjb25zdCB7IGNvbnRleHQgfSA9IHByb3BzO1xuICBjb25zdCAkdGl0bGUgPSBDb250ZW50UmVzdWx0c0hlYWRlcihjb250ZXh0KTtcblxuICByZXR1cm4gJChgXG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaC1mbHlkb3duLS1jb250ZW50LWl0ZW1zXCI+XG4gICAgICAkeyR0aXRsZX1cblxuICAgICAgPHAgY2xhc3M9XCJzZWFyY2gtZmx5ZG93bi0tY29udGVudC1pdGVtcy1ub25lXCI+XG4gICAgICAgICR7Y29udGV4dC5jb250ZW50X3Jlc3VsdHMubm9fcmVzdWx0c31cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgYCk7XG59XG5cbi8qKlxuICogU2hvd3MgdGhlIHByb2R1Y3QncyBjb21wYXJlX2F0X3ByaWNlLCB3aXRoIGNvbm5lY3Rpb24gZm9yIEN1cnJlbmN5Q29udmVydGVyXG4gKlxuICogQHBhcmFtIHByaWNlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFByb2R1Y3RQcmljZUNvbXBhcmVBdChwcmljZSkge1xuICByZXR1cm4gYFxuICA8c3BhbiBjbGFzcz1cInNlYXJjaC1mbHlkb3duLS1wcm9kdWN0LXByaWNlLS1jb21wYXJlLWF0XCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtb25leVwiPiR7cHJpY2UuY29tcGFyZV9hdF9wcmljZX08L3NwYW4+XG4gIDwvc3Bhbj5cbiAgYDtcbn1cblxuLyoqXG4gKiBTaG93cyB0aGUgcHJvZHVjdCdzIHByaWNlLCB3aXRoIGNvbm5lY3Rpb24gZm9yIEN1cnJlbmN5Q29udmVydGVyXG4gKlxuICogQHBhcmFtIHByaWNlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFByb2R1Y3RQcmljZU1haW4ocHJpY2UpIHtcbiAgcmV0dXJuIGBcbiAgPHNwYW4gY2xhc3M9XCJzZWFyY2gtZmx5ZG93bi0tcHJvZHVjdC1wcmljZS0tbWFpblwiPlxuICAgIDxzcGFuIGNsYXNzPVwibW9uZXlcIj4ke3ByaWNlLnByaWNlfTwvc3Bhbj5cbiAgPC9zcGFuPlxuICBgO1xufVxuXG4vKipcbiAqIFNob3dzIHRoZSBwcm9kdWN0J3MgcHJpY2VzXG4gKlxuICogQHBhcmFtIHByb3BzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFByb2R1Y3RQcmljZShwcm9wcykge1xuICBsZXQgeyBvblNhbGUgfSA9IHByb3BzO1xuICBjb25zdCB7IHByaWNlLCBjb25zaXN0ZW50U2F2ZWQgfSA9IHByb3BzO1xuXG4gIGlmIChwcmljZS5wcmljZV9taW4gPD0gMCkge1xuICAgIG9uU2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgY29uc3QgJGNvbXBhcmVBdCA9IG9uU2FsZSAmJiBjb25zaXN0ZW50U2F2ZWQgPyBQcm9kdWN0UHJpY2VDb21wYXJlQXQocHJpY2UpIDogJyc7XG4gIGNvbnN0ICRwcmljZSA9IFByb2R1Y3RQcmljZU1haW4ocHJpY2UpO1xuXG4gIHJldHVybiBgXG4gICAgPHNwYW4gY2xhc3M9XCJzZWFyY2gtZmx5ZG93bi0tcHJvZHVjdC1wcmljZSAke1xuICBvblNhbGUgPyAnc2VhcmNoLWZseWRvd24tLXByb2R1Y3QtcHJpY2UtaGFzLXNhbGUnIDogJydcbn1cIj5cbiAgICAgICR7JHByaWNlfVxuICAgICAgJHskY29tcGFyZUF0fVxuICAgIDwvc3Bhbj5cbiAgYDtcbn1cblxuLyoqXG4gKiBTaG93cyBhIHByb2R1Y3QncyBtYWluIGNvbnRlbnRcbiAqXG4gKiBAcGFyYW0gcHJvZHVjdFxuICogQHJldHVybnMge3N0cmluZ31cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBQcm9kdWN0Q29udGVudChwcm9kdWN0KSB7XG4gIGNvbnN0ICRwcmljZSA9IFByb2R1Y3RQcmljZSh7XG4gICAgcHJpY2U6IHByb2R1Y3QucHJpY2UsXG4gICAgb25TYWxlOiBwcm9kdWN0Lm9uX3NhbGUsXG4gICAgY29uc2lzdGVudFNhdmVkOiBwcm9kdWN0LmNvbnNpc3RlbnRfc2F2ZWQsXG4gIH0pO1xuXG4gIHJldHVybiBgXG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaC1mbHlkb3duLS1wcm9kdWN0LXRleHRcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2VhcmNoLWZseWRvd24tLXByb2R1Y3QtdGl0bGVcIj5cbiAgICAgICAgJHtwcm9kdWN0LnRpdGxlfVxuICAgICAgPC9zcGFuPlxuICAgICAgJHskcHJpY2V9XG4gICAgPC9kaXY+XG4gIGA7XG59XG5cbi8qKlxuICogU2hvd3MgYSBwcm9kdWN0J3MgaW1hZ2VcbiAqXG4gKiBAcGFyYW0gaW1hZ2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gUHJvZHVjdEltYWdlKGltYWdlKSB7XG4gIHJldHVybi
1BgXG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaC1mbHlkb3duLS1wcm9kdWN0LWltYWdlXCI+XG4gICAgICAke2ltYWdlfVxuICAgIDwvZGl2PlxuICBgO1xufVxuXG4vKipcbiAqIFNob3dzIGEgcHJvZHVjdCBsaXN0IGl0ZW0gY29tcG9uZW50IHdoZW4gcmVzdWx0IGlzIGEgcHJvZHVjdFxuICpcbiAqIEBwYXJhbSBwcm9kdWN0XG4gKiBAcGFyYW0gZW5hYmxlSW1hZ2VzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFByb2R1Y3RJdGVtKHByb2R1Y3QsIGVuYWJsZUltYWdlcykge1xuICBjb25zdCAkaW1hZ2UgPSBlbmFibGVJbWFnZXMgPyBQcm9kdWN0SW1hZ2UocHJvZHVjdC5pbWFnZSkgOiAnJztcbiAgY29uc3QgJGNvbnRlbnQgPSBQcm9kdWN0Q29udGVudChwcm9kdWN0KTtcblxuICByZXR1cm4gYFxuICAgIDxhIGNsYXNzPVwic2VhcmNoLWZseWRvd24tLXByb2R1Y3Qgc2VhcmNoLWZseWRvd24tLXByb2R1Y3RcIiBocmVmPVwiJHtcbiAgcHJvZHVjdC51cmxcbn1cIj5cbiAgICAgICR7JGltYWdlfVxuICAgICAgJHskY29udGVudH1cbiAgICA8L2E+XG4gIGA7XG59XG5cbi8qKlxuICogU2hvd3MgYSBsaXN0IG9mIHByb2R1Y3QgcmVzdWx0c1xuICpcbiAqIEBwYXJhbSBwcm9wc1xuICogQHJldHVybnMge2pRdWVyeXxIVE1MRWxlbWVudH1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBQcm9kdWN0UmVzdWx0cyhwcm9wcykge1xuICBjb25zdCB7IHByb2R1Y3RzLCBlbmFibGVJbWFnZXMsIGNvbnRleHQgfSA9IHByb3BzO1xuICBjb25zdCBwcm9kdWN0SXRlbXMgPSBwcm9kdWN0cy5tYXAocHJvZHVjdCA9PiBQcm9kdWN0SXRlbShwcm9kdWN0LCBlbmFibGVJbWFnZXMpKTtcblxuICByZXR1cm4gJChgXG4gICAgPGg1IGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+XG4gICAgICAke2NvbnRleHQuc2VhcmNoX3Byb2R1Y3RzfVxuICAgIDwvaDU+XG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaC1mbHlkb3duLS1wcm9kdWN0LWl0ZW1zXCIgcm9sZT1cImxpc3Rib3hcIiBhcmlhLWxhYmVsPVwicmVzdWx0c1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgJHtwcm9kdWN0SXRlbXMuam9pbignJyl9XG4gICAgPC9kaXY+XG4gIGApO1xufVxuXG4vKipcbiAqIFNob3cgYSBtZXNzYWdlIHdoZW4gbm8gcHJvZHVjdCByZXN1bHRzIGFyZSBmb3VuZFxuICpcbiAqIEBwYXJhbSBwcm9wc1xuICogQHJldHVybnMge2pRdWVyeXxIVE1MRWxlbWVudH1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBQcm9kdWN0Tm9SZXN1bHRzKHByb3BzKSB7XG4gIGNvbnN0IHsgY29udGV4dCwgdGVybXMgfSA9IHByb3BzO1xuXG4gIHJldHVybiAkKGBcbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWZseWRvd24tLXByb2R1Y3QtaXRlbXMtLW5vbmVcIiBkYXRhLWxpdmUtc2VhcmNoLW5vLXByb2R1Y3RzPlxuICAgICAgPGg1PlxuICAgICAgICAke2NvbnRleHQubm9fcmVzdWx0c19wcm9kdWN0cy50aXRsZS5yZXBsYWNlKCcqdGVybXMqJywgdGVybXMpfVxuICAgICAgPC9oNT5cbiAgICAgIDxwPlxuICAgICAgICAke2NvbnRleHQubm9fcmVzdWx0c19wcm9kdWN0cy5tZXNzYWdlfVxuICAgICAgPC9wPlxuICAgICAgPHA+XG4gICAgICAgIDxhIGNsYXNzPVwic2VhcmNoLWZseWRvd24tLWNvbnRpbnVlXCIgaHJlZj1cIi9jb2xsZWN0aW9ucy9hbGxcIj5cbiAgICAgICAgICAke2NvbnRleHQudmlld19hbGxfcHJvZHVjdHN9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgYCk7XG59XG5cbi8qKlxuICogU2hvdydzIHRoZSBSZXN1bHRzIGZvb3RlciwgZGlyZWN0aW5nIGN1c3RvbWVycyB0byBhbGwgcHJvZHVjdHNcbiAqXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEByZXR1cm5zIHtqUXVlcnl8SFRNTEVsZW1lbnR9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gUmVzdWx0c0Zvb3Rlcihwcm9wcykge1xuICBjb25zdCB7IGNvbnRleHQsIHRlcm1zLCB0eXBlIH0gPSBwcm9wcztcblxuICByZXR1cm4gJChgXG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaC1mbHlkb3duLS1mb290ZXJcIj5cbiAgICAgIDxhIGNsYXNzPVwic2VhcmNoLWZseWRvd24tLWNvbnRpbnVlXCIgaHJlZj1cIi9zZWFyY2g/cT0ke3Rlcm1zfSZ0eXBlPSR7dHlwZX1cIj5cbiAgICAgICAgJHtjb250ZXh0LnZpZXdfYWxsX3Jlc3VsdHN9XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIGApO1xufVxuXG5leHBvcnQge1xuICBDb250ZW50UmVzdWx0cyxcbiAgQ29udGVudE5vUmVzdWx0cyxcbiAgUHJvZHVjdFJlc3VsdHMsXG4gIFByb2R1Y3ROb1Jlc3VsdHMsXG4gIFJlc3VsdHNGb290ZXIsXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/components/search/LiveSearchTemplates.js\n')},
1"./source/scripts/components/search/SearchForm.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return SearchForm; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar SearchForm =\n/*#__PURE__*/\nfunction () {\n function SearchForm(container) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, SearchForm);\n\n this.$body = jquery__WEBPACK_IMPORTED_MODULE_0___default()('body');\n this.$container = jquery__WEBPACK_IMPORTED_MODULE_0___default()(container);\n this.$form = this.$container.find('[data-live-search-form]');\n this.isLiveSearch = options.liveSearch ? options.liveSearch : false;\n this.submitHandler = this.submitHandler.bind(this);\n this.events = [this.$form.on('submit.search-form', this.submitHandler)];\n }\n\n _createClass(SearchForm, [{\n key: \"unload\",\n value: function unload() {\n this.events.forEach(function ($el) {\n return $el.off('.search-form');\n });\n }\n }, {\n key: \"submitHandler\",\n value: function submitHandler(event) {\n event.preventDefault();\n var $form = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget).clone();\n var $terms = $form.find('[name=q]');\n $form.css({\n position: 'absolute',\n left: -1000,\n bottom: -1000,\n visibility: 'hidden'\n });\n var terms = $terms.val();\n\n if (this.isLiveSearch && !terms) {\n return;\n } // Adds `*` after each word in search terms, doesn't add to last word\n\n\n if (terms.indexOf(' ') > 0) {\n terms = terms.split(' ').join('* ').trim();\n } // Adds `*` at the end of the search terms\n\n\n terms = \"\".concat(terms, \"*\"); // Update value\n\n $terms.val(terms); // Forms must be in the browser context in order to submit\n\n this.$body.append($form);\n $form.submit();\n }\n }]);\n\n return SearchForm;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL3NlYXJjaC9TZWFyY2hGb3JtLmpzPzM5MGQiXSwibmFtZXMiOlsiU2VhcmNoRm9ybSIsImNvbnRhaW5lciIsIm9wdGlvbnMiLCIkYm9keSIsIiQiLCIkY29udGFpbmVyIiwiJGZvcm0iLCJmaW5kIiwiaXNMaXZlU2VhcmNoIiwibGl2ZVNlYXJjaCIsInN1Ym1pdEhhbmRsZXIiLCJiaW5kIiwiZXZlbnRzIiwib24iLCJmb3JFYWNoIiwiJGVsIiwib2ZmIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImN1cnJlbnRUYXJnZXQiLCJjbG9uZSIsIiR0ZXJtcyIsImNzcyIsInBvc2l0aW9uIiwibGVmdCIsImJvdHRvbSIsInZpc2liaWxpdHkiLCJ0ZXJtcyIsInZhbCIsImluZGV4T2YiLCJzcGxpdCIsImpvaW4iLCJ0cmltIiwiYXBwZW5kIiwic3VibWl0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0lBRXFCQSxVOzs7QUFDbkIsc0JBQVlDLFNBQVosRUFBcUM7QUFBQSxRQUFkQyxPQUFjLHVFQUFKLEVBQUk7O0FBQUE7O0FBQ25DLFNBQUtDLEtBQUwsR0FBYUMsNkNBQUMsQ0FBQyxNQUFELENBQWQ7QUFDQSxTQUFLQyxVQUFMLEdBQWtCRCw2Q0FBQyxDQUFDSCxTQUFELENBQW5CO0FBQ0EsU0FBS0ssS0FBTCxHQUFhLEtBQUtELFVBQUwsQ0FBZ0JFLElBQWhCLENBQXFCLHlCQUFyQixDQUFiO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQk4sT0FBTyxDQUFDTyxVQUFSLEdBQXFCUCxPQUFPLENBQUNPLFVBQTdCLEdBQTBDLEtBQTlEO0FBRUEsU0FBS0MsYUFBTCxHQUFxQixLQUFLQSxhQUFMLENBQW1CQyxJQUFuQixDQUF3QixJQUF4QixDQUFyQjtBQUVBLFNBQUtDLE1BQUwsR0FBYyxDQUFDLEtBQUtOLEtBQUwsQ0FBV08sRUFBWCxDQUFjLG9CQUFkLEVBQW9DLEtBQUtILGFBQXpDLENBQUQsQ0FBZDtBQUNEOzs7OzZCQUVRO0FBQ1AsV0FBS0UsTUFBTCxDQUFZRSxPQUFaLENBQW9CLFVBQUFDLEdBQUc7QUFBQSxlQUFJQSxHQUFHLENBQUNDLEdBQUosQ0FBUSxjQUFSLENBQUo7QUFBQSxPQUF2QjtBQUNEOzs7a0NBRWFDLEssRUFBTztBQUNuQkEsV0FBSyxDQUFDQyxjQUFOO0FBRUEsVUFBTVosS0FBSyxHQUFHRiw2Q0FBQyxDQUFDYSxLQUFLLENBQUNFLGFBQVAsQ0FBRCxDQUF1QkMsS0FBdkIsRUFBZDtBQUNBLFVBQU1DLE1BQU0sR0FBR2YsS0FBSyxDQUFDQyxJQUFOLENBQVcsVUFBWCxDQUFmO0FBRUFELFdBQUssQ0FBQ2dCLEdBQU4sQ0FBVTtBQUNSQyxnQkFBUSxFQUFFLFVBREY7QUFFUkMsWUFBSSxFQUFFLENBQUMsSUFGQztBQUdSQyxjQUFNLEVBQUUsQ0FBQyxJQUhEO0FBSVJDLGtCQUFVLEVBQUU7QUFKSixPQUFWO0FBT0EsVUFBSUMsS0FBSyxHQUFHTixNQUFNLENBQUNPLEdBQVAsRUFBWjs7QUFFQSxVQUFJLEtBQUtwQixZQUFMLElBQXFCLENBQUNtQixLQUExQixFQUFpQztBQUMvQjtBQUNELE9BakJrQixDQW1CbkI7OztBQUNBLFVBQUlBLEtBQUssQ0FBQ0UsT0FBTixDQUFjLEdBQWQsSUFBcUIsQ0FBekIsRUFBNEI7QU
1FDMUJGLGFBQUssR0FBR0EsS0FBSyxDQUNWRyxLQURLLENBQ0MsR0FERCxFQUVMQyxJQUZLLENBRUEsSUFGQSxFQUdMQyxJQUhLLEVBQVI7QUFJRCxPQXpCa0IsQ0EyQm5COzs7QUFDQUwsV0FBSyxhQUFNQSxLQUFOLE1BQUwsQ0E1Qm1CLENBOEJuQjs7QUFDQU4sWUFBTSxDQUFDTyxHQUFQLENBQVdELEtBQVgsRUEvQm1CLENBaUNuQjs7QUFDQSxXQUFLeEIsS0FBTCxDQUFXOEIsTUFBWCxDQUFrQjNCLEtBQWxCO0FBQ0FBLFdBQUssQ0FBQzRCLE1BQU47QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2NvbXBvbmVudHMvc2VhcmNoL1NlYXJjaEZvcm0uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2hGb3JtIHtcbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLiRib2R5ID0gJCgnYm9keScpO1xuICAgIHRoaXMuJGNvbnRhaW5lciA9ICQoY29udGFpbmVyKTtcbiAgICB0aGlzLiRmb3JtID0gdGhpcy4kY29udGFpbmVyLmZpbmQoJ1tkYXRhLWxpdmUtc2VhcmNoLWZvcm1dJyk7XG4gICAgdGhpcy5pc0xpdmVTZWFyY2ggPSBvcHRpb25zLmxpdmVTZWFyY2ggPyBvcHRpb25zLmxpdmVTZWFyY2ggOiBmYWxzZTtcblxuICAgIHRoaXMuc3VibWl0SGFuZGxlciA9IHRoaXMuc3VibWl0SGFuZGxlci5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5ldmVudHMgPSBbdGhpcy4kZm9ybS5vbignc3VibWl0LnNlYXJjaC1mb3JtJywgdGhpcy5zdWJtaXRIYW5kbGVyKV07XG4gIH1cblxuICB1bmxvYWQoKSB7XG4gICAgdGhpcy5ldmVudHMuZm9yRWFjaCgkZWwgPT4gJGVsLm9mZignLnNlYXJjaC1mb3JtJykpO1xuICB9XG5cbiAgc3VibWl0SGFuZGxlcihldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCAkZm9ybSA9ICQoZXZlbnQuY3VycmVudFRhcmdldCkuY2xvbmUoKTtcbiAgICBjb25zdCAkdGVybXMgPSAkZm9ybS5maW5kKCdbbmFtZT1xXScpO1xuXG4gICAgJGZvcm0uY3NzKHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgbGVmdDogLTEwMDAsXG4gICAgICBib3R0b206IC0xMDAwLFxuICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgfSk7XG5cbiAgICBsZXQgdGVybXMgPSAkdGVybXMudmFsKCk7XG5cbiAgICBpZiAodGhpcy5pc0xpdmVTZWFyY2ggJiYgIXRlcm1zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQWRkcyBgKmAgYWZ0ZXIgZWFjaCB3b3JkIGluIHNlYXJjaCB0ZXJtcywgZG9lc24ndCBhZGQgdG8gbGFzdCB3b3JkXG4gICAgaWYgKHRlcm1zLmluZGV4T2YoJyAnKSA+IDApIHtcbiAgICAgIHRlcm1zID0gdGVybXNcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLmpvaW4oJyogJylcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICAvLyBBZGRzIGAqYCBhdCB0aGUgZW5kIG9mIHRoZSBzZWFyY2ggdGVybXNcbiAgICB0ZXJtcyA9IGAke3Rlcm1zfSpgO1xuXG4gICAgLy8gVXBkYXRlIHZhbHVlXG4gICAgJHRlcm1zLnZhbCh0ZXJtcyk7XG5cbiAgICAvLyBGb3JtcyBtdXN0IGJlIGluIHRoZSBicm93c2VyIGNvbnRleHQgaW4gb3JkZXIgdG8gc3VibWl0XG4gICAgdGhpcy4kYm9keS5hcHBlbmQoJGZvcm0pO1xuICAgICRmb3JtLnN1Ym1pdCgpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/components/search/SearchForm.js\n")},
1"./source/scripts/globals/flickity-ios-fix.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flickity */ \"./node_modules/flickity/js/index.js\");\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flickity__WEBPACK_IMPORTED_MODULE_1__);\n\n // This is required to fix an iOS10 bug for Flickity.\n// It is our own implementation of the Flickity 2.0 fix found here: http://bit.ly/2kU4mKW\n\njquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('dragStart', function (event) {\n var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.target);\n var $flickityEnabledEl = $target.closest('.flickity-enabled');\n\n if ($flickityEnabledEl.length) {\n var flickity = flickity__WEBPACK_IMPORTED_MODULE_1___default.a.data($flickityEnabledEl[0]);\n window.removeEventListener('scroll', flickity);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9nbG9iYWxzL2ZsaWNraXR5LWlvcy1maXguanM/MDRmZiJdLCJuYW1lcyI6WyIkIiwid2luZG93Iiwib24iLCJldmVudCIsIiR0YXJnZXQiLCJ0YXJnZXQiLCIkZmxpY2tpdHlFbmFibGVkRWwiLCJjbG9zZXN0IiwibGVuZ3RoIiwiZmxpY2tpdHkiLCJGbGlja2l0eSIsImRhdGEiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Q0FHQTtBQUNBOztBQUNBQSw2Q0FBQyxDQUFDQyxNQUFELENBQUQsQ0FBVUMsRUFBVixDQUFhLF
1dBQWIsRUFBMEIsVUFBQUMsS0FBSyxFQUFJO0FBQ2pDLE1BQU1DLE9BQU8sR0FBR0osNkNBQUMsQ0FBQ0csS0FBSyxDQUFDRSxNQUFQLENBQWpCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUdGLE9BQU8sQ0FBQ0csT0FBUixDQUFnQixtQkFBaEIsQ0FBM0I7O0FBRUEsTUFBSUQsa0JBQWtCLENBQUNFLE1BQXZCLEVBQStCO0FBQzdCLFFBQU1DLFFBQVEsR0FBR0MsK0NBQVEsQ0FBQ0MsSUFBVCxDQUFjTCxrQkFBa0IsQ0FBQyxDQUFELENBQWhDLENBQWpCO0FBRUFMLFVBQU0sQ0FBQ1csbUJBQVAsQ0FBMkIsUUFBM0IsRUFBcUNILFFBQXJDO0FBQ0Q7QUFDRixDQVREIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvZ2xvYmFscy9mbGlja2l0eS1pb3MtZml4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBGbGlja2l0eSBmcm9tICdmbGlja2l0eSc7XG5cbi8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gZml4IGFuIGlPUzEwIGJ1ZyBmb3IgRmxpY2tpdHkuXG4vLyBJdCBpcyBvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIHRoZSBGbGlja2l0eSAyLjAgZml4IGZvdW5kIGhlcmU6IGh0dHA6Ly9iaXQubHkvMmtVNG1LV1xuJCh3aW5kb3cpLm9uKCdkcmFnU3RhcnQnLCBldmVudCA9PiB7XG4gIGNvbnN0ICR0YXJnZXQgPSAkKGV2ZW50LnRhcmdldCk7XG4gIGNvbnN0ICRmbGlja2l0eUVuYWJsZWRFbCA9ICR0YXJnZXQuY2xvc2VzdCgnLmZsaWNraXR5LWVuYWJsZWQnKTtcblxuICBpZiAoJGZsaWNraXR5RW5hYmxlZEVsLmxlbmd0aCkge1xuICAgIGNvbnN0IGZsaWNraXR5ID0gRmxpY2tpdHkuZGF0YSgkZmxpY2tpdHlFbmFibGVkRWxbMF0pO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZsaWNraXR5KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/globals/flickity-ios-fix.js\n")},
1"./source/scripts/globals/jquery.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n// jQuery plugins expect to find a global `jQuery` object, so we\n// need to attach it to the window.\n//\n// This is in its own file because we have to attach it before any\n// other imports happen, but with ES6 modules, all `import`s have\n// to be at the top.\n\nwindow.jQuery = jquery__WEBPACK_IMPORTED_MODULE_0___default.a;\nwindow.$ = jquery__WEBPACK_IMPORTED_MODULE_0___default.a;\n/* harmony default export */ __webpack_exports__["default"] = (jquery__WEBPACK_IMPORTED_MODULE_0___default.a);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9nbG9iYWxzL2pxdWVyeS5qcz9hMWZmIl0sIm5hbWVzIjpbIndpbmRvdyIsImpRdWVyeSIsIiQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUFBLE1BQU0sQ0FBQ0MsTUFBUCxHQUFnQkMsNkNBQWhCO0FBQ0FGLE1BQU0sQ0FBQ0UsQ0FBUCxHQUFXQSw2Q0FBWDtBQUVlQSw0R0FBZiIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2dsb2JhbHMvanF1ZXJ5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8galF1ZXJ5IHBsdWdpbnMgZXhwZWN0IHRvIGZpbmQgYSBnbG9iYWwgYGpRdWVyeWAgb2JqZWN0LCBzbyB3ZVxuLy8gbmVlZCB0byBhdHRhY2ggaXQgdG8gdGhlIHdpbmRvdy5cbi8vXG4vLyBUaGlzIGlzIGluIGl0cyBvd24gZmlsZSBiZWNhdXNlIHdlIGhhdmUgdG8gYXR0YWNoIGl0IGJlZm9yZSBhbnlcbi8vIG90aGVyIGltcG9ydHMgaGFwcGVuLCBidXQgd2l0aCBFUzYgbW9kdWxlcywgYWxsIGBpbXBvcnRgcyBoYXZlXG4vLyB0byBiZSBhdCB0aGUgdG9wLlxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5Jztcblxud2luZG93LmpRdWVyeSA9ICQ7XG53aW5kb3cuJCA9ICQ7XG5cbmV4cG9ydCBkZWZhdWx0ICQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/globals/jquery.js\n')},
1"./source/scripts/helpers/Images.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Images; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar Images =\n/*#__PURE__*/\nfunction () {\n function Images() {\n _classCallCheck(this, Images);\n }\n\n _createClass(Images, [{\n key: "preload",\n\n /**\n * Preloads an image in memory and uses the browsers cache to store it until needed.\n *\n * @param {Array} images - A list of image urls\n * @param {String} size - A shopify image size attribute\n */\n value: function preload(images, size) {\n if (typeof images === \'string\') {\n images = [images];\n }\n\n for (var i = 0; i < images.length; i++) {\n this.loadImage(this.getSizedImageUrl(images[i], size));\n }\n }\n /**\n * Loads and caches an image in the browsers cache.\n *\n * @param {string} path - An image url\n */\n\n }, {\n key: "loadImage",\n value: function loadImage(path) {\n var image = new Image();\n image.src = path;\n return image;\n }\n /**\n * Adds a Shopify size attribute to a URL\n *\n * @param src\n * @param size\n * @returns {*}\n */\n\n }, {\n key: "getSizedImageUrl",\n value: function getSizedImageUrl() {\n var src = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var size = arguments.length > 1 ? arguments[1] : undefined;\n\n if (!size) {\n return null;\n }\n\n if (size === \'master\') {\n return this.removeProtocol(src);\n }\n\n var match = src.match(/\\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\\?v=\\d+)?$/i);\n\n if (match) {\n var prefix = src.split(match[0]);\n var suffix = match[0];\n return this.removeProtocol("".concat(prefix[0], "_").concat(size).concat(suffix));\n }\n\n console.warn("No ".concat(size, " found for \'").concat(src));\n return null;\n }\n }, {\n key: "removeProtocol",\n value: function removeProtocol(path) {\n return path.replace(/http(s)?:/, \'\');\n }\n }]);\n\n return Images;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9oZWxwZXJzL0ltYWdlcy5qcz83MjYyIl0sIm5hbWVzIjpbIkltYWdlcyIsImltYWdlcyIsInNpemUiLCJpIiwibGVuZ3RoIiwibG9hZEltYWdlIiwiZ2V0U2l6ZWRJbWFnZVVybCIsInBhdGgiLCJpbWFnZSIsIkltYWdlIiwic3JjIiwicmVtb3ZlUHJvdG9jb2wiLCJtYXRjaCIsInByZWZpeCIsInNwbGl0Iiwic3VmZml4IiwiY29uc29sZSIsIndhcm4iLCJyZXBsYWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztJQUFxQkEsTTs7Ozs7Ozs7OztBQUNuQjs7Ozs7OzRCQU1RQyxNLEVBQVFDLEksRUFBTTtBQUNwQixVQUFJLE9BQU9ELE1BQVAsS0FBa0IsUUFBdEIsRUFBZ0M7QUFDOUJBLGNBQU0sR0FBRyxDQUFDQSxNQUFELENBQVQ7QUFDRDs7QUFFRCxXQUFLLElBQUlFLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdGLE1BQU0sQ0FBQ0csTUFBM0IsRUFBbUNELENBQUMsRUFBcEMsRUFBd0M7QUFDdEMsYUFBS0UsU0FBTCxDQUFlLEtBQUtDLGdCQUFMLENBQXNCTCxNQUFNLENBQUNFLENBQUQsQ0FBNUIsRUFBaUNELElBQWpDLENBQWY7QUFDRDtBQUNGO0FBRUQ7Ozs7Ozs7OzhCQUtVSyxJLEVBQU07QUFDZCxVQUFNQyxLQUFLLEdBQUcsSUFBSUMsS0FBSixFQUFkO0FBQ0FELFdBQUssQ0FBQ0UsR0FBTixHQUFZSCxJQUFaO0FBQ0EsYUFBUUMsS0FBUjtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7dUNBT21DO0FBQUEsVUFBbEJFLEdBQWtCLHVFQUFaLElBQVk7QUFBQSxVQUFOUixJQUFNOztBQUNqQyxVQUFJLENBQUNBLElBQUwsRUFBVztBQUNULGVBQU8sSUFBUDtBQUNEOztBQUVELFVBQUlBLElBQUksS0FBSyxRQUFiLEVBQXVCO0FBQ3JCLGVBQU8sS0FBS1MsY0FBTCxDQUFvQkQsR0FBcEIsQ0FBUDtBQUNEOztBQUVELFVBQU1FLEtBQUssR0FBR0YsR0FBRyxDQUFDRSxLQUFKLENBQ1osc0RBRFksQ0FBZDs7QUFJQSxVQUFJQSxLQUFKLEVBQVc7QUFDVCxZQUFNQyxNQUFNLEdBQUdILEdBQUcsQ0FBQ0ksS0FBSixDQUFVRixLQUFLLENBQUMsQ0FBRCxDQUFmLENBQWY7QUFDQSxZQUFNRyxNQUFNLEdBQUdILEtBQUssQ0FBQyxDQUFELENBQXBCO0FBRUEsZUFBTyxLQUFLRCxjQUFMLFdBQXVCRSxNQUFNLENBQUMsQ0FBRCxDQUE3QixjQUFvQ1gsSUFBcEMsU0FBMkNhLE1BQTNDLEVBQVA7QUFDRDs7QUFDREMsYUFBTyxDQUFDQyxJQUFSLGNBQW1CZixJQUFuQix5QkFBc0NRLEdBQXRDO0FBQ0EsYUFBTyxJQUFQO0FBQ0Q7OzttQ0FFY0gsSSxFQUFNO0FBQ25CLGFBQU9BLElBQUksQ0FBQ1csT0FBTCxDQUFhLF
1dBQWIsRUFBMEIsRUFBMUIsQ0FBUDtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvaGVscGVycy9JbWFnZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFnZXMge1xuICAvKipcbiAgICogUHJlbG9hZHMgYW4gaW1hZ2UgaW4gbWVtb3J5IGFuZCB1c2VzIHRoZSBicm93c2VycyBjYWNoZSB0byBzdG9yZSBpdCB1bnRpbCBuZWVkZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGltYWdlcyAtIEEgbGlzdCBvZiBpbWFnZSB1cmxzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzaXplIC0gQSBzaG9waWZ5IGltYWdlIHNpemUgYXR0cmlidXRlXG4gICAqL1xuICBwcmVsb2FkKGltYWdlcywgc2l6ZSkge1xuICAgIGlmICh0eXBlb2YgaW1hZ2VzID09PSAnc3RyaW5nJykge1xuICAgICAgaW1hZ2VzID0gW2ltYWdlc107XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubG9hZEltYWdlKHRoaXMuZ2V0U2l6ZWRJbWFnZVVybChpbWFnZXNbaV0sIHNpemUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYW5kIGNhY2hlcyBhbiBpbWFnZSBpbiB0aGUgYnJvd3NlcnMgY2FjaGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gQW4gaW1hZ2UgdXJsXG4gICAqL1xuICBsb2FkSW1hZ2UocGF0aCkge1xuICAgIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uuc3JjID0gcGF0aDtcbiAgICByZXR1cm4gKGltYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgU2hvcGlmeSBzaXplIGF0dHJpYnV0ZSB0byBhIFVSTFxuICAgKlxuICAgKiBAcGFyYW0gc3JjXG4gICAqIEBwYXJhbSBzaXplXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZ2V0U2l6ZWRJbWFnZVVybChzcmMgPSBudWxsLCBzaXplKSB7XG4gICAgaWYgKCFzaXplKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZSA9PT0gJ21hc3RlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbW92ZVByb3RvY29sKHNyYyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSBzcmMubWF0Y2goXG4gICAgICAvXFwuKGpwZ3xqcGVnfGdpZnxwbmd8Ym1wfGJpdG1hcHx0aWZmfHRpZikoXFw/dj1cXGQrKT8kL2ksXG4gICAgKTtcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gc3JjLnNwbGl0KG1hdGNoWzBdKTtcbiAgICAgIGNvbnN0IHN1ZmZpeCA9IG1hdGNoWzBdO1xuXG4gICAgICByZXR1cm4gdGhpcy5yZW1vdmVQcm90b2NvbChgJHtwcmVmaXhbMF19XyR7c2l6ZX0ke3N1ZmZpeH1gKTtcbiAgICB9XG4gICAgY29uc29sZS53YXJuKGBObyAke3NpemV9IGZvdW5kIGZvciAnJHtzcmN9YCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZW1vdmVQcm90b2NvbChwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvaHR0cChzKT86LywgJycpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/helpers/Images.js\n')},
1"./source/scripts/helpers/LazyLoader.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return LazyLoader; });\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Allows a callback to be run once, when a target intersects the viewport.\n * @constructor\n * @param {HTMLElement} target Element to track\n * @param {Function} callback Function to execute when target enters viewport (only executed once)\n * @param {Object} [options] options with which to construct the IntersectionObserver\n * @param {string} [options.rootMargin=\'30%\'] A string which specifies a set of offsets\n * to add to the root\'s bounding_box when calculating intersections.\n * @param {number} [options.threshold=0] Ratio of intersection required to trigger callback\n */\nvar LazyLoader =\n/*#__PURE__*/\nfunction () {\n function LazyLoader(target, callback, options) {\n _classCallCheck(this, LazyLoader);\n\n var defaultOptions = {\n rootMargin: \'30%\',\n threshold: 0\n };\n this.callback = callback;\n this._runCallback = this._runCallback.bind(this);\n this.observer = new IntersectionObserver(this._runCallback, _objectSpread({}, defaultOptions, {}, options));\n this.observer.observe(target);\n }\n /**\n * Runs the callback if first entry becomes intersecting, then unloads the LazyLoader\n * @_runCallback\n * @param {IntersectionObserverEntry[]} entries Entry to check - all but the\n * first element will be ignored.\n */\n\n\n _createClass(LazyLoader, [{\n key: "_runCallback",\n value: function _runCallback(entries) {\n // do nothing unless target moved into state of intersection\n if (entries[0].isIntersecting === true) {\n this.unload();\n this.callback();\n }\n }\n /**\n * Disconnects IntersectionObserver if active\n * @unload\n */\n\n }, {\n key: "unload",\n value: function unload() {\n this.observer.disconnect();\n }\n }]);\n\n return LazyLoader;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9oZWxwZXJzL0xhenlMb2FkZXIuanM/MDA0ZSJdLCJuYW1lcyI6WyJMYXp5TG9hZGVyIiwidGFyZ2V0IiwiY2FsbGJhY2siLCJvcHRpb25zIiwiZGVmYXVsdE9wdGlvbnMiLCJyb290TWFyZ2luIiwidGhyZXNob2xkIiwiX3J1bkNhbGxiYWNrIiwiYmluZCIsIm9ic2VydmVyIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwiZW50cmllcyIsImlzSW50ZXJzZWN0aW5nIiwidW5sb2FkIiwi
1ZGlzY29ubmVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7OztJQVVxQkEsVTs7O0FBQ25CLHNCQUFZQyxNQUFaLEVBQW9CQyxRQUFwQixFQUE4QkMsT0FBOUIsRUFBdUM7QUFBQTs7QUFDckMsUUFBTUMsY0FBYyxHQUFHO0FBQ3JCQyxnQkFBVSxFQUFFLEtBRFM7QUFFckJDLGVBQVMsRUFBRTtBQUZVLEtBQXZCO0FBS0EsU0FBS0osUUFBTCxHQUFnQkEsUUFBaEI7QUFDQSxTQUFLSyxZQUFMLEdBQW9CLEtBQUtBLFlBQUwsQ0FBa0JDLElBQWxCLENBQXVCLElBQXZCLENBQXBCO0FBRUEsU0FBS0MsUUFBTCxHQUFnQixJQUFJQyxvQkFBSixDQUF5QixLQUFLSCxZQUE5QixvQkFDWEgsY0FEVyxNQUVYRCxPQUZXLEVBQWhCO0FBSUEsU0FBS00sUUFBTCxDQUFjRSxPQUFkLENBQXNCVixNQUF0QjtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7aUNBTWFXLE8sRUFBUztBQUNwQjtBQUNBLFVBQUlBLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBV0MsY0FBWCxLQUE4QixJQUFsQyxFQUF3QztBQUN0QyxhQUFLQyxNQUFMO0FBQ0EsYUFBS1osUUFBTDtBQUNEO0FBQ0Y7QUFFRDs7Ozs7Ozs2QkFJUztBQUNQLFdBQUtPLFFBQUwsQ0FBY00sVUFBZDtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvaGVscGVycy9MYXp5TG9hZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbGxvd3MgYSBjYWxsYmFjayB0byBiZSBydW4gb25jZSwgd2hlbiBhIHRhcmdldCBpbnRlcnNlY3RzIHRoZSB2aWV3cG9ydC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0IEVsZW1lbnQgdG8gdHJhY2tcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0YXJnZXQgZW50ZXJzIHZpZXdwb3J0IChvbmx5IGV4ZWN1dGVkIG9uY2UpXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgd2l0aCB3aGljaCB0byBjb25zdHJ1Y3QgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMucm9vdE1hcmdpbj0nMzAlJ10gQSBzdHJpbmcgd2hpY2ggc3BlY2lmaWVzIGEgc2V0IG9mIG9mZnNldHNcbiAqIHRvIGFkZCB0byB0aGUgcm9vdCdzIGJvdW5kaW5nX2JveCB3aGVuIGNhbGN1bGF0aW5nIGludGVyc2VjdGlvbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudGhyZXNob2xkPTBdIFJhdGlvIG9mIGludGVyc2VjdGlvbiByZXF1aXJlZCB0byB0cmlnZ2VyIGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExhenlMb2FkZXIge1xuICBjb25zdHJ1Y3Rvcih0YXJnZXQsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luOiAnMzAlJyxcbiAgICAgIHRocmVzaG9sZDogMCxcbiAgICB9O1xuXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuX3J1bkNhbGxiYWNrID0gdGhpcy5fcnVuQ2FsbGJhY2suYmluZCh0aGlzKTtcblxuICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIodGhpcy5fcnVuQ2FsbGJhY2ssIHtcbiAgICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGFyZ2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBjYWxsYmFjayBpZiBmaXJzdCBlbnRyeSBiZWNvbWVzIGludGVyc2VjdGluZywgdGhlbiB1bmxvYWRzIHRoZSBMYXp5TG9hZGVyXG4gICAqIEBfcnVuQ2FsbGJhY2tcbiAgICogQHBhcmFtIHtJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W119IGVudHJpZXMgRW50cnkgdG8gY2hlY2sgLSBhbGwgYnV0IHRoZVxuICAgKiBmaXJzdCBlbGVtZW50IHdpbGwgYmUgaWdub3JlZC5cbiAgICovXG4gIF9ydW5DYWxsYmFjayhlbnRyaWVzKSB7XG4gICAgLy8gZG8gbm90aGluZyB1bmxlc3MgdGFyZ2V0IG1vdmVkIGludG8gc3RhdGUgb2YgaW50ZXJzZWN0aW9uXG4gICAgaWYgKGVudHJpZXNbMF0uaXNJbnRlcnNlY3RpbmcgPT09IHRydWUpIHtcbiAgICAgIHRoaXMudW5sb2FkKCk7XG4gICAgICB0aGlzLmNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpc2Nvbm5lY3RzIEludGVyc2VjdGlvbk9ic2VydmVyIGlmIGFjdGl2ZVxuICAgKiBAdW5sb2FkXG4gICAqL1xuICB1bmxvYWQoKSB7XG4gICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/helpers/LazyLoader.js\n')},
1"./source/scripts/helpers/ProductReviews.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return initShopifyProductReviews; });\n/*\n * Initialize Shopify Product Reviews\n *\n * */\nfunction initShopifyProductReviews() {\n if (!window.SPR) {\n return;\n }\n\n window.SPR.registerCallbacks();\n window.SPR.initRatingHandler();\n window.SPR.initDomEls();\n window.SPR.loadProducts();\n window.SPR.loadBadges();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9oZWxwZXJzL1Byb2R1Y3RSZXZpZXdzLmpzPzViNzAiXSwibmFtZXMiOlsiaW5pdFNob3BpZnlQcm9kdWN0UmV2aWV3cyIsIndpbmRvdyIsIlNQUiIsInJlZ2lzdGVyQ2FsbGJhY2tzIiwiaW5pdFJhdGluZ0hhbmRsZXIiLCJpbml0RG9tRWxzIiwibG9hZFByb2R1Y3RzIiwibG9hZEJhZGdlcyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBOzs7O0FBS2UsU0FBU0EseUJBQVQsR0FBcUM7QUFDbEQsTUFBSSxDQUFDQyxNQUFNLENBQUNDLEdBQVosRUFBaUI7QUFDZjtBQUNEOztBQUVERCxRQUFNLENBQUNDLEdBQVAsQ0FBV0MsaUJBQVg7QUFDQUYsUUFBTSxDQUFDQyxHQUFQLENBQVdFLGlCQUFYO0FBQ0FILFFBQU0sQ0FBQ0MsR0FBUCxDQUFXRyxVQUFYO0FBQ0FKLFFBQU0sQ0FBQ0MsR0FBUCxDQUFXSSxZQUFYO0FBQ0FMLFFBQU0sQ0FBQ0MsR0FBUCxDQUFXSyxVQUFYO0FBQ0QiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9oZWxwZXJzL1Byb2R1Y3RSZXZpZXdzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEluaXRpYWxpemUgU2hvcGlmeSBQcm9kdWN0IFJldmlld3NcbiAqXG4gKiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0U2hvcGlmeVByb2R1Y3RSZXZpZXdzKCkge1xuICBpZiAoIXdpbmRvdy5TUFIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3aW5kb3cuU1BSLnJlZ2lzdGVyQ2FsbGJhY2tzKCk7XG4gIHdpbmRvdy5TUFIuaW5pdFJhdGluZ0hhbmRsZXIoKTtcbiAgd2luZG93LlNQUi5pbml0RG9tRWxzKCk7XG4gIHdpbmRvdy5TUFIubG9hZFByb2R1Y3RzKCk7XG4gIHdpbmRvdy5TUFIubG9hZEJhZGdlcygpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/helpers/ProductReviews.js\n')},
1"./source/scripts/helpers/Quantity.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Quantity; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar Quantity =\n/*#__PURE__*/\nfunction () {\n function Quantity(el) {\n _classCallCheck(this, Quantity);\n\n this.$el = $(el);\n this.$inputParent = this.$el.find('.form-field--qty-input');\n this.$input = this.$el.find('[data-quantity-input]');\n this.$selectParent = this.$el.find('.form-field--qty-select');\n this.$select = this.$el.find('[data-quantity-select]');\n this._watchSelect = this._watchSelect.bind(this);\n this._watchInput = this._watchInput.bind(this);\n this.$select.on('change.quantity', this._watchSelect);\n this.$input.on('change.quantity', this._watchInput);\n }\n\n _createClass(Quantity, [{\n key: \"unload\",\n value: function unload() {\n this.$el.off('.quantity');\n }\n }, {\n key: \"_validateValue\",\n value: function _validateValue(event) {\n var baseValue = parseInt(event.currentTarget.value, 10);\n return isNaN(baseValue) ? 1 : baseValue;\n }\n }, {\n key: \"_watchSelect\",\n value: function _watchSelect(event) {\n var value = this._validateValue(event); // Update input to match select\n\n\n this.$input.val(value).trigger('change'); // Switch to quantity input when 10 or more\n\n if (value >= 10) {\n this.$inputParent.removeClass('hidden').addClass('visible');\n this.$input.focus().removeAttr('tabindex').select();\n this.$selectParent.removeClass('visible').addClass('hidden');\n this.$select.attr('tabindex', '-1');\n }\n }\n }, {\n key: \"_watchInput\",\n value: function _watchInput(event) {\n this.$input.val(this._val
1idateValue(event));\n }\n }]);\n\n return Quantity;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9oZWxwZXJzL1F1YW50aXR5LmpzP2VhMzgiXSwibmFtZXMiOlsiUXVhbnRpdHkiLCJlbCIsIiRlbCIsIiQiLCIkaW5wdXRQYXJlbnQiLCJmaW5kIiwiJGlucHV0IiwiJHNlbGVjdFBhcmVudCIsIiRzZWxlY3QiLCJfd2F0Y2hTZWxlY3QiLCJiaW5kIiwiX3dhdGNoSW5wdXQiLCJvbiIsIm9mZiIsImV2ZW50IiwiYmFzZVZhbHVlIiwicGFyc2VJbnQiLCJjdXJyZW50VGFyZ2V0IiwidmFsdWUiLCJpc05hTiIsIl92YWxpZGF0ZVZhbHVlIiwidmFsIiwidHJpZ2dlciIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJmb2N1cyIsInJlbW92ZUF0dHIiLCJzZWxlY3QiLCJhdHRyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztJQUFxQkEsUTs7O0FBQ25CLG9CQUFZQyxFQUFaLEVBQWdCO0FBQUE7O0FBQ2QsU0FBS0MsR0FBTCxHQUFXQyxDQUFDLENBQUNGLEVBQUQsQ0FBWjtBQUNBLFNBQUtHLFlBQUwsR0FBb0IsS0FBS0YsR0FBTCxDQUFTRyxJQUFULENBQWMsd0JBQWQsQ0FBcEI7QUFDQSxTQUFLQyxNQUFMLEdBQWMsS0FBS0osR0FBTCxDQUFTRyxJQUFULENBQWMsdUJBQWQsQ0FBZDtBQUNBLFNBQUtFLGFBQUwsR0FBcUIsS0FBS0wsR0FBTCxDQUFTRyxJQUFULENBQWMseUJBQWQsQ0FBckI7QUFDQSxTQUFLRyxPQUFMLEdBQWUsS0FBS04sR0FBTCxDQUFTRyxJQUFULENBQWMsd0JBQWQsQ0FBZjtBQUVBLFNBQUtJLFlBQUwsR0FBb0IsS0FBS0EsWUFBTCxDQUFrQkMsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBcEI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEtBQUtBLFdBQUwsQ0FBaUJELElBQWpCLENBQXNCLElBQXRCLENBQW5CO0FBRUEsU0FBS0YsT0FBTCxDQUFhSSxFQUFiLENBQWdCLGlCQUFoQixFQUFtQyxLQUFLSCxZQUF4QztBQUNBLFNBQUtILE1BQUwsQ0FBWU0sRUFBWixDQUFlLGlCQUFmLEVBQWtDLEtBQUtELFdBQXZDO0FBQ0Q7Ozs7NkJBRVE7QUFDUCxXQUFLVCxHQUFMLENBQVNXLEdBQVQsQ0FBYSxXQUFiO0FBQ0Q7OzttQ0FFY0MsSyxFQUFPO0FBQ3BCLFVBQU1DLFNBQVMsR0FBR0MsUUFBUSxDQUFDRixLQUFLLENBQUNHLGFBQU4sQ0FBb0JDLEtBQXJCLEVBQTRCLEVBQTVCLENBQTFCO0FBRUEsYUFBT0MsS0FBSyxDQUFDSixTQUFELENBQUwsR0FBbUIsQ0FBbkIsR0FBdUJBLFNBQTlCO0FBQ0Q7OztpQ0FFWUQsSyxFQUFPO0FBQ2xCLFVBQU1JLEtBQUssR0FBRyxLQUFLRSxjQUFMLENBQW9CTixLQUFwQixDQUFkLENBRGtCLENBR2xCOzs7QUFDQSxXQUFLUixNQUFMLENBQVllLEdBQVosQ0FBZ0JILEtBQWhCLEVBQXVCSSxPQUF2QixDQUErQixRQUEvQixFQUprQixDQU1sQjs7QUFDQSxVQUFJSixLQUFLLElBQUksRUFBYixFQUFpQjtBQUNmLGFBQUtkLFlBQUwsQ0FBa0JtQixXQUFsQixDQUE4QixRQUE5QixFQUF3Q0MsUUFBeEMsQ0FBaUQsU0FBakQ7QUFFQSxhQUFLbEIsTUFBTCxDQUNHbUIsS0FESCxHQUVHQyxVQUZILENBRWMsVUFGZCxFQUdHQyxNQUhIO0FBS0EsYUFBS3BCLGFBQUwsQ0FBbUJnQixXQUFuQixDQUErQixTQUEvQixFQUEwQ0MsUUFBMUMsQ0FBbUQsUUFBbkQ7QUFFQSxhQUFLaEIsT0FBTCxDQUFhb0IsSUFBYixDQUFrQixVQUFsQixFQUE4QixJQUE5QjtBQUNEO0FBQ0Y7OztnQ0FFV2QsSyxFQUFPO0FBQ2pCLFdBQUtSLE1BQUwsQ0FBWWUsR0FBWixDQUFnQixLQUFLRCxjQUFMLENBQW9CTixLQUFwQixDQUFoQjtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvaGVscGVycy9RdWFudGl0eS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1YW50aXR5IHtcbiAgY29uc3RydWN0b3IoZWwpIHtcbiAgICB0aGlzLiRlbCA9ICQoZWwpO1xuICAgIHRoaXMuJGlucHV0UGFyZW50ID0gdGhpcy4kZWwuZmluZCgnLmZvcm0tZmllbGQtLXF0eS1pbnB1dCcpO1xuICAgIHRoaXMuJGlucHV0ID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtcXVhbnRpdHktaW5wdXRdJyk7XG4gICAgdGhpcy4kc2VsZWN0UGFyZW50ID0gdGhpcy4kZWwuZmluZCgnLmZvcm0tZmllbGQtLXF0eS1zZWxlY3QnKTtcbiAgICB0aGlzLiRzZWxlY3QgPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1xdWFudGl0eS1zZWxlY3RdJyk7XG5cbiAgICB0aGlzLl93YXRjaFNlbGVjdCA9IHRoaXMuX3dhdGNoU2VsZWN0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5fd2F0Y2hJb
1nB1dCA9IHRoaXMuX3dhdGNoSW5wdXQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuJHNlbGVjdC5vbignY2hhbmdlLnF1YW50aXR5JywgdGhpcy5fd2F0Y2hTZWxlY3QpO1xuICAgIHRoaXMuJGlucHV0Lm9uKCdjaGFuZ2UucXVhbnRpdHknLCB0aGlzLl93YXRjaElucHV0KTtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICB0aGlzLiRlbC5vZmYoJy5xdWFudGl0eScpO1xuICB9XG5cbiAgX3ZhbGlkYXRlVmFsdWUoZXZlbnQpIHtcbiAgICBjb25zdCBiYXNlVmFsdWUgPSBwYXJzZUludChldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlLCAxMCk7XG5cbiAgICByZXR1cm4gaXNOYU4oYmFzZVZhbHVlKSA/IDEgOiBiYXNlVmFsdWU7XG4gIH1cblxuICBfd2F0Y2hTZWxlY3QoZXZlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3ZhbGlkYXRlVmFsdWUoZXZlbnQpO1xuXG4gICAgLy8gVXBkYXRlIGlucHV0IHRvIG1hdGNoIHNlbGVjdFxuICAgIHRoaXMuJGlucHV0LnZhbCh2YWx1ZSkudHJpZ2dlcignY2hhbmdlJyk7XG5cbiAgICAvLyBTd2l0Y2ggdG8gcXVhbnRpdHkgaW5wdXQgd2hlbiAxMCBvciBtb3JlXG4gICAgaWYgKHZhbHVlID49IDEwKSB7XG4gICAgICB0aGlzLiRpbnB1dFBhcmVudC5yZW1vdmVDbGFzcygnaGlkZGVuJykuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblxuICAgICAgdGhpcy4kaW5wdXRcbiAgICAgICAgLmZvY3VzKClcbiAgICAgICAgLnJlbW92ZUF0dHIoJ3RhYmluZGV4JylcbiAgICAgICAgLnNlbGVjdCgpO1xuXG4gICAgICB0aGlzLiRzZWxlY3RQYXJlbnQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKS5hZGRDbGFzcygnaGlkZGVuJyk7XG5cbiAgICAgIHRoaXMuJHNlbGVjdC5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuICAgIH1cbiAgfVxuXG4gIF93YXRjaElucHV0KGV2ZW50KSB7XG4gICAgdGhpcy4kaW5wdXQudmFsKHRoaXMuX3ZhbGlkYXRlVmFsdWUoZXZlbnQpKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/helpers/Quantity.js\n")},
1"./source/scripts/helpers/flickityHelper.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return resizeFlickityIfNeeded; });\n/**\n * Determines if flickity needs to be resized based on the selected image height\n *\n * @param {object} flickity - the flickity instance\n */\nfunction resizeFlickityIfNeeded(flickity) {\n if (!flickity) {\n return;\n }\n\n var activeHeight = flickity.selectedElement.offsetHeight;\n var flickityHeight = flickity.viewport.offsetHeight; // If flickity height is greater than slide height, ignore\n\n if (activeHeight < flickityHeight) {\n return;\n }\n\n flickity.resize();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9oZWxwZXJzL2ZsaWNraXR5SGVscGVyLmpzP2MxN2QiXSwibmFtZXMiOlsicmVzaXplRmxpY2tpdHlJZk5lZWRlZCIsImZsaWNraXR5IiwiYWN0aXZlSGVpZ2h0Iiwic2VsZWN0ZWRFbGVtZW50Iiwib2Zmc2V0SGVpZ2h0IiwiZmxpY2tpdHlIZWlnaHQiLCJ2aWV3cG9ydCIsInJlc2l6ZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBOzs7OztBQUtlLFNBQVNBLHNCQUFULENBQWdDQyxRQUFoQyxFQUEwQztBQUN2RCxNQUFJLENBQUNBLFFBQUwsRUFBZTtBQUNiO0FBQ0Q7O0FBRUQsTUFBTUMsWUFBWSxHQUFHRCxRQUFRLENBQUNFLGVBQVQsQ0FBeUJDLFlBQTlDO0FBQ0EsTUFBTUMsY0FBYyxHQUFHSixRQUFRLENBQUNLLFFBQVQsQ0FBa0JGLFlBQXpDLENBTnVELENBUXZEOztBQUNBLE1BQUlGLFlBQVksR0FBR0csY0FBbkIsRUFBbUM7QUFDakM7QUFDRDs7QUFFREosVUFBUSxDQUFDTSxNQUFUO0FBQ0QiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9oZWxwZXJzL2ZsaWNraXR5SGVscGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGZsaWNraXR5IG5lZWRzIHRvIGJlIHJlc2l6ZWQgYmFzZWQgb24gdGhlIHNlbGVjdGVkIGltYWdlIGhlaWdodFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBmbGlja2l0eSAtIHRoZSBmbGlja2l0eSBpbnN0YW5jZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNpemVGbGlja2l0eUlmTmVlZGVkKGZsaWNraXR5KSB7XG4gIGlmICghZmxpY2tpdHkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhY3RpdmVIZWlnaHQgPSBmbGlja2l0eS5zZWxlY3RlZEVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICBjb25zdCBmbGlja2l0eUhlaWdodCA9IGZsaWNraXR5LnZpZXdwb3J0Lm9mZnNldEhlaWdodDtcblxuICAvLyBJZiBmbGlja2l0eSBoZWlnaHQgaXMgZ3JlYXRlciB0aGFuIHNsaWRlIGhlaWdodCwgaWdub3JlXG4gIGlmIChhY3RpdmVIZWlnaHQgPCBmbGlja2l0eUhlaWdodCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZsaWNraXR5LnJlc2l6ZSgpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/helpers/flickityHelper.js\n')},
1"./source/scripts/helpers/mapUtils.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createMap\", function() { return createMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"displayErrorInThemeEditor\", function() { return displayErrorInThemeEditor; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\n\n/*\n * Function to convert any given latitude and longitude format to decimal degrees\n */\n\nfunction getDecimalDegrees() {\n var firstComponent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var secondComponent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var thirdComponent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var fourthComponent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var directions = {\n N: 1,\n E: 1,\n S: -1,\n W: -1\n };\n var decimalDegrees = 0.0;\n var components = [firstComponent, secondComponent, thirdComponent, fourthComponent];\n\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n\n if (component) {\n if (Number.isNaN(parseFloat(component))) {\n decimalDegrees *= directions[component];\n } else {\n decimalDegrees += Math.pow(parseFloat(component) / 60, i);\n }\n }\n }\n\n return decimalDegrees;\n}\n/*\n * By providing the ability to use a place name, or latitude and longitude coordinates\n * we give merchants, and our demo stores the option to bypass the Geocoding API.\n * The Geocoding API (https://developers.google.com/maps/documentation/geocoding/usage-and-billing) allows us\n * to take a place name and convert it to latitude and longitude expressed in decimal degrees.\n */\n\n\nfunction getLatitudeLongitude(address) {\n var deferred = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.Deferred(); // Degrees, Minutes and Seconds: DDD° MM' SS.S\"\n\n var latLongDegreesMinutesSeconds = /^([0-9]{1,3})(?:°[ ]?| )([0-9]{1,2})(?:'[ ]?| )([0-9]{1,2}(?:\\.[0-9]+)?)(?:\"[ ]?| )?(N|E|S|W) ?([0-9]{1,3})(?:°[ ]?| )([0-9]{1,2})(?:'[ ]?| )([0-9]{1,2}(?:\\.[0-9]+)?)(?:\"[ ]?| )?(N|E|S|W)$/g; // Degrees and Decimal Minutes: DDD° MM.MMM'\n\n var latLongDegreesMinutes = /^([0-9]{1,3})(?:°[ ]?| )([0-9]{1,2}(?:\\.[0-9]+)?)(?:'[ ]?| )?(N|E|S|W) ?([0-9]{1,3})(?:°[ ]?| )([0-9]{1,2}(?:\\.[0-9]+)?)(?:'[ ]?| )?(N|E|S|W)$/g; // Decimal Degrees: DDD.DDDDD°\n\n var latLongDegrees = /^([-|+]?[0-9]{1,3}(?:\\.[0-9]+)?)(?:°[ ]?| )?(N|E|S|W)?,? ?([-|+]?[0-9]{1,3}(?:\\.[0-9]+)?)(?:°[ ]?| )?(N|E|S|W)?$/g;\n var latLongFormats = [latLongDegreesMinutesSeconds, latLongDegreesMinutes, latLongDegrees];\n var latLongMatches = latLongFormats.map(function (latLongFormat) {\n return address.match(latLongFormat);\n });\n /*\n * Select the first latitude and longitude format that is matched.\n * Ordering:\n * 1. Degrees, minutes, and seconds,\n * 2. Degrees, and decimal minutes,\n * 3. Decimal degrees.\n */\n\n var latLongMatch = latLongMatches.reduce(function (accumulator, value, index) {\n if (!accumulator && value) {\n var latLongResult = latLongFormats[index].exec(address);\n var lat = latLongResult.slice(1, latLongResult.length / 2 + 1);\n var lng = latLongResult.slice(latLongResult.length / 2 + 1, latLongResult.length);\n return {\n lat: lat,\n lng: lng\n };\n }\n\n return accumulator;\n }, null); // If we've got a match on latitude and longitude, use that and avoid geocoding\n\n if (latLongMatch) {\n var latDecimalDegrees = getDecimalDegrees.apply(void 0, _toConsumableArray(latLongMatch.lat));\n var longDecimalDegrees = getDecimalDegrees.apply(void 0, _toConsumableArray(latLongMatch.lng));\n deferred.resolve({\n lat: latDecimalDegrees,\n lng: longDecimalDegrees\n });\n } else {\n // Otherwise, geocode the assumed address\n var geocoder = new google.maps.Geocoder();\n geocoder.geocode({\n address: address\n }, function (results, status) {\n if (status !== google.maps.GeocoderStatus.OK) {\n deferred.reject(status);\n }\n\n deferred.resolve(results[0].geometry.location);\n });\n }\n\n return deferred;\n}\n\nfunction getMapStyles(colors) {\n if (!colors) {\n return [];\n }\n\n return [{\n elementType: 'geometry',\n stylers: [{\n color: colors.e\n }]\n }, {\n elementType: 'labels.icon',\n stylers: [{\n visibility: 'off'\n }]\n }, {\n elementType: 'labels.text.fill',\n stylers: [{\n color: colors.a\n }]\n }, {\n elementType: 'labels.text.stroke',\n stylers: [{\n color: colors.e\n }]\n }, {\n featureType: 'administrative',\n elementType: 'geometry',\n stylers: [{\n visibility: 'off'\n }]\n }, {\n featureType: 'administrative.country',\n stylers: [{\n visibility: 'off'\n }]\n }, {\n featureType: 'administrative.land_parcel',\n stylers: [{\n visibility: 'off'\n }]\n }, {\n featureType: 'administrative.neighborhood',\n stylers: [{\n visibility: 'off'\n }]\n }, {\n featureType: 'administrative.locality',\n stylers: [{\n visibility: 'off'\n }]\n }, {\n featureType: 'poi',\n stylers: [{\n visibility: 'off'\n }]\n }, {\n featureType: 'road',\n elementType: 'geometry.fill',\n stylers: [{\n color: colors.d\n }]\n }, {\n featureType: 'road',\n elementType: 'labels.icon',\n stylers: [{\n visibility: 'off'\n }]\n }, {\n featureType: 'road.arterial',\n elementType: 'geometry',\n stylers: [{\n color: colors.c\n }]\n }, {\n featureType: 'road.highway',\n elementType: 'geometry',\n stylers: [{\n color: colors.b\n }]\n }, {\n featureType: 'road.highway.controlled_access',\n stylers: [{\n visibility: 'off'\n }]\n }, {\n featureType: 'road.local',\n elementType: 'labels.text.fill',\n stylers: [{\n color: colors.b\n }]\n }, {\n featureType: 'road.local',\n elementType: 'labels.text.stroke',\n stylers: [{\n color: colors.e\n }]\n }, {\n featureType: 'transit',\n stylers: [{\n visibility: 'off'\n }]\n }, {\n featureType: 'water',\n elementType: 'geometry',\n stylers: [{\n color: colors.f\n }]\n }];\n}\n\nfunction createMap(options) {\n var deferred = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.Deferred();\n var container = options.container,\n address = options.address,\n zoom = options.zoom,\n colors = options.colors;\n getLatitudeLongitude(address).done(function (latLong) {\n var map = new google.maps.Map(container, {\n center: latLong,\n clickableIcons: false,\n disableDefaultUI: true,\n disableDoubleClickZoom: true,\n gestureHandling: 'none',\n keyboardShortcuts: false,\n maxZoom: zoom,\n minZoom: zoom,\n scrollWheel: false,\n styles: getMapStyles(colors),\n zoom: zoom,\n zoomControl: false\n });\n new google.maps.Marker({\n clickable: false,\n map: map,\n position: map.getCenter()\n });\n map.panBy(0, 0);\n deferred.resolve(map);\n }).fail(function (status) {\n var usageLimits = 'https://developers.google.com/maps/faq#usagelimits';\n var errorMessage;\n\n switch (status) {\n case 'ZERO_RESULTS':\n errorMessage = \"<p>Unable to find the address:</p> \".concat(address);\n break;\n\n case 'OVER_QUERY_LIMIT':\n errorMessage = \"\\n <p>Unable to load Google Maps, you have reached your usage limit.</p>\\n <p>\\n Please visit\\n <a href=\\\"\".concat(usageLimits, \"\\\" target=\\\"_blank\\\">\").concat(usageLimits, \"</a>\\n for more details.\\n </p>\\n \");\n break;\n\n default:\n errorMessage = 'Unable to load Google Maps.';\n break;\n }\n\n deferred.reject(errorMessage);\n });\n return deferred;\n}\n\nfunction displayErrorInThemeEditor(container, errorMessage) {\n var isThemeEditor = window.Shopify && window.Shopify.designMode;\n\n if (!isThemeEditor) {\n return;\n }\n\n container.innerHTML = \"<div class=\\\"map-error-message\\\">\".concat(errorMessage, \"</div>\");\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9oZWxwZXJzL21hcFV0aWxzLmpzPzc2YTciXSwibmFtZXMiOlsiZ2V0RGVjaW1hbERlZ3JlZXMiLCJmaXJzdENvbXBvbmVudCIsInNlY29uZENvbXBvbmVudCIsInRoaXJkQ29tcG9uZW50IiwiZm91cnRoQ29tcG9uZW50IiwiZGlyZWN0aW9ucyIsIk4iLCJFIiwiUyIsIlciLCJkZWNpbWFsRGVncmVlcyIsImNvbXBvbmVudHMiLCJpIiwibGVuZ3RoIiwiY29tcG9uZW50IiwiTnVtYmVyIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwiZ2V0TGF0aXR1ZGVMb25naXR1ZGUiLCJhZGRyZXNzIiwiZGVmZXJyZWQiLCIkIiwiRGVmZXJyZWQiLCJsYXRMb25nRGVncmVlc01pbnV0ZXNTZWNvbmRzIiwibGF0TG9uZ0RlZ3JlZXNNaW51dGVzIiwibGF0TG9uZ0RlZ3JlZXMiLCJsYXRMb25nRm9ybWF0cyIsImxhdExvbmdNYXRjaGVzIiwibWFwIiwibGF0TG9uZ0Zvcm1hdCIsIm1hdGNoIiwibGF0TG9uZ01hdGNoIiwicmVkdWNlIiwiYWNjdW11bGF0b3IiLCJ2YWx1ZSIsImluZGV4IiwibGF0TG9uZ1Jlc3VsdCIsImV4ZWMiLCJsYXQiLCJzbGljZSIsImxuZyIsImxhdERlY2ltYWxEZWdyZWVzIiwibG9uZ0RlY2ltYWxEZWdyZWVzIiwicmVzb2x2ZSIsImdlb2NvZGVyIiwiZ29vZ2xlIiwibWFwcyIsIkdlb2NvZGVyIiwiZ2VvY29kZSIsInJlc3VsdHMiLCJzdGF0dXMiLCJHZW9jb2RlclN0YXR1cyIsIk9LIiwicmVqZWN0IiwiZ2VvbWV0cnkiLCJsb2NhdGlvbiIsImdldE1hcFN0eWxlcyIsImNvbG9ycyIsImVsZW1lbnRUeXBlIiwic3R5bGVycyIsImNvbG9yIiwiZSIsInZpc2liaWxpdHkiLCJhIiwiZmVhdHVyZVR5cGUiLCJkIiwiYyIsImIiLCJmIiwiY3JlYXRlTWFwIiwib3B0aW9ucyIsImNvbn
1RhaW5lciIsInpvb20iLCJkb25lIiwibGF0TG9uZyIsIk1hcCIsImNlbnRlciIsImNsaWNrYWJsZUljb25zIiwiZGlzYWJsZURlZmF1bHRVSSIsImRpc2FibGVEb3VibGVDbGlja1pvb20iLCJnZXN0dXJlSGFuZGxpbmciLCJrZXlib2FyZFNob3J0Y3V0cyIsIm1heFpvb20iLCJtaW5ab29tIiwic2Nyb2xsV2hlZWwiLCJzdHlsZXMiLCJ6b29tQ29udHJvbCIsIk1hcmtlciIsImNsaWNrYWJsZSIsInBvc2l0aW9uIiwiZ2V0Q2VudGVyIiwicGFuQnkiLCJmYWlsIiwidXNhZ2VMaW1pdHMiLCJlcnJvck1lc3NhZ2UiLCJkaXNwbGF5RXJyb3JJblRoZW1lRWRpdG9yIiwiaXNUaGVtZUVkaXRvciIsIndpbmRvdyIsIlNob3BpZnkiLCJkZXNpZ25Nb2RlIiwiaW5uZXJIVE1MIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7QUFFQTs7OztBQUdBLFNBQVNBLGlCQUFULEdBS0U7QUFBQSxNQUpBQyxjQUlBLHVFQUppQixDQUlqQjtBQUFBLE1BSEFDLGVBR0EsdUVBSGtCLENBR2xCO0FBQUEsTUFGQUMsY0FFQSx1RUFGaUIsQ0FFakI7QUFBQSxNQURBQyxlQUNBLHVFQURrQixDQUNsQjtBQUNBLE1BQU1DLFVBQVUsR0FBRztBQUNqQkMsS0FBQyxFQUFFLENBRGM7QUFFakJDLEtBQUMsRUFBRSxDQUZjO0FBR2pCQyxLQUFDLEVBQUUsQ0FBQyxDQUhhO0FBSWpCQyxLQUFDLEVBQUUsQ0FBQztBQUphLEdBQW5CO0FBTUEsTUFBSUMsY0FBYyxHQUFHLEdBQXJCO0FBQ0EsTUFBTUMsVUFBVSxHQUFHLENBQ2pCVixjQURpQixFQUVqQkMsZUFGaUIsRUFHakJDLGNBSGlCLEVBSWpCQyxlQUppQixDQUFuQjs7QUFPQSxPQUFLLElBQUlRLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdELFVBQVUsQ0FBQ0UsTUFBL0IsRUFBdUNELENBQUMsRUFBeEMsRUFBNEM7QUFDMUMsUUFBTUUsU0FBUyxHQUFHS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NBQVYsOENBQXdETixZQUF4RDtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvaGVscGVycy9tYXBVdGlscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbi8qXG4gKiBGdW5jdGlvbiB0byBjb252ZXJ0IGFueSBnaXZlbiBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGZvcm1hdCB0byBkZWNpbWFsIGRlZ3JlZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVjaW1hbERlZ3JlZXMoXG4gIGZpcnN0Q29tcG9uZW50ID0gMCxcbiAgc2Vjb25kQ29tcG9uZW50ID0gMCxcbiAgdGhpcmRDb21wb25lbnQgPSAwLFxuICBmb3VydGhDb21wb25lbnQgPSAwLFxuKSB7XG4gIGNvbnN0IGRpcmVjdGlvbnMgPSB7XG4gICAgTjogMSxcbiAgICBFOiAxLFxuICAgIFM6IC0xLFxuICAgIFc6IC0xLFxuICB9O1xuICBsZXQgZGVjaW1hbERlZ3JlZXMgPSAwLjA7XG4gIGNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgZmlyc3RDb21wb25lbnQsXG4gICAgc2Vjb25kQ29tcG9uZW50LFxuICAgIHRoaXJkQ29tcG9uZW50LFxuICAgIGZvdXJ0aENvbXBvbmVudCxcbiAgXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBjb21wb25lbnRzW2ldO1xuXG4gICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgaWYgKE51bWJlci5pc05hTihwYXJzZUZsb2F0KGNvbXBvbmVudCkpKSB7XG4gICAgICAgIGRlY2ltYWxEZWdyZWVzICo9IGRpcmVjdGlvbnNbY29tcG9uZW50XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlY2ltYWxEZWdyZWVzICs9IChwYXJzZUZsb2F0KGNvbXBvbmVudCkgLyA2MCkgKiogaTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVjaW1hbERlZ3JlZXM7XG59XG5cbi8qXG4gKiBCeSBwcm92aWRpbmcgdGhlIGFiaWxpdHkgdG8gdXNlIGEgcGxhY2UgbmFtZSwgb3IgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBjb29yZGluYXRlc1xuICogd2UgZ2l2ZSBtZXJjaGFudHMsIGFuZCBvdXIgZGVtbyBzdG9yZXMgdGhlIG9wdGlvbiB0byBieXBhc3MgdGhlIEdlb2NvZGluZyBBUEkuXG4gKiBUaGUgR2VvY29kaW5nIEFQSSAoaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2dlb2NvZGluZy91c2FnZS1hbmQtYmlsbGluZykgYWxsb3dzIHVzXG4gKiB0byB0YWtlIGEgcGxhY2UgbmFtZSBhbmQgY29udmVydCBpdCB0byBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGV4cHJlc3NlZCBpbiBkZWNpbWFsIGRlZ3JlZXMuXG4gKi9cbmZ1bmN0aW9uIGdldExhdGl0dWRlTG9uZ2l0dWRlKGFkZHJlc3MpIHtcbiAgY29uc3QgZGVmZXJyZWQgPSAkLkRlZmVycmVkKCk7XG4gIC8vIERlZ3JlZXMsIE1pbnV0ZXMgYW5kIFNlY29uZHM6IERERMKwIE1NJyBTUy5TXCJcbiAgY29uc3QgbGF0TG9uZ0RlZ3JlZXNNaW51dGVzU2Vjb25kcyA9IC9eKFswLTldezEsM30pKD86wrBbIF0/fCApKFswLTldezEsMn0pKD86J1sgXT98ICkoWzAtOV17MSwyfSg/OlxcLlswLTldKyk/KSg/OlwiWyBdP3wgKT8oTnxFfFN8VykgPyhbMC05XXsxLDN9KSg/OsKwWyBdP3wgKShbMC05XXsxLDJ9KSg/OidbIF0/fCApKFswLTldezEsMn0oPzpcXC5bMC05XSspPykoPzpcIlsgXT98ICk/KE58RXxTfFcpJC9nO1xuICAvLyBEZWdyZWVzIGFuZCBEZWNpbWFsIE1pbnV0ZXM6IERERMKwIE1NLk1NTSdcbiAgY29uc3QgbGF0TG9uZ0RlZ3JlZXNNaW51dGVzID0gL14oWzAtOV17MSwzfSkoPzrCsFsgXT98ICkoWzAtOV17MSwyfSg/OlxcLlswLTldKyk/KSg/OidbIF0/fCApPyhOfEV8U3xXKSA/KFswLTldezEsM30pKD86wrBbIF0/fCApKFswLTldezEsMn0oPzpcXC5bMC05XSspPykoPzonWyBdP3wgKT8oTnxFfFN8VykkL2c7XG4gIC8vIERlY2ltYWwgRGVncmVlczogRERELkREREREwrBcbiAgY29uc3QgbGF0TG9uZ0RlZ3JlZXMgPSAvXihbLXwrXT9bMC05XXsxLDN9KD86XFwuWzAtOV0rKT8pKD86wrBbIF0/fCApPyhOfEV8U3xXKT8sPyA/KFstfCtdP1swLTldezEsM30oPzpcXC5bMC05XSspPykoPzrCsFsgXT98ICk/KE58RXxTfFcpPyQvZztcbiAgY29uc3QgbGF0TG9uZ0Zvcm1hdHMgPSBbXG4gICAgbGF0TG9uZ0RlZ3JlZXNNaW51dGVzU2Vjb25kcyxcbiAgICBsYXRMb25nRGVncmVlc01pbnV0ZXMsXG4gICAgbGF0TG9uZ0RlZ3JlZXMsXG4gIF07XG4gIGNvbnN0IGxhdExvbmdNYXRjaGVzID0gbGF0TG9uZ0Zvcm1hdHMubWFwKGxhdExvbmdGb3JtYXQgPT4gYWRkcmVzcy5tYXRjaChsYXRMb25nRm9ybWF0KSk7XG5cbiAgLypcbiAgICogU2VsZWN0IHRoZSBmaXJzdCBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGZvcm1hdCB0aGF0IGlzIG1hdGNoZWQuXG4gICAqIE9yZGVyaW5nOlxuICAgKiAgIDEuIERlZ3JlZXMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzLFxuICAgKiAgIDIuIERlZ3JlZXMsIGFuZCBkZWNpbWFsIG1pbnV0ZXMsXG4gICAqICAgMy4gRGVjaW1hbCBkZWdyZWVzLlxuICAgKi9cbiAgY29uc3QgbGF0TG9uZ01hdGNoID0gbGF0TG9uZ01hdGNoZXMucmVkdWNlKChhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4KSA9PiB7XG4gICAgaWYgKCFhY2N1bXVsYXRvciAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgbGF0TG9uZ1Jlc3VsdCA9IGxhdExvbmdGb3JtYXRzW2luZGV4XS5leGVjKGFkZHJlc3MpO1xuICAgICAgY29uc3QgbGF0ID0gbGF0TG9uZ1Jlc3VsdC5zbGljZSgxLCBsYXRMb25nUmVzdWx0Lmxlbmd0aCAvIDIgKyAxKTtcbiAgICAgIGNvbnN0IGxuZyA9IGxhdExvbmdSZXN1bHQuc2xpY2UoXG4gICAgICAgIGxhdExvbmdSZXN1bHQubGVuZ3RoIC8gMiArIDEsXG4gICAgICAgIGxhdExvbmdSZXN1bHQubGVuZ3RoLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGF0LFxuICAgICAgICBsbmcsXG4gICAgICB9O1xuICAgIH1cblxuICAgI
1HJldHVybiBhY2N1bXVsYXRvcjtcbiAgfSwgbnVsbCk7XG5cbiAgLy8gSWYgd2UndmUgZ290IGEgbWF0Y2ggb24gbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSwgdXNlIHRoYXQgYW5kIGF2b2lkIGdlb2NvZGluZ1xuICBpZiAobGF0TG9uZ01hdGNoKSB7XG4gICAgY29uc3QgbGF0RGVjaW1hbERlZ3JlZXMgPSBnZXREZWNpbWFsRGVncmVlcyguLi5sYXRMb25nTWF0Y2gubGF0KTtcbiAgICBjb25zdCBsb25nRGVjaW1hbERlZ3JlZXMgPSBnZXREZWNpbWFsRGVncmVlcyguLi5sYXRMb25nTWF0Y2gubG5nKTtcblxuICAgIGRlZmVycmVkLnJlc29sdmUoe1xuICAgICAgbGF0OiBsYXREZWNpbWFsRGVncmVlcyxcbiAgICAgIGxuZzogbG9uZ0RlY2ltYWxEZWdyZWVzLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSwgZ2VvY29kZSB0aGUgYXNzdW1lZCBhZGRyZXNzXG4gICAgY29uc3QgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcblxuICAgIGdlb2NvZGVyLmdlb2NvZGUoeyBhZGRyZXNzIH0sIChyZXN1bHRzLCBzdGF0dXMpID0+IHtcbiAgICAgIGlmIChzdGF0dXMgIT09IGdvb2dsZS5tYXBzLkdlb2NvZGVyU3RhdHVzLk9LKSB7XG4gICAgICAgIGRlZmVycmVkLnJlamVjdChzdGF0dXMpO1xuICAgICAgfVxuXG4gICAgICBkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdHNbMF0uZ2VvbWV0cnkubG9jYXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGRlZmVycmVkO1xufVxuXG5mdW5jdGlvbiBnZXRNYXBTdHlsZXMoY29sb3JzKSB7XG4gIGlmICghY29sb3JzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICB7IGVsZW1lbnRUeXBlOiAnZ2VvbWV0cnknLCBzdHlsZXJzOiBbeyBjb2xvcjogY29sb3JzLmUgfV0gfSxcbiAgICB7IGVsZW1lbnRUeXBlOiAnbGFiZWxzLmljb24nLCBzdHlsZXJzOiBbeyB2aXNpYmlsaXR5OiAnb2ZmJyB9XSB9LFxuICAgIHsgZWxlbWVudFR5cGU6ICdsYWJlbHMudGV4dC5maWxsJywgc3R5bGVyczogW3sgY29sb3I6IGNvbG9ycy5hIH1dIH0sXG4gICAgeyBlbGVtZW50VHlwZTogJ2xhYmVscy50ZXh0LnN0cm9rZScsIHN0eWxlcnM6IFt7IGNvbG9yOiBjb2xvcnMuZSB9XSB9LFxuICAgIHtcbiAgICAgIGZlYXR1cmVUeXBlOiAnYWRtaW5pc3RyYXRpdmUnLFxuICAgICAgZWxlbWVudFR5cGU6ICdnZW9tZXRyeScsXG4gICAgICBzdHlsZXJzOiBbeyB2aXNpYmlsaXR5OiAnb2ZmJyB9XSxcbiAgICB9LFxuICAgIHsgZmVhdHVyZVR5cGU6ICdhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5Jywgc3R5bGVyczogW3sgdmlzaWJpbGl0eTogJ29mZicgfV0gfSxcbiAgICB7XG4gICAgICBmZWF0dXJlVHlwZTogJ2FkbWluaXN0cmF0aXZlLmxhbmRfcGFyY2VsJyxcbiAgICAgIHN0eWxlcnM6IFt7IHZpc2liaWxpdHk6ICdvZmYnIH1dLFxuICAgIH0sXG4gICAge1xuICAgICAgZmVhdHVyZVR5cGU6ICdhZG1pbmlzdHJhdGl2ZS5uZWlnaGJvcmhvb2QnLFxuICAgICAgc3R5bGVyczogW3sgdmlzaWJpbGl0eTogJ29mZicgfV0sXG4gICAgfSxcbiAgICB7XG4gICAgICBmZWF0dXJlVHlwZTogJ2FkbWluaXN0cmF0aXZlLmxvY2FsaXR5JyxcbiAgICAgIHN0eWxlcnM6IFt7IHZpc2liaWxpdHk6ICdvZmYnIH1dLFxuICAgIH0sXG4gICAgeyBmZWF0dXJlVHlwZTogJ3BvaScsIHN0eWxlcnM6IFt7IHZpc2liaWxpdHk6ICdvZmYnIH1dIH0sXG4gICAge1xuICAgICAgZmVhdHVyZVR5cGU6ICdyb2FkJyxcbiAgICAgIGVsZW1lbnRUeXBlOiAnZ2VvbWV0cnkuZmlsbCcsXG4gICAgICBzdHlsZXJzOiBbeyBjb2xvcjogY29sb3JzLmQgfV0sXG4gICAgfSxcbiAgICB7XG4gICAgICBmZWF0dXJlVHlwZTogJ3JvYWQnLFxuICAgICAgZWxlbWVudFR5cGU6ICdsYWJlbHMuaWNvbicsXG4gICAgICBzdHlsZXJzOiBbeyB2aXNpYmlsaXR5OiAnb2ZmJyB9XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGZlYXR1cmVUeXBlOiAncm9hZC5hcnRlcmlhbCcsXG4gICAgICBlbGVtZW50VHlwZTogJ2dlb21ldHJ5JyxcbiAgICAgIHN0eWxlcnM6IFt7IGNvbG9yOiBjb2xvcnMuYyB9XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGZlYXR1cmVUeXBlOiAncm9hZC5oaWdod2F5JyxcbiAgICAgIGVsZW1lbnRUeXBlOiAnZ2VvbWV0cnknLFxuICAgICAgc3R5bGVyczogW3sgY29sb3I6IGNvbG9ycy5iIH1dLFxuICAgIH0sXG4gICAge1xuICAgICAgZmVhdHVyZVR5cGU6ICdyb2FkLmhpZ2h3YXkuY29udHJvbGxlZF9hY2Nlc3MnLFxuICAgICAgc3R5bGVyczogW3sgdmlzaWJpbGl0eTogJ29mZicgfV0sXG4gICAgfSxcbiAgICB7XG4gICAgICBmZWF0dXJlVHlwZTogJ3JvYWQubG9jYWwnLFxuICAgICAgZWxlbWVudFR5cGU6ICdsYWJlbHMudGV4dC5maWxsJyxcbiAgICAgIHN0eWxlcnM6IFt7IGNvbG9yOiBjb2xvcnMuYiB9XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGZlYXR1cmVUeXBlOiAncm9hZC5sb2NhbCcsXG4gICAgICBlbGVtZW50VHlwZTogJ2xhYmVscy50ZXh0LnN0cm9rZScsXG4gICAgICBzdHlsZXJzOiBbeyBjb2xvcjogY29sb3JzLmUgfV0sXG4gICAgfSxcbiAgICB7IGZlYXR1cmVUeXBlOiAndHJhbnNpdCcsIHN0eWxlcnM6IFt7IHZpc2liaWxpdHk6ICdvZmYnIH1dIH0sXG4gICAge1xuICAgICAgZmVhdHVyZVR5cGU6ICd3YXRlcicsXG4gICAgICBlbGVtZW50VHlwZTogJ2dlb21ldHJ5JyxcbiAgICAgIHN0eWxlcnM6IFt7IGNvbG9yOiBjb2xvcnMuZiB9XSxcbiAgICB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNYXAob3B0aW9ucykge1xuICBjb25zdCBkZWZlcnJlZCA9ICQuRGVmZXJyZWQoKTtcbiAgY29uc3Qge1xuICAgIGNvbnRhaW5lciwgYWRkcmVzcywgem9vbSwgY29sb3JzLFxuICB9ID0gb3B0aW9ucztcblxuICBnZXRMYXRpdHVkZUxvbmdpdHVkZShhZGRyZXNzKVxuICAgIC5kb25lKGxhdExvbmcgPT4ge1xuICAgICAgY29uc3QgbWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcChjb250YWluZXIsIHtcbiAgICAgICAgY2VudGVyOiBsYXRMb25nLFxuICAgICAgICBjbGlja2FibGVJY29uczogZmFsc2UsXG4gICAgICAgIGRpc2FibGVEZWZhdWx0VUk6IHRydWUsXG4gICAgICAgIGRpc2FibGVEb3VibGVDbGlja1pvb206IHRydWUsXG4gICAgICAgIGdlc3R1cmVIYW5kbGluZzogJ25vbmUnLFxuICAgICAgICBrZXlib2FyZFNob3J0Y3V0czogZmFsc2UsXG4gICAgICAgIG1heFpvb206IHpvb20sXG4gICAgICAgIG1pblpvb206IHpvb20sXG4gICAgICAgI
1HNjcm9sbFdoZWVsOiBmYWxzZSxcbiAgICAgICAgc3R5bGVzOiBnZXRNYXBTdHlsZXMoY29sb3JzKSxcbiAgICAgICAgem9vbSxcbiAgICAgICAgem9vbUNvbnRyb2w6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICBjbGlja2FibGU6IGZhbHNlLFxuICAgICAgICBtYXAsXG4gICAgICAgIHBvc2l0aW9uOiBtYXAuZ2V0Q2VudGVyKCksXG4gICAgICB9KTtcblxuICAgICAgbWFwLnBhbkJ5KDAsIDApO1xuICAgICAgZGVmZXJyZWQucmVzb2x2ZShtYXApO1xuICAgIH0pXG4gICAgLmZhaWwoc3RhdHVzID0+IHtcbiAgICAgIGNvbnN0IHVzYWdlTGltaXRzID0gJ2h0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZmFxI3VzYWdlbGltaXRzJztcbiAgICAgIGxldCBlcnJvck1lc3NhZ2U7XG5cbiAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgJ1pFUk9fUkVTVUxUUyc6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYDxwPlVuYWJsZSB0byBmaW5kIHRoZSBhZGRyZXNzOjwvcD4gJHthZGRyZXNzfWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ09WRVJfUVVFUllfTElNSVQnOlxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBcbiAgICAgICAgICAgIDxwPlVuYWJsZSB0byBsb2FkIEdvb2dsZSBNYXBzLCB5b3UgaGF2ZSByZWFjaGVkIHlvdXIgdXNhZ2UgbGltaXQuPC9wPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIFBsZWFzZSB2aXNpdFxuICAgICAgICAgICAgICA8YSBocmVmPVwiJHt1c2FnZUxpbWl0c31cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke3VzYWdlTGltaXRzfTwvYT5cbiAgICAgICAgICAgICAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICBgO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdVbmFibGUgdG8gbG9hZCBHb29nbGUgTWFwcy4nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkZWZlcnJlZC5yZWplY3QoZXJyb3JNZXNzYWdlKTtcbiAgICB9KTtcblxuICByZXR1cm4gZGVmZXJyZWQ7XG59XG5cbmZ1bmN0aW9uIGRpc3BsYXlFcnJvckluVGhlbWVFZGl0b3IoY29udGFpbmVyLCBlcnJvck1lc3NhZ2UpIHtcbiAgY29uc3QgaXNUaGVtZUVkaXRvciA9IHdpbmRvdy5TaG9waWZ5ICYmIHdpbmRvdy5TaG9waWZ5LmRlc2lnbk1vZGU7XG5cbiAgaWYgKCFpc1RoZW1lRWRpdG9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29udGFpbmVyLmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPVwibWFwLWVycm9yLW1lc3NhZ2VcIj4ke2Vycm9yTWVzc2FnZX08L2Rpdj5gO1xufVxuXG5leHBvcnQgeyBjcmVhdGVNYXAsIGRpc3BsYXlFcnJvckluVGhlbWVFZGl0b3IgfTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/helpers/mapUtils.js\n")},
1"./source/scripts/helpers/scrollLeft.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return scrollLeft; });\nfunction scrollLeft($el) {\n var el = $el.get(0);\n var container = el.parentElement;\n var $container = $el.parent();\n\n if (!container) {\n return;\n }\n\n var containerBounds = container.getBoundingClientRect();\n var containerCenter = containerBounds.left + containerBounds.width / 2;\n var elBounds = el.getBoundingClientRect();\n var elCenter = elBounds.left + elBounds.width / 2;\n var scrollAmount = container.scrollLeft - (containerCenter - elCenter);\n $container.animate({\n scrollLeft: scrollAmount\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9oZWxwZXJzL3Njcm9sbExlZnQuanM/NWRiYSJdLCJuYW1lcyI6WyJzY3JvbGxMZWZ0IiwiJGVsIiwiZWwiLCJnZXQiLCJjb250YWluZXIiLCJwYXJlbnRFbGVtZW50IiwiJGNvbnRhaW5lciIsInBhcmVudCIsImNvbnRhaW5lckJvdW5kcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIm
1NvbnRhaW5lckNlbnRlciIsImxlZnQiLCJ3aWR0aCIsImVsQm91bmRzIiwiZWxDZW50ZXIiLCJzY3JvbGxBbW91bnQiLCJhbmltYXRlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQWUsU0FBU0EsVUFBVCxDQUFvQkMsR0FBcEIsRUFBeUI7QUFDdEMsTUFBTUMsRUFBRSxHQUFHRCxHQUFHLENBQUNFLEdBQUosQ0FBUSxDQUFSLENBQVg7QUFDQSxNQUFNQyxTQUFTLEdBQUdGLEVBQUUsQ0FBQ0csYUFBckI7QUFDQSxNQUFNQyxVQUFVLEdBQUdMLEdBQUcsQ0FBQ00sTUFBSixFQUFuQjs7QUFFQSxNQUFJLENBQUNILFNBQUwsRUFBZ0I7QUFDZDtBQUNEOztBQUVELE1BQU1JLGVBQWUsR0FBR0osU0FBUyxDQUFDSyxxQkFBVixFQUF4QjtBQUNBLE1BQU1DLGVBQWUsR0FBR0YsZUFBZSxDQUFDRyxJQUFoQixHQUF1QkgsZUFBZSxDQUFDSSxLQUFoQixHQUF3QixDQUF2RTtBQUNBLE1BQU1DLFFBQVEsR0FBR1gsRUFBRSxDQUFDTyxxQkFBSCxFQUFqQjtBQUNBLE1BQU1LLFFBQVEsR0FBR0QsUUFBUSxDQUFDRixJQUFULEdBQWdCRSxRQUFRLENBQUNELEtBQVQsR0FBaUIsQ0FBbEQ7QUFDQSxNQUFNRyxZQUFZLEdBQUdYLFNBQVMsQ0FBQ0osVUFBVixJQUF3QlUsZUFBZSxHQUFHSSxRQUExQyxDQUFyQjtBQUVBUixZQUFVLENBQUNVLE9BQVgsQ0FBbUI7QUFDakJoQixjQUFVLEVBQUVlO0FBREssR0FBbkI7QUFHRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL2hlbHBlcnMvc2Nyb2xsTGVmdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNjcm9sbExlZnQoJGVsKSB7XG4gIGNvbnN0IGVsID0gJGVsLmdldCgwKTtcbiAgY29uc3QgY29udGFpbmVyID0gZWwucGFyZW50RWxlbWVudDtcbiAgY29uc3QgJGNvbnRhaW5lciA9ICRlbC5wYXJlbnQoKTtcblxuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbnRhaW5lckJvdW5kcyA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgY29udGFpbmVyQ2VudGVyID0gY29udGFpbmVyQm91bmRzLmxlZnQgKyBjb250YWluZXJCb3VuZHMud2lkdGggLyAyO1xuICBjb25zdCBlbEJvdW5kcyA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBlbENlbnRlciA9IGVsQm91bmRzLmxlZnQgKyBlbEJvdW5kcy53aWR0aCAvIDI7XG4gIGNvbnN0IHNjcm9sbEFtb3VudCA9IGNvbnRhaW5lci5zY3JvbGxMZWZ0IC0gKGNvbnRhaW5lckNlbnRlciAtIGVsQ2VudGVyKTtcblxuICAkY29udGFpbmVyLmFuaW1hdGUoe1xuICAgIHNjcm9sbExlZnQ6IHNjcm9sbEFtb3VudCxcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/helpers/scrollLeft.js\n')},
1"./source/scripts/sections/DynamicBlogPosts.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DynamicBlogPosts; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! just-debounce */ "./node_modules/just-debounce/index.js");\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(just_debounce__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flickity */ "./node_modules/flickity/js/index.js");\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flickity__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Layout */ "./source/scripts/Layout.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar DynamicBlogPosts =\n/*#__PURE__*/\nfunction () {\n function DynamicBlogPosts(section) {\n _classCallCheck(this, DynamicBlogPosts);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.$window = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window);\n this.flickity = null;\n this.$blogPosts = this.$el.find(\'[data-blog-posts]\'); // Activate flickity on mobile\n\n this._mobileSlider = this._mobileSlider.bind(this);\n _Layout__WEBPACK_IMPORTED_MODULE_3__["default"].onBreakpointChange(this._mobileSlider);\n\n this._mobileSlider();\n }\n /**\n * Unbind events when section is re-drawn\n */\n\n\n _createClass(DynamicBlogPosts, [{\n key: "onSectionUnload",\n value: function onSectionUnload() {\n _Layout__WEBPACK_IMPORTED_MODULE_3__["default"].offBreakpointChange(this._mobileSlider);\n\n this._destroyFlickity();\n }\n }, {\n key: "_initFlickity",\n value: function _initFlickity() {\n this.flickity = new flickity__WEBPACK_IMPORTED_MODULE_2___default.a(this.$blogPosts[0], {\n cellSelector: \'.article--excerpt-wrapper\',\n contain: true,\n freeScroll: true,\n percentPosition: false,\n prevNextButtons: false,\n pageDots: false,\n setGallerySize: false\n });\n\n this._bindSlider();\n\n this.flickity.resize();\n }\n }, {\n key: "_destroyFlickity",\n value: function _destroyFlickity() {\n if (!this.flickity) {\n return;\n }\n\n this.$window.off(\'.blog-posts\');\n this.$blogPosts.off(\'.blog-posts\');\n this.flickity.destroy();\n this.flickity = null;\n }\n }, {\n key: "_mobileSlider",\n value: function _mobileSlider() {\n // If is Large layout, attempt to destroy flickity\n if (_Layout__WEBPACK_IMPORTED_MODULE_3__["default"].isBreakpoint(\'L\')) {\n this._destroyFlickity();\n\n return;\n } // Is XS/S/M, and flickity is init\'d -- do nothing\n\n\n if (this.flickity) {\n this.flickity.resize();\n return;\n } // Is XS/S/M, and flickity is not init\'d\n\n\n this._initFlickity();\n }\n }, {\n key: "_bindSlider",\n value: function _bindSlider() {\n var _this = this;\n\n var $slider = this.$blogPosts.find(\'.flickity-slider\');\n this.$window.on(\'resize.blog-posts\', just_debounce__WEBPACK_IMPORTED_MODULE_1___default()(function () {\n _this.$blogPosts.trigger(\'heightUpdate.blog-posts\');\n }));\n this.flickity.on(\'cellSelect\', function () {\n _this.$blogPosts.trigger(\'heightUpdate.blog-posts\');\n });\n this.$blogPosts.on(\'heightUpdate.blog-posts\', function () {\n if (!_this.flickity) {\n return;\n }\n\n $slider.height(Math.ceil(_this.flickity.maxCellHeight));\n }); // Sets the Slider to the height of the first slide\n\n this.$blogPosts.trigger(\'heightUpdate.blog-posts\');\n }\n }]);\n\n return DynamicBlogPosts;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljQmxvZ1Bvc3RzLmpzPzI0OTgiXSwibmFtZXMiOlsiRHluYW1pY0Jsb2dQb3N0cyIsInNlY3Rpb24iLCIkZWwiLCIkIiwiZWwiLCIkd2luZG93Iiwid2luZG93IiwiZmxpY2tpdHkiLCIkYmxvZ1Bvc3RzIiwiZmluZCIsIl9tb2JpbGVTbGlkZXIiLCJiaW5kIiwibGF5b3V0Iiwib25CcmVha3BvaW50Q2hhbmdlIiwib2ZmQnJlYWtwb2ludENoYW5nZSIsIl9kZXN0cm95RmxpY2tpdHkiLCJGbGlja2l0eSIsImNlbGxTZWxlY3RvciIsImNvbn
1RhaW4iLCJmcmVlU2Nyb2xsIiwicGVyY2VudFBvc2l0aW9uIiwicHJldk5leHRCdXR0b25zIiwicGFnZURvdHMiLCJzZXRHYWxsZXJ5U2l6ZSIsIl9iaW5kU2xpZGVyIiwicmVzaXplIiwib2ZmIiwiZGVzdHJveSIsImlzQnJlYWtwb2ludCIsIl9pbml0RmxpY2tpdHkiLCIkc2xpZGVyIiwib24iLCJkZWJvdW5jZSIsInRyaWdnZXIiLCJoZWlnaHQiLCJNYXRoIiwiY2VpbCIsIm1heENlbGxIZWlnaHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBOztJQUVxQkEsZ0I7OztBQUNuQiw0QkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUNuQixTQUFLQyxHQUFMLEdBQVdDLDZDQUFDLENBQUNGLE9BQU8sQ0FBQ0csRUFBVCxDQUFaO0FBQ0EsU0FBS0MsT0FBTCxHQUFlRiw2Q0FBQyxDQUFDRyxNQUFELENBQWhCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixJQUFoQjtBQUVBLFNBQUtDLFVBQUwsR0FBa0IsS0FBS04sR0FBTCxDQUFTTyxJQUFULENBQWMsbUJBQWQsQ0FBbEIsQ0FMbUIsQ0FPbkI7O0FBQ0EsU0FBS0MsYUFBTCxHQUFxQixLQUFLQSxhQUFMLENBQW1CQyxJQUFuQixDQUF3QixJQUF4QixDQUFyQjtBQUNBQyxtREFBTSxDQUFDQyxrQkFBUCxDQUEwQixLQUFLSCxhQUEvQjs7QUFDQSxTQUFLQSxhQUFMO0FBQ0Q7QUFFRDs7Ozs7OztzQ0FHa0I7QUFDaEJFLHFEQUFNLENBQUNFLG1CQUFQLENBQTJCLEtBQUtKLGFBQWhDOztBQUNBLFdBQUtLLGdCQUFMO0FBQ0Q7OztvQ0FFZTtBQUNkLFdBQUtSLFFBQUwsR0FBZ0IsSUFBSVMsK0NBQUosQ0FBYSxLQUFLUixVQUFMLENBQWdCLENBQWhCLENBQWIsRUFBaUM7QUFDL0NTLG9CQUFZLEVBQUUsMkJBRGlDO0FBRS9DQyxlQUFPLEVBQUUsSUFGc0M7QUFHL0NDLGtCQUFVLEVBQUUsSUFIbUM7QUFJL0NDLHVCQUFlLEVBQUUsS0FKOEI7QUFLL0NDLHVCQUFlLEVBQUUsS0FMOEI7QUFNL0NDLGdCQUFRLEVBQUUsS0FOcUM7QUFPL0NDLHNCQUFjLEVBQUU7QUFQK0IsT0FBakMsQ0FBaEI7O0FBVUEsV0FBS0MsV0FBTDs7QUFDQSxXQUFLakIsUUFBTCxDQUFja0IsTUFBZDtBQUNEOzs7dUNBRWtCO0FBQ2pCLFVBQUksQ0FBQyxLQUFLbEIsUUFBVixFQUFvQjtB
1QUNsQjtBQUNEOztBQUVELFdBQUtGLE9BQUwsQ0FBYXFCLEdBQWIsQ0FBaUIsYUFBakI7QUFDQSxXQUFLbEIsVUFBTCxDQUFnQmtCLEdBQWhCLENBQW9CLGFBQXBCO0FBQ0EsV0FBS25CLFFBQUwsQ0FBY29CLE9BQWQ7QUFDQSxXQUFLcEIsUUFBTCxHQUFnQixJQUFoQjtBQUNEOzs7b0NBRWU7QUFDZDtBQUNBLFVBQUlLLCtDQUFNLENBQUNnQixZQUFQLENBQW9CLEdBQXBCLENBQUosRUFBOEI7QUFDNUIsYUFBS2IsZ0JBQUw7O0FBQ0E7QUFDRCxPQUxhLENBT2Q7OztBQUNBLFVBQUksS0FBS1IsUUFBVCxFQUFtQjtBQUNqQixhQUFLQSxRQUFMLENBQWNrQixNQUFkO0FBQ0E7QUFDRCxPQVhhLENBYWQ7OztBQUNBLFdBQUtJLGFBQUw7QUFDRDs7O2tDQUVhO0FBQUE7O0FBQ1osVUFBTUMsT0FBTyxHQUFHLEtBQUt0QixVQUFMLENBQWdCQyxJQUFoQixDQUFxQixrQkFBckIsQ0FBaEI7QUFFQSxXQUFLSixPQUFMLENBQWEwQixFQUFiLENBQ0UsbUJBREYsRUFFRUMsb0RBQVEsQ0FBQyxZQUFNO0FBQ2IsYUFBSSxDQUFDeEIsVUFBTCxDQUFnQnlCLE9BQWhCLENBQXdCLHlCQUF4QjtBQUNELE9BRk8sQ0FGVjtBQU9BLFdBQUsxQixRQUFMLENBQWN3QixFQUFkLENBQWlCLFlBQWpCLEVBQStCLFlBQU07QUFDbkMsYUFBSSxDQUFDdkIsVUFBTCxDQUFnQnlCLE9BQWhCLENBQXdCLHlCQUF4QjtBQUNELE9BRkQ7QUFJQSxXQUFLekIsVUFBTCxDQUFnQnVCLEVBQWhCLENBQW1CLHlCQUFuQixFQUE4QyxZQUFNO0FBQ2xELFlBQUksQ0FBQyxLQUFJLENBQUN4QixRQUFWLEVBQW9CO0FBQ2xCO0FBQ0Q7O0FBRUR1QixlQUFPLENBQUNJLE1BQVIsQ0FBZUMsSUFBSSxDQUFDQyxJQUFMLENBQVUsS0FBSSxDQUFDN0IsUUFBTCxDQUFjOEIsYUFBeEIsQ0FBZjtBQUNELE9BTkQsRUFkWSxDQXNCWjs7QUFDQSxXQUFLN0IsVUFBTCxDQUFnQnlCLE9BQWhCLENBQXdCLHlCQUF4QjtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvc2VjdGlvbnMvRHluYW1pY0Jsb2dQb3N0cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSAnanVzdC1kZWJvdW5jZSc7XG5pbXBvcnQgRmxpY2tpdHkgZnJvbSAnZmxpY2tpdHknO1xuXG5pbXBvcnQgbGF5b3V0IGZyb20gJy4uL0xheW91dCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER5bmFtaWNCbG9nUG9zdHMge1xuICBjb25zdHJ1Y3RvcihzZWN0aW9uKSB7XG4gICAgdGhpcy4kZWwgPSAkKHNlY3Rpb24uZWwpO1xuICAgIHRoaXMuJHdpbmRvdyA9ICQod2luZG93KTtcbiAgICB0aGlzLmZsaWNraXR5ID0gbnVsbDtcblxuICAgIHRoaXMuJGJsb2dQb3N0cyA9IHRoaXMuJGVsLmZpbmQoJ1tkYXRhLWJsb2ctcG9zdHNdJyk7XG5cbiAgICAvLyBBY3RpdmF0ZSBmbGlja2l0eSBvbiBtb2JpbGVcbiAgICB0aGlzLl9tb2JpbGVTbGlkZXIgPSB0aGlzLl9tb2JpbGVTbGlkZXIuYmluZCh0aGlzKTtcbiAgICBsYXlvdXQub25CcmVha3BvaW50Q2hhbmdlKHRoaXMuX21vYmlsZVNsaWRlcik7XG4gICAgdGhpcy5fbW9iaWxlU2xpZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogVW5iaW5kIGV2ZW50cyB3aGVuIHNlY3Rpb24gaXMgcmUtZHJhd25cbiAgICovXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICBsYXlvdXQub2ZmQnJlYWtwb2ludENoYW5nZSh0aGlzLl9tb2JpbGVTbGlkZXIpO1xuICAgIHRoaXMuX2Rlc3Ryb3lGbGlja2l0eSgpO1xuICB9XG5cbiAgX2luaXRGbGlja2l0eSgpIHtcbiAgICB0aGlzLmZsaWNraXR5ID0gbmV3IEZsaWNraXR5KHRoaXMuJGJsb2dQb3N0c1swXSwge1xuICAgICAgY2VsbFNlbGVjdG9yOiAnLmFydGljbGUtLWV4Y2VycHQtd3JhcHBlcicsXG4gICAgICBjb250YWluOiB0cnVlLFxuICAgICAgZnJlZVNjcm9sbDogdHJ1ZSxcbiAgICAgIHBlcmNlbnRQb3NpdGlvbjogZmFsc2UsXG4gICAgICBwcmV2TmV4dEJ1dHRvbnM6IGZhbHNlLFxuICAgICAgcGFnZURvdHM6IGZhbHNlLFxuICAgICAgc2V0R2FsbGVyeVNpemU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fYmluZFNsaWRlcigpO1xuICAgIHRoaXMuZmxpY2tpdHkucmVzaXplKCk7XG4gIH1cblxuICBfZGVzdHJveUZsaWNraXR5KCkge1xuICAgIGlmICghdGhpcy5mbGlja2l0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuJHdpbmRvdy5vZmYoJy5ibG9nLXBvc3RzJyk7XG4gICAgdGhpcy4kYmxvZ1Bvc3RzLm9mZignLmJsb2ctcG9zdHMnKTtcbiAgICB0aGlzLmZsaWNraXR5LmRlc3Ryb3koKTtcbiAgICB0aGlzLmZsaWNraXR5ID0gbnVsbDtcbiAgfVxuXG4gIF9tb2JpbGVTbGlkZXIoKSB7XG4gICAgLy8gSWYgaXMgTGFyZ2UgbGF5b3V0LCBhdHRlbXB0IHRvIGRlc3Ryb3kgZmxpY2tpdHlcbiAgICBpZiAobGF5b3V0LmlzQnJlYWtwb2ludCgnTCcpKSB7XG4gICAgICB0aGlzLl9kZXN0cm95RmxpY2tpdHkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJcyBYUy9TL00sIGFuZCBmbGlja2l0eSBpcyBpbml0J2QgLS0gZG8gbm90aGluZ1xuICAgIGlmICh0aGlzLmZsaWNraXR5KSB7XG4gICAgICB0aGlzLmZsaWNraXR5LnJlc2l6ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElzIFhTL1MvTSwgYW5kIGZsaWNraXR5IGlzIG5vdCBpbml0J2RcbiAgICB0aGlzLl9pbml0RmxpY2tpdHkoKTtcbiAgfVxuXG4gIF9iaW5kU2xpZGVyKCkge1xuICAgIGNvbnN0ICRzbGlkZXIgPSB0aGlzLiRibG9nUG9zdHMuZmluZCgnLmZsaWNraXR5LXNsaWRlcicpO1xuXG4gICAgdGhpcy4kd2luZG93Lm9uKFxuICAgICAgJ3Jlc2l6ZS5ibG9nLXBvc3RzJyxcbiAgICAgIGRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgdGhpcy4kYmxvZ1Bvc3RzLnRyaWdnZXIoJ2hlaWdodFVwZGF0ZS5ibG9nLXBvc3RzJyk7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5mbGlja2l0eS5vbignY2VsbFNlbGVjdCcsICgpID0+IHtcbiAgICAgIHRoaXMuJGJsb2dQb3N0cy50cmlnZ2VyKCdoZWlnaHRVcGRhdGUuYmxvZy1wb3N0cycpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kYmxvZ1Bvc3RzLm9uKCdoZWlnaHRVcGRhdGUuYmxvZy1wb3N0cycsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mbGlja2l0eSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICRzbGlkZXIuaGVpZ2h0KE1hdGguY2VpbCh0aGlzLmZsaWNraXR5Lm1heENlbGxIZWlnaHQpKTtcbiAgICB9KTtcblxuICAgIC8vIFNldHMgdGhlIFNsaWRlciB0byB0aGUgaGVpZ2h0IG9mIHRoZSBmaXJzdCBzbGlkZVxuICAgIHRoaXMuJGJsb2dQb3N0cy50cmlnZ2VyKCdoZWlnaHRVcGRhdGUuYmxvZy1wb3N0cycpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicBlogPosts.js\n')},
1"./source/scripts/sections/DynamicCollectionList.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return DynamicCollectionList; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar DynamicCollectionList =\n/*#__PURE__*/\nfunction () {\n function DynamicCollectionList(section) {\n _classCallCheck(this, DynamicCollectionList);\n\n this.el = section.el;\n this.collections = this.el.querySelectorAll('.dynamic-collection-list--item');\n this.showMoreButton = this.el.querySelector('.dynamic-collection-list--show-more-button');\n this._showAllCollections = this._showAllCollections.bind(this);\n this.showMoreButton.addEventListener('click', this._showAllCollections);\n }\n\n _createClass(DynamicCollectionList, [{\n key: \"_applyClasses\",\n value: function _applyClasses() {\n var collections = this.collections;\n collections.forEach(function (collection) {\n collection.classList.add('active', 'active-mobile');\n });\n }\n }, {\n key: \"_showAllCollections\",\n value: function _showAllCollections() {\n this._applyClasses();\n\n this.showMoreButton.classList.remove('active', 'active-mobile');\n }\n }, {\n key: \"onSectionUnload\",\n value: function onSectionUnload() {\n this.showMoreButton.removeEventListener('click', this._showAllCollections);\n }\n }]);\n\n return DynamicCollectionList;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljQ29sbGVjdGlvbkxpc3QuanM/YTc1ZiJdLCJuYW1lcyI6WyJEeW5hbWljQ29sbGVjdGlvbkxpc3QiLCJzZWN0aW9uIiwiZWwiLCJjb2xsZWN0aW9ucyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzaG93TW9yZUJ1dHRvbiIsInF1ZXJ5U2VsZWN0b3IiLCJfc2hvd0FsbENvbGxlY3Rpb25zIiwiYmluZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJmb3JFYWNoIiwiY29sbGVjdGlvbiIsImNsYXNzTGlzdCIsImFkZCIsIl9hcHBseUNsYXNzZXMiLCJyZW1vdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztJQUFxQkEscUI7OztBQUNuQixpQ0FBWUMsT0FBWixFQUFxQjtBQUFBOztBQUNuQixTQUFLQyxFQUFMLEdBQVVELE9BQU8sQ0FBQ0MsRUFBbEI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEtBQUtELEVBQUwsQ0FBUUUsZ0JBQVIsQ0FDakIsZ0NBRGlCLENBQW5CO0FBR0EsU0FBS0MsY0FBTCxHQUFzQixLQUFLSCxFQUFMLENBQVFJLGFBQVIsQ0FDcEIsNENBRG9CLENBQXRCO0FBSUEsU0FBS0MsbUJBQUwsR0FBMkIsS0FBS0EsbUJBQUwsQ0FBeUJDLElBQXpCLENBQThCLElBQTlCLENBQTNCO0FBQ0EsU0FBS0gsY0FBTCxDQUFvQkksZ0JBQXBCLENBQXFDLE9BQXJDLEVBQThDLEtBQUtGLG1CQUFuRDtBQUNEOzs7O29DQUVlO0FBQUEsVUFDTkosV0FETSxHQUNVLElBRFYsQ0FDTkEsV0FETTtBQUdkQSxpQkFBVyxDQUFDTyxPQUFaLENBQW9CLFVBQUFDLFVBQVUsRUFBSTtBQUNoQ0Esa0JBQVUsQ0FBQ0MsU0FBWCxDQUFxQkMsR0FBckIsQ0FBeUIsUUFBekIsRUFBbUMsZUFBbkM7QUFDRCxPQUZEO0FBR0Q7OzswQ0FFcUI7QU
1FDcEIsV0FBS0MsYUFBTDs7QUFDQSxXQUFLVCxjQUFMLENBQW9CTyxTQUFwQixDQUE4QkcsTUFBOUIsQ0FBcUMsUUFBckMsRUFBK0MsZUFBL0M7QUFDRDs7O3NDQUVpQjtBQUNoQixXQUFLVixjQUFMLENBQW9CVyxtQkFBcEIsQ0FBd0MsT0FBeEMsRUFBaUQsS0FBS1QsbUJBQXREO0FBQ0QiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljQ29sbGVjdGlvbkxpc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBEeW5hbWljQ29sbGVjdGlvbkxpc3Qge1xuICBjb25zdHJ1Y3RvcihzZWN0aW9uKSB7XG4gICAgdGhpcy5lbCA9IHNlY3Rpb24uZWw7XG4gICAgdGhpcy5jb2xsZWN0aW9ucyA9IHRoaXMuZWwucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICcuZHluYW1pYy1jb2xsZWN0aW9uLWxpc3QtLWl0ZW0nLFxuICAgICk7XG4gICAgdGhpcy5zaG93TW9yZUJ1dHRvbiA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihcbiAgICAgICcuZHluYW1pYy1jb2xsZWN0aW9uLWxpc3QtLXNob3ctbW9yZS1idXR0b24nLFxuICAgICk7XG5cbiAgICB0aGlzLl9zaG93QWxsQ29sbGVjdGlvbnMgPSB0aGlzLl9zaG93QWxsQ29sbGVjdGlvbnMuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNob3dNb3JlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fc2hvd0FsbENvbGxlY3Rpb25zKTtcbiAgfVxuXG4gIF9hcHBseUNsYXNzZXMoKSB7XG4gICAgY29uc3QgeyBjb2xsZWN0aW9ucyB9ID0gdGhpcztcblxuICAgIGNvbGxlY3Rpb25zLmZvckVhY2goY29sbGVjdGlvbiA9PiB7XG4gICAgICBjb2xsZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScsICdhY3RpdmUtbW9iaWxlJyk7XG4gICAgfSk7XG4gIH1cblxuICBfc2hvd0FsbENvbGxlY3Rpb25zKCkge1xuICAgIHRoaXMuX2FwcGx5Q2xhc3NlcygpO1xuICAgIHRoaXMuc2hvd01vcmVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJywgJ2FjdGl2ZS1tb2JpbGUnKTtcbiAgfVxuXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLnNob3dNb3JlQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fc2hvd0FsbENvbGxlY3Rpb25zKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicCollectionList.js\n")},
1"./source/scripts/sections/DynamicFeaturedCollection.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DynamicFeaturedCollection; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shopify-currency-converter */ "./node_modules/shopify-currency-converter/dist/index.js");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _helpers_ProductReviews__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers/ProductReviews */ "./source/scripts/helpers/ProductReviews.js");\n/* harmony import */ var _components_ProductGridItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/ProductGridItem */ "./source/scripts/components/ProductGridItem.js");\n/* harmony import */ var _components_ProductRowScroller__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/ProductRowScroller */ "./source/scripts/components/ProductRowScroller.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar DynamicFeaturedCollection =\n/*#__PURE__*/\nfunction () {\n function DynamicFeaturedCollection(section) {\n var _this = this;\n\n _classCallCheck(this, DynamicFeaturedCollection);\n\n this.section = section;\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el); // Product items\n\n this.productItems = [];\n var $productItems = this.$el.find(\'[data-product-item]\');\n $productItems.each(function (i, productItem) {\n var productData = JSON.parse(productItem.querySelector(\'[data-product-data]\').innerHTML);\n\n _this.productItems.push(new _components_ProductGridItem__WEBPACK_IMPORTED_MODULE_3__["default"]({\n $el: jquery__WEBPACK_IMPORTED_MODULE_0___default()(productItem),\n id: _this.section.id,\n product: productData\n }));\n });\n\n if (this.$el.find(\'.spr-badge\').length) {\n Object(_helpers_ProductReviews__WEBPACK_IMPORTED_MODULE_2__["default"])();\n }\n\n this.ProductRowScroller = new _components_ProductRowScroller__WEBPACK_IMPORTED_MODULE_4__["default"](section.el.querySelector(\'[data-product-row]\'));\n\n this._updatePrices();\n }\n\n _createClass(DynamicFeaturedCollection, [{\n key: "_updatePrices",\n value: function _updatePrices() {\n this.$el.find(\'.money\').each(function (index, el) {\n return shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1___default.a.update(el);\n });\n }\n }, {\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.productItems.forEach(function (productItem) {\n productItem.unload();\n });\n this.ProductRowScroller.unload();\n }\n }]);\n\n return DynamicFeaturedCollection;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljRmVhdHVyZWRDb2xsZWN0aW9uLmpzP2U1MmIiXSwibmFtZXMiOlsiRHluYW1pY0ZlYXR1cmVkQ29sbGVjdGlvbiIsInNlY3Rpb24iLCIkZWwiLCIkIiwiZWwiLCJwcm9kdWN0SXRlbXMiLCIkcHJvZHVjdEl0ZW1zIiwiZmluZCIsImVhY2giLCJpIiwicHJvZHVjdEl0ZW0iLCJwcm9kdWN0RGF0YSIsIkpTT04iLCJwYXJzZSIsInF1ZXJ5U2VsZWN0b3IiLCJpbm5lckhUTUwiLCJw
1dXNoIiwiUHJvZHVjdEdyaWRJdGVtIiwiaWQiLCJwcm9kdWN0IiwibGVuZ3RoIiwiaW5pdFNob3BpZnlQcm9kdWN0UmV2aWV3cyIsIlByb2R1Y3RSb3dTY3JvbGxlciIsIl91cGRhdGVQcmljZXMiLCJpbmRleCIsIkN1cnJlbmN5Q29udmVydGVyIiwidXBkYXRlIiwiZm9yRWFjaCIsInVubG9hZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7SUFFcUJBLHlCOzs7QUFDbkIscUNBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFBQTs7QUFDbkIsU0FBS0EsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0MsR0FBTCxHQUFXQyw2Q0FBQyxDQUFDRixPQUFPLENBQUNHLEVBQVQsQ0FBWixDQUZtQixDQUluQjs7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLEVBQXBCO0FBQ0EsUUFBTUMsYUFBYSxHQUFHLEtBQUtKLEdBQUwsQ0FBU0ssSUFBVCxDQUFjLHFCQUFkLENBQXRCO0FBRUFELGlCQUFhLENBQUNFLElBQWQsQ0FBbUIsVUFBQ0MsQ0FBRCxFQUFJQyxXQUFKLEVBQW9CO0FBQ3JDLFVBQU1DLFdBQVcsR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQ2xCSCxXQUFXLENBQUNJLGFBQVosQ0FBMEIscUJBQTFCLEVBQWlEQyxTQUQvQixDQUFwQjs7QUFJQSxXQUFJLENBQUNWLFlBQUwsQ0FBa0JXLElBQWxCLENBQ0UsSUFBSUMsbUVBQUosQ0FBb0I7QUFDbEJmLFdBQUcsRUFBRUMsNkNBQUMsQ0FBQ08sV0FBRCxDQURZO0FBRWxCUSxVQUFFLEVBQUUsS0FBSSxDQUFDakIsT0FBTCxDQUFhaUIsRUFGQztBQUdsQkMsZUFBTyxFQUFFUjtBQUhTLE9BQXBCLENBREY7QUFPRCxLQVpEOztBQWNBLFFBQUksS0FBS1QsR0FBTCxDQUFTSyxJQUFULENBQWMsWUFBZCxFQUE0QmEsTUFBaEMsRUFBd0M7QUFDdENDLDZFQUF5QjtBQUMxQjs7QUFFRCxTQUFLQyxrQkFBTCxHQUEwQixJQUFJQSxzRUFBSixDQUN4QnJCLE9BQU8sQ0FBQ0csRUFBUixDQUFXVSxhQUFYLENBQXlCLG9CQUF6QixDQUR3QixDQUExQjs7QUFJQSxTQUFLUyxhQUFMO0FBQ0Q7Ozs7b0NBRWU7QUFDZCxXQUFLckIsR0FBTCxDQUFTSyxJQUFULENBQWMsUUFBZCxFQUF3QkMsSUFBeEIsQ0FBNkIsVUFBQ2dCLEtBQUQsRUFBUXBCLEVBQVI7QUFBQSxlQUFlcUIsaUVBQWlCLENBQUNDLE1BQWxCLENBQXlCdEIsRUFBekIsQ0FBZjtBQUFBLE9BQTdCO0FBQ0Q7OztzQ0FFaUI7QUFDaEIsV0FBS0MsWUFBTCxDQUFrQnNCLE9BQWxCLENBQTBCLFVBQUFqQixXQUFXLEVBQUk7QUFDdkNBLG1CQUFXLENBQUNrQixNQUFaO0FBQ0QsT0FGRDtBQUlBLFdBQUtOLGtCQUFMLENBQXdCTSxNQUF4QjtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvc2VjdGlvbnMvRHluYW1pY0ZlYXR1cmVkQ29sbGVjdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgQ3VycmVuY3lDb252ZXJ0ZXIgZnJvbSAnc2hvcGlmeS1jdXJyZW5jeS1jb252ZXJ0ZXInO1xuaW1wb3J0IGluaXRTaG9waWZ5UHJvZHVjdFJldmlld3MgZnJvbSAnLi4vaGVscGVycy9Qcm9kdWN0UmV2aWV3cyc7XG5pbXBvcnQgUHJvZHVjdEdyaWRJdGVtIGZyb20gJy4uL2NvbXBvbmVudHMvUHJvZHVjdEdyaWRJdGVtJztcbmltcG9ydCBQcm9kdWN0Um93U2Nyb2xsZXIgZnJvbSAnLi4vY29tcG9uZW50cy9Qcm9kdWN0Um93U2Nyb2xsZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEeW5hbWljRmVhdHVyZWRDb2xsZWN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2VjdGlvbikge1xuICAgIHRoaXMuc2VjdGlvbiA9IHNlY3Rpb247XG4gICAgdGhpcy4kZWwgPSAkKHNlY3Rpb24uZWwpO1xuXG4gICAgLy8gUHJvZHVjdCBpdGVtc1xuICAgIHRoaXMucHJvZHVjdEl0ZW1zID0gW107XG4gICAgY29uc3QgJHByb2R1Y3RJdGVtcyA9IHRoaXMuJGVsLmZpbmQoJ1tkYXRhLXByb2R1Y3QtaXRlbV0nKTtcblxuICAgICRwcm9kdWN0SXRlbXMuZWFjaCgoaSwgcHJvZHVjdEl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHByb2R1Y3REYXRhID0gSlNPTi5wYXJzZShcbiAgICAgICAgcHJvZHVjdEl0ZW0ucXVlcnlTZWxlY3RvcignW2RhdGEtcHJvZHVjdC1kYXRhXScpLmlubmVySFRNTCxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMucHJvZHVjdEl0ZW1zLnB1c2goXG4gICAgICAgIG5ldyBQcm9kdWN0R3JpZEl0ZW0oe1xuICAgICAgICAgICRlbDogJChwcm9kdWN0SXRlbSksXG4gICAgICAgICAgaWQ6IHRoaXMuc2VjdGlvbi5pZCxcbiAgICAgICAgICBwcm9kdWN0OiBwcm9kdWN0RGF0YSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuJGVsLmZpbmQoJy5zcHItYmFkZ2UnKS5sZW5ndGgpIHtcbiAgICAgIGluaXRTaG9waWZ5UHJvZHVjdFJldmlld3MoKTtcbiAgICB9XG5cbiAgICB0aGlzLlByb2R1Y3RSb3dTY3JvbGxlciA9IG5ldyBQcm9kdWN0Um93U2Nyb2xsZXIoXG4gICAgICBzZWN0aW9uLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXByb2R1Y3Qtcm93XScpLFxuICAgICk7XG5cbiAgICB0aGlzLl91cGRhdGVQcmljZXMoKTtcbiAgfVxuXG4gIF91cGRhdGVQcmljZXMoKSB7XG4gICAgdGhpcy4kZWwuZmluZCgnLm1vbmV5JykuZWFjaCgoaW5kZXgsIGVsKSA9PiBDdXJyZW5jeUNvbnZlcnRlci51cGRhdGUoZWwpKTtcbiAgfVxuXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLnByb2R1Y3RJdGVtcy5mb3JFYWNoKHByb2R1Y3RJdGVtID0+IHtcbiAgICAgIHByb2R1Y3RJdGVtLnVubG9hZCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5Qcm9kdWN0Um93U2Nyb2xsZXIudW5sb2FkKCk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicFeaturedCollection.js\n')},
1"./source/scripts/sections/DynamicHighlightsBanners.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DynamicHighlightsBanners; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! just-debounce */ "./node_modules/just-debounce/index.js");\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(just_debounce__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flickity */ "./node_modules/flickity/js/index.js");\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flickity__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Layout */ "./source/scripts/Layout.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar DynamicHighlightsBanners =\n/*#__PURE__*/\nfunction () {\n function DynamicHighlightsBanners(section) {\n _classCallCheck(this, DynamicHighlightsBanners);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.$window = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window);\n this.$carousel = this.$el.find(\'.highlights-banners\');\n this.slides = \'.highlights-banners-block\';\n this.flickity = null;\n this.flickityOptions = null;\n\n if (this.$carousel.find(this.slides).length > 1) {\n /* this._initSlider(); */\n }\n }\n\n _createClass(DynamicHighlightsBanners, [{\n key: "_initSlider",\n value: function _initSlider() {\n this.flickityOptions = {\n autoPlay: 0,\n accessibility: true,\n cellAlign: \'center\',\n cellSelector: this.slides,\n pageDots: false,\n prevNextButtons: false,\n contain: true\n };\n\n this._bindFlickity();\n }\n }, {\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this._destroyFlickity();\n\n this.$window.off(\'.twitter\');\n }\n }, {\n key: "_bindFlickity",\n value: function _bindFlickity() {\n var _this = this;\n\n if (_Layout__WEBPACK_IMPORTED_MODULE_3__["default"].isBreakpoint(\'L\') === false && this.flickity === null) {\n this.flickity = new flickity__WEBPACK_IMPORTED_MODULE_2___default.a(this.$carousel[0], this.flickityOptions);\n }\n\n this.$window.on(\'resize\', just_debounce__WEBPACK_IMPORTED_MODULE_1___default()(function () {\n if (_Layout__WEBPACK_IMPORTED_MODULE_3__["default"].isBreakpoint(\'L\') === false && _this.flickity === null) {\n _this._bindFlickity();\n } else if (_Layout__WEBPACK_IMPORTED_MODULE_3__["default"].isBreakpoint(\'L\') && _this.flickity) {\n _this._destroyFlickity();\n }\n }));\n }\n }, {\n key: "_destroyFlickity",\n value: function _destroyFlickity() {\n if (!this.flickity) {\n return;\n }\n\n this.flickity.destroy();\n this.flickity = null;\n }\n }]);\n\n return DynamicHighlightsBanners;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljSGlnaGxpZ2h0c0Jhbm5lcnMuanM/ZmJiNyJdLCJuYW1lcyI6WyJEeW5hbWljSGlnaGxpZ2h0c0Jhbm5lcnMiLCJzZWN0aW9uIiwiJGVsIiwiJCIsImVsIiwiJHdpbmRvdyIsIndpbmRvdyIsIiRjYXJvdXNlbCIsImZpbmQiLCJzbGlkZXMiLCJmbGlja2l0eSIsImZsaWNraXR5T3B0aW9ucyIsImxlbmd0aCIsIl9pbml0U2xpZGVyIiwiYXV0b1BsYXkiLCJhY2Nlc3NpYmlsaXR5IiwiY2VsbEFsaWduIiwiY2VsbFNlbGVjdG9yIiwicGFnZURvdHMiLCJwcmV2TmV4dEJ1dHRvbnMiLCJ
1jb250YWluIiwiX2JpbmRGbGlja2l0eSIsIl9kZXN0cm95RmxpY2tpdHkiLCJvZmYiLCJsYXlvdXQiLCJpc0JyZWFrcG9pbnQiLCJGbGlja2l0eSIsIm9uIiwiZGVib3VuY2UiLCJkZXN0cm95Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7SUFFcUJBLHdCOzs7QUFDbkIsb0NBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFDbkIsU0FBS0MsR0FBTCxHQUFXQyw2Q0FBQyxDQUFDRixPQUFPLENBQUNHLEVBQVQsQ0FBWjtBQUNBLFNBQUtDLE9BQUwsR0FBZUYsNkNBQUMsQ0FBQ0csTUFBRCxDQUFoQjtBQUVBLFNBQUtDLFNBQUwsR0FBaUIsS0FBS0wsR0FBTCxDQUFTTSxJQUFULENBQWMscUJBQWQsQ0FBakI7QUFDQSxTQUFLQyxNQUFMLEdBQWMsMkJBQWQ7QUFFQSxTQUFLQyxRQUFMLEdBQWdCLElBQWhCO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QixJQUF2Qjs7QUFFQSxRQUFJLEtBQUtKLFNBQUwsQ0FBZUMsSUFBZixDQUFvQixLQUFLQyxNQUF6QixFQUFpQ0csTUFBakMsR0FBMEMsQ0FBOUMsRUFBaUQ7QUFDL0MsV0FBS0MsV0FBTDtBQUNEO0FBQ0Y7Ozs7a0NBRWE7QUFDWixXQUFLRixlQUFMLEdBQXVCO0FBQ3JCRyxnQkFBUSxFQUFFLENBRFc7QUFFckJDLHFCQUFhLEVBQUUsSUFGTTtBQUdyQkMsaUJBQVMsRUFBRSxRQUhVO0FBSXJCQyxvQkFBWSxFQUFFLEtBQUtSLE1BSkU7QUFLckJTLGdCQUFRLEVBQUUsS0FMVztBQU1yQkMsdUJBQWUsRUFBRSxLQU5JO0FBT3JCQyxlQUFPLEVBQUU7QUFQWSxPQUF2Qjs7QUFVQSxXQUFLQyxhQUFMO0FBQ0Q7OztzQ0FFaUI7QUFDaEIsV0FBS0MsZ0JBQUw7O0FBQ0EsV0FBS2pCLE9BQUwsQ0FBYWtCLEdBQWIsQ0FBaUIsVUFBakI7QUFDRDs7O29DQUVlO0FBQUE7O0FBQ2QsVUFBSUMsK0NBQU0sQ0FBQ0MsWUFBUCxDQUFvQixHQUFwQixNQUE2QixLQUE3QixJQUFzQyxLQUFLZixRQUFMLEtBQWtCLElBQTVELEVBQWtFO0FBQ2hFLGFBQUtBLFFBQUwsR0FBZ0IsSUFBSWdCLCtDQUFKLENBQWEsS0FBS25CLFNBQUwsQ0FBZSxDQUFmLENBQWIsRUFBZ0MsS0FBS0ksZUFBckMsQ0FBaEI7QUFDRDs7QUFFRCxXQUFLTixPQUFMLENBQWFzQixFQUFiLENBQ0UsUUFERixFQUVFQyxvREFBUSxDQUFDLFlBQU07QUFDYixZQUFJSiwrQ0FBTSxDQUFDQyxZQUFQLENBQW9CLEdBQXBCLE1BQTZCLEtBQTdCLElBQXNDLEtBQUksQ0FBQ2YsUUFBTCxLQUFrQixJQUE1RCxFQUFrRTtBQUNoRSxlQUFJLENBQUNXLGFBQUw7QUFDRCxTQUZELE1BRU8sSUFBSUcsK0NBQU0sQ0FBQ0MsWUFBUCxDQUFvQixHQUFwQixLQUE0QixLQUFJLENBQUNmLFFBQXJDLEVBQStDO0FBQ3BELGVBQUksQ0FBQ1ksZ0JBQUw7QUFDRDtBQUNGLE9BTk8sQ0FGVjtBQVVEOzs7dUNBRWtCO0FBQ2pCLFVBQUksQ0FBQyxLQUFLWixRQUFWLEVBQW9CO0FBQ2xCO0FBQ0Q7O0FBRUQsV0FBS0EsUUFBTCxDQUFjbUIsT0FBZDtBQUNBLFdBQUtuQixRQUFMLEdBQWdCLElBQWhCO0FBQ0QiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljSGlnaGxpZ2h0c0Jhbm5lcnMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2p1c3QtZGVib3VuY2UnO1xuaW1wb3J0IEZsaWNraXR5IGZyb20gJ2ZsaWNraXR5JztcbmltcG9ydCBsYXlvdXQgZnJvbSAnLi4vTGF5b3V0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHluYW1pY0hpZ2hsaWdodHNCYW5uZXJzIHtcbiAgY29uc3RydWN0b3Ioc2VjdGlvbikge1xuICAgIHRoaXMuJGVsID0gJChzZWN0aW9uLmVsKTtcbiAgICB0aGlzLiR3aW5kb3cgPSAkKHdpbmRvdyk7XG5cbiAgICB0aGlzLiRjYXJvdXNlbCA9IHRoaXMuJGVsLmZpbmQoJy5oaWdobGlnaHRzLWJhbm5lcnMnKTtcbiAgICB0aGlzLnNsaWRlcyA9ICcuaGlnaGxpZ2h0cy1iYW5uZXJzLWJsb2NrJztcblxuICAgIHRoaXMuZmxpY2tpdHkgPSBudWxsO1xuICAgIHRoaXMuZmxpY2tpdHlPcHRpb25zID0gbnVsbDtcblxuICAgIGlmICh0aGlzLiRjYXJvdXNlbC5maW5kKHRoaXMuc2xpZGVzKS5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLl9pbml0U2xpZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgX2luaXRTbGlkZXIoKSB7XG4gICAgdGhpcy5mbGlja2l0eU9wdGlvbnMgPSB7XG4gICAgICBhdXRvUGxheTogMCxcbiAgICAgIGFjY2Vzc2liaWxpdHk6IHRydWUsXG4gICAgICBjZWxsQWxpZ246ICdjZW50ZXInLFxuICAgICAgY2VsbFNlbGVjdG9yOiB0aGlzLnNsaWRlcyxcbiAgICAgIHBhZ2VEb3RzOiBmYWxzZSxcbiAgICAgIHByZXZOZXh0QnV0dG9uczogZmFsc2UsXG4gICAgICBjb250YWluOiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLl9iaW5kRmxpY2tpdHkoKTtcbiAgfVxuXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLl9kZXN0cm95RmxpY2tpdHkoKTtcbiAgICB0aGlzLiR3aW5kb3cub2ZmKCcudHdpdHRlcicpO1xuICB9XG5cbiAgX2JpbmRGbGlja2l0eSgpIHtcbiAgICBpZiAobGF5b3V0LmlzQnJlYWtwb2ludCgnTCcpID09PSBmYWxzZSAmJiB0aGlzLmZsaWNraXR5ID09PSBudWxsKSB7XG4gICAgICB0aGlzLmZsaWNraXR5ID0gbmV3IEZsaWNraXR5KHRoaXMuJGNhcm91c2VsWzBdLCB0aGlzLmZsaWNraXR5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgdGhpcy4kd2luZG93Lm9uKFxuICAgICAgJ3Jlc2l6ZScsXG4gICAgICBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgIGlmIChsYXlvdXQuaXNCcmVha3BvaW50KCdMJykgPT09IGZhbHNlICYmIHRoaXMuZmxpY2tpdHkgPT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9iaW5kRmxpY2tpdHkoKTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXlvdXQuaXNCcmVha3BvaW50KCdMJykgJiYgdGhpcy5mbGlja2l0eSkge1xuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lGbGlja2l0eSgpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgX2Rlc3Ryb3lGbGlja2l0eSgpIHtcbiAgICBpZiAoIXRoaXMuZmxpY2tpdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZsaWNraXR5LmRlc3Ryb3koKTtcbiAgICB0aGlzLmZsaWNraXR5ID0gbnVsbDtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicHighlightsBanners.js\n')},
1"./source/scripts/sections/DynamicInstagramFeed.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DynamicInstagramFeed; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! just-debounce */ "./node_modules/just-debounce/index.js");\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(just_debounce__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flickity */ "./node_modules/flickity/js/index.js");\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flickity__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Layout */ "./source/scripts/Layout.js");\n/* harmony import */ var _helpers_LazyLoader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../helpers/LazyLoader */ "./source/scripts/helpers/LazyLoader.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar DynamicInstagramFeed =\n/*#__PURE__*/\nfunction () {\n function DynamicInstagramFeed(section) {\n _classCallCheck(this, DynamicInstagramFeed);\n\n this.settings = section.data;\n this.onboarding = this.settings.onboarding;\n this.photoCount = this.settings.photo_count;\n this.accessToken = this.settings.access_token;\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this._load = this._load.bind(this);\n this.lazyLoader = new _helpers_LazyLoader__WEBPACK_IMPORTED_MODULE_4__["default"](section.el, this._load);\n }\n\n _createClass(DynamicInstagramFeed, [{\n key: "_load",\n value: function _load() {\n var _this = this;\n\n this.$window = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window);\n this.$photoContainer = this.$el.find(\'[data-instagram-content]\');\n this.$photoContainerPlaceholder = this.$el.find(\'[data-instagram-photo-placeholder]\');\n this.$photoTemplate = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'<figure class="instagram--photo" data-instagram-photo />\'); // Activate flickity on mobile\n\n this._mobileSlider = this._mobileSlider.bind(this);\n _Layout__WEBPACK_IMPORTED_MODULE_3__["default"].onBreakpointChange(this._mobileSlider);\n\n this._mobileSlider();\n\n if (this.onboarding || !this.accessToken) {\n return;\n }\n\n this._getPhotos().done(function (photos) {\n return _this._renderPhotos(photos);\n }).fail(function (error) {\n console.warn("Instagram: ".concat(error));\n });\n }\n }, {\n key: "_getPhotos",\n value: function _getPhotos() {\n var url = "https://api.instagram.com/v1/users/self/media/recent?access_token=".concat(this.accessToken, "&count=").concat(this.photoCount, "&callback=");\n var photoPromise = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.ajax(url, {\n dataType: \'jsonp\'\n });\n return photoPromise.then(function (response) {\n if (response.meta.code !== 200) {\n var error = "".concat(response.meta.error_message, " (").concat(response.meta.error_type, ")");\n return jquery__WEBPACK_IMPORTED_MODULE_0___default.a.Deferred().reject(error).promise();\n }\n\n return response.data;\n });\n }\n }, {\n key: "_renderPhotos",\n value: function _renderPhotos(photos) {\n var _this2 = this;\n\n var photoArray = [];\n var photoIndex = 0;
1\n photos.forEach(function (photo) {\n photoIndex += 1;\n\n var $template = _this2.$photoTemplate.clone();\n\n var lowResolution = photo.images.low_resolution;\n var standardResolution = photo.images.standard_resolution;\n var imageURL = lowResolution.url;\n\n if (window.devicePixelRatio >= 2) {\n imageURL = standardResolution.url;\n }\n\n var $link = jquery__WEBPACK_IMPORTED_MODULE_0___default()("<a aria-label=\\"view photo ".concat(photoIndex, " by ").concat(photo.user.username, " on instagram\\" target=\\"_blank\\" href=\\"").concat(photo.link, "\\"></a>"));\n var $photo = jquery__WEBPACK_IMPORTED_MODULE_0___default()("\\n <div\\n class=\\"instagram--photo-img\\"\\n role=\\"img\\"\\n style=\\"background-image: url(".concat(imageURL, ");\\"\\n aria-label=\\"photo ").concat(photoIndex, " by ").concat(photo.user.username, " on instagram\\"\\n >\\n "));\n $link.append($photo);\n $template.append($link);\n photoArray.push($template);\n });\n this.$photoContainerPlaceholder.fadeOut(function () {\n _this2._destroyFlickity();\n\n _this2.$photoContainer.append(photoArray);\n\n _this2.$photoContainerPlaceholder.remove();\n\n _this2._mobileSlider();\n });\n }\n }, {\n key: "_initFlickity",\n value: function _initFlickity() {\n this.flickity = new flickity__WEBPACK_IMPORTED_MODULE_2___default.a(this.$photoContainer[0], {\n cellSelector: \'.instagram--photo\',\n contain: true,\n freeScroll: true,\n percentPosition: false,\n prevNextButtons: false,\n pageDots: false,\n setGallerySize: false\n });\n\n this._bindSlider();\n }\n }, {\n key: "_destroyFlickity",\n value: function _destroyFlickity() {\n if (!this.flickity) {\n return;\n }\n\n this.$window.off(\'.instagram-feed\');\n this.$photoContainer.off(\'.instagram-feed\');\n this.flickity.destroy();\n this.flickity = null;\n }\n }, {\n key: "_mobileSlider",\n value: function _mobileSlider() {\n // If is Large layout, attempt to destroy flickity\n if (_Layout__WEBPACK_IMPORTED_MODULE_3__["default"].isBreakpoint(\'L\') || _Layout__WEBPACK_IMPORTED_MODULE_3__["default"].isBreakpoint(\'M\')) {\n this._destroyFlickity();\n\n return;\n } // Is XS/S/M, and flickity is init\'d -- do nothing\n\n\n if (this.flickity) {\n return;\n } // Is XS/S/M, and flickity is not init\'d\n\n\n this._initFlickity();\n }\n }, {\n key: "_bindSlider",\n value: function _bindSlider() {\n var _this3 = this;\n\n var $slider = this.$photoContainer.find(\'.flickity-slider\');\n this.$window.on(\'resize.instagram-feed\', just_debounce__WEBPACK_IMPORTED_MODULE_1___default()(function () {\n _this3.$photoContainer.trigger(\'heightUpdate.instagram-feed\');\n }));\n this.flickity.on(\'cellSelect\', function () {\n _this3.$photoContainer.trigger(\'heightUpdate.instagram-feed\');\n });\n this.$photoContainer.on(\'heightUpdate.instagram-feed\', function () {\n if (!_this3.flickity) {\n return;\n }\n\n $slider.height(Math.ceil(_this3.flickity.maxCellHeight));\n }); // Sets the Slider to the height of the first slide\n\n this.$photoContainer.trigger(\'heightUpdate.instagram-feed\');\n }\n }, {\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.lazyLoader.unload();\n }\n }]);\n\n return DynamicInstagramFeed;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljSW5zdGFncmFtRmVlZC5qcz9jZDNlIl0sIm5hbWVzIjpbIkR5bmFtaWNJbnN0YWdyYW1GZWVkIiwic2VjdGlvbiIsInNldHRpbmdzIiwiZGF0YSIsIm9uYm9hcmRpbmciLCJwaG90b0NvdW50IiwicGhvdG9fY291bnQiLCJhY2Nlc3NUb2tlbiIsImFjY2Vzc190b2tlbiIsIiRlbCIsIiQiLCJlbCIsIl9sb2FkIiwiYmluZCIsImxhenlMb2FkZXIiLCJMYXp5TG9hZGVyIiwiJHdpbmRvdyIsIndpbmRvdyIsIiRwaG90b0NvbnRhaW5lciIsImZpbmQiLCIkcGhvdG9Db250YWluZXJQbGFjZWhvbGRlciIsIiRwaG90b1RlbXBsYXRlIiwiX21vYmlsZVNsaWRlciIsImxheW91dCIsIm9uQnJlYWtwb2ludENoYW5nZSIsIl9nZXRQaG90b3MiLCJkb25lIiwicGhvdG9zIiwiX3JlbmRlclBob3RvcyIsImZhaWwiLCJlcnJvciIsImNvbnNvbGUiLCJ3YXJuIiwidXJsIiwicGhvdG9Qcm9taXNlIiwiYWpheCIsImRhdGFUeXBlIiwidGhlbiIsInJlc3BvbnNlIiwibWV0YSIsImNvZGUiLCJlcnJvcl9tZXNzYWdlIiwiZXJyb3JfdHlwZSIsIkRlZmVycmVkIiwicmVqZWN0IiwicHJvbWlzZSIsInBob3RvQXJyYXkiLCJwaG90b0luZGV4IiwiZm9yRWFjaCIsInBob3RvIiwiJHRlbXBsYXRlIiwiY2xvbmUiLCJsb3dSZXNvbHV0aW9uIiwiaW1hZ2VzIiwibG93X3Jlc29sdXRpb24iLCJzdGFuZGFyZFJlc29sdXRpb24iLCJzdGFuZGFyZF9yZXNvbHV0aW9uIiwiaW1hZ2VVUkwiLCJkZXZpY2VQaXhlbFJhdGlvIiwiJGxpbmsiLCJ1c2VyIiwidXNlcm5hbWUiLCJsaW5rIiwiJHBob3RvIiwiYXBwZW5kIiwicHVzaCIsImZhZGVPdXQiLCJfZGVzdHJveUZsaWNraXR5IiwicmVtb3ZlIiwiZmx
1pY2tpdHkiLCJGbGlja2l0eSIsImNlbGxTZWxlY3RvciIsImNvbnRhaW4iLCJmcmVlU2Nyb2xsIiwicGVyY2VudFBvc2l0aW9uIiwicHJldk5leHRCdXR0b25zIiwicGFnZURvdHMiLCJzZXRHYWxsZXJ5U2l6ZSIsIl9iaW5kU2xpZGVyIiwib2ZmIiwiZGVzdHJveSIsImlzQnJlYWtwb2ludCIsIl9pbml0RmxpY2tpdHkiLCIkc2xpZGVyIiwib24iLCJkZWJvdW5jZSIsInRyaWdnZXIiLCJoZWlnaHQiLCJNYXRoIiwiY2VpbCIsIm1heENlbGxIZWlnaHQiLCJ1bmxvYWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztJQUVxQkEsb0I7OztBQUNuQixnQ0FBWUMsT0FBWixFQUFxQjtBQUFBOztBQUNuQixTQUFLQyxRQUFMLEdBQWdCRCxPQUFPLENBQUNFLElBQXhCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixLQUFLRixRQUFMLENBQWNFLFVBQWhDO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixLQUFLSCxRQUFMLENBQWNJLFdBQWhDO0FBQ0EsU0FBS0MsV0FBTCxHQUFtQixLQUFLTCxRQUFMLENBQWNNLFlBQWpDO0FBQ0EsU0FBS0MsR0FBTCxHQUFXQyw2Q0FBQyxDQUFDVCxPQUFPLENBQUNVLEVBQVQsQ0FBWjtBQUVBLFNBQUtDLEtBQUwsR0FBYSxLQUFLQSxLQUFMLENBQVdDLElBQVgsQ0FBZ0IsSUFBaEIsQ0FBYjtBQUVBLFNBQUtDLFVBQUwsR0FBa0IsSUFBSUMsMkRBQUosQ0FBZWQsT0FBTyxDQUFDVSxFQUF2QixFQUEyQixLQUFLQyxLQUFoQyxDQUFsQjtBQUNEOzs7OzRCQUVPO0FBQUE7O0FBQ04sV0FBS0ksT0FBTCxHQUFlTiw2Q0FBQyxDQUFDTyxNQUFELENBQWhCO0FBQ0EsV0FBS0MsZUFBTCxHQUF1QixLQUFLVCxHQUFMLENBQVNVLElBQVQsQ0FBYywwQkFBZCxDQUF2QjtBQUNBLFdBQUtDLDBCQUFMLEdBQWtDLEtBQUtYLEdBQUwsQ0FBU1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5FLGVBQUwsQ0FBcUJvRSxPQUFyQixDQUE2Qiw2QkFBN0I7QUFDRCxPQUZPLENBRlY7QUFPQSxXQUFLakIsUUFBTCxDQUFjZSxFQUFkLENBQWlCLFlBQWpCLEVBQStCLFlBQU07QUFDbkMsY0FBSSxDQUFDbEUsZUFBTCxDQUFxQm9FLE9BQXJCLENBQTZCLDZCQUE3QjtBQUNELE9BRkQ7QUFJQSxXQUFLcEUsZUFBTCxDQUFxQmtFLEVBQXJCLENBQXdCLDZCQUF4QixFQUF1RCxZQUFNO0FBQzNELFlBQUksQ0FBQyxNQUFJLENBQUNmLFFBQVYsRUFBb0I7QUFDbEI7QUFDRDs7QUFFRGMsZUFBTyxDQUFDSSxNQUFSLENBQWVDLElBQUksQ0FBQ0MsSUFBTCxDQUFVLE1BQUksQ0FBQ3BCLFFBQUwsQ0FBY3FCLGFBQXhCLENBQWY7QUFDRCxPQU5ELEVBZFksQ0FzQlo7O0FBQ0EsV0FBS3hFLGVBQUwsQ0FBcUJvRSxPQUFyQixDQUE2Qiw2QkFBN0I7QUFDRDs7O3NDQUVpQjtBQUNoQixXQUFLeEUsVUFBTCxDQUFnQjZFLE1BQWhCO0FBQ0QiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljSW5zdGFncmFtRmVlZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSAnanVzdC1kZWJvdW5jZSc7XG5pbXBvcnQgRmxpY2tpdHkgZnJvbSAnZmxpY2tpdHknO1xuaW1wb3J0IGxheW91dCBmcm9tICcuLi9MYXlvdXQnO1xuaW1wb3J0IExhenlMb2FkZXIgZnJvbSAnLi4vaGVscGVycy9MYXp5TG9hZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHluYW1pY0luc3RhZ3JhbUZlZWQge1xuICBjb25zdHJ1Y3RvcihzZWN0aW9uKSB7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNlY3Rpb24uZGF0YTtcbiAgICB0aGlzLm9uYm9hcmRpbmcgPSB0aGlzLnNldHRpbmdzLm9uYm9hcmRpbmc7XG4gICAgdGhpcy5waG90b0NvdW50ID0gdGhpcy5zZXR0aW5ncy5waG90b19jb3VudDtcbiAgICB0aGlzLmFjY2Vzc1Rva2VuID0gdGhpcy5zZXR0aW5ncy5hY2Nlc3NfdG9rZW47XG4gICAgdGhpcy4kZWwgPSAkKHNlY3Rpb24uZWwpO1xuXG4gICAgdGhpcy5fbG9hZCA9IHRoaXMuX2xvYWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubGF6eUxvYWRlciA9IG5ldyBMYXp5TG9hZGVyKHNlY3Rpb24uZWwsIHRoaXMuX2xvYWQpO1xuICB9XG5cbiAgX2xvYWQoKSB7XG4gICAgdGhpcy4kd2luZG93ID0gJCh3aW5kb3cpO1xuICAgIHRoaXMuJHBob3RvQ29udGFpbmVyID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtaW5zdGFncmFtLWNvbnRlbnRdJyk7XG4gICAgdGhpcy4kcGhvdG9Db250YWluZXJQbGFjZWhvbGRlciA9IHRoaXMuJGVsLmZpbmQoXG4gICAgICAnW2RhdGEtaW5zdGFncmFtLXBob3RvLXBsYWNlaG9sZGVyXScsXG4gICAgKTtcblxuICAgIHRoaXMuJHBob3RvVGVtcGxhdGUgPSAkKFxuICAgICAgJzxmaWd1cmUgY2xhc3M9XCJpbnN0YWdyYW0tLXBob3RvXCIgZGF0YS1pbnN0YWdyYW0tcGhvdG8gLz4nLFxuICAgICk7XG5cbiAgICAvLyBBY3RpdmF0ZSBmbGlja2l0eSBvbiBtb2JpbGVcbiAgICB0aGlzLl9tb2JpbGVTbGlkZXIgPSB0aGlzLl9tb2JpbGVTbGlkZXIuYmluZCh0aGlzKTtcbiAgICBsYXlvdXQub25CcmVha3BvaW50Q2hhbmdlKHRoaXMuX21vYmlsZVNsaWRlcik7XG4gICAgdGhpcy5fbW9iaWxlU2xpZGVyKCk7XG5cbiAgICBpZiAodGhpcy5vbmJvYXJkaW5nIHx8ICF0aGlzLmFjY2Vzc1Rva2VuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZ2V0UGhvdG9zKClcbiAgICAgIC5kb25lKHBob3RvcyA9PiB0aGlzLl9yZW5kZXJQaG90b3MocGhvdG9zKSlcbiAgICAgIC5mYWlsKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnN0YWdyYW06ICR7ZXJyb3J9YCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIF9nZXRQaG90b3MoKSB7XG4gICAgY29uc3QgdXJsID0gYGh0dHBzOi8vYXBpLmluc3RhZ3JhbS5jb20vdjEvdXNlcnMvc2VsZi9tZWRpYS9yZWNlbnQ/YWNjZXNzX3Rva2VuPSR7XG4gICAgICB0aGlzLmFjY2Vzc1Rva2VuXG4gICAgfSZjb3VudD0ke3RoaXMucGhvdG9Db3VudH0mY2FsbGJhY2s9YDtcbiAgICBjb25zdCBwaG90b1Byb21pc2UgPSAkLmFqYXgodXJsLCB7XG4gICAgICBkYXRhVHlwZTogJ2pzb25wJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBwaG90b1Byb21pc2UudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UubWV0YS5jb2RlICE9PSA
1yMDApIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBgJHtyZXNwb25zZS5tZXRhLmVycm9yX21lc3NhZ2V9ICgke1xuICAgICAgICAgIHJlc3BvbnNlLm1ldGEuZXJyb3JfdHlwZVxuICAgICAgICB9KWA7XG4gICAgICAgIHJldHVybiAkLkRlZmVycmVkKClcbiAgICAgICAgICAucmVqZWN0KGVycm9yKVxuICAgICAgICAgIC5wcm9taXNlKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgX3JlbmRlclBob3RvcyhwaG90b3MpIHtcbiAgICBjb25zdCBwaG90b0FycmF5ID0gW107XG4gICAgbGV0IHBob3RvSW5kZXggPSAwO1xuICAgIHBob3Rvcy5mb3JFYWNoKHBob3RvID0+IHtcbiAgICAgIHBob3RvSW5kZXggKz0gMTtcbiAgICAgIGNvbnN0ICR0ZW1wbGF0ZSA9IHRoaXMuJHBob3RvVGVtcGxhdGUuY2xvbmUoKTtcbiAgICAgIGNvbnN0IGxvd1Jlc29sdXRpb24gPSBwaG90by5pbWFnZXMubG93X3Jlc29sdXRpb247XG4gICAgICBjb25zdCBzdGFuZGFyZFJlc29sdXRpb24gPSBwaG90by5pbWFnZXMuc3RhbmRhcmRfcmVzb2x1dGlvbjtcbiAgICAgIGxldCBpbWFnZVVSTCA9IGxvd1Jlc29sdXRpb24udXJsO1xuXG4gICAgICBpZiAod2luZG93LmRldmljZVBpeGVsUmF0aW8gPj0gMikge1xuICAgICAgICBpbWFnZVVSTCA9IHN0YW5kYXJkUmVzb2x1dGlvbi51cmw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0ICRsaW5rID0gJChcbiAgICAgICAgYDxhIGFyaWEtbGFiZWw9XCJ2aWV3IHBob3RvICR7cGhvdG9JbmRleH0gYnkgJHtcbiAgICAgICAgICBwaG90by51c2VyLnVzZXJuYW1lXG4gICAgICAgIH0gb24gaW5zdGFncmFtXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIiR7cGhvdG8ubGlua31cIj48L2E+YCxcbiAgICAgICk7XG4gICAgICBjb25zdCAkcGhvdG8gPSAkKGBcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiaW5zdGFncmFtLS1waG90by1pbWdcIlxuICAgICAgICAgIHJvbGU9XCJpbWdcIlxuICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7aW1hZ2VVUkx9KTtcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJwaG90byAke3Bob3RvSW5kZXh9IGJ5ICR7XG4gIHBob3RvLnVzZXIudXNlcm5hbWVcbn0gb24gaW5zdGFncmFtXCJcbiAgICAgICAgPlxuICAgICAgYCk7XG5cbiAgICAgICRsaW5rLmFwcGVuZCgkcGhvdG8pO1xuICAgICAgJHRlbXBsYXRlLmFwcGVuZCgkbGluayk7XG5cbiAgICAgIHBob3RvQXJyYXkucHVzaCgkdGVtcGxhdGUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kcGhvdG9Db250YWluZXJQbGFjZWhvbGRlci5mYWRlT3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lGbGlja2l0eSgpO1xuICAgICAgdGhpcy4kcGhvdG9Db250YWluZXIuYXBwZW5kKHBob3RvQXJyYXkpO1xuICAgICAgdGhpcy4kcGhvdG9Db250YWluZXJQbGFjZWhvbGRlci5yZW1vdmUoKTtcbiAgICAgIHRoaXMuX21vYmlsZVNsaWRlcigpO1xuICAgIH0pO1xuICB9XG5cbiAgX2luaXRGbGlja2l0eSgpIHtcbiAgICB0aGlzLmZsaWNraXR5ID0gbmV3IEZsaWNraXR5KHRoaXMuJHBob3RvQ29udGFpbmVyWzBdLCB7XG4gICAgICBjZWxsU2VsZWN0b3I6ICcuaW5zdGFncmFtLS1waG90bycsXG4gICAgICBjb250YWluOiB0cnVlLFxuICAgICAgZnJlZVNjcm9sbDogdHJ1ZSxcbiAgICAgIHBlcmNlbnRQb3NpdGlvbjogZmFsc2UsXG4gICAgICBwcmV2TmV4dEJ1dHRvbnM6IGZhbHNlLFxuICAgICAgcGFnZURvdHM6IGZhbHNlLFxuICAgICAgc2V0R2FsbGVyeVNpemU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fYmluZFNsaWRlcigpO1xuICB9XG5cbiAgX2Rlc3Ryb3lGbGlja2l0eSgpIHtcbiAgICBpZiAoIXRoaXMuZmxpY2tpdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiR3aW5kb3cub2ZmKCcuaW5zdGFncmFtLWZlZWQnKTtcbiAgICB0aGlzLiRwaG90b0NvbnRhaW5lci5vZmYoJy5pbnN0YWdyYW0tZmVlZCcpO1xuICAgIHRoaXMuZmxpY2tpdHkuZGVzdHJveSgpO1xuICAgIHRoaXMuZmxpY2tpdHkgPSBudWxsO1xuICB9XG5cbiAgX21vYmlsZVNsaWRlcigpIHtcbiAgICAvLyBJZiBpcyBMYXJnZSBsYXlvdXQsIGF0dGVtcHQgdG8gZGVzdHJveSBmbGlja2l0eVxuICAgIGlmIChsYXlvdXQuaXNCcmVha3BvaW50KCdMJykgfHwgbGF5b3V0LmlzQnJlYWtwb2ludCgnTScpKSB7XG4gICAgICB0aGlzLl9kZXN0cm95RmxpY2tpdHkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJcyBYUy9TL00sIGFuZCBmbGlja2l0eSBpcyBpbml0J2QgLS0gZG8gbm90aGluZ1xuICAgIGlmICh0aGlzLmZsaWNraXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSXMgWFMvUy9NLCBhbmQgZmxpY2tpdHkgaXMgbm90IGluaXQnZFxuICAgIHRoaXMuX2luaXRGbGlja2l0eSgpO1xuICB9XG5cbiAgX2JpbmRTbGlkZXIoKSB7XG4gICAgY29uc3QgJHNsaWRlciA9IHRoaXMuJHBob3RvQ29udGFpbmVyLmZpbmQoJy5mbGlja2l0eS1zbGlkZXInKTtcblxuICAgIHRoaXMuJHdpbmRvdy5vbihcbiAgICAgICdyZXNpemUuaW5zdGFncmFtLWZlZWQnLFxuICAgICAgZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICB0aGlzLiRwaG90b0NvbnRhaW5lci50cmlnZ2VyKCdoZWlnaHRVcGRhdGUuaW5zdGFncmFtLWZlZWQnKTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLmZsaWNraXR5Lm9uKCdjZWxsU2VsZWN0JywgKCkgPT4ge1xuICAgICAgdGhpcy4kcGhvdG9Db250YWluZXIudHJpZ2dlcignaGVpZ2h0VXBkYXRlLmluc3RhZ3JhbS1mZWVkJyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRwaG90b0NvbnRhaW5lci5vbignaGVpZ2h0VXBkYXRlLmluc3RhZ3JhbS1mZWVkJywgKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZsaWNraXR5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJHNsaWRlci5oZWlnaHQoTWF0aC5jZWlsKHRoaXMuZmxpY2tpdHkubWF4Q2VsbEhlaWdodCkpO1xuICAgIH0pO1xuXG4gICAgLy8gU2V0cyB0aGUgU2xpZGVyIHRvIHRoZSBoZWlnaHQgb2YgdGhlIGZpcnN0IHNsaWRlXG4gICAgdGhpcy4kcGhvdG9Db250YWluZXIudHJpZ2dlcignaGVpZ2h0VXBkYXRlLmluc3RhZ3JhbS1mZWVkJyk7XG4gIH1cblxuICBvblNlY3Rpb25VbmxvYWQoKSB7XG4gICAgdGhpcy5sYXp5TG9hZGVyLnVubG9hZCgpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicInstagramFeed.js\n')},
1"./source/scripts/sections/DynamicMap.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DynamicMap; });\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scriptjs */ "./node_modules/scriptjs/dist/script.js");\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(scriptjs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _helpers_mapUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/mapUtils */ "./source/scripts/helpers/mapUtils.js");\n/* harmony import */ var _helpers_LazyLoader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers/LazyLoader */ "./source/scripts/helpers/LazyLoader.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar DynamicMap =\n/*#__PURE__*/\nfunction () {\n function DynamicMap(section) {\n var _this = this;\n\n _classCallCheck(this, DynamicMap);\n\n var initMap = function initMap() {\n _this.map = null;\n var el = section.el.querySelector(\'[data-map]\');\n var container = el.querySelector(\'[data-map-container]\');\n var settings = section.data;\n var address = settings.address,\n colors = settings.colors;\n var apiKey = settings.api_key; // Scale so range is 12 ~ 17, rather than 1 to 6\n\n var zoom = Number.isNaN(settings.zoom) ? 13 : 11 + parseInt(settings.zoom, 10);\n\n if (apiKey) {\n if (window.googleMaps === undefined) {\n scriptjs__WEBPACK_IMPORTED_MODULE_0___default()("https://maps.googleapis.com/maps/api/js?key=".concat(apiKey), function () {\n window.googleMaps = true;\n Object(_helpers_mapUtils__WEBPACK_IMPORTED_MODULE_1__["createMap"])({\n container: container,\n address: address,\n zoom: zoom,\n colors: colors\n }).done(function (map) {\n _this.map = map;\n }).fail(function (error) {\n return Object(_helpers_mapUtils__WEBPACK_IMPORTED_MODULE_1__["displayErrorInThemeEditor"])(container, error);\n });\n });\n } else {\n Object(_helpers_mapUtils__WEBPACK_IMPORTED_MODULE_1__["createMap"])({\n container: container,\n address: address,\n zoom: zoom,\n colors: colors\n }).done(function (map) {\n _this.map = map;\n }).fail(function (error) {\n return Object(_helpers_mapUtils__WEBPACK_IMPORTED_MODULE_1__["displayErrorInThemeEditor"])(container, error);\n });\n }\n }\n };\n\n this.lazyLoader = new _helpers_LazyLoader__WEBPACK_IMPORTED_MODULE_2__["default"](section.el, initMap);\n }\n\n _createClass(DynamicMap, [{\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.map = null;\n this.lazyLoader.unload();\n }\n }]);\n\n return DynamicMap;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljTWFwLmpzPzRjNTUiXSwibmFtZXMiOlsiRHluYW1pY01hcCIsInNlY3Rpb24iLCJpbml0TWFwIiwibWFwIiwiZWwiLCJxdWVyeVNlbGVjdG9yIiwiY29udGFpbmVyIiwic2V0dGluZ3MiLCJkYXRhIiwiYWRkcmVzcyIsImNvbG9ycyIsImFwaUtleSIsImFwaV9rZXkiLCJ6b29tIiwiTnVtYmVyIiwiaXNOYU4iLCJwYXJzZUludCIsIndpbmRvdyIsImdvb2dsZU1hcHMiLCJ1bmRlZmluZWQiLCIkc2NyaXB0IiwiY3JlYXRlTWFwIiwiZG9uZSIsImZhaWwiLCJlcnJvciIsImRpc3BsYXlFcnJvckluVGhlbWVFZGl0b3IiLCJsYXp5TG9hZGVyIiwiTGF6eUxvYWRlciIsInVubG9hZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBOztJQUVxQkEsVTs7O0FBQ25CL
1HNCQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQUE7O0FBQ25CLFFBQU1DLE9BQU8sR0FBRyxTQUFWQSxPQUFVLEdBQU07QUFDcEIsV0FBSSxDQUFDQyxHQUFMLEdBQVcsSUFBWDtBQUVBLFVBQU1DLEVBQUUsR0FBR0gsT0FBTyxDQUFDRyxFQUFSLENBQVdDLGFBQVgsQ0FBeUIsWUFBekIsQ0FBWDtBQUNBLFVBQU1DLFNBQVMsR0FBR0YsRUFBRSxDQUFDQyxhQUFILENBQWlCLHNCQUFqQixDQUFsQjtBQUNBLFVBQU1FLFFBQVEsR0FBR04sT0FBTyxDQUFDTyxJQUF6QjtBQUxvQixVQU1aQyxPQU5ZLEdBTVFGLFFBTlIsQ0FNWkUsT0FOWTtBQUFBLFVBTUhDLE1BTkcsR0FNUUgsUUFOUixDQU1IRyxNQU5HO0FBT3BCLFVBQU1DLE1BQU0sR0FBR0osUUFBUSxDQUFDSyxPQUF4QixDQVBvQixDQVFwQjs7QUFDQSxVQUFNQyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhUixRQUFRLENBQUNNLElBQXRCLElBQ1QsRUFEUyxHQUVULEtBQUtHLFFBQVEsQ0FBQ1QsUUFBUSxDQUFDTSxJQUFWLEVBQWdCLEVBQWhCLENBRmpCOztBQUlBLFVBQUlGLE1BQUosRUFBWTtBQUNWLFlBQUlNLE1BQU0sQ0FBQ0MsVUFBUCxLQUFzQkMsU0FBMUIsRUFBcUM7QUFDbkNDLHlEQUFPLHVEQUMwQ1QsTUFEMUMsR0FFTCxZQUFNO0FBQ0pNLGtCQUFNLENBQUNDLFVBQVAsR0FBb0IsSUFBcEI7QUFDQUcsK0VBQVMsQ0FBQztBQUNSZix1QkFBUyxFQUFUQSxTQURRO0FBRVJHLHFCQUFPLEVBQVBBLE9BRlE7QUFHUkksa0JBQUksRUFBSkEsSUFIUTtBQUlSSCxvQkFBTSxFQUFOQTtBQUpRLGFBQUQsQ0FBVCxDQU1HWSxJQU5ILENBTVEsVUFBQW5CLEdBQUcsRUFBSTtBQUNYLG1CQUFJLENBQUNBLEdBQUwsR0FBV0EsR0FBWDtBQUNELGFBUkgsRUFTR29CLElBVEgsQ0FTUSxVQUFBQyxLQUFLO0FBQUEscUJBQUlDLG1GQUF5QixDQUFDbkIsU0FBRCxFQUFZa0IsS0FBWixDQUE3QjtBQUFBLGFBVGI7QUFVRCxXQWRJLENBQVA7QUFnQkQsU0FqQkQsTUFpQk87QUFDTEgsNkVBQVMsQ0FBQztBQUNSZixxQkFBUyxFQUFUQSxTQURRO0FBRVJHLG1CQUFPLEVBQVBBLE9BRlE7QUFHUkksZ0JBQUksRUFBSkEsSUFIUTtBQUlSSCxrQkFBTSxFQUFOQTtBQUpRLFdBQUQsQ0FBVCxDQU1HWSxJQU5ILENBTVEsVUFBQW5CLEdBQUcsRUFBSTtBQUNYLGlCQUFJLENBQUNBLEdBQUwsR0FBV0EsR0FBWDtBQUNELFdBUkgsRUFTR29CLElBVEgsQ0FTUSxVQUFBQyxLQUFLO0FBQUEsbUJBQUlDLG1GQUF5QixDQUFDbkIsU0FBRCxFQUFZa0IsS0FBWixDQUE3QjtBQUFBLFdBVGI7QUFVRDtBQUNGO0FBQ0YsS0E1Q0Q7O0FBOENBLFNBQUtFLFVBQUwsR0FBa0IsSUFBSUMsMkRBQUosQ0FBZTFCLE9BQU8sQ0FBQ0csRUFBdkIsRUFBMkJGLE9BQTNCLENBQWxCO0FBQ0Q7Ozs7c0NBRWlCO0FBQ2hCLFdBQUtDLEdBQUwsR0FBVyxJQUFYO0FBQ0EsV0FBS3VCLFVBQUwsQ0FBZ0JFLE1BQWhCO0FBQ0QiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljTWFwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICRzY3JpcHQgZnJvbSAnc2NyaXB0anMnO1xuaW1wb3J0IHsgY3JlYXRlTWFwLCBkaXNwbGF5RXJyb3JJblRoZW1lRWRpdG9yIH0gZnJvbSAnLi4vaGVscGVycy9tYXBVdGlscyc7XG5pbXBvcnQgTGF6eUxvYWRlciBmcm9tICcuLi9oZWxwZXJzL0xhenlMb2FkZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEeW5hbWljTWFwIHtcbiAgY29uc3RydWN0b3Ioc2VjdGlvbikge1xuICAgIGNvbnN0IGluaXRNYXAgPSAoKSA9PiB7XG4gICAgICB0aGlzLm1hcCA9IG51bGw7XG5cbiAgICAgIGNvbnN0IGVsID0gc2VjdGlvbi5lbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tYXBdJyk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tYXAtY29udGFpbmVyXScpO1xuICAgICAgY29uc3Qgc2V0dGluZ3MgPSBzZWN0aW9uLmRhdGE7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvbG9ycyB9ID0gc2V0dGluZ3M7XG4gICAgICBjb25zdCBhcGlLZXkgPSBzZXR0aW5ncy5hcGlfa2V5O1xuICAgICAgLy8gU2NhbGUgc28gcmFuZ2UgaXMgMTIgfiAxNywgcmF0aGVyIHRoYW4gMSB0byA2XG4gICAgICBjb25zdCB6b29tID0gTnVtYmVyLmlzTmFOKHNldHRpbmdzLnpvb20pXG4gICAgICAgID8gMTNcbiAgICAgICAgOiAxMSArIHBhcnNlSW50KHNldHRpbmdzLnpvb20sIDEwKTtcblxuICAgICAgaWYgKGFwaUtleSkge1xuICAgICAgICBpZiAod2luZG93Lmdvb2dsZU1hcHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICRzY3JpcHQoXG4gICAgICAgICAgICBgaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2pzP2tleT0ke2FwaUtleX1gLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICB3aW5kb3cuZ29vZ2xlTWFwcyA9IHRydWU7XG4gICAgICAgICAgICAgIGNyZWF0ZU1hcCh7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgICAgem9vbSxcbiAgICAgICAgICAgICAgICBjb2xvcnMsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRvbmUobWFwID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmZhaWwoZXJyb3IgPT4gZGlzcGxheUVycm9ySW5UaGVtZUVkaXRvcihjb250YWluZXIsIGVycm9yKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3JlYXRlTWFwKHtcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICB6b29tLFxuICAgICAgICAgICAgY29sb3JzLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZG9uZShtYXAgPT4ge1xuICAgICAgICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmFpbChlcnJvciA9PiBkaXNwbGF5RXJyb3JJblRoZW1lRWRpdG9yKGNvbnRhaW5lciwgZXJyb3IpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmxhenlMb2FkZXIgPSBuZXcgTGF6eUxvYWRlcihzZWN0aW9uLmVsLCBpbml0TWFwKTtcbiAgfVxuXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLm1hcCA9IG51bGw7XG4gICAgdGhpcy5sYXp5TG9hZGVyLnVubG9hZCgpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicMap.js\n')},
1"./source/scripts/sections/DynamicMenuList.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DynamicMenuList; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Accordion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Accordion */ "./source/scripts/Accordion.js");\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Layout */ "./source/scripts/Layout.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar DynamicMenuList =\n/*#__PURE__*/\nfunction () {\n function DynamicMenuList(section) {\n _classCallCheck(this, DynamicMenuList);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.context = section.data.context;\n this.Accordion = new _Accordion__WEBPACK_IMPORTED_MODULE_1__["default"](this.$el); // Handle Accordion interaction when window size changes\n\n this.layoutHandler = this.onBreakpointChange.bind(this);\n _Layout__WEBPACK_IMPORTED_MODULE_2__["default"].onBreakpointChange(this.layoutHandler);\n\n this._bindEvents();\n }\n\n _createClass(DynamicMenuList, [{\n key: "_bindEvents",\n value: function _bindEvents() {\n var _this = this;\n\n this.$el.on(\'click.menu-list\', \'[data-accordion-trigger]\', function (event) {\n event.preventDefault();\n\n _this._toggleAccordion(jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget).parent());\n });\n this.$el.on(\'click.menu-list\', \'[data-menulist-toggle]\', function (event) {\n event.preventDefault();\n\n _this._toggleList(event.currentTarget);\n });\n }\n }, {\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.$el.off(\'.menu-list\');\n delete this.Accordion;\n }\n }, {\n key: "onSectionBlockSelect",\n value: function onSectionBlockSelect(block) {\n this._toggleAccordion(jquery__WEBPACK_IMPORTED_MODULE_0___default()(block.el), true);\n }\n }, {\n key: "onSectionBlockDeselect",\n value: function onSectionBlockDeselect(block) {\n this._toggleAccordion(jquery__WEBPACK_IMPORTED_MODULE_0___default()(block.el), false);\n }\n }, {\n key: "_toggleAccordion",\n value: function _toggleAccordion($block) {\n if (_Layout__WEBPACK_IMPORTED_MODULE_2__["default"].isBreakpoint(\'L\')) {\n return;\n }\n\n this.Accordion.toggle($block);\n }\n }, {\n key: "_toggleList",\n value: function _toggleList(el) {\n var $trigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el);\n var $items = $trigger.parent().siblings(\'[data-hidden-default]\');\n var siblingsVisible = $trigger.data(\'menulist-toggle\');\n $items.toggleClass(\'menulist--menu-item-hidden\', siblingsVisible);\n $trigger.data(\'menulist-toggle\', !siblingsVisible).text(!siblingsVisible ? this.context.see_less : this.context.see_more);\n }\n }, {\n key: "onBreakpointChange",\n value: function onBreakpointChange(event, breakpoints) {\n if (_Layout__WEBPACK_IMPORTED_MODULE_2__["default"].isBreakpoint(\'L\')) {\n this.Accordion.openAll();\n } else if (breakpoints.previous === \'L\' && !_Layout__WEBPACK_IMPORTED_MODULE_2__["default"].isBreakpoint(\'L\')) {\n this.Accordion.closeOpen();\n }\n }\n }]);\n\n return DynamicMenuList;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljTWVudUxpc3QuanM/ZWYxMyJdLCJuYW1lcyI6WyJEeW5hbWljTWVudUxpc3QiLCJzZWN0aW9uIiwiJGVsIiwiJCIsImVsIiwiY29udGV4dCIsImRhdGEiLCJBY2NvcmRpb24iLCJsYXlvdXRIYW5kbGVyIiwib25CcmVha3BvaW50Q2hhbmdlIiwiYmluZCIsImxheW91dCIsIl9iaW5kRXZlbnRzIiwib24iLCJldmVudCIsInByZXZlbn
1REZWZhdWx0IiwiX3RvZ2dsZUFjY29yZGlvbiIsImN1cnJlbnRUYXJnZXQiLCJwYXJlbnQiLCJfdG9nZ2xlTGlzdCIsIm9mZiIsImJsb2NrIiwiJGJsb2NrIiwiaXNCcmVha3BvaW50IiwidG9nZ2xlIiwiJHRyaWdnZXIiLCIkaXRlbXMiLCJzaWJsaW5ncyIsInNpYmxpbmdzVmlzaWJsZSIsInRvZ2dsZUNsYXNzIiwidGV4dCIsInNlZV9sZXNzIiwic2VlX21vcmUiLCJicmVha3BvaW50cyIsIm9wZW5BbGwiLCJwcmV2aW91cyIsImNsb3NlT3BlbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7QUFFQTtBQUNBOztJQUVxQkEsZTs7O0FBQ25CLDJCQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQ25CLFNBQUtDLEdBQUwsR0FBV0MsNkNBQUMsQ0FBQ0YsT0FBTyxDQUFDRyxFQUFULENBQVo7QUFDQSxTQUFLQyxPQUFMLEdBQWVKLE9BQU8sQ0FBQ0ssSUFBUixDQUFhRCxPQUE1QjtBQUNBLFNBQUtFLFNBQUwsR0FBaUIsSUFBSUEsa0RBQUosQ0FBYyxLQUFLTCxHQUFuQixDQUFqQixDQUhtQixDQUtuQjs7QUFDQSxTQUFLTSxhQUFMLEdBQXFCLEtBQUtDLGtCQUFMLENBQXdCQyxJQUF4QixDQUE2QixJQUE3QixDQUFyQjtBQUNBQyxtREFBTSxDQUFDRixrQkFBUCxDQUEwQixLQUFLRCxhQUEvQjs7QUFFQSxTQUFLSSxXQUFMO0FBQ0Q7Ozs7a0NBRWE7QUFBQTs7QUFDWixXQUFLVixHQUFMLENBQVNXLEVBQVQsQ0FBWSxpQkFBWixFQUErQiwwQkFBL0IsRUFBMkQsVUFBQUMsS0FBSyxFQUFJO0FBQ2xFQSxhQUFLLENBQUNDLGNBQU47O0FBQ0EsYUFBSSxDQUFDQyxnQkFBTCxDQUFzQmIsNkNBQUMsQ0FBQ1csS0FBSyxDQUFDRyxhQUFQLENBQUQsQ0FBdUJDLE1BQXZCLEVBQXRCO0FBQ0QsT0FIRDtBQUtBLFdBQUtoQixHQUFMLENBQVNXLEVBQVQsQ0FBWSxpQkFBWixFQUErQix3QkFBL0IsRUFBeUQsVUFBQUMsS0FBSyxFQUFJO0FBQ2hFQSxhQUFLLENBQUNDLGNBQU47O0FBQ0EsYUFBSSxDQUFDSSxXQUFMLENBQWlCTCxLQUFLLENBQUNHLGFBQXZCO0FBQ0QsT0FIRDtBQUlEOzs7c0NBRWlCO0FBQ2hCLFdBQUtmLEdBQUwsQ0FBU2tCLEdBQVQsQ0FBYSxZQUFiO0FBRUEsYUFBTyxLQUFLYixTQUFaO0FBQ0Q7Ozt5Q0FFb0JjLEssRUFBTztBQUMxQixXQUFLTCxnQkFBTCxDQUFzQmIsNkNBQUMsQ0FBQ2tCLEtBQUssQ0FBQ2pCLEVBQVAsQ0FBdkIsRUFBbUMsSUFBbkM7QUFDRDs7OzJDQUVzQmlCLEssRUFBTztBQUM1QixXQUFLTCxnQkFBTCxDQUFzQmIsNkNBQUMsQ0FBQ2tCLEtBQUssQ0FBQ2pCLEVBQVAsQ0FBdkIsRUFBbUMsS0FBbkM7QUFDRDs7O3FDQUVnQmtCLE0sRUFBUTtBQUN2QixVQUFJWCwrQ0FBTSxDQUFDWSxZQUFQLENBQW9CLEdBQXBCLENBQUosRUFBOEI7QUFDNUI7QUFDRDs7QUFFRCxXQUFLaEIsU0FBTCxDQUFlaUIsTUFBZixDQUFzQkYsTUFBdEI7QUFDRDs7O2dDQUVXbEIsRSxFQUFJO0FBQ2QsVUFBTXFCLFFBQVEsR0FBR3RCLDZDQUFDLENBQUNDLEVBQUQsQ0FBbEI7QUFDQSxVQUFNc0IsTUFBTSxHQUFHRCxRQUFRLENBQUNQLE1BQVQsR0FBa0JTLFFBQWxCLENBQTJCLHVCQUEzQixDQUFmO0FBQ0EsVUFBTUMsZUFBZSxHQUFHSCxRQUFRLENBQUNuQixJQUFULENBQWMsaUJBQWQsQ0FBeEI7QUFFQW9CLFlBQU0sQ0FBQ0csV0FBUCxDQUFtQiw0QkFBbkIsRUFBaURELGVBQWpEO0FBQ0FILGNBQVEsQ0FDTG5CLElBREgsQ0FDUSxpQkFEUixFQUMyQixDQUFDc0IsZUFENUIsRUFFR0UsSUFGSCxDQUVRLENBQUNGLGVBQUQsR0FBbUIsS0FBS3ZCLE9BQUwsQ0FBYTBCLFFBQWhDLEdBQTJDLEtBQUsxQixPQUFMLENBQWEyQixRQUZoRTtBQUdEOzs7dUNBRWtCbEIsSyxFQUFPbUIsVyxFQUFhO0FBQ3JDLFVBQUl0QiwrQ0FBTSxDQUFDWSxZQUFQLENBQW9CLEdBQXBCLENBQUosRUFBOEI7QUFDNUIsYUFBS2hCLFNBQUwsQ0FBZTJCLE9BQWY7QUFDRCxPQUZELE1BRU8sSUFBSUQsV0FBVyxDQUFDRSxRQUFaLEtBQXlCLEdBQXpCLElBQWdDLENBQUN4QiwrQ0FBTSxDQUFDWSxZQUFQLENBQW9CLEdBQXBCLENBQXJDLEVBQStEO0FBQ3BFLGFBQUtoQixTQUFMLENBQWU2QixTQUFmO0FBQ0Q7QUFDRiIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL3NlY3Rpb25zL0R5bmFtaWNNZW51TGlzdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmltcG9ydCBBY2NvcmRpb24gZnJvbSAnLi4vQWNjb3JkaW9uJztcbmltcG9ydCBsYXlvdXQgZnJvbSAnLi4vTGF5b3V0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHluYW1pY01lbnVMaXN0IHtcbiAgY29uc3RydWN0b3Ioc2VjdGlvbikge1xuICAgIHRoaXMuJGVsID0gJChzZWN0aW9uLmVsKTtcbiAgICB0aGlzLmNvbnRleHQgPSBzZWN0aW9uLmRhdGEuY29udGV4dDtcbiAgICB0aGlzLkFjY29yZGlvbiA9IG5ldyBBY2NvcmRpb24odGhpcy4kZWwpO1xuXG4gICAgLy8gSGFuZGxlIEFjY29yZGlvbiBpbnRlcmFjdGlvbiB3aGVuIHdpbmRvdyBzaXplIGNoYW5nZXNcbiAgICB0aGlzLmxheW91dEhhbmRsZXIgPSB0aGlzLm9uQnJlYWtwb2ludENoYW5nZS5iaW5kKHRoaXMpO1xuICAgIGxheW91dC5vbkJyZWFrcG9pbnRDaGFuZ2UodGhpcy5sYXlvdXRIYW5kbGVyKTtcblxuICAgIHRoaXMuX2JpbmRFdmVudHMoKTtcbiAgfVxuXG4gIF9iaW5kRXZlbnRzKCkge1xuICAgIHRoaXMuJGVsLm9uKCdjbGljay5tZW51LWxpc3QnLCAnW2RhdGEtYWNjb3JkaW9uLXRyaWdnZXJdJywgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuX3RvZ2dsZUFjY29yZGlvbigkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLnBhcmVudCgpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuJGVsLm9uKCdjbGljay5tZW51LWxpc3QnLCAnW2RhdGEtbWVudWxpc3QtdG9nZ2xlXScsIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLl90b2dnbGVMaXN0KGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgb25TZWN0aW9uVW5sb2FkKCkge1xuICAgIHRoaXMuJGVsLm9mZignLm1lbnUtbGlzdCcpO1xuXG4gICAgZGVsZXRlIHRoaXMuQWNjb3JkaW9uO1xuICB9XG5cbiAgb25TZWN0aW9uQmxvY2tTZWxlY3QoYmxvY2spIHtcbiAgICB0aGlzLl90b2dnbGVBY2NvcmRpb24oJChibG9jay5lbCksIHRydWUpO1xuICB9XG5cbiAgb25TZWN0aW9uQmxvY2tEZXNlbGVjdChibG9jaykge1xuICAgIHRoaXMuX3RvZ2dsZUFjY29yZGlvbigkKGJsb2NrLmVsKSwgZmFsc2UpO1xuICB9XG5cbiAgX3RvZ2dsZUFjY29yZGlvbigkYmxvY2spIHtcbiAgICBpZiAobGF5b3V0LmlzQnJlYWtwb2ludCgnTCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5BY2NvcmRpb24udG9nZ2xlKCRibG9jayk7XG4gIH1cblxuICBfdG9nZ2xlTGlzdChlbCkge1xuICAgIGNvbnN0ICR0cmlnZ2VyID0gJChlbCk7XG4gICAgY29uc3QgJGl0ZW1zID0gJHRyaWdnZXIucGFyZW50KCkuc2libGluZ3MoJ1tkYXRhLWhpZGRlbi1kZWZhdWx0XScpO1xuICAgIGNvbnN0IHNpYmxpbmdzVmlzaWJsZSA9ICR0cmlnZ2VyLmRhdGEoJ21lbnVsaXN0LXRvZ2dsZScpO1xuXG4gICAgJGl0ZW1zLnRvZ2dsZUNsYXNzKCdtZW51bGlzdC0tbWVudS1pdGVtLWhpZGRlbicsIHNpYmxpbmdzVmlzaWJsZSk7XG4gICAgJHRyaWdnZXJcbiAgICAgIC5kYXRhKCdtZW51bGlzdC10b2dnbGUnLCAhc2libGluZ3NWaXN
1pYmxlKVxuICAgICAgLnRleHQoIXNpYmxpbmdzVmlzaWJsZSA/IHRoaXMuY29udGV4dC5zZWVfbGVzcyA6IHRoaXMuY29udGV4dC5zZWVfbW9yZSk7XG4gIH1cblxuICBvbkJyZWFrcG9pbnRDaGFuZ2UoZXZlbnQsIGJyZWFrcG9pbnRzKSB7XG4gICAgaWYgKGxheW91dC5pc0JyZWFrcG9pbnQoJ0wnKSkge1xuICAgICAgdGhpcy5BY2NvcmRpb24ub3BlbkFsbCgpO1xuICAgIH0gZWxzZSBpZiAoYnJlYWtwb2ludHMucHJldmlvdXMgPT09ICdMJyAmJiAhbGF5b3V0LmlzQnJlYWtwb2ludCgnTCcpKSB7XG4gICAgICB0aGlzLkFjY29yZGlvbi5jbG9zZU9wZW4oKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicMenuList.js\n')},
1"./source/scripts/sections/DynamicNewsletter.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DynamicNewsletter; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Forms */ "./source/scripts/Forms.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar DynamicNewsletter =\n/*#__PURE__*/\nfunction () {\n function DynamicNewsletter(section) {\n _classCallCheck(this, DynamicNewsletter);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.forms = new _Forms__WEBPACK_IMPORTED_MODULE_1__["default"](this.$el);\n }\n\n _createClass(DynamicNewsletter, [{\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.forms.unload();\n }\n }]);\n\n return DynamicNewsletter;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljTmV3c2xldHRlci5qcz8wZTViIl0sIm5hbWVzIjpbIkR5bmFtaWNOZXdzbGV0dGVyIiwic2VjdGlvbiIsIiRlbCIsIiQiLCJlbCIsImZvcm1zIiwiRm9ybXMiLCJ1bmxvYWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFFQTs7SUFFcUJBLGlCOzs7QUFDbkIsNkJBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFDbkIsU0FBS0MsR0FBTCxHQUFXQyw2Q0FBQyxDQUFDRixPQUFPLENBQUNHLEVBQVQsQ0FBWjtBQUVBLFNBQUtDLEtBQUwsR0FBYSxJQUFJQyw4Q0FBSixDQUFVLEtBQUtKLEdBQWYsQ0FBYjtBQUNEOzs7O3NDQUVpQjtBQUNoQixXQUFLRyxLQUFMLENBQVdFLE1BQVg7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL3NlY3Rpb25zL0R5bmFtaWNOZXdzbGV0dGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuaW1wb3J0IEZvcm1zIGZyb20gJy4uL0Zvcm1zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHluYW1pY05ld3NsZXR0ZXIge1xuICBjb25zdHJ1Y3RvcihzZWN0aW9uKSB7XG4gICAgdGhpcy4kZWwgPSAkKHNlY3Rpb24uZWwpO1xuXG4gICAgdGhpcy5mb3JtcyA9IG5ldyBGb3Jtcyh0aGlzLiRlbCk7XG4gIH1cblxuICBvblNlY3Rpb25VbmxvYWQoKSB7XG4gICAgdGhpcy5mb3Jtcy51bmxvYWQoKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicNewsletter.js\n')},
1"./source/scripts/sections/DynamicPromoBlocks.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DynamicPromoBlocks; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Layout */ "./source/scripts/Layout.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar DynamicPromoBlocks =\n/*#__PURE__*/\nfunction () {\n function DynamicPromoBlocks(section) {\n var _this = this;\n\n _classCallCheck(this, DynamicPromoBlocks);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.contentSelector = section.data.content_selector;\n this.blockSelector = section.data.block_selector;\n this.content = "[".concat(this.contentSelector, "]");\n this.expandedClass = "".concat(this.blockSelector, "--expanded");\n this.compressBlocks = section.data.compress_blocks; // Adjusts the height of the block so it can contain the wrapper within it\n\n this.adjustHeight = function (block) {\n var $block = jquery__WEBPACK_IMPORTED_MODULE_0___default()(block);\n var $wrapper = $block.find(".".concat(_this.blockSelector, "--content-wrapper"));\n var padding = window.getComputedStyle($block[0], null).getPropertyValue(\'padding-top\').replace(\'px\', \'\');\n\n if ($block.innerHeight() - padding * 2 < $wrapper.innerHeight()) {\n $block.css({\n height: "".concat($wrapper.innerHeight() + padding * 2, "px")\n });\n $wrapper.css({\n transform: \'none\',\n top: \'auto\'\n });\n }\n }; // Removes height settings on the block because they only need to be there for small screens\n\n\n this.resetHeight = function (block) {\n var $block = jquery__WEBPACK_IMPORTED_MODULE_0___default()(block);\n var $wrapper = $block.find(".".concat(_this.blockSelector, "--content-wrapper"));\n $block.css({\n height: \'\'\n });\n $wrapper.css({\n transform: \'\',\n top: \'\'\n });\n }; // Revert navigation to original state on breakpoint change\n\n\n this.layoutHandler = this.onBreakpointChange.bind(this);\n _Layout__WEBPACK_IMPORTED_MODULE_1__["default"].onBreakpointChange(this.layoutHandler);\n this._blockInteraction = this._blockInteraction.bind(this);\n this.$el.on("click.".concat(this.blockSelector), this.content, this._blockInteraction);\n\n if (!this.compressBlocks && _Layout__WEBPACK_IMPORTED_MODULE_1__["default"].isBreakpoint(\'XS\')) {\n this.$el.find(this.content).each(function (index, block) {\n _this.adjustHeight(block);\n });\n }\n }\n /**\n * Remove block\'s toggled state and attributes when leaving mobile\n */\n\n\n _createClass(DynamicPromoBlocks, [{\n key: "onBreakpointChange",\n value: function onBreakpointChange() {\n var _this2 = this;\n\n if (!_Layout__WEBPACK_IMPORTED_MODULE_1__["default"].isBreakpoint(\'XS\')) {\n this.$el.find(".".concat(this.expandedClass)).each(function (i, content) {\n _this2._collapse(content);\n });\n this.$el.find(this.content).each(function (index, block) {\n _this2.resetHeight(block);\n });\n } else if (!this.compressBlocks) {\n this.$el.find(this.content).each(function (index, block) {\n _this2.adjustHeight(block);\n });\n }\n }\n /**\n * Unbind events when section is re-drawn\n */\n\n }, {\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.$el.off(".".concat(this.blockSelector));\n _Layout__WEBPACK_IMPORTED_MODULE_1__["default"].offBreakp
1ointChange(this.layoutHandler);\n }\n /**\n * Callback to open block on mobile from the TE\n *\n * @param block\n */\n\n }, {\n key: "onSectionBlockSelect",\n value: function onSectionBlockSelect(block) {\n if (!_Layout__WEBPACK_IMPORTED_MODULE_1__["default"].isBreakpoint(\'XS\')) return;\n\n this._expand(block.el.querySelector(this.content));\n }\n /**\n * Callback to close block on mobile from the TE\n *\n * @param block\n */\n\n }, {\n key: "onSectionBlockDeselect",\n value: function onSectionBlockDeselect(block) {\n if (!_Layout__WEBPACK_IMPORTED_MODULE_1__["default"].isBreakpoint(\'XS\')) return;\n\n this._collapse(block.el.querySelector(this.content));\n }\n /**\n * Expand a block on first click, then allow it to behave as normal\n *\n * @param event\n * @private\n */\n\n }, {\n key: "_blockInteraction",\n value: function _blockInteraction(event) {\n var content = event.currentTarget;\n var clicked = content.getAttribute(\'data-clicked\'); // On second click, or on desktop, don\'t interfere with block\n\n if (clicked || !_Layout__WEBPACK_IMPORTED_MODULE_1__["default"].isBreakpoint(\'XS\') || !this.compressBlocks) {\n return;\n }\n\n event.preventDefault();\n content.setAttribute(\'data-clicked\', \'clicked\');\n\n this._expand(content);\n }\n /**\n * Expand promo block\n *\n * @param content\n * @private\n */\n\n }, {\n key: "_expand",\n value: function _expand(content) {\n var _this3 = this;\n\n if (!this.compressBlocks) {\n return;\n }\n\n var $content = jquery__WEBPACK_IMPORTED_MODULE_0___default()(content);\n $content.addClass(\'animating animating-in\').one(\'trend\', function () {\n $content.removeClass(\'animating animating-in\').addClass(_this3.expandedClass).off(\'trend\');\n\n _this3.adjustHeight($content);\n });\n }\n /**\n * Collapse a block\n *\n * @param content\n * @private\n */\n\n }, {\n key: "_collapse",\n value: function _collapse(content) {\n var _this4 = this;\n\n if (!this.compressBlocks) {\n return;\n }\n\n var $content = jquery__WEBPACK_IMPORTED_MODULE_0___default()(content);\n $content.addClass(\'animating animating-out\').one(\'trend\', function () {\n $content.removeClass("animating animating-out ".concat(_this4.expandedClass)).off(\'trend\');\n content.removeAttribute(\'data-clicked\');\n\n _this4.resetHeight($content);\n });\n }\n }]);\n\n return DynamicPromoBlocks;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljUHJvbW9CbG9ja3MuanM/MjhlNyJdLCJuYW1lcyI6WyJEeW5hbWljUHJvbW9CbG9ja3MiLCJzZWN0aW9uIiwiJGVsIiwiJCIsImVsIiwiY29udGVudFNlbGVjdG9yIiwiZGF0YSIsImNvbn
1RlbnRfc2VsZWN0b3IiLCJibG9ja1NlbGVjdG9yIiwiYmxvY2tfc2VsZWN0b3IiLCJjb250ZW50IiwiZXhwYW5kZWRDbGFzcyIsImNvbXByZXNzQmxvY2tzIiwiY29tcHJlc3NfYmxvY2tzIiwiYWRqdXN0SGVpZ2h0IiwiYmxvY2siLCIkYmxvY2siLCIkd3JhcHBlciIsImZpbmQiLCJwYWRkaW5nIiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldFByb3BlcnR5VmFsdWUiLCJyZXBsYWNlIiwiaW5uZXJIZWlnaHQiLCJjc3MiLCJoZWlnaHQiLCJ0cmFuc2Zvcm0iLCJ0b3AiLCJyZXNldEhlaWdodCIsImxheW91dEhhbmRsZXIiLCJvbkJyZWFrcG9pbnRDaGFuZ2UiLCJiaW5kIiwibGF5b3V0IiwiX2Jsb2NrSW50ZXJhY3Rpb24iLCJvbiIsImlzQnJlYWtwb2ludCIsImVhY2giLCJpbmRleCIsImkiLCJfY29sbGFwc2UiLCJvZmYiLCJvZmZCcmVha3BvaW50Q2hhbmdlIiwiX2V4cGFuZCIsInF1ZXJ5U2VsZWN0b3IiLCJldmVudCIsImN1cnJlbnRUYXJnZXQiLCJjbGlja2VkIiwiZ2V0QXR0cmlidXRlIiwicHJldmVudERlZmF1bHQiLCJzZXRBdHRyaWJ1dGUiLCIkY29udGVudCIsImFkZENsYXNzIiwib25lIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmVBdHRyaWJ1dGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7SUFFcUJBLGtCOzs7QUFDbkIsOEJBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFBQTs7QUFDbkIsU0FBS0MsR0FBTCxHQUFXQyw2Q0FBQyxDQUFDRixPQUFPLENBQUNHLEVBQVQsQ0FBWjtBQUNBLFNBQUtDLGVBQUwsR0FBdUJKLE9BQU8sQ0FBQ0ssSUFBUixDQUFhQyxnQkFBcEM7QUFDQSxTQUFLQyxhQUFMLEdBQXFCUCxPQUFPLENBQUNLLElBQVIsQ0FBYUcsY0FBbEM7QUFDQSxTQUFLQyxPQUFMLGNBQW1CLEtBQUtMLGVBQXhCO0FBQ0EsU0FBS00sYUFBTCxhQ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FBZ0QsT0FBaEQsRUFBeUQsWUFBTTtBQUM3REYsZ0JBQVEsQ0FDTEcsV0FESCxDQUNlLHdCQURmLEVBRUdGLFFBRkgsQ0FFWSxNQUFJLENBQUN6QyxhQUZqQixFQUdHOEIsR0FISCxDQUdPLE9BSFA7O0FBS0EsY0FBSSxDQUFDM0IsWUFBTCxDQUFrQnFDLFFBQWxCO0FBQ0QsT0FQRDtBQVFEO0FBRUQ7Ozs7Ozs7Ozs4QkFNVXpDLE8sRUFBUztBQUFBOztBQUNqQixVQUFJLENBQUMsS0FBS0UsY0FBVixFQUEwQjtBQUN4QjtBQUNEOztBQUVELFVBQU11QyxRQUFRLEdBQUdoRCw2Q0FBQyxDQUFDTyxPQUFELENBQWxCO0FBRUF5QyxjQUFRLENBQUNDLFFBQVQsQ0FBa0IseUJBQWxCLEVBQTZDQyxHQUE3QyxDQUFpRCxPQUFqRCxFQUEwRCxZQUFNO0FBQzlERixnQkFBUSxDQUNMRyxXQURILG1DQUMwQyxNQUFJLENBQUMzQyxhQUQvQyxHQUVHOEIsR0FGSCxDQUVPLE9BRlA7QUFHQS9CLGVBQU8sQ0FBQzZDLGVBQVIsQ0FBd0IsY0FBeEI7O0FBQ0EsY0FBSSxDQUFDMUIsV0FBTCxDQUFpQnNCLFFBQWpCO0FBQ0QsT0FORDtBQU9EIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvc2VjdGlvbnMvRHluYW1pY1Byb21vQmxvY2tzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBsYXlvdXQgZnJvbSAnLi4vTGF5b3V0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHluYW1pY1Byb21vQmxvY2tzIHtcbiAgY29uc3RydWN0b3Ioc2VjdGlvbikge1xuICAgIHRoaXMuJGVsID0gJChzZWN0aW9uLmVsKTtcbiAgICB0aGlzLmNvbnRlbnRTZWxlY3RvciA9IHNlY3Rpb24uZGF0YS5jb250ZW50X3NlbGVjdG9yO1xuICAgIHRoaXMuYmxvY2tTZWxlY3RvciA9IHNlY3Rpb24uZGF0YS5ibG9ja19zZWxlY3RvcjtcbiAgICB0aGlzLmNvbnRlbnQgPSBgWyR7dGhpcy5jb250ZW50U2VsZWN0b3J9XWA7XG4gICAgdGhpcy5leHBhbmRlZENsYXNzID0gYCR7dGhpcy5ibG9ja1NlbGVjdG9yfS0tZXhwYW5kZWRgO1xuICAgIHRoaXMuY29tcHJlc3NCbG9ja3MgPSBzZWN0aW9uLmRhdGEuY29tcHJlc3NfYmxvY2tzO1xuICAgIC8vIEFkanVzdHMgdGhlIGhlaWdodCBvZiB0aGUgYmxvY2sgc28gaXQgY2FuIGNvbnRhaW4gdGhlIHdyYXBwZXIgd2l0aGluIGl0XG4gICAgdGhpcy5hZGp1c3RIZWlnaHQgPSBibG9jayA9PiB7XG4gICAgICBjb25zdCAkYmxvY2sgPSAkKGJsb2NrKTtcbiAgICAgIGNvbnN0ICR3cmFwcGVyID0gJGJsb2NrLmZpbmQoYC4ke3RoaXMuYmxvY2tTZWxlY3Rvcn0tLWNvbnRlbnQtd3JhcHBlcmApO1xuXG4gICAgICBjb25zdCBwYWRkaW5nID0gd2luZG93XG4gICAgICAgIC5nZXRDb21wdXRlZFN0eWxlKCRibG9ja1swXSwgbnVsbClcbiAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctdG9wJylcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpO1xuXG4gICAgICBpZiAoJGJsb2NrLmlubmVySGVpZ2h0KCkgLSBwYWRkaW5nICogMiA8ICR3cmFwcGVyLmlubmVySGVpZ2h0KCkpIHtcbiAgICAgICAgJGJsb2NrLmNzcyh7IGhlaWdodDogYCR7JHdyYXBwZXIuaW5uZXJIZWlnaHQoKSArIHBhZGRpbmcgKiAyfXB4YCB9KTtcbiAgICAgICAgJHdyYXBwZXIuY3NzKHsgdHJhbnNmb3JtOiAnbm9uZScsIHRvcDogJ2F1dG8nIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBSZW1vdmVzIGhlaWdodCBzZXR0aW5ncyBvbiB0aGUgYmxvY2sgYmVjYXVzZSB0aGV5IG9ubHkgbmVlZCB0byBiZSB0aGVyZSBmb3Igc21hbGwgc2NyZWVuc1xuICAgIHRoaXMucmVzZXRIZWlnaHQgPSBibG9jayA9PiB7XG4gICAgICBjb25zdCAkYmxvY2sgPSAkKGJsb2NrKTtcbiAgICAgIGNvbnN0ICR3cmFwcGVyID0gJGJsb2NrLmZpbmQoYC4ke3RoaXMuYmxvY2tTZWxlY3Rvcn0tLWNvbnRlbnQtd3JhcHBlcmApO1xuICAgICAgJGJsb2NrLmNzcyh7IGhlaWdodDogJycgfSk7XG4gICAgICAkd3JhcHBlci5jc3MoeyB0cmFuc2Zvcm06ICcnLCB0b3A6ICcnIH0pO1xuICAgIH07XG5cbiAgICAvLyBSZXZlcnQgbmF2aWdhdGlvbiB0byBvcmlnaW5hbCBzdGF0ZSBvbiBicmVha3BvaW50IGNoYW5nZVxuICAgIHRoaXMubGF5b3V0SGFuZGxlciA9IHRoaXMub25CcmVha3BvaW50Q2hhbmdlLmJpbmQodGhpcyk7XG4gICAgbGF5b3V0Lm9uQnJlYWtwb2ludENoYW5nZSh0aGlzLmxheW91dEhhbmRsZXIpO1xuXG4gICAgdGhpcy5fYmxvY2tJbnRlcmFjdGlvbiA9IHRoaXMuX2Jsb2NrSW50ZXJhY3Rpb24uYmluZCh0aGlzKTtcblxuICAgI
1HRoaXMuJGVsLm9uKFxuICAgICAgYGNsaWNrLiR7dGhpcy5ibG9ja1NlbGVjdG9yfWAsXG4gICAgICB0aGlzLmNvbnRlbnQsXG4gICAgICB0aGlzLl9ibG9ja0ludGVyYWN0aW9uLFxuICAgICk7XG5cbiAgICBpZiAoIXRoaXMuY29tcHJlc3NCbG9ja3MgJiYgbGF5b3V0LmlzQnJlYWtwb2ludCgnWFMnKSkge1xuICAgICAgdGhpcy4kZWwuZmluZCh0aGlzLmNvbnRlbnQpLmVhY2goKGluZGV4LCBibG9jaykgPT4ge1xuICAgICAgICB0aGlzLmFkanVzdEhlaWdodChibG9jayk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGJsb2NrJ3MgdG9nZ2xlZCBzdGF0ZSBhbmQgYXR0cmlidXRlcyB3aGVuIGxlYXZpbmcgbW9iaWxlXG4gICAqL1xuICBvbkJyZWFrcG9pbnRDaGFuZ2UoKSB7XG4gICAgaWYgKCFsYXlvdXQuaXNCcmVha3BvaW50KCdYUycpKSB7XG4gICAgICB0aGlzLiRlbC5maW5kKGAuJHt0aGlzLmV4cGFuZGVkQ2xhc3N9YCkuZWFjaCgoaSwgY29udGVudCkgPT4ge1xuICAgICAgICB0aGlzLl9jb2xsYXBzZShjb250ZW50KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4kZWwuZmluZCh0aGlzLmNvbnRlbnQpLmVhY2goKGluZGV4LCBibG9jaykgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0SGVpZ2h0KGJsb2NrKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuY29tcHJlc3NCbG9ja3MpIHtcbiAgICAgIHRoaXMuJGVsLmZpbmQodGhpcy5jb250ZW50KS5lYWNoKChpbmRleCwgYmxvY2spID0+IHtcbiAgICAgICAgdGhpcy5hZGp1c3RIZWlnaHQoYmxvY2spO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuYmluZCBldmVudHMgd2hlbiBzZWN0aW9uIGlzIHJlLWRyYXduXG4gICAqL1xuICBvblNlY3Rpb25VbmxvYWQoKSB7XG4gICAgdGhpcy4kZWwub2ZmKGAuJHt0aGlzLmJsb2NrU2VsZWN0b3J9YCk7XG4gICAgbGF5b3V0Lm9mZkJyZWFrcG9pbnRDaGFuZ2UodGhpcy5sYXlvdXRIYW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBvcGVuIGJsb2NrIG9uIG1vYmlsZSBmcm9tIHRoZSBURVxuICAgKlxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICovXG4gIG9uU2VjdGlvbkJsb2NrU2VsZWN0KGJsb2NrKSB7XG4gICAgaWYgKCFsYXlvdXQuaXNCcmVha3BvaW50KCdYUycpKSByZXR1cm47XG5cbiAgICB0aGlzLl9leHBhbmQoYmxvY2suZWwucXVlcnlTZWxlY3Rvcih0aGlzLmNvbnRlbnQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBjbG9zZSBibG9jayBvbiBtb2JpbGUgZnJvbSB0aGUgVEVcbiAgICpcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqL1xuICBvblNlY3Rpb25CbG9ja0Rlc2VsZWN0KGJsb2NrKSB7XG4gICAgaWYgKCFsYXlvdXQuaXNCcmVha3BvaW50KCdYUycpKSByZXR1cm47XG5cbiAgICB0aGlzLl9jb2xsYXBzZShibG9jay5lbC5xdWVyeVNlbGVjdG9yKHRoaXMuY29udGVudCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZCBhIGJsb2NrIG9uIGZpcnN0IGNsaWNrLCB0aGVuIGFsbG93IGl0IHRvIGJlaGF2ZSBhcyBub3JtYWxcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYmxvY2tJbnRlcmFjdGlvbihldmVudCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgIGNvbnN0IGNsaWNrZWQgPSBjb250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1jbGlja2VkJyk7XG5cbiAgICAvLyBPbiBzZWNvbmQgY2xpY2ssIG9yIG9uIGRlc2t0b3AsIGRvbid0IGludGVyZmVyZSB3aXRoIGJsb2NrXG4gICAgaWYgKGNsaWNrZWQgfHwgIWxheW91dC5pc0JyZWFrcG9pbnQoJ1hTJykgfHwgIXRoaXMuY29tcHJlc3NCbG9ja3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnRlbnQuc2V0QXR0cmlidXRlKCdkYXRhLWNsaWNrZWQnLCAnY2xpY2tlZCcpO1xuXG4gICAgdGhpcy5fZXhwYW5kKGNvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZCBwcm9tbyBibG9ja1xuICAgKlxuICAgKiBAcGFyYW0gY29udGVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V4cGFuZChjb250ZW50KSB7XG4gICAgaWYgKCF0aGlzLmNvbXByZXNzQmxvY2tzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgJGNvbnRlbnQgPSAkKGNvbnRlbnQpO1xuXG4gICAgJGNvbnRlbnQuYWRkQ2xhc3MoJ2FuaW1hdGluZyBhbmltYXRpbmctaW4nKS5vbmUoJ3RyZW5kJywgKCkgPT4ge1xuICAgICAgJGNvbnRlbnRcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdhbmltYXRpbmcgYW5pbWF0aW5nLWluJylcbiAgICAgICAgLmFkZENsYXNzKHRoaXMuZXhwYW5kZWRDbGFzcylcbiAgICAgICAgLm9mZigndHJlbmQnKTtcblxuICAgICAgdGhpcy5hZGp1c3RIZWlnaHQoJGNvbnRlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxhcHNlIGEgYmxvY2tcbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb2xsYXBzZShjb250ZW50KSB7XG4gICAgaWYgKCF0aGlzLmNvbXByZXNzQmxvY2tzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgJGNvbnRlbnQgPSAkKGNvbnRlbnQpO1xuXG4gICAgJGNvbnRlbnQuYWRkQ2xhc3MoJ2FuaW1hdGluZyBhbmltYXRpbmctb3V0Jykub25lKCd0cmVuZCcsICgpID0+IHtcbiAgICAgICRjb250ZW50XG4gICAgICAgIC5yZW1vdmVDbGFzcyhgYW5pbWF0aW5nIGFuaW1hdGluZy1vdXQgJHt0aGlzLmV4cGFuZGVkQ2xhc3N9YClcbiAgICAgICAgLm9mZigndHJlbmQnKTtcbiAgICAgIGNvbnRlbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWNsaWNrZWQnKTtcbiAgICAgIHRoaXMucmVzZXRIZWlnaHQoJGNvbnRlbnQpO1xuICAgIH0pO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicPromoBlocks.js\n')},
1"./source/scripts/sections/DynamicRichText.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DynamicTwitterFeed; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _components_RichText__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/RichText */ "./source/scripts/components/RichText.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar DynamicTwitterFeed =\n/*#__PURE__*/\nfunction () {\n function DynamicTwitterFeed(section) {\n var _this = this;\n\n _classCallCheck(this, DynamicTwitterFeed);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.rte = [];\n this.$el.find(\'[data-rte]\').each(function (i, el) {\n _this.rte.push(new _components_RichText__WEBPACK_IMPORTED_MODULE_1__["default"](jquery__WEBPACK_IMPORTED_MODULE_0___default()(el)));\n });\n }\n /**\n * Unbind events when section is re-drawn\n */\n\n\n _createClass(DynamicTwitterFeed, [{\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.rte.forEach(function (richTextArea) {\n richTextArea.unload();\n });\n }\n }]);\n\n return DynamicTwitterFeed;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljUmljaFRleHQuanM/NjZlZSJdLCJuYW1lcyI6WyJEeW5hbWljVHdpdHRlckZlZWQiLCJzZWN0aW9uIiwiJGVsIiwiJCIsImVsIiwicnRlIiwiZmluZCIsImVhY2giLCJpIiwicHVzaCIsIlJpY2hUZXh0IiwiZm9yRWFjaCIsInJpY2hUZXh0QXJlYSIsInVubG9hZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztJQUVxQkEsa0I7OztBQUNuQiw4QkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFBOztBQUNuQixTQUFLQyxHQUFMLEdBQVdDLDZDQUFDLENBQUNGLE9BQU8sQ0FBQ0csRUFBVCxDQUFaO0FBRUEsU0FBS0MsR0FBTCxHQUFXLEVBQVg7QUFDQSxTQUFLSCxHQUFMLENBQVNJLElBQVQsQ0FBYyxZQUFkLEVBQTRCQyxJQUE1QixDQUFpQyxVQUFDQyxDQUFELEVBQUlKLEVBQUosRUFBVztBQUMxQyxXQUFJLENBQUNDLEdBQUwsQ0FBU0ksSUFBVCxDQUFjLElBQUlDLDREQUFKLENBQWFQLDZDQUFDLENBQUNDLEVBQUQsQ0FBZCxDQUFkO0FBQ0QsS0FGRDtBQUdEO0FBRUQ7Ozs7Ozs7c0NBR2tCO0FBQ2hCLFdBQUtDLEdBQUwsQ0FBU00sT0FBVCxDQUFpQixVQUFBQyxZQUFZLEVBQUk7QUFDL0JBLG9CQUFZLENBQUNDLE1BQWI7QUFDRCxPQUZEO0FBR0QiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljUmljaFRleHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IFJpY2hUZXh0IGZyb20gJy4uL2NvbXBvbmVudHMvUmljaFRleHQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEeW5hbWljVHdpdHRlckZlZWQge1xuICBjb25zdHJ1Y3RvcihzZWN0aW9uKSB7XG4gICAgdGhpcy4kZWwgPSAkKHNlY3Rpb24uZWwpO1xuXG4gICAgdGhpcy5ydGUgPSBbXTtcbiAgICB0aGlzLiRlbC5maW5kKCdbZGF0YS1ydGVdJykuZWFjaCgoaSwgZWwpID0+IHtcbiAgICAgIHRoaXMucnRlLnB1c2gobmV3IFJpY2hUZXh0KCQoZWwpKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5iaW5kIGV2ZW50cyB3aGVuIHNlY3Rpb24gaXMgcmUtZHJhd25cbiAgICovXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLnJ0ZS5mb3JFYWNoKHJpY2hUZXh0QXJlYSA9PiB7XG4gICAgICByaWNoVGV4dEFyZWEudW5sb2FkKCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicRichText.js\n')},
1"./source/scripts/sections/DynamicSearch.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DynamicSearch; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! scriptjs */ "./node_modules/scriptjs/dist/script.js");\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(scriptjs__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Layout */ "./source/scripts/Layout.js");\n/* harmony import */ var _Forms__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Forms */ "./source/scripts/Forms.js");\n/* harmony import */ var _components_search_LiveSearch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/search/LiveSearch */ "./source/scripts/components/search/LiveSearch.js");\n/* harmony import */ var _components_search_SearchForm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/search/SearchForm */ "./source/scripts/components/search/SearchForm.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\nvar DynamicSearch =\n/*#__PURE__*/\nfunction () {\n function DynamicSearch(section) {\n var _this = this;\n\n _classCallCheck(this, DynamicSearch);\n\n this.el = section.el;\n this.settings = section.data.settings;\n this.search = null;\n this.$scripts = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'[data-scripts]\');\n this.searchArea = this.el.querySelector(\'[data-live-search]\');\n this.searchInput = this.el.querySelector(\'[data-live-search-input]\');\n this.forms = new _Forms__WEBPACK_IMPORTED_MODULE_3__["default"](this.el);\n\n if (this.settings.live_search.enable) {\n scriptjs__WEBPACK_IMPORTED_MODULE_1___default()(this.$scripts.data(\'shopify-api-url\'), function () {\n _this.search = new _components_search_LiveSearch__WEBPACK_IMPORTED_MODULE_4__["default"]({\n el: _this.searchArea,\n header: _this.el\n }, _this.settings.live_search);\n });\n } else {\n this.search = new _components_search_SearchForm__WEBPACK_IMPORTED_MODULE_5__["default"](this.searchField);\n }\n\n this.searchFocused = function () {\n if (_this.settings.live_search.enable && (_Layout__WEBPACK_IMPORTED_MODULE_2__["default"].isBreakpoint(\'XS\') || _Layout__WEBPACK_IMPORTED_MODULE_2__["default"].isBreakpoint(\'S\'))) {\n _this.search.openMobileTakeover();\n }\n };\n\n this.searchInput.addEventListener(\'focus\', this.searchFocused);\n }\n\n _createClass(DynamicSearch, [{\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.search.unload();\n this.forms.unload();\n this.searchInput.removeEventListener(\'focus\', this.searchFocused);\n }\n }]);\n\n return DynamicSearch;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljU2VhcmNoLmpzPzJhMGEiXSwibmFtZXMiOlsiRHluYW1pY1NlYXJjaCIsInNlY3Rpb24iLCJlbCIsInNldHRpbmdzIiwiZGF0YSIsInNlYXJjaCIsIiRzY3JpcHRzIiwiJCIsInNlYXJjaEFyZWEiLCJxdWVyeVNlbGVjdG9yIiwic2VhcmNoSW5wdXQiLCJmb3JtcyIsIkZvcm1zIiwibGl2ZV9zZWFyY2giLCJlbmFibGUiLCIkc2NyaXB0IiwiTGl2ZVNlYXJjaCIsImhlYWRlciIsIlNlYXJjaEZvcm0iLCJzZWFyY2hGaWVsZCIsInNlYXJjaEZvY3VzZWQiLCJsYXlvdXQiLCJpc0JyZWFrcG9pbnQiLCJvcGVuTW9iaWxlVGFrZW92ZXIiLCJhZGRFdmVudExpc3RlbmVyIiwidW5sb2FkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7SUFFcUJBLGE7OztBQUNuQix5QkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFBOztBQUNuQixTQUFLQyxFQUFMLEdBQVVELE9BQU8sQ0FBQ0MsRUFBbEI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCRixPQUFPLENBQUNHLElBQVIsQ0FBYUQsUUFBN0I7QUFDQSxTQUFLRSxNQUFMLEdBQWMsSUFBZDtBQUVBLFNBQUtDLFFBQUwsR0FBZ0JDLDZDQUFDLENBQUMsZ0JBQUQsQ0FBakI7QU
1FFQSxTQUFLQyxVQUFMLEdBQWtCLEtBQUtOLEVBQUwsQ0FBUU8sYUFBUixDQUFzQixvQkFBdEIsQ0FBbEI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEtBQUtSLEVBQUwsQ0FBUU8sYUFBUixDQUFzQiwwQkFBdEIsQ0FBbkI7QUFFQSxTQUFLRSxLQUFMLEdBQWEsSUFBSUMsOENBQUosQ0FBVSxLQUFLVixFQUFmLENBQWI7O0FBRUEsUUFBSSxLQUFLQyxRQUFMLENBQWNVLFdBQWQsQ0FBMEJDLE1BQTlCLEVBQXNDO0FBQ3BDQyxxREFBTyxDQUFDLEtBQUtULFFBQUwsQ0FBY0YsSUFBZCxDQUFtQixpQkFBbkIsQ0FBRCxFQUF3QyxZQUFNO0FBQ25ELGFBQUksQ0FBQ0MsTUFBTCxHQUFjLElBQUlXLHFFQUFKLENBQ1o7QUFDRWQsWUFBRSxFQUFFLEtBQUksQ0FBQ00sVUFEWDtBQUVFUyxnQkFBTSxFQUFFLEtBQUksQ0FBQ2Y7QUFGZixTQURZLEVBS1osS0FBSSxDQUFDQyxRQUFMLENBQWNVLFdBTEYsQ0FBZDtBQU9ELE9BUk0sQ0FBUDtBQVNELEtBVkQsTUFVTztBQUNMLFdBQUtSLE1BQUwsR0FBYyxJQUFJYSxxRUFBSixDQUFlLEtBQUtDLFdBQXBCLENBQWQ7QUFDRDs7QUFFRCxTQUFLQyxhQUFMLEdBQXFCLFlBQU07QUFDekIsVUFDRSxLQUFJLENBQUNqQixRQUFMLENBQWNVLFdBQWQsQ0FBMEJDLE1BQTFCLEtBQ0lPLCtDQUFNLENBQUNDLFlBQVAsQ0FBb0IsSUFBcEIsS0FBNkJELCtDQUFNLENBQUNDLFlBQVAsQ0FBb0IsR0FBcEIsQ0FEakMsQ0FERixFQUdFO0FBQ0EsYUFBSSxDQUFDakIsTUFBTCxDQUFZa0Isa0JBQVo7QUFDRDtBQUNGLEtBUEQ7O0FBU0EsU0FBS2IsV0FBTCxDQUFpQmMsZ0JBQWpCLENBQWtDLE9BQWxDLEVBQTJDLEtBQUtKLGFBQWhEO0FBQ0Q7Ozs7c0NBRWlCO0FBQ2hCLFdBQUtmLE1BQUwsQ0FBWW9CLE1BQVo7QUFDQSxXQUFLZCxLQUFMLENBQVdjLE1BQVg7QUFDQSxXQUFLZixXQUFMLENBQWlCZ0IsbUJBQWpCLENBQXFDLE9BQXJDLEVBQThDLEtBQUtOLGFBQW5EO0FBQ0QiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljU2VhcmNoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCAkc2NyaXB0IGZyb20gJ3NjcmlwdGpzJztcblxuaW1wb3J0IGxheW91dCBmcm9tICcuLi9MYXlvdXQnO1xuaW1wb3J0IEZvcm1zIGZyb20gJy4uL0Zvcm1zJztcbmltcG9ydCBMaXZlU2VhcmNoIGZyb20gJy4uL2NvbXBvbmVudHMvc2VhcmNoL0xpdmVTZWFyY2gnO1xuaW1wb3J0IFNlYXJjaEZvcm0gZnJvbSAnLi4vY29tcG9uZW50cy9zZWFyY2gvU2VhcmNoRm9ybSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER5bmFtaWNTZWFyY2gge1xuICBjb25zdHJ1Y3RvcihzZWN0aW9uKSB7XG4gICAgdGhpcy5lbCA9IHNlY3Rpb24uZWw7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNlY3Rpb24uZGF0YS5zZXR0aW5ncztcbiAgICB0aGlzLnNlYXJjaCA9IG51bGw7XG5cbiAgICB0aGlzLiRzY3JpcHRzID0gJCgnW2RhdGEtc2NyaXB0c10nKTtcblxuICAgIHRoaXMuc2VhcmNoQXJlYSA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtbGl2ZS1zZWFyY2hdJyk7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtbGl2ZS1zZWFyY2gtaW5wdXRdJyk7XG5cbiAgICB0aGlzLmZvcm1zID0gbmV3IEZvcm1zKHRoaXMuZWwpO1xuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MubGl2ZV9zZWFyY2guZW5hYmxlKSB7XG4gICAgICAkc2NyaXB0KHRoaXMuJHNjcmlwdHMuZGF0YSgnc2hvcGlmeS1hcGktdXJsJyksICgpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSBuZXcgTGl2ZVNlYXJjaChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbDogdGhpcy5zZWFyY2hBcmVhLFxuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLmVsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5saXZlX3NlYXJjaCxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaCA9IG5ldyBTZWFyY2hGb3JtKHRoaXMuc2VhcmNoRmllbGQpO1xuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoRm9jdXNlZCA9ICgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saXZlX3NlYXJjaC5lbmFibGVcbiAgICAgICAgJiYgKGxheW91dC5pc0JyZWFrcG9pbnQoJ1hTJykgfHwgbGF5b3V0LmlzQnJlYWtwb2ludCgnUycpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoLm9wZW5Nb2JpbGVUYWtlb3ZlcigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5zZWFyY2hGb2N1c2VkKTtcbiAgfVxuXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLnNlYXJjaC51bmxvYWQoKTtcbiAgICB0aGlzLmZvcm1zLnVubG9hZCgpO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLnNlYXJjaEZvY3VzZWQpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicSearch.js\n')},
1"./source/scripts/sections/DynamicTestimonials.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DynamicTestimonials; });\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flickity */ "./node_modules/flickity/js/index.js");\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flickity__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Layout */ "./source/scripts/Layout.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar DynamicTestimonials =\n/*#__PURE__*/\nfunction () {\n function DynamicTestimonials(section) {\n _classCallCheck(this, DynamicTestimonials);\n\n this.section = section;\n this.testimonialsEl = section.el.querySelector(\'[data-testimonials]\');\n\n if (this.testimonialsEl.dataset.testimonials === \'1\') {\n // No work needs to be done if there is one testimonial\n return;\n }\n\n this._onBreakpointChange = this._onBreakpointChange.bind(this);\n _Layout__WEBPACK_IMPORTED_MODULE_1__["default"].onBreakpointChange(this._onBreakpointChange);\n\n if (_Layout__WEBPACK_IMPORTED_MODULE_1__["default"].isBreakpoint(\'XS\', \'S\')) {\n this._initializeMobile();\n }\n }\n\n _createClass(DynamicTestimonials, [{\n key: "onSectionUnload",\n value: function onSectionUnload() {\n if (this.testimonialsEl.dataset.testimonials === \'1\') {\n // No work needs to be done if there is one testimonial\n return;\n }\n\n _Layout__WEBPACK_IMPORTED_MODULE_1__["default"].offBreakpointChange(this._onBreakpointChange);\n }\n }, {\n key: "_onBreakpointChange",\n value: function _onBreakpointChange(event, data) {\n var current = data.current;\n\n if (current === \'XS\' || current === \'S\') {\n this._initializeMobile();\n } else {\n this._destroyMobile();\n }\n }\n }, {\n key: "_initializeMobile",\n value: function _initializeMobile() {\n if (this.flickity) {\n return;\n }\n\n this.flickity = new flickity__WEBPACK_IMPORTED_MODULE_0___default.a(this.testimonialsEl, {\n prevNextButtons: false\n });\n }\n }, {\n key: "_destroyMobile",\n value: function _destroyMobile() {\n if (!this.flickity) {\n return;\n }\n\n this.flickity.destroy();\n this.flickity = null;\n }\n }]);\n\n return DynamicTestimonials;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljVGVzdGltb25pYWxzLmpzPzAyMGQiXSwibmFtZXMiOlsiRHluYW1pY1Rlc3RpbW9uaWFscyIsInNlY3Rpb24iLCJ0ZXN0aW1vbmlhbHNFbCIsImVsIiwicXVlcnlTZWxlY3RvciIsImRhdGFzZXQiLCJ0ZXN0aW1vbmlhbHMiLCJfb25CcmVha3BvaW50Q2hhbmdlIiwiYmluZCIsIkxheW91dCIsIm9uQnJlYWtwb2ludENoYW5nZSIsImlzQnJlYWtwb2ludCIsIl9pbml0aWFsaXplTW9iaWxlIiwib2ZmQnJlYWtwb2ludENoYW5nZSIsImV2ZW50IiwiZGF0YSIsImN1cnJlbnQiLCJfZGVzdHJveU1vYmlsZSIsImZsaWNraXR5IiwiRmxpY2tpdHkiLCJwcmV2TmV4dEJ1dHRvbnMiLCJkZXN0cm95Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0lBRXFCQSxtQjs7O0FBQ25CLCtCQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQ25CLFNBQUtBLE9BQUwsR0FBZUEsT0FBZjtBQUNBLFNBQUtDLGNBQUwsR0FBc0JELE9BQU8sQ0FBQ0UsRUFBUixDQUFXQyxhQUFYLENBQXlCLHFCQUF6QixDQUF0Qjs7QUFFQSxRQUFJLEtBQUtGLGNBQUwsQ0FBb0JHLE9BQXBCLENBQTRCQyxZQUE1QixLQUE2QyxHQUFqRCxFQUFzRDtBQUNwRDtBQUNBO0FBQ0Q7O0FBRUQsU0FBS0MsbUJBQUwsR0FBMkIsS0FBS0EsbUJBQUwsQ0FBeUJDLElBQXpCLENBQThCLElBQTlCLENBQTNCO0FBRUFDLG1EQUFNLENBQUNDLGtCQUFQLENBQTBCLEtBQUtILG1CQUEvQjs7QUFFQSxRQUFJRSwrQ0FBTSxDQUFDRSxZQUFQLENBQW9CLElBQXBCLEVBQTBCLEdBQTFCLENBQUosRU
1FBb0M7QUFDbEMsV0FBS0MsaUJBQUw7QUFDRDtBQUNGOzs7O3NDQUVpQjtBQUNoQixVQUFJLEtBQUtWLGNBQUwsQ0FBb0JHLE9BQXBCLENBQTRCQyxZQUE1QixLQUE2QyxHQUFqRCxFQUFzRDtBQUNwRDtBQUNBO0FBQ0Q7O0FBRURHLHFEQUFNLENBQUNJLG1CQUFQLENBQTJCLEtBQUtOLG1CQUFoQztBQUNEOzs7d0NBRW1CTyxLLEVBQU9DLEksRUFBTTtBQUFBLFVBQ3ZCQyxPQUR1QixHQUNYRCxJQURXLENBQ3ZCQyxPQUR1Qjs7QUFHL0IsVUFBSUEsT0FBTyxLQUFLLElBQVosSUFBb0JBLE9BQU8sS0FBSyxHQUFwQyxFQUF5QztBQUN2QyxhQUFLSixpQkFBTDtBQUNELE9BRkQsTUFFTztBQUNMLGFBQUtLLGNBQUw7QUFDRDtBQUNGOzs7d0NBRW1CO0FBQ2xCLFVBQUksS0FBS0MsUUFBVCxFQUFtQjtBQUNqQjtBQUNEOztBQUVELFdBQUtBLFFBQUwsR0FBZ0IsSUFBSUMsK0NBQUosQ0FDZCxLQUFLakIsY0FEUyxFQUVkO0FBQ0VrQix1QkFBZSxFQUFFO0FBRG5CLE9BRmMsQ0FBaEI7QUFNRDs7O3FDQUVnQjtBQUNmLFVBQUksQ0FBQyxLQUFLRixRQUFWLEVBQW9CO0FBQ2xCO0FBQ0Q7O0FBRUQsV0FBS0EsUUFBTCxDQUFjRyxPQUFkO0FBQ0EsV0FBS0gsUUFBTCxHQUFnQixJQUFoQjtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvc2VjdGlvbnMvRHluYW1pY1Rlc3RpbW9uaWFscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBGbGlja2l0eSBmcm9tICdmbGlja2l0eSc7XG5pbXBvcnQgTGF5b3V0IGZyb20gJy4uL0xheW91dCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER5bmFtaWNUZXN0aW1vbmlhbHMge1xuICBjb25zdHJ1Y3RvcihzZWN0aW9uKSB7XG4gICAgdGhpcy5zZWN0aW9uID0gc2VjdGlvbjtcbiAgICB0aGlzLnRlc3RpbW9uaWFsc0VsID0gc2VjdGlvbi5lbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS10ZXN0aW1vbmlhbHNdJyk7XG5cbiAgICBpZiAodGhpcy50ZXN0aW1vbmlhbHNFbC5kYXRhc2V0LnRlc3RpbW9uaWFscyA9PT0gJzEnKSB7XG4gICAgICAvLyBObyB3b3JrIG5lZWRzIHRvIGJlIGRvbmUgaWYgdGhlcmUgaXMgb25lIHRlc3RpbW9uaWFsXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fb25CcmVha3BvaW50Q2hhbmdlID0gdGhpcy5fb25CcmVha3BvaW50Q2hhbmdlLmJpbmQodGhpcyk7XG5cbiAgICBMYXlvdXQub25CcmVha3BvaW50Q2hhbmdlKHRoaXMuX29uQnJlYWtwb2ludENoYW5nZSk7XG5cbiAgICBpZiAoTGF5b3V0LmlzQnJlYWtwb2ludCgnWFMnLCAnUycpKSB7XG4gICAgICB0aGlzLl9pbml0aWFsaXplTW9iaWxlKCk7XG4gICAgfVxuICB9XG5cbiAgb25TZWN0aW9uVW5sb2FkKCkge1xuICAgIGlmICh0aGlzLnRlc3RpbW9uaWFsc0VsLmRhdGFzZXQudGVzdGltb25pYWxzID09PSAnMScpIHtcbiAgICAgIC8vIE5vIHdvcmsgbmVlZHMgdG8gYmUgZG9uZSBpZiB0aGVyZSBpcyBvbmUgdGVzdGltb25pYWxcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBMYXlvdXQub2ZmQnJlYWtwb2ludENoYW5nZSh0aGlzLl9vbkJyZWFrcG9pbnRDaGFuZ2UpO1xuICB9XG5cbiAgX29uQnJlYWtwb2ludENoYW5nZShldmVudCwgZGF0YSkge1xuICAgIGNvbnN0IHsgY3VycmVudCB9ID0gZGF0YTtcblxuICAgIGlmIChjdXJyZW50ID09PSAnWFMnIHx8IGN1cnJlbnQgPT09ICdTJykge1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZU1vYmlsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kZXN0cm95TW9iaWxlKCk7XG4gICAgfVxuICB9XG5cbiAgX2luaXRpYWxpemVNb2JpbGUoKSB7XG4gICAgaWYgKHRoaXMuZmxpY2tpdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZsaWNraXR5ID0gbmV3IEZsaWNraXR5KFxuICAgICAgdGhpcy50ZXN0aW1vbmlhbHNFbCxcbiAgICAgIHtcbiAgICAgICAgcHJldk5leHRCdXR0b25zOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIF9kZXN0cm95TW9iaWxlKCkge1xuICAgIGlmICghdGhpcy5mbGlja2l0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmxpY2tpdHkuZGVzdHJveSgpO1xuICAgIHRoaXMuZmxpY2tpdHkgPSBudWxsO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicTestimonials.js\n')},
1"./source/scripts/sections/DynamicTwitterFeed.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return DynamicTwitterFeed; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var twitter_fetcher__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! twitter-fetcher */ \"./node_modules/twitter-fetcher/js/twitterFetcher_min.js\");\n/* harmony import */ var twitter_fetcher__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(twitter_fetcher__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! just-debounce */ \"./node_modules/just-debounce/index.js\");\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(just_debounce__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flickity */ \"./node_modules/flickity/js/index.js\");\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flickity__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Layout */ \"./source/scripts/Layout.js\");\n/* harmony import */ var _helpers_LazyLoader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../helpers/LazyLoader */ \"./source/scripts/helpers/LazyLoader.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\nvar DynamicTwitterFeed =\n/*#__PURE__*/\nfunction () {\n function DynamicTwitterFeed(section) {\n _classCallCheck(this, DynamicTwitterFeed);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.settings = section.data;\n this._load = this._load.bind(this);\n this.lazyLoader = new _helpers_LazyLoader__WEBPACK_IMPORTED_MODULE_5__[\"default\"](section.el, this._load);\n }\n\n _createClass(DynamicTwitterFeed, [{\n key: \"_load\",\n value: function _load() {\n var _this = this;\n\n this.$window = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window);\n this.flickity = null;\n this.$content = this.$el.find('[data-twitter-content]');\n this.$wrapper = this.$el.find('[data-twitter-wrapper]');\n this.$tweets = this.$el.find('[data-tweet-content]');\n this.$template = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.settings.template);\n var onboarding = this.settings.onboarding;\n var username = this.settings.username;\n var retweets = this.settings.retweets;\n var images = this.settings.images;\n var locale = this.settings.locale || 'en'; // Activate flickity on mobile\n\n this._mobileSlider = this._mobileSlider.bind(this);\n _Layout__WEBPACK_IMPORTED_MODULE_4__[\"default\"].onBreakpointChange(this._mobileSlider);\n\n this._mobileSlider();\n\n if (onboarding || !username) {\n return;\n }\n\n twitter_fetcher__WEBPACK_IMPORTED_MODULE_1___default.a.fetch({\n profile: {\
1n screenName: username\n },\n maxTweets: 3,\n enableLinks: true,\n showUser: true,\n showTime: true,\n dataOnly: false,\n useEmoji: true,\n showImages: images,\n showRetweet: retweets,\n lang: locale,\n customCallback: function customCallback(tweets) {\n return _this._renderTweets(tweets);\n },\n showInteraction: false\n });\n }\n /**\n * Unbind events when section is re-drawn\n */\n\n }, {\n key: \"onSectionUnload\",\n value: function onSectionUnload() {\n this.$window.off('.twitter');\n this.$content.off('.twitter');\n _Layout__WEBPACK_IMPORTED_MODULE_4__[\"default\"].offBreakpointChange(this._mobileSlider);\n\n this._destroyFlickity();\n\n this.lazyLoader.unload();\n }\n }, {\n key: \"_initFlickity\",\n value: function _initFlickity() {\n this.flickity = new flickity__WEBPACK_IMPORTED_MODULE_3___default.a(this.$content[0], {\n cellSelector: '[data-tweet-content]',\n contain: true,\n freeScroll: true,\n percentPosition: false,\n prevNextButtons: false,\n pageDots: false,\n setGallerySize: false\n });\n\n this._bindSlider();\n\n this.flickity.resize();\n }\n }, {\n key: \"_destroyFlickity\",\n value: function _destroyFlickity() {\n if (!this.flickity) {\n return;\n }\n\n this.flickity.destroy();\n this.flickity = null;\n }\n }, {\n key: \"_mobileSlider\",\n value: function _mobileSlider() {\n // If is Large layout, attempt to destroy flickity\n if (_Layout__WEBPACK_IMPORTED_MODULE_4__[\"default\"].isBreakpoint('L')) {\n this._destroyFlickity();\n\n return;\n } // Is XS/S/M, and flickity is init'd -- resize\n\n\n if (this.flickity) {\n this.flickity.resize();\n return;\n } // Is XS/S/M, and flickity is not init'd\n\n\n this._initFlickity();\n }\n }, {\n key: \"_bindSlider\",\n value: function _bindSlider() {\n var _this2 = this;\n\n var $slider = this.$content.find('.flickity-slider');\n this.$window.on('resize.twitter', just_debounce__WEBPACK_IMPORTED_MODULE_2___default()(function () {\n _this2.$content.trigger('heightUpdate.twitter');\n }));\n this.flickity.on('cellSelect', function () {\n _this2.$content.trigger('heightUpdate.twitter');\n });\n this.$content.on('heightUpdate.twitter', function () {\n if (!_this2.flickity) {\n return;\n }\n\n $slider.height(Math.ceil(_this2.flickity.maxCellHeight));\n }); // Sets the Slider to the height of the first slide\n\n this.$content.trigger('heightUpdate.twitter');\n }\n /**\n * Retrieve information about user who tweeted\n *\n * @param el\n * @returns {{$avatar: *, link: *, name, screenName}}\n * @private\n */\n\n }, {\n key: \"_extractAuthor\",\n value: function _extractAuthor(el) {\n var $el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el);\n var link = $el.find('a').attr('href');\n var name = $el.find('[data-scribe=\"element:name\"]').text();\n var screenName = $el.find('[data-scribe=\"element:screen_name\"]').text();\n var $avatar = $el.find('img');\n return {\n $avatar: $avatar,\n link: link,\n name: name,\n screenName: screenName\n };\n }\n /**\n * Retrieve link to tweet, and when it was tweeted\n *\n * @param el\n * @returns {{link: *, postedAt: *}}\n * @private\n */\n\n }, {\n key: \"_extractMeta\",\n value: function _extractMeta(el) {\n var $el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el);\n var link = $el.find('a').attr('href');\n var postedAt = $el.text();\n return {\n link: link,\n postedAt: postedAt\n };\n }\n }, {\n key: \"_extractWrapperClass\",\n value: function _extractWrapperClass() {\n var wrapperClass = this.$wrapper.attr('class').match(/tweet--count-\\d+$/);\n\n if (wrapperClass) {\n return wrapperClass[0];\n }\n\n return '';\n }\n }, {\n key: \"_renderTweets\",\n value: function _renderTweets(tweets) {\n var _this3 = this;\n\n var tweetsLength = tweets.length;\n\n if (!tweets || !tweetsLength) {\n return;\n }\n\n var tweetsArray = [];\n var wrapperClass = \"tweet--count-\".concat(tweetsLength);
1\n tweets.forEach(function (tweet) {\n var $tweet = jquery__WEBPACK_IMPORTED_MODULE_0___default()(tweet);\n\n var $template = _this3.$template.clone();\n\n var authorInfo = _this3._extractAuthor($tweet[0]);\n\n var meta = _this3._extractMeta($tweet[2]);\n\n var content = $tweet[1]; // Render header\n\n $template.find('.tweet--header').attr('href', authorInfo.link);\n $template.find('.tweet--header-image').html(authorInfo.$avatar);\n $template.find('.tweet--header-name').text(authorInfo.name);\n $template.find('.tweet--header-screenname').text(authorInfo.screenName); // Render content\n\n $template.find('.tweet--content').append($tweet[3] ? $tweet[3] : null).append(content); // Render footer\n\n $template.find('.tweet--footer').attr('href', meta.link).find('.tweet--footer--posted').text(meta.postedAt);\n tweetsArray.push($template);\n });\n this.$wrapper.css('min-height', this.$wrapper.height());\n this.$tweets.fadeOut().promise().then(function () {\n _this3._destroyFlickity();\n\n _this3.$tweets.remove();\n\n _this3.$content.append(tweetsArray);\n\n _this3.$wrapper.removeClass(_this3._extractWrapperClass()).addClass(wrapperClass).css('min-height', '');\n\n _this3.$tweets = _this3.$el.find('[data-tweet-content]');\n\n _this3._mobileSlider();\n });\n }\n }]);\n\n return DynamicTwitterFeed;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljVHdpdHRlckZlZWQuanM/NGNkZCJdLCJuYW1lcyI6WyJEeW5hbWljVHdpdHRlckZlZWQiLCJzZWN0aW9uIiwiJGVsIiwiJCIsImVsIiwic2V0dGluZ3MiLCJkYXRhIiwiX2xvYWQiLCJiaW5kIiwibGF6eUxvYWRlciIsIkxhenlMb2FkZXIiLCIkd2luZG93Iiwid2luZG93IiwiZmxpY2tpdHkiLCIkY29udGVudCIsImZpbmQiLCIkd3JhcHBlciIsIiR0d2VldHMiLCIkdGVtcGxhdGUiLCJ0ZW1wbGF0ZSIsIm9uYm9hcmRpbmciLCJ1c2VybmFtZSIsInJldHdlZXRzIiwiaW1hZ2VzIiwibG9jYWxlIiwiX21vYmlsZVNsaWRlciIsImxheW91dCIsIm9uQnJlYWtwb2ludENoYW5nZSIsInR3aXR0ZXJGZXRjaGVyIiwiZmV0Y2giLCJwcm9maWxlIiwic2NyZWVuTmFtZSIsIm1heFR3ZWV0cyIsImVuYWJsZUxpbmtzIiwic2hvd1VzZXIiLCJzaG93VGltZSIsImRhdGFPbmx5IiwidXNlRW1vamkiLCJzaG93SW1hZ2VzIiwic2hvd1JldHdlZXQiLCJsYW5nIiwiY3VzdG9tQ2FsbGJhY2siLCJ0d2VldHMiLCJfcmVuZGVyVHdlZXRzIiwic2hvd0ludGVyYWN0aW9uIiwib2ZmIiwib2ZmQnJlYWtwb2ludENoYW5nZSIsIl9kZXN0cm95RmxpY2tpdHkiLCJ1bmxvYWQiLCJGbGlja2l0eSIsImNlbGxTZWxlY3RvciIsImNvbnRhaW4iLCJmcmVlU2Nyb2xsIiwicGVyY2VudFBvc2l0aW9uIiwicHJldk5leHRCdXR0b25zIiwicGFnZURvdHMiLCJzZXRHYWxsZXJ5U2l6ZSIsIl9iaW5kU2xpZGVyIiwicmVzaXplIiwiZGVzdHJveSIsImlzQnJlYWtwb2ludCIsIl9pbml0RmxpY2tpdHkiLCIkc2xpZGVyIiwib24iLCJkZWJvdW5jZSIsInRyaWdnZXIiLCJoZWlnaHQiLCJNYXRoIiwiY2VpbCIsIm1heENlbGxIZWlnaHQiLCJsaW5rIiwiYXR0ciIsIm5hbWUiLCJ0ZXh0IiwiJGF2YXRhciIsInBvc3RlZEF0Iiwid3JhcHBlckNsYXNzIiwibWF0Y2giLCJ0d2VldHNMZW5ndGgiLCJsZW5ndGgiLCJ0d2VldHNBcnJheSIsImZvckVhY2giLCJ0d2VldCIsIiR0d2VldCIsImNsb25lIiwiYXV0aG9ySW5mbyIsIl9leHRyYWN0QXV0aG9yIiwibWV0YSIsIl9leHRyYWN0TWV0YSIsImNvbnRlbnQiLCJodG1sIiwiYXBwZW5kIiwicHVzaCIsImNzcyIsImZhZGVPdXQiLCJwcm9taXNlIiwidGhlbiIsInJlbW92ZSIsInJlbW92ZUNsYXNzIiwiX2V4dHJhY3RXcmFwcGVyQ2xhc3MiLCJhZGRDbGFzcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOztJQUVxQkEsa0I7OztBQUNuQiw4QkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUNuQixTQUFLQyxHQUFMLEdBQVdDLDZDQUFDLENBQUNGLE9BQU8sQ0FBQ0csRUFBVCxDQUFaO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQkosT0FBTyxDQUFDSyxJQUF4QjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxLQUFLQSxLQUFMLENBQVdDLElBQVgsQ0FBZ0IsSUFBaEIsQ0FBYjtBQUVBLFNBQUtDLFVBQUwsR0FBa0IsSUFBSUMsMkRBQUosQ0FBZVQsT0FBTyxDQUFDRyxFQUF2QixFQUEyQixLQUFLRyxLQUFoQyxDQUFsQjtBQUNEOzs7OzRCQUVPO0FBQUE7O0FBQ04sV0FBS0ksT0FBTCxHQUFlUiw2Q0FBQyxDQUFDUyxNQUFELENBQWhCO0FBQ0EsV0FBS0MsUUFBTCxHQUFnQixJQUFoQjtBQUVBLFdBQUtDLFFBQUwsR0FBZ0IsS0FBS1osR0FBTCxDQUFTYSxJQUFULENBQWMsd0JBQWQsQ0FBaEI7QUFDQSxXQUFLQyxRQUFMLEdBQWdCLEtBQUtkLEdBQUwsQ0FBU2EsSUFBVCxDQUFjLHdCQUFkLENBQWhCO0FBQ0EsV0FB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UFDLENBQUQsQ0FBbEIsR0FBd0IsSUFGbEMsRUFHR1EsTUFISCxDQUdVRixPQUhWLEVBbkJzQixDQXdCdEI7O0FBQ0F2RSxpQkFBUyxDQUNOSCxJQURILENBQ1EsZ0JBRFIsRUFFR3dELElBRkgsQ0FFUSxNQUZSLEVBRWdCZ0IsSUFBSSxDQUFDakIsSUFGckIsRUFHR3ZELElBSEgsQ0FHUSx3QkFIUixFQUlHMEQsSUFKSCxDQUlRYyxJQUFJLENBQUNaLFFBSmI7QUFNQUssbUJBQVcsQ0FBQ1ksSUFBWixDQUFpQjFFLFNBQWpCO0FBQ0QsT0FoQ0Q7QUFrQ0EsV0FBS0YsUUFBTCxDQUFjNkUsR0FBZCxDQUFrQixZQUFsQixFQUFnQyxLQUFLN0UsUUFBTCxDQUFja0QsTUFBZCxFQUFoQztBQUVBLFdBQUtqRCxPQUFMLENBQ0c2RSxPQURILEdBRUdDLE9BRkgsR0FHR0MsSUFISCxDQUdRLFlBQU07QUFDVixjQUFJLENBQUNqRCxnQkFBTDs7QUFDQSxjQUFJLENBQUM5QixPQUFMLENBQWFnRixNQUFiOztBQUVBLGNBQUksQ0FBQ25GLFFBQUwsQ0FBYzZFLE1BQWQsQ0FBcUJYLFdBQXJCOztBQUVBLGNBQUksQ0FBQ2hFLFFBQUwsQ0FDR2tGLFdBREgsQ0FDZSxNQUFJLENBQUNDLG9CQUFMLEVBRGYsRUFFR0MsUUFGSCxDQUVZeEIsWUFGWixFQUdHaUIsR0FISCxDQUdPLFlBSFAsRUFHcUIsRUFIckI7O0FBS0EsY0FBSSxDQUFDNUUsT0FBTCxHQUFlLE1BQUksQ0FBQ2YsR0FBTCxDQUFTYSxJQUFULENBQWMsc0JBQWQsQ0FBZjs7QUFFQSxjQUFJLENBQUNVLGFBQUw7QUFDRCxPQWpCSDtBQWtCRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL3NlY3Rpb25zL0R5bmFtaWNUd2l0dGVyRmVlZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgdHdpdHRlckZldGNoZXIgZnJvbSAndHdpdHRlci1mZXRjaGVyJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdqdXN0LWRlYm91bmNlJztcbmltcG9ydCBGbGlja2l0eSBmcm9tICdmbGlja2l0eSc7XG5cbmltcG9ydCBsYXlvdXQgZnJvbSAnLi4vTGF5b3V0JztcbmltcG9ydCBMYXp5TG9hZGVyIGZyb20gJy4uL2hlbHBlcnMvTGF6eUxvYWRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER5bmFtaWNUd2l0dGVyRmVlZCB7XG4gIGNvbnN0cnVjdG9yKHNlY3Rpb24pIHtcbiAgICB0aGlzLiRlbCA9ICQoc2VjdGlvbi5lbCk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNlY3Rpb24uZGF0YTtcbiAgICB0aGlzLl9sb2FkID0gdGhpcy5fbG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5sYXp5TG9hZGVyID0gbmV3IExhenlMb2FkZXIoc2VjdGlvbi5lbCwgdGhpcy5fbG9hZCk7XG4gIH1cblxuICBfbG9hZCgpIHtcbiAgICB0aGlzLiR3aW5kb3cgPSAkKHdpbmRvdyk7XG4gICAgdGhpcy5mbGlja2l0eSA9IG51bGw7XG5cbiAgICB0aGlzLiRjb250ZW50ID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtdHdpdHRlci1jb250ZW50XScpO1xuICAgIHRoaXMuJHdyYXBwZXIgPSB0aGlzLiRlbC5maW5kKCdbZGF0YS10d2l0dGVyLXdyYXBwZXJdJyk7XG4gICAgdGhpcy4kdHdlZXRzID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtdHdlZXQtY29udGVudF0nKTtcblxuICAgI
1HRoaXMuJHRlbXBsYXRlID0gJCh0aGlzLnNldHRpbmdzLnRlbXBsYXRlKTtcblxuICAgIGNvbnN0IHsgb25ib2FyZGluZyB9ID0gdGhpcy5zZXR0aW5ncztcbiAgICBjb25zdCB7IHVzZXJuYW1lIH0gPSB0aGlzLnNldHRpbmdzO1xuICAgIGNvbnN0IHsgcmV0d2VldHMgfSA9IHRoaXMuc2V0dGluZ3M7XG4gICAgY29uc3QgeyBpbWFnZXMgfSA9IHRoaXMuc2V0dGluZ3M7XG4gICAgY29uc3QgbG9jYWxlID0gdGhpcy5zZXR0aW5ncy5sb2NhbGUgfHwgJ2VuJztcblxuICAgIC8vIEFjdGl2YXRlIGZsaWNraXR5IG9uIG1vYmlsZVxuICAgIHRoaXMuX21vYmlsZVNsaWRlciA9IHRoaXMuX21vYmlsZVNsaWRlci5iaW5kKHRoaXMpO1xuICAgIGxheW91dC5vbkJyZWFrcG9pbnRDaGFuZ2UodGhpcy5fbW9iaWxlU2xpZGVyKTtcbiAgICB0aGlzLl9tb2JpbGVTbGlkZXIoKTtcblxuICAgIGlmIChvbmJvYXJkaW5nIHx8ICF1c2VybmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHR3aXR0ZXJGZXRjaGVyLmZldGNoKHtcbiAgICAgIHByb2ZpbGU6IHsgc2NyZWVuTmFtZTogdXNlcm5hbWUgfSxcbiAgICAgIG1heFR3ZWV0czogMyxcbiAgICAgIGVuYWJsZUxpbmtzOiB0cnVlLFxuICAgICAgc2hvd1VzZXI6IHRydWUsXG4gICAgICBzaG93VGltZTogdHJ1ZSxcbiAgICAgIGRhdGFPbmx5OiBmYWxzZSxcbiAgICAgIHVzZUVtb2ppOiB0cnVlLFxuICAgICAgc2hvd0ltYWdlczogaW1hZ2VzLFxuICAgICAgc2hvd1JldHdlZXQ6IHJldHdlZXRzLFxuICAgICAgbGFuZzogbG9jYWxlLFxuICAgICAgY3VzdG9tQ2FsbGJhY2s6IHR3ZWV0cyA9PiB0aGlzLl9yZW5kZXJUd2VldHModHdlZXRzKSxcbiAgICAgIHNob3dJbnRlcmFjdGlvbjogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5iaW5kIGV2ZW50cyB3aGVuIHNlY3Rpb24gaXMgcmUtZHJhd25cbiAgICovXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLiR3aW5kb3cub2ZmKCcudHdpdHRlcicpO1xuICAgIHRoaXMuJGNvbnRlbnQub2ZmKCcudHdpdHRlcicpO1xuXG4gICAgbGF5b3V0Lm9mZkJyZWFrcG9pbnRDaGFuZ2UodGhpcy5fbW9iaWxlU2xpZGVyKTtcbiAgICB0aGlzLl9kZXN0cm95RmxpY2tpdHkoKTtcbiAgICB0aGlzLmxhenlMb2FkZXIudW5sb2FkKCk7XG4gIH1cblxuICBfaW5pdEZsaWNraXR5KCkge1xuICAgIHRoaXMuZmxpY2tpdHkgPSBuZXcgRmxpY2tpdHkodGhpcy4kY29udGVudFswXSwge1xuICAgICAgY2VsbFNlbGVjdG9yOiAnW2RhdGEtdHdlZXQtY29udGVudF0nLFxuICAgICAgY29udGFpbjogdHJ1ZSxcbiAgICAgIGZyZWVTY3JvbGw6IHRydWUsXG4gICAgICBwZXJjZW50UG9zaXRpb246IGZhbHNlLFxuICAgICAgcHJldk5leHRCdXR0b25zOiBmYWxzZSxcbiAgICAgIHBhZ2VEb3RzOiBmYWxzZSxcbiAgICAgIHNldEdhbGxlcnlTaXplOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHRoaXMuX2JpbmRTbGlkZXIoKTtcbiAgICB0aGlzLmZsaWNraXR5LnJlc2l6ZSgpO1xuICB9XG5cbiAgX2Rlc3Ryb3lGbGlja2l0eSgpIHtcbiAgICBpZiAoIXRoaXMuZmxpY2tpdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZsaWNraXR5LmRlc3Ryb3koKTtcbiAgICB0aGlzLmZsaWNraXR5ID0gbnVsbDtcbiAgfVxuXG4gIF9tb2JpbGVTbGlkZXIoKSB7XG4gICAgLy8gSWYgaXMgTGFyZ2UgbGF5b3V0LCBhdHRlbXB0IHRvIGRlc3Ryb3kgZmxpY2tpdHlcbiAgICBpZiAobGF5b3V0LmlzQnJlYWtwb2ludCgnTCcpKSB7XG4gICAgICB0aGlzLl9kZXN0cm95RmxpY2tpdHkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJcyBYUy9TL00sIGFuZCBmbGlja2l0eSBpcyBpbml0J2QgLS0gcmVzaXplXG4gICAgaWYgKHRoaXMuZmxpY2tpdHkpIHtcbiAgICAgIHRoaXMuZmxpY2tpdHkucmVzaXplKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSXMgWFMvUy9NLCBhbmQgZmxpY2tpdHkgaXMgbm90IGluaXQnZFxuICAgIHRoaXMuX2luaXRGbGlja2l0eSgpO1xuICB9XG5cbiAgX2JpbmRTbGlkZXIoKSB7XG4gICAgY29uc3QgJHNsaWRlciA9IHRoaXMuJGNvbnRlbnQuZmluZCgnLmZsaWNraXR5LXNsaWRlcicpO1xuXG4gICAgdGhpcy4kd2luZG93Lm9uKFxuICAgICAgJ3Jlc2l6ZS50d2l0dGVyJyxcbiAgICAgIGRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgdGhpcy4kY29udGVudC50cmlnZ2VyKCdoZWlnaHRVcGRhdGUudHdpdHRlcicpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuZmxpY2tpdHkub24oJ2NlbGxTZWxlY3QnLCAoKSA9PiB7XG4gICAgICB0aGlzLiRjb250ZW50LnRyaWdnZXIoJ2hlaWdodFVwZGF0ZS50d2l0dGVyJyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRjb250ZW50Lm9uKCdoZWlnaHRVcGRhdGUudHdpdHRlcicsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mbGlja2l0eSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICRzbGlkZXIuaGVpZ2h0KE1hdGguY2VpbCh0aGlzLmZsaWNraXR5Lm1heENlbGxIZWlnaHQpKTtcbiAgICB9KTtcblxuICAgIC8vIFNldHMgdGhlIFNsaWRlciB0byB0aGUgaGVpZ2h0IG9mIHRoZSBmaXJzdCBzbGlkZVxuICAgIHRoaXMuJGNvbnRlbnQudHJpZ2dlcignaGVpZ2h0VXBkYXRlLnR3aXR0ZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB1c2VyIHdobyB0d2VldGVkXG4gICAqXG4gICAqIEBwYXJhbSBlbFxuICAgKiBAcmV0dXJucyB7eyRhdmF0YXI6ICosIGxpbms6ICosIG5hbWUsIHNjcmVlbk5hbWV9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V4dHJhY3RBdXRob3IoZWwpIHtcbiAgICBjb25zdCAkZWwgPSAkKGVsKTtcblxuICAgIGNvbnN0IGxpbmsgPSAkZWwuZmluZCgnYScpLmF0dHIoJ2hyZWYnKTtcbiAgICBjb25zdCBuYW1lID0gJGVsLmZpbmQoJ1tkYXRhLXNjcmliZT1cImVsZW1lbnQ6bmFtZVwiXScpLnRleHQoKTtcbiAgICBjb25zdCBzY3JlZW5OYW1lID0gJGVsLmZpbmQoJ1tkYXRhLXNjcmliZT1cImVsZW1lbnQ6c2NyZWVuX25hbWVcIl0nKS50ZXh0KCk7XG4gICAgY29uc3QgJGF2YXRhciA9ICRlbC5maW5kKCdpbWcnKTtcblxuICAgI
1HJldHVybiB7XG4gICAgICAkYXZhdGFyLCBsaW5rLCBuYW1lLCBzY3JlZW5OYW1lLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgbGluayB0byB0d2VldCwgYW5kIHdoZW4gaXQgd2FzIHR3ZWV0ZWRcbiAgICpcbiAgICogQHBhcmFtIGVsXG4gICAqIEByZXR1cm5zIHt7bGluazogKiwgcG9zdGVkQXQ6ICp9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2V4dHJhY3RNZXRhKGVsKSB7XG4gICAgY29uc3QgJGVsID0gJChlbCk7XG5cbiAgICBjb25zdCBsaW5rID0gJGVsLmZpbmQoJ2EnKS5hdHRyKCdocmVmJyk7XG4gICAgY29uc3QgcG9zdGVkQXQgPSAkZWwudGV4dCgpO1xuXG4gICAgcmV0dXJuIHsgbGluaywgcG9zdGVkQXQgfTtcbiAgfVxuXG4gIF9leHRyYWN0V3JhcHBlckNsYXNzKCkge1xuICAgIGNvbnN0IHdyYXBwZXJDbGFzcyA9IHRoaXMuJHdyYXBwZXIuYXR0cignY2xhc3MnKS5tYXRjaCgvdHdlZXQtLWNvdW50LVxcZCskLyk7XG5cbiAgICBpZiAod3JhcHBlckNsYXNzKSB7XG4gICAgICByZXR1cm4gd3JhcHBlckNsYXNzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBfcmVuZGVyVHdlZXRzKHR3ZWV0cykge1xuICAgIGNvbnN0IHR3ZWV0c0xlbmd0aCA9IHR3ZWV0cy5sZW5ndGg7XG5cbiAgICBpZiAoIXR3ZWV0cyB8fCAhdHdlZXRzTGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHdlZXRzQXJyYXkgPSBbXTtcbiAgICBjb25zdCB3cmFwcGVyQ2xhc3MgPSBgdHdlZXQtLWNvdW50LSR7dHdlZXRzTGVuZ3RofWA7XG5cbiAgICB0d2VldHMuZm9yRWFjaCh0d2VldCA9PiB7XG4gICAgICBjb25zdCAkdHdlZXQgPSAkKHR3ZWV0KTtcblxuICAgICAgY29uc3QgJHRlbXBsYXRlID0gdGhpcy4kdGVtcGxhdGUuY2xvbmUoKTtcbiAgICAgIGNvbnN0IGF1dGhvckluZm8gPSB0aGlzLl9leHRyYWN0QXV0aG9yKCR0d2VldFswXSk7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5fZXh0cmFjdE1ldGEoJHR3ZWV0WzJdKTtcblxuICAgICAgY29uc3QgY29udGVudCA9ICR0d2VldFsxXTtcblxuICAgICAgLy8gUmVuZGVyIGhlYWRlclxuICAgICAgJHRlbXBsYXRlLmZpbmQoJy50d2VldC0taGVhZGVyJykuYXR0cignaHJlZicsIGF1dGhvckluZm8ubGluayk7XG5cbiAgICAgICR0ZW1wbGF0ZS5maW5kKCcudHdlZXQtLWhlYWRlci1pbWFnZScpLmh0bWwoYXV0aG9ySW5mby4kYXZhdGFyKTtcblxuICAgICAgJHRlbXBsYXRlLmZpbmQoJy50d2VldC0taGVhZGVyLW5hbWUnKS50ZXh0KGF1dGhvckluZm8ubmFtZSk7XG5cbiAgICAgICR0ZW1wbGF0ZS5maW5kKCcudHdlZXQtLWhlYWRlci1zY3JlZW5uYW1lJykudGV4dChhdXRob3JJbmZvLnNjcmVlbk5hbWUpO1xuXG4gICAgICAvLyBSZW5kZXIgY29udGVudFxuICAgICAgJHRlbXBsYXRlXG4gICAgICAgIC5maW5kKCcudHdlZXQtLWNvbnRlbnQnKVxuICAgICAgICAuYXBwZW5kKCR0d2VldFszXSA/ICR0d2VldFszXSA6IG51bGwpXG4gICAgICAgIC5hcHBlbmQoY29udGVudCk7XG5cbiAgICAgIC8vIFJlbmRlciBmb290ZXJcbiAgICAgICR0ZW1wbGF0ZVxuICAgICAgICAuZmluZCgnLnR3ZWV0LS1mb290ZXInKVxuICAgICAgICAuYXR0cignaHJlZicsIG1ldGEubGluaylcbiAgICAgICAgLmZpbmQoJy50d2VldC0tZm9vdGVyLS1wb3N0ZWQnKVxuICAgICAgICAudGV4dChtZXRhLnBvc3RlZEF0KTtcblxuICAgICAgdHdlZXRzQXJyYXkucHVzaCgkdGVtcGxhdGUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kd3JhcHBlci5jc3MoJ21pbi1oZWlnaHQnLCB0aGlzLiR3cmFwcGVyLmhlaWdodCgpKTtcblxuICAgIHRoaXMuJHR3ZWV0c1xuICAgICAgLmZhZGVPdXQoKVxuICAgICAgLnByb21pc2UoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9kZXN0cm95RmxpY2tpdHkoKTtcbiAgICAgICAgdGhpcy4kdHdlZXRzLnJlbW92ZSgpO1xuXG4gICAgICAgIHRoaXMuJGNvbnRlbnQuYXBwZW5kKHR3ZWV0c0FycmF5KTtcblxuICAgICAgICB0aGlzLiR3cmFwcGVyXG4gICAgICAgICAgLnJlbW92ZUNsYXNzKHRoaXMuX2V4dHJhY3RXcmFwcGVyQ2xhc3MoKSlcbiAgICAgICAgICAuYWRkQ2xhc3Mod3JhcHBlckNsYXNzKVxuICAgICAgICAgIC5jc3MoJ21pbi1oZWlnaHQnLCAnJyk7XG5cbiAgICAgICAgdGhpcy4kdHdlZXRzID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtdHdlZXQtY29udGVudF0nKTtcblxuICAgICAgICB0aGlzLl9tb2JpbGVTbGlkZXIoKTtcbiAgICAgIH0pO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicTwitterFeed.js\n")},
1"./source/scripts/sections/DynamicVideo.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DynamicVideo; });\n/* harmony import */ var _components_Video__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Video */ "./source/scripts/components/Video.js");\n/* harmony import */ var _helpers_LazyLoader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/LazyLoader */ "./source/scripts/helpers/LazyLoader.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar DynamicVideo =\n/*#__PURE__*/\nfunction () {\n function DynamicVideo(section) {\n _classCallCheck(this, DynamicVideo);\n\n this.el = section.el;\n this.autoplay = section.data.autoplay;\n this.init = this.init.bind(this);\n this.lazyLoader = new _helpers_LazyLoader__WEBPACK_IMPORTED_MODULE_1__["default"](this.el, this.init);\n }\n\n _createClass(DynamicVideo, [{\n key: "init",\n value: function init() {\n var _this = this;\n\n var videoEl = this.el.querySelector(\'[data-video]\');\n this.hasPlayed = false;\n\n if (videoEl) {\n this.video = new _components_Video__WEBPACK_IMPORTED_MODULE_0__["default"](videoEl);\n }\n\n if (this.video && this.autoplay) {\n var thresholds = {\n play: 0.5,\n pause: 0.2\n };\n this.playPauseObserver = new IntersectionObserver(function (entries) {\n var _entries$ = entries[0],\n intersectionRatio = _entries$.intersectionRatio,\n isIntersecting = _entries$.isIntersecting;\n\n if (intersectionRatio >= thresholds.play && isIntersecting && !_this.hasPlayed) {\n // videoEl has just scrolled into view and is at least 50% visible: play video\n _this.video._autoplay();\n\n _this.hasPlayed = true;\n } else if (intersectionRatio <= thresholds.pause && isIntersecting === false) {\n // videoEl has scrolled out of view and is less than 20% visible: pause video\n _this.video._onPauseClick();\n }\n }, {\n threshold: [thresholds.pause, thresholds.play]\n });\n this.playPauseObserver.observe(videoEl);\n }\n }\n }, {\n key: "onSectionUnload",\n value: function onSectionUnload() {\n if (this.video) {\n this.video.unload();\n }\n\n if (this.playPauseObserver) {\n this.playPauseObserver.disconnect();\n }\n\n this.lazyLoader.unload();\n }\n }]);\n\n return DynamicVideo;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9EeW5hbWljVmlkZW8uanM/NWE2NCJdLCJuYW1lcyI6WyJEeW5hbWljVmlkZW8iLCJzZWN0aW9uIiwiZWwiLCJhdXRvcGxheSIsImRhdGEiLCJpbml0IiwiYmluZCIsImxhenlMb2FkZXIiLCJMYXp5TG9hZGVyIiwidmlkZW9FbCIsInF1ZXJ5U2VsZWN0b3IiLCJoYXNQbGF5ZWQiLCJ2aWRlbyIsIlZpZGVvIiwidGhyZXNob2xkcyIsInBsYXkiLCJwYXVzZSIsInBsYXlQYXVzZU9ic2VydmVyIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJlbnRyaWVzIiwiaW50ZXJzZWN0aW9uUmF0aW8iLCJpc0ludGVyc2VjdGluZyIsIl9hdXRvcGxheSIsIl9vblBhdXNlQ2xpY2siLCJ0aHJlc2hvbGQiLCJvYnNlcnZlIiwidW5sb2FkIiwiZGlzY29ubmVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0lBRXFCQSxZOzs7QUFDbkIsd0JBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFDbkIsU0FBS0MsRUFBTCxHQUFVRCxPQUFPLENBQUNDLEVBQWxCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQkYsT0FBTyxDQUFDRyxJQUFSLENBQWFELFFBQTdCO0FBQ0EsU0FBS0UsSUFBTCxHQUFZLEtB
1QUtBLElBQUwsQ0FBVUMsSUFBVixDQUFlLElBQWYsQ0FBWjtBQUVBLFNBQUtDLFVBQUwsR0FBa0IsSUFBSUMsMkRBQUosQ0FBZSxLQUFLTixFQUFwQixFQUF3QixLQUFLRyxJQUE3QixDQUFsQjtBQUNEOzs7OzJCQUVNO0FBQUE7O0FBQ0wsVUFBTUksT0FBTyxHQUFHLEtBQUtQLEVBQUwsQ0FBUVEsYUFBUixDQUFzQixjQUF0QixDQUFoQjtBQUNBLFdBQUtDLFNBQUwsR0FBaUIsS0FBakI7O0FBRUEsVUFBSUYsT0FBSixFQUFhO0FBQ1gsYUFBS0csS0FBTCxHQUFhLElBQUlDLHlEQUFKLENBQVVKLE9BQVYsQ0FBYjtBQUNEOztBQUVELFVBQUksS0FBS0csS0FBTCxJQUFjLEtBQUtULFFBQXZCLEVBQWlDO0FBQy9CLFlBQU1XLFVBQVUsR0FBRztBQUFFQyxjQUFJLEVBQUUsR0FBUjtBQUFhQyxlQUFLLEVBQUU7QUFBcEIsU0FBbkI7QUFFQSxhQUFLQyxpQkFBTCxHQUF5QixJQUFJQyxvQkFBSixDQUN2QixVQUFBQyxPQUFPLEVBQUk7QUFBQSwwQkFDcUNBLE9BQU8sQ0FBQyxDQUFELENBRDVDO0FBQUEsY0FDREMsaUJBREMsYUFDREEsaUJBREM7QUFBQSxjQUNrQkMsY0FEbEIsYUFDa0JBLGNBRGxCOztBQUdULGNBQ0VELGlCQUFpQixJQUFJTixVQUFVLENBQUNDLElBQWhDLElBQ0dNLGNBREgsSUFFRyxDQUFDLEtBQUksQ0FBQ1YsU0FIWCxFQUlFO0FBQ0E7QUFDQSxpQkFBSSxDQUFDQyxLQUFMLENBQVdVLFNBQVg7O0FBQ0EsaUJBQUksQ0FBQ1gsU0FBTCxHQUFpQixJQUFqQjtBQUNELFdBUkQsTUFRTyxJQUNMUyxpQkFBaUIsSUFBSU4sVUFBVSxDQUFDRSxLQUFoQyxJQUNHSyxjQUFjLEtBQUssS0FGakIsRUFHTDtBQUNBO0FBQ0EsaUJBQUksQ0FBQ1QsS0FBTCxDQUFXVyxhQUFYO0FBQ0Q7QUFDRixTQW5Cc0IsRUFvQnZCO0FBQ0VDLG1CQUFTLEVBQUUsQ0FBQ1YsVUFBVSxDQUFDRSxLQUFaLEVBQW1CRixVQUFVLENBQUNDLElBQTlCO0FBRGIsU0FwQnVCLENBQXpCO0FBeUJBLGFBQUtFLGlCQUFMLENBQXVCUSxPQUF2QixDQUErQmhCLE9BQS9CO0FBQ0Q7QUFDRjs7O3NDQUVpQjtBQUNoQixVQUFJLEtBQUtHLEtBQVQsRUFBZ0I7QUFDZCxhQUFLQSxLQUFMLENBQVdjLE1BQVg7QUFDRDs7QUFFRCxVQUFJLEtBQUtULGlCQUFULEVBQTRCO0FBQzFCLGFBQUtBLGlCQUFMLENBQXVCVSxVQUF2QjtBQUNEOztBQUVELFdBQUtwQixVQUFMLENBQWdCbUIsTUFBaEI7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL3NlY3Rpb25zL0R5bmFtaWNWaWRlby5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWaWRlbyBmcm9tICcuLi9jb21wb25lbnRzL1ZpZGVvJztcbmltcG9ydCBMYXp5TG9hZGVyIGZyb20gJy4uL2hlbHBlcnMvTGF6eUxvYWRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER5bmFtaWNWaWRlbyB7XG4gIGNvbnN0cnVjdG9yKHNlY3Rpb24pIHtcbiAgICB0aGlzLmVsID0gc2VjdGlvbi5lbDtcbiAgICB0aGlzLmF1dG9wbGF5ID0gc2VjdGlvbi5kYXRhLmF1dG9wbGF5O1xuICAgIHRoaXMuaW5pdCA9IHRoaXMuaW5pdC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5sYXp5TG9hZGVyID0gbmV3IExhenlMb2FkZXIodGhpcy5lbCwgdGhpcy5pbml0KTtcbiAgfVxuXG4gIGluaXQoKSB7XG4gICAgY29uc3QgdmlkZW9FbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtdmlkZW9dJyk7XG4gICAgdGhpcy5oYXNQbGF5ZWQgPSBmYWxzZTtcblxuICAgIGlmICh2aWRlb0VsKSB7XG4gICAgICB0aGlzLnZpZGVvID0gbmV3IFZpZGVvKHZpZGVvRWwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvICYmIHRoaXMuYXV0b3BsYXkpIHtcbiAgICAgIGNvbnN0IHRocmVzaG9sZHMgPSB7IHBsYXk6IDAuNSwgcGF1c2U6IDAuMiB9O1xuXG4gICAgICB0aGlzLnBsYXlQYXVzZU9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICBlbnRyaWVzID0+IHtcbiAgICAgICAgICBjb25zdCB7IGludGVyc2VjdGlvblJhdGlvLCBpc0ludGVyc2VjdGluZyB9ID0gZW50cmllc1swXTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGludGVyc2VjdGlvblJhdGlvID49IHRocmVzaG9sZHMucGxheVxuICAgICAgICAgICAgJiYgaXNJbnRlcnNlY3RpbmdcbiAgICAgICAgICAgICYmICF0aGlzLmhhc1BsYXllZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gdmlkZW9FbCBoYXMganVzdCBzY3JvbGxlZCBpbnRvIHZpZXcgYW5kIGlzIGF0IGxlYXN0IDUwJSB2aXNpYmxlOiBwbGF5IHZpZGVvXG4gICAgICAgICAgICB0aGlzLnZpZGVvLl9hdXRvcGxheSgpO1xuICAgICAgICAgICAgdGhpcy5oYXNQbGF5ZWQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBpbnRlcnNlY3Rpb25SYXRpbyA8PSB0aHJlc2hvbGRzLnBhdXNlXG4gICAgICAgICAgICAmJiBpc0ludGVyc2VjdGluZyA9PT0gZmFsc2VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIHZpZGVvRWwgaGFzIHNjcm9sbGVkIG91dCBvZiB2aWV3IGFuZCBpcyBsZXNzIHRoYW4gMjAlIHZpc2libGU6IHBhdXNlIHZpZGVvXG4gICAgICAgICAgICB0aGlzLnZpZGVvLl9vblBhdXNlQ2xpY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aHJlc2hvbGQ6IFt0aHJlc2hvbGRzLnBhdXNlLCB0aHJlc2hvbGRzLnBsYXldLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgdGhpcy5wbGF5UGF1c2VPYnNlcnZlci5vYnNlcnZlKHZpZGVvRWwpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICBpZiAodGhpcy52aWRlbykge1xuICAgICAgdGhpcy52aWRlby51bmxvYWQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wbGF5UGF1c2VPYnNlcnZlcikge1xuICAgICAgdGhpcy5wbGF5UGF1c2VPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5sYXp5TG9hZGVyLnVubG9hZCgpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/DynamicVideo.js\n')},
1"./source/scripts/sections/StaticAnnouncement.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return StaticAnnouncement; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nvar StaticAnnouncement = function StaticAnnouncement(section) {\n _classCallCheck(this, StaticAnnouncement);\n\n // Since the announcement bar positioning is actually handled by the\n // StaticSectionHeader and StickyHeader classes, we need to let them know\n // when the announcement element is refreshed within the editor.\n if (window.Shopify && window.Shopify.designMode) {\n section.postMessage(\'announcement:load\');\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNBbm5vdW5jZW1lbnQuanM/OTc4NSJdLCJuYW1lcyI6WyJTdGF0aWNBbm5vdW5jZW1lbnQiLCJzZWN0aW9uIiwid2luZG93IiwiU2hvcGlmeSIsImRlc2lnbk1vZGUiLCJwb3N0TWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7OztJQUFxQkEsa0IsR0FDbkIsNEJBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsTUFBSUMsTUFBTSxDQUFDQyxPQUFQLElBQWtCRCxNQUFNLENBQUNDLE9BQVAsQ0FBZUMsVUFBckMsRUFBaUQ7QUFDL0NILFdBQU8sQ0FBQ0ksV0FBUixDQUFvQixtQkFBcEI7QUFDRDtBQUNGLEMiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNBbm5vdW5jZW1lbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0aWNBbm5vdW5jZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWN0aW9uKSB7XG4gICAgLy8gU2luY2UgdGhlIGFubm91bmNlbWVudCBiYXIgcG9zaXRpb25pbmcgaXMgYWN0dWFsbHkgaGFuZGxlZCBieSB0aGVcbiAgICAvLyBTdGF0aWNTZWN0aW9uSGVhZGVyIGFuZCBTdGlja3lIZWFkZXIgY2xhc3Nlcywgd2UgbmVlZCB0byBsZXQgdGhlbSBrbm93XG4gICAgLy8gd2hlbiB0aGUgYW5ub3VuY2VtZW50IGVsZW1lbnQgaXMgcmVmcmVzaGVkIHdpdGhpbiB0aGUgZWRpdG9yLlxuICAgIGlmICh3aW5kb3cuU2hvcGlmeSAmJiB3aW5kb3cuU2hvcGlmeS5kZXNpZ25Nb2RlKSB7XG4gICAgICBzZWN0aW9uLnBvc3RNZXNzYWdlKCdhbm5vdW5jZW1lbnQ6bG9hZCcpO1xuICAgIH1cbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticAnnouncement.js\n')},
1"./source/scripts/sections/StaticArticle.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return StaticArticle; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _components_RichText__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/RichText */ "./source/scripts/components/RichText.js");\n/* harmony import */ var _Forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Forms */ "./source/scripts/Forms.js");\n/* harmony import */ var _shortcodes_Shortcodes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shortcodes/Shortcodes */ "./source/scripts/shortcodes/Shortcodes.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar StaticArticle =\n/*#__PURE__*/\nfunction () {\n function StaticArticle(section) {\n _classCallCheck(this, StaticArticle);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.$commentForm = this.$el.find(\'[data-articlecomments-form]\');\n this.richText = new _components_RichText__WEBPACK_IMPORTED_MODULE_1__["default"](this.$el);\n\n if (this.$commentForm.length) {\n this.commentForm = new _Forms__WEBPACK_IMPORTED_MODULE_2__["default"](this.$commentForm);\n }\n\n this.shortcodes = new _shortcodes_Shortcodes__WEBPACK_IMPORTED_MODULE_3__["default"](section.el);\n }\n\n _createClass(StaticArticle, [{\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.richText.unload();\n\n if (this.commentForm) {\n this.commentForm.unload();\n }\n\n if (this.shortcodes) {\n this.shortcodes.unload();\n }\n }\n }]);\n\n return StaticArticle;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNBcnRpY2xlLmpzPzczY2YiXSwibmFtZXMiOlsiU3RhdGljQXJ0aWNsZSIsInNlY3Rpb24iLCIkZWwiLCIkIiwiZWwiLCIkY29tbWVudEZvcm0iLCJmaW5kIiwicmljaFRleHQiLCJSaWNoVGV4dCIsImxlbmd0aCIsIm
1NvbW1lbnRGb3JtIiwiRm9ybXMiLCJzaG9ydGNvZGVzIiwiU2hvcnRjb2RlcyIsInVubG9hZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBOztJQUVxQkEsYTs7O0FBQ25CLHlCQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQ25CLFNBQUtDLEdBQUwsR0FBV0MsNkNBQUMsQ0FBQ0YsT0FBTyxDQUFDRyxFQUFULENBQVo7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLEtBQUtILEdBQUwsQ0FBU0ksSUFBVCxDQUFjLDZCQUFkLENBQXBCO0FBRUEsU0FBS0MsUUFBTCxHQUFnQixJQUFJQyw0REFBSixDQUFhLEtBQUtOLEdBQWxCLENBQWhCOztBQUVBLFFBQUksS0FBS0csWUFBTCxDQUFrQkksTUFBdEIsRUFBOEI7QUFDNUIsV0FBS0MsV0FBTCxHQUFtQixJQUFJQyw4Q0FBSixDQUFVLEtBQUtOLFlBQWYsQ0FBbkI7QUFDRDs7QUFFRCxTQUFLTyxVQUFMLEdBQWtCLElBQUlDLDhEQUFKLENBQWVaLE9BQU8sQ0FBQ0csRUFBdkIsQ0FBbEI7QUFDRDs7OztzQ0FFaUI7QUFDaEIsV0FBS0csUUFBTCxDQUFjTyxNQUFkOztBQUVBLFVBQUksS0FBS0osV0FBVCxFQUFzQjtBQUNwQixhQUFLQSxXQUFMLENBQWlCSSxNQUFqQjtBQUNEOztBQUVELFVBQUksS0FBS0YsVUFBVCxFQUFxQjtBQUNuQixhQUFLQSxVQUFMLENBQWdCRSxNQUFoQjtBQUNEO0FBQ0YiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNBcnRpY2xlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBSaWNoVGV4dCBmcm9tICcuLi9jb21wb25lbnRzL1JpY2hUZXh0JztcbmltcG9ydCBGb3JtcyBmcm9tICcuLi9Gb3Jtcyc7XG5cbmltcG9ydCBTaG9ydGNvZGVzIGZyb20gJy4uL3Nob3J0Y29kZXMvU2hvcnRjb2Rlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRpY0FydGljbGUge1xuICBjb25zdHJ1Y3RvcihzZWN0aW9uKSB7XG4gICAgdGhpcy4kZWwgPSAkKHNlY3Rpb24uZWwpO1xuICAgIHRoaXMuJGNvbW1lbnRGb3JtID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtYXJ0aWNsZWNvbW1lbnRzLWZvcm1dJyk7XG5cbiAgICB0aGlzLnJpY2hUZXh0ID0gbmV3IFJpY2hUZXh0KHRoaXMuJGVsKTtcblxuICAgIGlmICh0aGlzLiRjb21tZW50Rm9ybS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29tbWVudEZvcm0gPSBuZXcgRm9ybXModGhpcy4kY29tbWVudEZvcm0pO1xuICAgIH1cblxuICAgIHRoaXMuc2hvcnRjb2RlcyA9IG5ldyBTaG9ydGNvZGVzKHNlY3Rpb24uZWwpO1xuICB9XG5cbiAgb25TZWN0aW9uVW5sb2FkKCkge1xuICAgIHRoaXMucmljaFRleHQudW5sb2FkKCk7XG5cbiAgICBpZiAodGhpcy5jb21tZW50Rm9ybSkge1xuICAgICAgdGhpcy5jb21tZW50Rm9ybS51bmxvYWQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG9ydGNvZGVzKSB7XG4gICAgICB0aGlzLnNob3J0Y29kZXMudW5sb2FkKCk7XG4gICAgfVxuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticArticle.js\n')},
1"./source/scripts/sections/StaticBlog.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return StaticBlog; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _components_RichText__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/RichText */ "./source/scripts/components/RichText.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar StaticBlog =\n/*#__PURE__*/\nfunction () {\n function StaticBlog(section) {\n _classCallCheck(this, StaticBlog);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.richText = new _components_RichText__WEBPACK_IMPORTED_MODULE_1__["default"](this.$el);\n }\n\n _createClass(StaticBlog, [{\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.richText.unload();\n }\n }]);\n\n return StaticBlog;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNCbG9nLmpzPzliN2EiXSwibmFtZXMiOlsiU3RhdGljQmxvZyIsInNlY3Rpb24iLCIkZWwiLCIkIiwiZWwiLCJyaWNoVGV4dCIsIlJpY2hUZXh0IiwidW5sb2FkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0lBRXFCQSxVOzs7QUFDbkIsc0JBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFDbkIsU0FBS0MsR0FBTCxHQUFXQyw2Q0FBQyxDQUFDRixPQUFPLENBQUNHLEVBQVQsQ0FBWjtBQUVBLFNBQUtDLFFBQUwsR0FBZ0IsSUFBSUMsNERBQUosQ0FBYSxLQUFLSixHQUFsQixDQUFoQjtBQUNEOzs7O3NDQUVpQjtBQUNoQixXQUFLRyxRQUFMLENBQWNFLE1BQWQ7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL3NlY3Rpb25zL1N0YXRpY0Jsb2cuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IFJpY2hUZXh0IGZyb20gJy4uL2NvbXBvbmVudHMvUmljaFRleHQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0aWNCbG9nIHtcbiAgY29uc3RydWN0b3Ioc2VjdGlvbikge1xuICAgIHRoaXMuJGVsID0gJChzZWN0aW9uLmVsKTtcblxuICAgIHRoaXMucmljaFRleHQgPSBuZXcgUmljaFRleHQodGhpcy4kZWwpO1xuICB9XG5cbiAgb25TZWN0aW9uVW5sb2FkKCkge1xuICAgIHRoaXMucmljaFRleHQudW5sb2FkKCk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticBlog.js\n')},
1"./source/scripts/sections/StaticCart.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return StaticCart; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! scriptjs */ \"./node_modules/scriptjs/dist/script.js\");\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(scriptjs__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! just-debounce */ \"./node_modules/just-debounce/index.js\");\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(just_debounce__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shopify-currency-converter */ \"./node_modules/shopify-currency-converter/dist/index.js\");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(shopify_currency_converter__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _shopify_theme_addresses__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @shopify/theme-addresses */ \"./node_modules/@shopify/theme-addresses/theme-addresses.js\");\n/* harmony import */ var _Forms__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Forms */ \"./source/scripts/Forms.js\");\n/* harmony import */ var _components_MessageBanner__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/MessageBanner */ \"./source/scripts/components/MessageBanner.js\");\n/* harmony import */ var _components_CartItem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/CartItem */ \"./source/scripts/components/CartItem.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\nvar StaticCart =\n/*#__PURE__*/\nfunction () {\n function StaticCart(section) {\n var _this = this;\n\n _classCallCheck(this, StaticCart);\n\n this.settings = section.data.settings;\n this.shipping = section.data.shipping;\n this.cart = section.data.cart;\n this.messageBanner = new _components_MessageBanner__WEBPACK_IMPORTED_MODULE_6__[\"default\"]();\n this.$window = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window);\n this.el = section.el;\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.$header = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-site-header-main]');\n this.$total = this.$el.find('[data-cart-total]');\n this.$shipping = this.$el.find('[data-cartshipping]'); // Product form containers\n\n this.$titleTotalSmall = this.$el.find('.cart-title-total--small');\n this.$titleTotalLarge = this.$el.find('.cart-title-total--large');\n this.$titleTotalContents = this.$el.find('[data-cart-title-total]'); // Shipping calculator elements\n\n this.$shippingToggle = this.$el.find('[data-cartshipping-toggle]');\n this.$shippingResponse = this.$shipping.find('[data-cartshipping-response]');\n this.$shippingResponseMessage = this.$shippingResponse.find('[data-cartshipping-message]');\n this.$shippingResponseRates = this.$shippingResponse.find('[data-cartshipping-rates]');\n this.$shippingSubmit = this.$shipping.find('[data-cartshipping-submit]');\n this.$form = this.$el.find('[data-cart-form]');\n this.$checkoutButtons = this.$el.find('button[name=\"checkout\"]');\n this.$totals = this.$el.find('[data-cart-totals]');\n\n this._moveTitleTotal();\n\n var $scripts = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-scripts]');\n scriptjs__WEBPACK_IMPORTED_MODULE_1___default()($scripts.data('shopify-api-url'), function () {\n _this._bindEvents();\n\n _this.cartItems = _this.cart.items.map(function (lineItem) {\n var $el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-cartitem-id=\\\"\".concat(lineItem.id, \"\\\"]\"), _this.$el);\n return new _components_CartItem__WEBPACK_IMPORTED_MODULE_7__[\"default\"]($el.get(0), lineItem, _this.settings);\n });\n _this.cartTotalValue = window.api.theme.useValue({\n name: 'cart:total',\n handler: function handler(_ref) {\n var price = _ref.price;\n\n _this.$total.each(function (i, el) {\n el.setAttribute('data-cart-total', price);\n el.innerHTML = Shopify.formatMoney(price, _this.settings.money_format);\n shopify_currency_converter__WEBPACK_IMPORTED_MODULE_3___default.a.update(el);\n });\n },\n initialValue: {\n price: _this.cart.total_price,\n compare_at_price: _this.cart.total_price\n }\n });\n _this.cartCheckoutValue = window.api.theme.useValue({\n name: 'cart:checkout',\n handler: function handler(value) {\n _this.$checkoutButtons.prop('disabled', !value);\n },\n initialValue: true\n });\n _this.cartNotificationsElement = window.api.theme.useElement('cart:notifications', section.el.querySelector('[data-cart-notifications]'));\n _this.cartToolsElement = window.api.theme.useElement('cart:tools', section.el.querySelector('[data-cart-tools]')); // When the cart is submitted, we should fire an event that can be cancelled by integrations\n\n _this.$form.on('submit', function (event) {\n return window.api.theme.triggerEvent('cart:checkout', {\n cancel: function cancel() {\n return event.preventDefault();\n }\n });\n });\n\n Shopify.onError = _this._handleErrors.bind(_this);\n });\n this.forms = new _Forms__WEBPACK_IMPORTED_MODULE_5__[\"default\"](this.$el); // Update the section when onSectionLoad fires to restore prices to local currency\n\n this.$el.find('.money').each(function (index, el) {\n return shopify_currency_converter__WEBPACK_IMPORTED_MODULE_3___default.a.update(el);\n });\n\n if (this.settings.shipping && this.$shipping.length) {\n scriptjs__WEBPACK_IMPORTED_MODULE_1___default()($scripts.data('shopify-countries'), function () {\n scriptjs__WEBPACK_IMPORTED_MODULE_1___default()($scripts.data('shopify-common'), function () {\n scriptjs__WEBPACK_IMPORTED_MODULE_1___default()($scripts.data('shopify-cart'), function () {\n _this._initShippingCalc();\n });\n });\n });\n }\n }\n\n _createClass(StaticCart, [{\n key: \"onSectionUnload\",\n value: function onSectionUnload() {\n this.cartItems.forEac
1h(function (cartItem) {\n return cartItem.unload();\n });\n this.cartTotalValue.unload();\n this.cartCheckoutValue.unload();\n this.cartNotificationsElement.unload();\n this.cartToolsElement.unload();\n this.$el.off('.cart-page');\n this.$window.off('.cart-page');\n this.forms.unload();\n this.messageBanner.unload();\n this.messageBanner.dismissBanners();\n }\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents() {\n var _this2 = this;\n\n this.$el.on('keydown.cart-page', '[data-cartitem-quantity]', function (event) {\n _this2._quantityKeyDown(event);\n });\n /*\n * There are two [data-cartitem-quantity] selectors.\n * Use the input as the source of truth rather than the select\n * because the input has an infinite value range whereas the select\n * has a finite range.\n */\n\n this.$el.on('change.cart-page', '[data-cartitem-quantity][data-quantity-input]', function (event) {\n _this2._editItemQuantity(event);\n });\n this.$el.on('click.cart-page', '[data-cartitem-remove]', function (event) {\n event.preventDefault();\n\n _this2._editItemQuantity(event, true);\n });\n this.$window.on('resize.cart-page', just_debounce__WEBPACK_IMPORTED_MODULE_2___default()(function () {\n return _this2._moveTitleTotal();\n }, 20));\n }\n }, {\n key: \"_moveTitleTotal\",\n value: function _moveTitleTotal() {\n if (!this.$titleTotalContents.length) {\n return;\n }\n\n if (this.$window.outerWidth() >= 480) {\n if (!jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(this.$titleTotalLarge[0], this.$titleTotalContents[0])) {\n var $form = this.$titleTotalContents.detach();\n this.$titleTotalLarge.append($form);\n }\n } else if (!jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(this.$titleTotalSmall[0], this.$titleTotalContents[0])) {\n var _$form = this.$titleTotalContents.detach();\n\n this.$titleTotalSmall.append(_$form);\n }\n }\n /**\n * Prevent form submission when pressing `enter` within a quantity selector\n *\n * @param event\n * @private\n */\n\n }, {\n key: \"_quantityKeyDown\",\n value: function _quantityKeyDown(event) {\n // Only block enter keys\n if (event.keyCode !== 13) {\n return;\n } // Block form submission, but update field\n\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget).trigger('change');\n event.preventDefault();\n }\n /**\n * Handle an item quantity change\n *\n * @param event\n * @param {Boolean} remove - Set as true to remove cart item\n * @private\n */\n\n }, {\n key: \"_editItemQuantity\",\n value: function _editItemQuantity(event) {\n var remove = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n this.messageBanner.dismissBanners();\n var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget);\n var $cartItem = $target.closest('[data-cartitem-id]');\n var quantity = remove ? 0 : parseInt($target.val(), 10);\n quantity = Math.max(quantity, 0);\n\n this._updateCart($cartItem, quantity); // Remove item from cart visually if it is being removed\n\n\n if (quantity === 0 || remove) {\n $cartItem.height($cartItem.height());\n }\n }\n /**\n * Update cart with a valid quantity\n *\n * @param $cartItem\n * @param quantity\n * @private\n */\n\n }, {\n key: \"_updateCart\",\n value: function _updateCart($cartItem, quantity) {\n var _this3 = this;\n\n var id = $cartItem.data('cartitem-id'); // Notify Shopify updated item\n\n Shopify.changeItem(id, quantity, function (response) {\n _this3._didUpdate(id, quantity, response, $cartItem);\n });\n }\n }, {\n key: \"_quantityError\",\n value: function _quantityError(limit, title) {\n var errorMessage = this.settings.stock_limit.replace('** quantity **', limit).replace('** title **', title);\n this.messageBanner.message(errorMessage, 'error');\n }\n /**\n * Update cart content based on information from Shopify\n *\n * @param id\n * @param quantity\n * @param response\n * @param $cartItem\n * @returns {*}\n * @private\n */\n\n }, {\n key: \"_didUpdate\",\n value: function _didUpdate(id, quantity, response, $cartItem) {\n // Reload page if all items are removed from cart\n if (!response.items.length) {\n window.location = '/cart';\n return;\n }\n\n window.api.theme.triggerEvent('cart:updated', {\n cancel: function cancel() {}\n });\n this.cart = response;\n this.$header.trigger('cartcount:update', {\n response: response\n }); // Update all totals on the page when the cart has been updated\n\n window.api.theme.updateValue('cart:total', {\n price: this.cart.total_price,\n compare_at_price: this.cart.total_price\n });\n window.api.theme.updateValue('cart:checkout', true);\n window.api.theme.updateElement('cart:notifications');\n window.api.theme.updateElement('cart:tools'); // Select item from response\n\n var filteredItems = response.items.filter(function (item) {\n return item.id === id;\n });\n\n if (!filteredItems.length) {\n $cartItem.addClass('removing').one('trend', function () {\n $cartItem.off('trend').remove();\n });\n return;\n }\n\n window.api.theme.updateValue(\"line-item:\".concat(id, \":price\"), {\n price: this.cart.items.filter(function (lineItem) {\n return lineItem.id === id;\n })[0].line_price,\n compare_at_price: this.cart.items.filter(function (lineItem) {\n return lineItem.id === id;\n })[0].original_line_price\n });\n var cartItem = filteredItems[0];\n\n if (cartItem.quantity !== quantity) {\n this._quantityError(cartItem.quantity, c
1artItem.title);\n\n $cartItem.find('[data-quantity-input]').val(cartItem.quantity);\n $cartItem.find('[data-quantity-select]').val(cartItem.quantity);\n }\n }\n /**\n * Handle Errors returned from Shopify\n *\n * @param errors\n * @private\n */\n\n }, {\n key: \"_handleErrors\",\n value: function _handleErrors() {\n var errors = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n if (!errors) {\n return;\n }\n\n var shippingResponse = {\n message: this.shipping.error_general\n };\n\n if (errors.zip && errors.zip.length > 0) {\n if (errors.zip[0].indexOf('is not valid') !== -1 || errors.zip[0].indexOf(\"can't be blank\") !== -1) {\n shippingResponse.message = \"\".concat(this.shipping.zip, \" \").concat(errors.zip);\n }\n }\n\n if (errors.error && errors.error.length > 0) {\n if (errors.error[0].indexOf('shipment_too_heavy') !== -1) {\n shippingResponse.message = this.shipping.shipment_too_heavy;\n }\n }\n\n this._handleShippingResponse(shippingResponse);\n }\n }, {\n key: \"_initShippingCalc\",\n value: function _initShippingCalc() {\n var _this4 = this;\n\n this._bindShippingCalcEvents();\n\n var countrySelect = document.getElementById('address_country');\n var provinceSelect = document.getElementById('address_province');\n var provinceContainer = document.getElementById('address_province_container');\n this.shippingCountryProvinceSelector = new _shopify_theme_addresses__WEBPACK_IMPORTED_MODULE_4__[\"CountryProvinceSelector\"](countrySelect.innerHTML);\n this.shippingCountryProvinceSelector.build(countrySelect, provinceSelect, {\n onCountryChange: function onCountryChange(provinces) {\n if (provinces.length) {\n provinceContainer.style.display = 'block';\n } else {\n provinceContainer.style.display = 'none';\n } // \"Province\", \"State\", \"Region\", etc. and \"Postal Code\", \"ZIP Code\", etc.\n // Even countries without provinces include a label.\n\n\n var _window$Countries$cou = window.Countries[countrySelect.value],\n label = _window$Countries$cou.label,\n zip_label = _window$Countries$cou.zip_label;\n provinceContainer.querySelector('label[for=\"address_province\"]').innerHTML = label;\n _this4.el.querySelector('#address_zip ~ label[for=\"address_zip\"]').innerHTML = zip_label;\n }\n });\n }\n }, {\n key: \"_bindShippingCalcEvents\",\n value: function _bindShippingCalcEvents() {\n var _this5 = this;\n\n this.$el.on('click.cart-page', '[data-cartshipping-toggle]', function () {\n _this5._toggleShippingCalc();\n });\n this.$el.on('click.cart-page', '[data-cartshipping-submit]', function () {\n _this5._getShippingRates();\n });\n this.$el.on('keypress.cart-page', '#address_zip', function (event) {\n if (event.keyCode === 10 || event.keyCode === 13) {\n event.preventDefault();\n\n _this5.$shippingSubmit.trigger('click');\n }\n });\n }\n }, {\n key: \"_toggleShippingCalc\",\n value: function _toggleShippingCalc() {\n var oldText = this.$shippingToggle.text();\n var newText = this.$shippingToggle.data('cartshipping-toggle');\n this.$shippingToggle.text(newText).data('cartshipping-toggle', oldText);\n this.$shipping.toggleClass('open');\n }\n }, {\n key: \"_getShippingRates\",\n value: function _getShippingRates() {\n var _this6 = this;\n\n this._disableShippingButton();\n\n var shippingAddress = {};\n shippingAddress.country = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#address_country').val() || '';\n shippingAddress.province = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#address_province').val() || '';\n shippingAddress.zip = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#address_zip').val() || '';\n var queryString = Object.keys(shippingAddress).map(function (key) {\n return \"\".concat(encodeURIComponent(\"shipping_address[\".concat(key, \"]\")), \"=\").
1concat(encodeURIComponent(shippingAddress[key]));\n }).join('&');\n jquery__WEBPACK_IMPORTED_MODULE_0___default.a.ajax(\"/cart/shipping_rates.json?\".concat(queryString), {\n dataType: 'json'\n }).fail(function (error) {\n return _this6._handleErrors(error.responseJSON || {});\n }).done(function (response) {\n var rates = response.shipping_rates;\n var addressBase = [];\n\n if (shippingAddress.zip.length) {\n addressBase.push(shippingAddress.zip.trim());\n }\n\n if (shippingAddress.province.length) {\n addressBase.push(shippingAddress.province);\n }\n\n if (shippingAddress.country.length) {\n addressBase.push(shippingAddress.country);\n }\n\n var address = addressBase.join(', ');\n var message = '';\n\n if (rates.length > 1) {\n var firstRate = window.Shopify.formatMoney(rates[0].price, _this6.settings.moneyFormat);\n message = _this6.shipping.multiple_rates.replace('*address*', address).replace('*number_of_rates*', rates.length).replace('*rate*', \"<span class=\\\"money\\\">\".concat(firstRate, \"</span>\"));\n } else if (rates.length === 1) {\n message = _this6.shipping.one_rate.replace('*address*', address);\n } else {\n message = _this6.shipping.no_rates;\n }\n\n var ratesList = rates.map(function (rate) {\n var price = window.Shopify.formatMoney(rate.price, _this6.settings.moneyFormat);\n\n var rateValue = _this6.shipping.rate_value.replace('*rate_title*', rate.name).replace('*rate*', \"<span class=\\\"money\\\">\".concat(price, \"</span>\"));\n\n return \"<li>\".concat(rateValue, \"</li>\");\n });\n\n _this6._handleShippingResponse({\n message: message,\n rates: ratesList\n });\n });\n }\n }, {\n key: \"_enableShippingButton\",\n value: function _enableShippingButton() {\n this.$shippingSubmit.text(this.shipping.calculate_shipping).attr('disabled', false);\n }\n }, {\n key: \"_disableShippingButton\",\n value: function _disableShippingButton() {\n this.$shippingSubmit.text(this.shipping.calculating).attr('disabled', true);\n }\n }, {\n key: \"_showShippingResponse\",\n value: function _showShippingResponse() {\n this.$shippingResponse.addClass('visible');\n }\n }, {\n key: \"_hideShippingResponse\",\n value: function _hideShippingResponse() {\n this.$shippingResponse.removeClass('visible');\n }\n /**\n * Handle shipping responses\n *\n * @param {object} shippingResponse\n * @property {String} shippingResponse.messages - Error / Success message\n * @property {Array|String} shippingResponse.rates - Shipping rates\n * @private\n */\n\n }, {\n key: \"_handleShippingResponse\",\n value: function _handleShippingResponse() {\n var shippingResponse = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // Hide the response so that it can be populated smoothly\n this._hideShippingResponse();\n\n var message = shippingResponse.message || null;\n var rates = shippingResponse.rates || null; // Empty out contents\n\n this.$shippingResponseMessage.empty();\n this.$shippingResponseRates.empty();\n\n if (message) {\n this.$shippingResponseMessage.html(message).find('.money').each(function (index, money) {\n return shopify_currency_converter__WEBPACK_IMPORTED_MODULE_3___default.a.update(money);\n });\n }\n\n if (rates) {\n this.$shippingResponseRates.html(rates).find('.money').each(function (index, money) {\n return shopify_currency_converter__WEBPACK_IMPORTED_MODULE_3___default.a.update(money);\n });\n } // Reset the calculating button so it can be used again\n\n\n this._enableShippingButton(); // No error provided\n\n\n if (!message && !rates) {\n return;\n } // Show the response\n\n\n this._showShippingResponse();\n }\n }]);\n\n return StaticCart;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNDYXJ0LmpzPzc1NWUiXSwibmFtZXMiOlsiU3RhdGljQ2FydCIsInNlY3Rpb24iLCJzZXR0aW5ncyIsImRhdGEiLCJzaGlwcGluZyIsImNhcnQiLCJtZXNzYWdlQmFubmVyIiwiTWVzc2FnZUJhbm5lciIsIiR3aW5kb3ciLCIkIiwid2luZG93IiwiZWwiLCIkZWwiLCIkaGVhZGVyIiwiJHRvdGFsIiwiZmluZCIsIiRzaGlwcGluZyIsIiR0aXRsZVRvdGFsU21hbGwiLCIkdGl0bGVUb3RhbExhcmdlIiwiJHRpdGxlVG90YWxDb250ZW50cyIsIiRzaGlwcGluZ1RvZ2dsZSIsIiRzaGlwcGluZ1Jlc3BvbnNlIiwiJHNoaXBwaW5nUmVzcG9uc2VNZXNzYWdlIiwiJHNoaXBwaW5nUmVzcG9uc2VSYXRlcyIsIiRzaGlwcGluZ1N1Ym1pdCIsIiRmb3JtIiwiJGNoZWNrb3V0QnV0dG9ucyIsIiR0b3RhbHMiLCJfbW92ZVRpdGxlVG90YWwiLCIkc2NyaXB0cyIsIiRzY3JpcHQiLCJfYmluZEV2ZW50cyIsImNhcnRJdGVtcyIsIml0ZW1zIiwibWFwIiwibGluZUl0ZW
10iLCJpZCIsIkNhcnRJdGVtIiwiZ2V0IiwiY2FydFRvdGFsVmFsdWUiLCJhcGkiLCJ0aGVtZSIsInVzZVZhbHVlIiwibmFtZSIsImhhbmRsZXIiLCJwcmljZSIsImVhY2giLCJpIiwic2V0QXR0cmlidXRlIiwiaW5uZXJIVE1MIiwiU2hvcGlmeSIsImZvcm1hdE1vbmV5IiwibW9uZXlfZm9ybWF0IiwiQ3VycmVuY3lDb252ZXJ0ZXIiLCJ1cGRhdGUiLCJpbml0aWFsVmFsdWUiLCJ0b3RhbF9wcmljZSIsImNvbXBhcmVfYXRfcHJpY2UiLCJjYXJ0Q2hlY2tvdXRWYWx1ZSIsInZhbHVlIiwicHJvcCIsImNhcnROb3RpZmljYXRpb25zRWxlbWVudCIsInVzZUVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiY2FydFRvb2xzRWxlbWVudCIsIm9uIiwiZXZlbnQiLCJ0cmlnZ2VyRXZlbnQiLCJjYW5jZWwiLCJwcmV2ZW50RGVmYXVsdCIsIm9uRXJyb3IiLCJfaGFuZGxlRXJyb3JzIiwiYmluZCIsImZvcm1zIiwiRm9ybXMiLCJpbmRleCIsImxlbmd0aCIsIl9pbml0U2hpcHBpbmdDYWxjIiwiZm9yRWFjaCIsImNhcnRJdGVtIiwidW5sb2FkIiwib2ZmIiwiZGlzbWlzc0Jhbm5lcnMiLCJfcXVhbnRpdHlLZXlEb3duIiwiX2VkaXRJdGVtUXVhbnRpdHkiLCJkZWJvdW5jZSIsIm91dGVyV2lkdGgiLCJjb250YWlucyIsImRldGFjaCIsImFwcGVuZCIsImtleUNvZGUiLCJjdXJyZW50VGFyZ2V0IiwidHJpZ2dlciIsInJlbW92ZSIsIiR0YXJnZXQiLCIkY2FydEl0ZW0iLCJjbG9zZXN0IiwicXVhbnRpdHkiLCJwYXJzZUludCIsInZhbCIsIk1hdGgiLCJtYXgiLCJfdXBkYXRlQ2FydCIsImhlaWdodCIsImNoYW5nZUl0ZW0iLCJyZXNwb25zZSIsIl9kaWRVcGRhdGUiLCJsaW1pdCIsInRpdGxlIiwiZXJyb3JNZXNzYWdlIiwic3RvY2tfbGltaXQiLCJyZXBsYWNlIiwibWVzc2FnZSIsImxvY2F0aW9uIiwidXBkYXRlVmFsdWUiLCJ1cGRhdGVFbGVtZW50IiwiZmlsdGVyZWRJdGVtcyIsImZpbHRlciIsIml0ZW0iLCJhZGRDbGFzcyIsIm9uZSIsImxpbmVfcHJpY2UiLCJvcmlnaW5hbF9saW5lX3ByaWNlIiwiX3F1YW50aXR5RXJyb3IiLCJlcnJvcnMiLCJzaGlwcGluZ1Jlc3BvbnNlIiwiZXJyb3JfZ2VuZXJhbCIsInppcCIsImluZGV4T2YiLCJlcnJvciIsInNoaXBtZW50X3Rvb19oZWF2eSIsIl9oYW5kbGVTaGlwcGluZ1Jlc3BvbnNlIiwiX2JpbmRTaGlwcGluZ0NhbGNFdmVudHMiLCJ
1jb3VudHJ5U2VsZWN0IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInByb3ZpbmNlU2VsZWN0IiwicHJvdmluY2VDb250YWluZXIiLCJzaGlwcGluZ0NvdW50cnlQcm92aW5jZVNlbGVjdG9yIiwiQ291bnRyeVByb3ZpbmNlU2VsZWN0b3IiLCJidWlsZCIsIm9uQ291bnRyeUNoYW5nZSIsInByb3ZpbmNlcyIsInN0eWxlIiwiZGlzcGxheSIsIkNvdW50cmllcyIsImxhYmVsIiwiemlwX2xhYmVsIiwiX3RvZ2dsZVNoaXBwaW5nQ2FsYyIsIl9nZXRTaGlwcGluZ1JhdGVzIiwib2xkVGV4dCIsInRleHQiLCJuZXdUZXh0IiwidG9nZ2xlQ2xhc3MiLCJfZGlzYWJsZVNoaXBwaW5nQnV0dG9uIiwic2hpcHBpbmdBZGRyZXNzIiwiY291bnRyeSIsInByb3ZpbmNlIiwicXVlcnlTdHJpbmciLCJPYmplY3QiLCJrZXlzIiwia2V5IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsImFqYXgiLCJkYXRhVHlwZSIsImZhaWwiLCJyZXNwb25zZUpTT04iLCJkb25lIiwicmF0ZXMiLCJzaGlwcGluZ19yYXRlcyIsImFkZHJlc3NCYXNlIiwicHVzaCIsInRyaW0iLCJhZGRyZXNzIiwiZmlyc3RSYXRlIiwibW9uZXlGb3JtYXQiLCJtdWx0aXBsZV9yYXRlcyIsIm9uZV9yYXRlIiwibm9fcmF0ZXMiLCJyYXRlc0xpc3QiLCJyYXRlIiwicmF0ZVZhbHVlIiwicmF0ZV92YWx1ZSIsImNhbGN1bGF0ZV9zaGlwcGluZyIsImF0dHIiLCJjYWxjdWxhdGluZyIsInJlbW92ZUNsYXNzIiwiX2hpZGVTaGlwcGluZ1Jlc3BvbnNlIiwiZW1wdHkiLCJodG1sIiwibW9uZXkiLCJfZW5hYmxlU2hpcHBpbmdCdXR0b24iLCJfc2hvd1NoaXBwaW5nUmVzcG9uc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7SUFFcUJBLFU7OztBQUNuQi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0UsSUFBdEU7QUFDRDs7OzRDQUV1QjtBQUN0QixXQUFLcEssaUJBQUwsQ0FBdUJrRyxRQUF2QixDQUFnQyxTQUFoQztBQUNEOzs7NENBRXVCO0FBQ3RCLFdBQUtsRyxpQkFBTCxDQUF1QnNLLFdBQXZCLENBQW1DLFNBQW5DO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7OENBUStDO0FBQUEsVUFBdkI5RCxnQkFBdUIsdUVBQUosRUFBSTs7QUFDN0M7QUFDQSxXQUFLK0QscUJBQUw7O0FBRUEsVUFBTTVFLE9BQU8sR0FBR2EsZ0JBQWdCLENBQUNiLE9BQWpCLElBQTRCLElBQTVDO0FBQ0EsVUFBTXlELEtBQUssR0FBRzVDLGdCQUFnQixDQUFDNEMsS0FBakIsSUFBMEIsSUFBeEMsQ0FMNkMsQ0FPN0M7O0FBQ0EsV0FBS25KLHdCQUFMLENBQThCdUssS0FBOUI7QUFDQSxXQUFLdEssc0JBQUwsQ0FBNEJzSyxLQUE1Qjs7QUFFQSxVQUFJN0UsT0FBSixFQUFhO0FBQ1gsYUFBSzFGLHdCQUFMLENBQ0d3SyxJQURILENBQ1E5RSxPQURSLEVBRUdqRyxJQUZILENBRVEsUUFGUixFQUdHK0IsSUFISCxDQUdRLFVBQUM2QixLQUFELEVBQVFvSCxLQUFSO0FBQUEsaUJBQWtCMUksaUVBQWlCLENBQUNDLE1BQWxCLENBQXlCeUksS0FBekIsQ0FBbEI7QUFBQSxTQUhSO0FBSUQ7O0FBRUQsVUFBSXRCLEtBQUosRUFBVztBQUNULGFBQUtsSixzQkFBTCxDQUNHdUssSUFESCxDQUNRckIsS0FEUixFQUVHMUosSUFGSCxDQUVRLFFBRlIsRUFHRytCLElBSEgsQ0FHUSxVQUFDNkIsS0FBRCxFQUFRb0gsS0FBUjtBQUFBLGlCQUFrQjFJLGlFQUFpQixDQUFDQyxNQUFsQixDQUF5QnlJLEtBQXpCLENBQWxCO
10FBQUEsU0FIUjtBQUlELE9BdkI0QyxDQXlCN0M7OztBQUNBLFdBQUtDLHFCQUFMLEdBMUI2QyxDQTRCN0M7OztBQUNBLFVBQUksQ0FBQ2hGLE9BQUQsSUFBWSxDQUFDeUQsS0FBakIsRUFBd0I7QUFDdEI7QUFDRCxPQS9CNEMsQ0FpQzdDOzs7QUFDQSxXQUFLd0IscUJBQUw7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL3NlY3Rpb25zL1N0YXRpY0NhcnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICRzY3JpcHQgZnJvbSAnc2NyaXB0anMnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2p1c3QtZGVib3VuY2UnO1xuaW1wb3J0IEN1cnJlbmN5Q29udmVydGVyIGZyb20gJ3Nob3BpZnktY3VycmVuY3ktY29udmVydGVyJztcbmltcG9ydCB7IENvdW50cnlQcm92aW5jZVNlbGVjdG9yIH0gZnJvbSAnQHNob3BpZnkvdGhlbWUtYWRkcmVzc2VzJztcblxuaW1wb3J0IEZvcm1zIGZyb20gJy4uL0Zvcm1zJztcbmltcG9ydCBNZXNzYWdlQmFubmVyIGZyb20gJy4uL2NvbXBvbmVudHMvTWVzc2FnZUJhbm5lcic7XG5pbXBvcnQgQ2FydEl0ZW0gZnJvbSAnLi4vY29tcG9uZW50cy9DYXJ0SXRlbSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRpY0NhcnQge1xuICBjb25zdHJ1Y3RvcihzZWN0aW9uKSB7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNlY3Rpb24uZGF0YS5zZXR0aW5ncztcbiAgICB0aGlzLnNoaXBwaW5nID0gc2VjdGlvbi5kYXRhLnNoaXBwaW5nO1xuICAgIHRoaXMuY2FydCA9IHNlY3Rpb24uZGF0YS5jYXJ0O1xuICAgIHRoaXMubWVzc2FnZUJhbm5lciA9IG5ldyBNZXNzYWdlQmFubmVyKCk7XG5cbiAgICB0aGlzLiR3aW5kb3cgPSAkKHdpbmRvdyk7XG4gICAgdGhpcy5lbCA9IHNlY3Rpb24uZWw7XG4gICAgdGhpcy4kZWwgPSAkKHNlY3Rpb24uZWwpO1xuICAgIHRoaXMuJGhlYWRlciA9ICQoJ1tkYXRhLXNpdGUtaGVhZGVyLW1haW5dJyk7XG4gICAgdGhpcy4kdG90YWwgPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1jYXJ0LXRvdGFsXScpO1xuICAgIHRoaXMuJHNoaXBwaW5nID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtY2FydHNoaXBwaW5nXScpO1xuXG4gICAgLy8gUHJvZHVjdCBmb3JtIGNvbnRhaW5lcnNcbiAgICB0aGlzLiR0aXRsZVRvdGFsU21hbGwgPSB0aGlzLiRlbC5maW5kKCcuY2FydC10aXRsZS10b3RhbC0tc21hbGwnKTtcbiAgICB0aGlzLiR0aXRsZVRvdGFsTGFyZ2UgPSB0aGlzLiRlbC5maW5kKCcuY2FydC10aXRsZS10b3RhbC0tbGFyZ2UnKTtcbiAgICB0aGlzLiR0aXRsZVRvdGFsQ29udGVudHMgPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1jYXJ0LXRpdGxlLXRvdGFsXScpO1xuXG4gICAgLy8gU2hpcHBpbmcgY2FsY3VsYXRvciBlbGVtZW50c1xuICAgIHRoaXMuJHNoaXBwaW5nVG9nZ2xlID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtY2FydHNoaXBwaW5nLXRvZ2dsZV0nKTtcbiAgICB0aGlzLiRzaGlwcGluZ1Jlc3BvbnNlID0gdGhpcy4kc2hpcHBpbmcuZmluZChcbiAgICAgICdbZGF0YS1jYXJ0c2hpcHBpbmctcmVzcG9uc2VdJyxcbiAgICApO1xuICAgIHRoaXMuJHNoaXBwaW5nUmVzcG9uc2VNZXNzYWdlID0gdGhpcy4kc2hpcHBpbmdSZXNwb25zZS5maW5kKFxuICAgICAgJ1tkYXRhLWNhcnRzaGlwcGluZy1tZXNzYWdlXScsXG4gICAgKTtcbiAgICB0aGlzLiRzaGlwcGluZ1Jlc3BvbnNlUmF0ZXMgPSB0aGlzLiRzaGlwcGluZ1Jlc3BvbnNlLmZpbmQoXG4gICAgICAnW2RhdGEtY2FydHNoaXBwaW5nLXJhdGVzXScsXG4gICAgKTtcbiAgICB0aGlzLiRzaGlwcGluZ1N1Ym1pdCA9IHRoaXMuJHNoaXBwaW5nLmZpbmQoJ1tkYXRhLWNhcnRzaGlwcGluZy1zdWJtaXRdJyk7XG5cbiAgICB0aGlzLiRmb3JtID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtY2FydC1mb3JtXScpO1xuICAgIHRoaXMuJGNoZWNrb3V0QnV0dG9ucyA9IHRoaXMuJGVsLmZpbmQoJ2J1dHRvbltuYW1lPVwiY2hlY2tvdXRcIl0nKTtcbiAgICB0aGlzLiR0b3RhbHMgPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1jYXJ0LXRvdGFsc10nKTtcblxuICAgIHRoaXMuX21vdmVUaXRsZVRvdGFsKCk7XG5cbiAgICBjb25zdCAkc2NyaXB0cyA9ICQoJ1tkYXRhLXNjcmlwdHNdJyk7XG5cbiAgICAkc2NyaXB0KCRzY3JpcHRzLmRhdGEoJ3Nob3BpZnktYXBpLXVybCcpLCAoKSA9PiB7XG4gICAgICB0aGlzLl9iaW5kRXZlbnRzKCk7XG5cbiAgICAgIHRoaXMuY2FydEl0ZW1zID0gdGhpcy5jYXJ0Lml0ZW1zLm1hcChsaW5lSXRlbSA9PiB7XG4gICAgICAgIGNvbnN0ICRlbCA9ICQoYFtkYXRhLWNhcnRpdGVtLWlkPVwiJHtsaW5lSXRlbS5pZH1cIl1gLCB0aGlzLiRlbCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDYXJ0SXRlbSgkZWwuZ2V0KDApLCBsaW5lSXRlbSwgdGhpcy5zZXR0aW5ncyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jYXJ0VG90YWxWYWx1ZSA9IHdpbmRvdy5hcGkudGhlbWUudXNlVmFsdWUoe1xuICAgICAgICBuYW1lOiAnY2FydDp0b3RhbCcsXG4gICAgICAgIGhhbmRsZXI6ICh7IHByaWNlIH0pID0+IHtcbiAgICAgICAgICB0aGlzLiR0b3RhbC5lYWNoKChpLCBlbCkgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLWNhcnQtdG90YWwnLCBwcmljZSk7XG4gICAgICAgICAgICBlbC5pbm5lckhUTUwgPSBTaG9waWZ5LmZvcm1hdE1vbmV5KFxuICAgICAgICAgICAgICBwcmljZSxcbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5tb25leV9mb3JtYXQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgQ3VycmVuY3lDb252ZXJ0ZXIudXBkYXRlKGVsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiB7XG4gICAgICAgICAgcHJpY2U6IHRoaXMuY2FydC50b3RhbF9wcmljZSxcbiAgICAgICAgICBjb21wYXJlX2F0X3ByaWNlOiB0aGlzLmNhcnQudG90YWxfcHJpY2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jYXJ0Q2hlY2tvdXRWYWx1ZSA9IHdpbmRvdy5hcGkudGhlbWUudXNlVmFsdWUoe1xuICAgICAgICBuYW1lOiAnY2FydDpjaGVja291dCcsXG4gICAgICAgIGhhbmRsZXI6IHZhbHVlID0+IHtcbiAgICAgICAgICB0aGlzLiRjaGVja291dEJ1dHRvbnMucHJvcCgnZGlzYWJsZWQnLCAhdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jYXJ0Tm90aWZpY2F0aW9uc0VsZW1lbnQgPSB3aW5kb3cuYXBpLnRoZW1lLnVzZUVsZW1lbnQoXG4gICAgICAgICdjYXJ0Om5vdGlmaWNhdGlvbnMnLFxuICAgICAgICBzZWN0aW9uLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNhcnQtbm90aWZpY2F0aW9uc10nKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmNhcnRUb29sc0VsZW1lbnQgPSB3aW5kb3cuYXBpLnRoZW1lLnVzZUVsZW1lbnQoXG4gICAgICAgICdjYXJ0OnRvb2xzJyxcbiAgICAgICAgc2VjdGlvbi5lbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1jYXJ0LXRvb2xzXScpLFxuICAgICAgKTtcblxuICAgICAgLy8gV2hlbiB0aGUgY2FydCBpcyBzdWJtaXR0ZWQsIHdlIHNob3VsZCBmaXJlIGFuIGV2ZW50IHRoYXQgY2FuIGJlIGNhbmNlbGxlZCBieSBpbnRlZ3JhdGlvbnNcbiAgICAgIHRoaXMuJGZvcm0ub24oJ3N1Ym1pdCcsIGV2ZW50ID0+IHdpbmRvdy5hcGkudGhlbWUudHJpZ2dlckV2ZW50KCdjYXJ0OmNoZWNrb3V0Jywge1xuICAgICAgICBjYW5jZWw6ICgpID0+IGV2ZW50LnByZXZlbn
1REZWZhdWx0KCksXG4gICAgICB9KSk7XG5cbiAgICAgIFNob3BpZnkub25FcnJvciA9IHRoaXMuX2hhbmRsZUVycm9ycy5iaW5kKHRoaXMpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtcyA9IG5ldyBGb3Jtcyh0aGlzLiRlbCk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHNlY3Rpb24gd2hlbiBvblNlY3Rpb25Mb2FkIGZpcmVzIHRvIHJlc3RvcmUgcHJpY2VzIHRvIGxvY2FsIGN1cnJlbmN5XG4gICAgdGhpcy4kZWwuZmluZCgnLm1vbmV5JykuZWFjaCgoaW5kZXgsIGVsKSA9PiBDdXJyZW5jeUNvbnZlcnRlci51cGRhdGUoZWwpKTtcblxuICAgIGlmICh0aGlzLnNldHRpbmdzLnNoaXBwaW5nICYmIHRoaXMuJHNoaXBwaW5nLmxlbmd0aCkge1xuICAgICAgJHNjcmlwdCgkc2NyaXB0cy5kYXRhKCdzaG9waWZ5LWNvdW50cmllcycpLCAoKSA9PiB7XG4gICAgICAgICRzY3JpcHQoJHNjcmlwdHMuZGF0YSgnc2hvcGlmeS1jb21tb24nKSwgKCkgPT4ge1xuICAgICAgICAgICRzY3JpcHQoJHNjcmlwdHMuZGF0YSgnc2hvcGlmeS1jYXJ0JyksICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRTaGlwcGluZ0NhbGMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblNlY3Rpb25VbmxvYWQoKSB7XG4gICAgdGhpcy5jYXJ0SXRlbXMuZm9yRWFjaChjYXJ0SXRlbSA9PiBjYXJ0SXRlbS51bmxvYWQoKSk7XG4gICAgdGhpcy5jYXJ0VG90YWxWYWx1ZS51bmxvYWQoKTtcbiAgICB0aGlzLmNhcnRDaGVja291dFZhbHVlLnVubG9hZCgpO1xuICAgIHRoaXMuY2FydE5vdGlmaWNhdGlvbnNFbGVtZW50LnVubG9hZCgpO1xuICAgIHRoaXMuY2FydFRvb2xzRWxlbWVudC51bmxvYWQoKTtcbiAgICB0aGlzLiRlbC5vZmYoJy5jYXJ0LXBhZ2UnKTtcbiAgICB0aGlzLiR3aW5kb3cub2ZmKCcuY2FydC1wYWdlJyk7XG4gICAgdGhpcy5mb3Jtcy51bmxvYWQoKTtcbiAgICB0aGlzLm1lc3NhZ2VCYW5uZXIudW5sb2FkKCk7XG4gICAgdGhpcy5tZXNzYWdlQmFubmVyLmRpc21pc3NCYW5uZXJzKCk7XG4gIH1cblxuICBfYmluZEV2ZW50cygpIHtcbiAgICB0aGlzLiRlbC5vbigna2V5ZG93bi5jYXJ0LXBhZ2UnLCAnW2RhdGEtY2FydGl0ZW0tcXVhbnRpdHldJywgZXZlbnQgPT4ge1xuICAgICAgdGhpcy5fcXVhbnRpdHlLZXlEb3duKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIC8qXG4gICAgICogVGhlcmUgYXJlIHR3byBbZGF0YS1jYXJ0aXRlbS1xdWFudGl0eV0gc2VsZWN0b3JzLlxuICAgICAqIFVzZSB0aGUgaW5wdXQgYXMgdGhlIHNvdXJjZSBvZiB0cnV0aCByYXRoZXIgdGhhbiB0aGUgc2VsZWN0XG4gICAgICogYmVjYXVzZSB0aGUgaW5wdXQgaGFzIGFuIGluZmluaXRlIHZhbHVlIHJhbmdlIHdoZXJlYXMgdGhlIHNlbGVjdFxuICAgICAqIGhhcyBhIGZpbml0ZSByYW5nZS5cbiAgICAgKi9cbiAgICB0aGlzLiRlbC5vbihcbiAgICAgICdjaGFuZ2UuY2FydC1wYWdlJyxcbiAgICAgICdbZGF0YS1jYXJ0aXRlbS1xdWFudGl0eV1bZGF0YS1xdWFudGl0eS1pbnB1dF0nLFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICB0aGlzLl9lZGl0SXRlbVF1YW50aXR5KGV2ZW50KTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuJGVsLm9uKCdjbGljay5jYXJ0LXBhZ2UnLCAnW2RhdGEtY2FydGl0ZW0tcmVtb3ZlXScsIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLl9lZGl0SXRlbVF1YW50aXR5KGV2ZW50LCB0cnVlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuJHdpbmRvdy5vbihcbiAgICAgICdyZXNpemUuY2FydC1wYWdlJyxcbiAgICAgIGRlYm91bmNlKCgpID0+IHRoaXMuX21vdmVUaXRsZVRvdGFsKCksIDIwKSxcbiAgICApO1xuICB9XG5cbiAgX21vdmVUaXRsZVRvdGFsKCkge1xuICAgIGlmICghdGhpcy4kdGl0bGVUb3RhbENvbnRlbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiR3aW5kb3cub3V0ZXJXaWR0aCgpID49IDQ4MCkge1xuICAgICAgaWYgKCEkLmNvbnRhaW5zKHRoaXMuJHRpdGxlVG90YWxMYXJnZVswXSwgdGhpcy4kdGl0bGVUb3RhbENvbnRlbnRzWzBdKSkge1xuICAgICAgICBjb25zdCAkZm9ybSA9IHRoaXMuJHRpdGxlVG90YWxDb250ZW50cy5kZXRhY2goKTtcbiAgICAgICAgdGhpcy4kdGl0bGVUb3RhbExhcmdlLmFwcGVuZCgkZm9ybSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICEkLmNvbnRhaW5zKHRoaXMuJHRpdGxlVG90YWxTbWFsbFswXSwgdGhpcy4kdGl0bGVUb3RhbENvbnRlbnRzWzBdKVxuICAgICkge1xuICAgICAgY29uc3QgJGZvcm0gPSB0aGlzLiR0aXRsZVRvdGFsQ29udGVudHMuZGV0YWNoKCk7XG4gICAgICB0aGlzLiR0aXRsZVRvdGFsU21hbGwuYXBwZW5kKCRmb3JtKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJldmVudCBmb3JtIHN1Ym1pc3Npb24gd2hlbiBwcmVzc2luZyBgZW50ZXJgIHdpdGhpbiBhIHF1YW50aXR5IHNlbGVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3F1YW50aXR5S2V5RG93bihldmVudCkge1xuICAgIC8vIE9ubHkgYmxvY2sgZW50ZXIga2V5c1xuICAgIGlmIChldmVudC5rZXlDb2RlICE9PSAxMykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEJsb2NrIGZvcm0gc3VibWlzc2lvbiwgYnV0IHVwZGF0ZSBmaWVsZFxuICAgICQoZXZlbnQuY3VycmVudFRhcmdldCkudHJpZ2dlcignY2hhbmdlJyk7XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiBpdGVtIHF1YW50aXR5IGNoYW5nZVxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHBhcmFtIHtCb29sZWFufSByZW1vdmUgLSBTZXQgYXMgdHJ1ZSB0byByZW1vdmUgY2FydCBpdGVtXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZWRpdEl0ZW1RdWFudGl0eShldmVudCwgcmVtb3ZlID0gZmFsc2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VCYW5uZXIuZGlzbWlzc0Jhbm5lcnMoKTtcblxuICAgIGNvbnN0ICR0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0ICRjYXJ0SXRlbSA9ICR0YXJnZXQuY2xvc2VzdCgnW2RhdGEtY2FydGl0ZW0taWRdJyk7XG5cbiAgICBsZXQgcXVhbnRpdHkgPSByZW1vdmUgPyAwIDogcGFyc2VJbnQoJHRhcmdldC52YWwoKSwgMTApO1xuICAgIHF1YW50aXR5ID0gTWF0aC5tYXgocXVhbnRpdHksIDApO1xuXG4gICAgdGhpcy5fdXBkYXRlQ2FydCgkY2FydEl0ZW0sIHF1YW50aXR5KTtcblxuICAgIC8vIFJlbW92ZSBpdGVtIGZyb20gY2FydCB2aXN1YWxseSBpZiBpdCBpcyBiZWluZyByZW1vdmVkXG4gICAgaWYgKHF1YW50aXR5ID09PSAwIHx8IHJlbW92ZSkge1xuICAgICAgJGNhcnRJdGVtLmhlaWdodCgkY2FydEl0ZW0uaGVpZ2h0KCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgY2FydCB3aXRoIGEgdmFsaWQgcXVhbnRpdHlcbiAgICpcbiAgICogQHBhcmFtICRjYXJ0SXRlbVxuICAgKiBAcGFyYW0gcXVhbnRpdHlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVDYXJ0KCRjYXJ0SXRlbSwgcXVhbnRpdHkpIHtcbiAgICBjb25zdCBpZCA9ICRjYXJ0SXRlbS5kYXRhKCdjYXJ0aXRlbS1pZCcpO1xuXG4gICAgLy8gTm90aWZ5IFNob3BpZnkgdXBkYXRlZCBpdGVtXG4gICAgU2hvcGlmeS5jaGFuZ2VJdGVtKGlkLCBxdWFudGl0eSwgcmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5fZGl
1kVXBkYXRlKGlkLCBxdWFudGl0eSwgcmVzcG9uc2UsICRjYXJ0SXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBfcXVhbnRpdHlFcnJvcihsaW1pdCwgdGl0bGUpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0aGlzLnNldHRpbmdzLnN0b2NrX2xpbWl0XG4gICAgICAucmVwbGFjZSgnKiogcXVhbnRpdHkgKionLCBsaW1pdClcbiAgICAgIC5yZXBsYWNlKCcqKiB0aXRsZSAqKicsIHRpdGxlKTtcblxuICAgIHRoaXMubWVzc2FnZUJhbm5lci5tZXNzYWdlKGVycm9yTWVzc2FnZSwgJ2Vycm9yJyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNhcnQgY29udGVudCBiYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIFNob3BpZnlcbiAgICpcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBxdWFudGl0eVxuICAgKiBAcGFyYW0gcmVzcG9uc2VcbiAgICogQHBhcmFtICRjYXJ0SXRlbVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kaWRVcGRhdGUoaWQsIHF1YW50aXR5LCByZXNwb25zZSwgJGNhcnRJdGVtKSB7XG4gICAgLy8gUmVsb2FkIHBhZ2UgaWYgYWxsIGl0ZW1zIGFyZSByZW1vdmVkIGZyb20gY2FydFxuICAgIGlmICghcmVzcG9uc2UuaXRlbXMubGVuZ3RoKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24gPSAnL2NhcnQnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdpbmRvdy5hcGkudGhlbWUudHJpZ2dlckV2ZW50KCdjYXJ0OnVwZGF0ZWQnLCB7IGNhbmNlbDogKCkgPT4ge30gfSk7XG5cbiAgICB0aGlzLmNhcnQgPSByZXNwb25zZTtcblxuICAgIHRoaXMuJGhlYWRlci50cmlnZ2VyKCdjYXJ0Y291bnQ6dXBkYXRlJywgeyByZXNwb25zZSB9KTtcblxuICAgIC8vIFVwZGF0ZSBhbGwgdG90YWxzIG9uIHRoZSBwYWdlIHdoZW4gdGhlIGNhcnQgaGFzIGJlZW4gdXBkYXRlZFxuICAgIHdpbmRvdy5hcGkudGhlbWUudXBkYXRlVmFsdWUoJ2NhcnQ6dG90YWwnLCB7XG4gICAgICBwcmljZTogdGhpcy5jYXJ0LnRvdGFsX3ByaWNlLFxuICAgICAgY29tcGFyZV9hdF9wcmljZTogdGhpcy5jYXJ0LnRvdGFsX3ByaWNlLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hcGkudGhlbWUudXBkYXRlVmFsdWUoJ2NhcnQ6Y2hlY2tvdXQnLCB0cnVlKTtcbiAgICB3aW5kb3cuYXBpLnRoZW1lLnVwZGF0ZUVsZW1lbnQoJ2NhcnQ6bm90aWZpY2F0aW9ucycpO1xuICAgIHdpbmRvdy5hcGkudGhlbWUudXBkYXRlRWxlbWVudCgnY2FydDp0b29scycpO1xuXG4gICAgLy8gU2VsZWN0IGl0ZW0gZnJvbSByZXNwb25zZVxuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSByZXNwb25zZS5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkID09PSBpZCk7XG5cbiAgICBpZiAoIWZpbHRlcmVkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAkY2FydEl0ZW0uYWRkQ2xhc3MoJ3JlbW92aW5nJykub25lKCd0cmVuZCcsICgpID0+IHtcbiAgICAgICAgJGNhcnRJdGVtLm9mZigndHJlbmQnKS5yZW1vdmUoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdpbmRvdy5hcGkudGhlbWUudXBkYXRlVmFsdWUoYGxpbmUtaXRlbToke2lkfTpwcmljZWAsIHtcbiAgICAgIHByaWNlOiB0aGlzLmNhcnQuaXRlbXMuZmlsdGVyKGxpbmVJdGVtID0+IGxpbmVJdGVtLmlkID09PSBpZClbMF1cbiAgICAgICAgLmxpbmVfcHJpY2UsXG4gICAgICBjb21wYXJlX2F0X3ByaWNlOiB0aGlzLmNhcnQuaXRlbXMuZmlsdGVyKFxuICAgICAgICBsaW5lSXRlbSA9PiBsaW5lSXRlbS5pZCA9PT0gaWQsXG4gICAgICApWzBdLm9yaWdpbmFsX2xpbmVfcHJpY2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjYXJ0SXRlbSA9IGZpbHRlcmVkSXRlbXNbMF07XG5cbiAgICBpZiAoY2FydEl0ZW0ucXVhbnRpdHkgIT09I
1HF1YW50aXR5KSB7XG4gICAgICB0aGlzLl9xdWFudGl0eUVycm9yKGNhcnRJdGVtLnF1YW50aXR5LCBjYXJ0SXRlbS50aXRsZSk7XG4gICAgICAkY2FydEl0ZW0uZmluZCgnW2RhdGEtcXVhbnRpdHktaW5wdXRdJykudmFsKGNhcnRJdGVtLnF1YW50aXR5KTtcbiAgICAgICRjYXJ0SXRlbS5maW5kKCdbZGF0YS1xdWFudGl0eS1zZWxlY3RdJykudmFsKGNhcnRJdGVtLnF1YW50aXR5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIEVycm9ycyByZXR1cm5lZCBmcm9tIFNob3BpZnlcbiAgICpcbiAgICogQHBhcmFtIGVycm9yc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUVycm9ycyhlcnJvcnMgPSBudWxsKSB7XG4gICAgaWYgKCFlcnJvcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaGlwcGluZ1Jlc3BvbnNlID0ge1xuICAgICAgbWVzc2FnZTogdGhpcy5zaGlwcGluZy5lcnJvcl9nZW5lcmFsLFxuICAgIH07XG5cbiAgICBpZiAoZXJyb3JzLnppcCAmJiBlcnJvcnMuemlwLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChcbiAgICAgICAgZXJyb3JzLnppcFswXS5pbmRleE9mKCdpcyBub3QgdmFsaWQnKSAhPT0gLTFcbiAgICAgICAgfHwgZXJyb3JzLnppcFswXS5pbmRleE9mKFwiY2FuJ3QgYmUgYmxhbmtcIikgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgc2hpcHBpbmdSZXNwb25zZS5tZXNzYWdlID0gYCR7dGhpcy5zaGlwcGluZy56aXB9ICR7ZXJyb3JzLnppcH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlcnJvcnMuZXJyb3IgJiYgZXJyb3JzLmVycm9yLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChlcnJvcnMuZXJyb3JbMF0uaW5kZXhPZignc2hpcG1lbnRfdG9vX2hlYXZ5JykgIT09IC0xKSB7XG4gICAgICAgIHNoaXBwaW5nUmVzcG9uc2UubWVzc2FnZSA9IHRoaXMuc2hpcHBpbmcuc2hpcG1lbnRfdG9vX2hlYXZ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZVNoaXBwaW5nUmVzcG9uc2Uoc2hpcHBpbmdSZXNwb25zZSk7XG4gIH1cblxuICBfaW5pdFNoaXBwaW5nQ2FsYygpIHtcbiAgICB0aGlzLl9iaW5kU2hpcHBpbmdDYWxjRXZlbnRzKCk7XG5cbiAgICBjb25zdCBjb3VudHJ5U2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkZHJlc3NfY291bnRyeScpO1xuICAgIGNvbnN0IHByb3ZpbmNlU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkZHJlc3NfcHJvdmluY2UnKTtcbiAgICBjb25zdCBwcm92aW5jZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgJ2FkZHJlc3NfcHJvdmluY2VfY29udGFpbmVyJyxcbiAgICApO1xuXG4gICAgdGhpcy5zaGlwcGluZ0NvdW50cnlQcm92aW5jZVNlbGVjdG9yID0gbmV3IENvdW50cnlQcm92aW5jZVNlbGVjdG9yKFxuICAgICAgY291bnRyeVNlbGVjdC5pbm5lckhUTUwsXG4gICAgKTtcblxuICAgIHRoaXMuc2hpcHBpbmdDb3VudHJ5UHJvdmluY2VTZWxlY3Rvci5idWlsZChjb3VudHJ5U2VsZWN0LCBwcm92aW5jZVNlbGVjdCwge1xuICAgICAgb25Db3VudHJ5Q2hhbmdlOiBwcm92aW5jZXMgPT4ge1xuICAgICAgICBpZiAocHJvdmluY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByb3ZpbmNlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3ZpbmNlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBcIlByb3ZpbmNlXCIsIFwiU3RhdGVcIiwgXCJSZWdpb25cIiwgZXRjLiBhbmQgXCJQb3N0YWwgQ29kZVwiLCBcIlpJUCBDb2RlXCIsIGV0Yy5cbiAgICAgICAgLy8gRXZlbiBjb3VudHJpZXMgd2l0aG91dCBwcm92aW5jZXMgaW5jbHVkZSBhIGxhYmVsLlxuICAgICAgICBjb25zdCB7IGxhYmVsLCB6aXBfbGFiZWwgfSA9IHdpbmRvdy5Db3VudHJpZXNbY291bnRyeVNlbGVjdC52YWx1ZV07XG4gICAgICAgIHByb3ZpbmNlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgJ2xhYmVsW2Zvcj1cImFkZHJlc3NfcHJvdmluY2VcIl0nLFxuICAgICAgICApLmlubmVySFRNTCA9IGxhYmVsO1xuICAgICAgICB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgJyNhZGRyZXNzX3ppcCB+IGxhYmVsW2Zvcj1cImFkZHJlc3NfemlwXCJdJyxcbiAgICAgICAgKS5pbm5lckhUTUwgPSB6aXBfbGFiZWw7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgX2JpbmRTaGlwcGluZ0NhbGNFdmVudHMoKSB7XG4gICAgdGhpcy4kZWwub24oJ2NsaWNrLmNhcnQtcGFnZScsICdbZGF0YS1jYXJ0c2hpcHBpbmctdG9nZ2xlXScsICgpID0+IHtcbiAgICAgIHRoaXMuX3RvZ2dsZVNoaXBwaW5nQ2FsYygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kZWwub24oJ2NsaWNrLmNhcnQtcGFnZScsICdbZGF0YS1jYXJ0c2hpcHBpbmctc3VibWl0XScsICgpID0+IHtcbiAgICAgIHRoaXMuX2dldFNoaXBwaW5nUmF0ZXMoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuJGVsLm9uKCdrZXlwcmVzcy5jYXJ0LXBhZ2UnLCAnI2FkZHJlc3NfemlwJywgZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEwIHx8IGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuJHNoaXBwaW5nU3VibWl0LnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBfdG9nZ2xlU2hpcHBpbmdDYWxjKCkge1xuICAgIGNvbnN0IG9sZFRleHQgPSB0aGlzLiRzaGlwcGluZ1RvZ2dsZS50ZXh0KCk7XG4gICAgY29uc3QgbmV3VGV4dCA9IHRoaXMuJHNoaXBwaW5nVG9nZ2xlLmRhdGEoJ2NhcnRzaGlwcGluZy10b2dnbGUnKTtcblxuICAgIHRoaXMuJHNoaXBwaW5nVG9nZ2xlLnRleHQobmV3VGV4dCkuZGF0YSgnY2FydHNoaXBwaW5nLXRvZ2dsZScsIG9sZFRleHQpO1xuXG4gICAgdGhpcy4kc2hpcHBpbmcudG9nZ2xlQ2xhc3MoJ29wZW4nKTtcbiAgfVxuXG4gIF9nZXRTaGlwcGluZ1JhdGVzKCkge1xuICAgIHRoaXMuX2Rpc2FibGVTaGlwcGluZ0J1dHRvbigpO1xuXG4gICAgY29uc3Qgc2hpcHBpbmdBZGRyZXNzID0ge307XG4gICAgc2hpcHBpbmdBZGRyZXNzLmNvdW50cnkgPSAkKCcjYWRkcmVzc19jb3VudHJ5JykudmFsKCkgfHwgJyc7XG4gICAgc2hpcHBpbmdBZGRyZXNzLnByb3ZpbmNlID0gJCgnI2FkZHJlc3NfcHJvdmluY2UnKS52YWwoKSB8fCAnJztcbiAgICBzaGlwcGluZ0FkZHJlc3MuemlwID0gJ
1CgnI2FkZHJlc3NfemlwJykudmFsKCkgfHwgJyc7XG5cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKHNoaXBwaW5nQWRkcmVzcylcbiAgICAgIC5tYXAoXG4gICAgICAgIGtleSA9PiBgJHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgICAgYHNoaXBwaW5nX2FkZHJlc3NbJHtrZXl9XWAsXG4gICAgICAgICl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNoaXBwaW5nQWRkcmVzc1trZXldKX1gLFxuICAgICAgKVxuICAgICAgLmpvaW4oJyYnKTtcblxuICAgICQuYWpheChgL2NhcnQvc2hpcHBpbmdfcmF0ZXMuanNvbj8ke3F1ZXJ5U3RyaW5nfWAsIHsgZGF0YVR5cGU6ICdqc29uJyB9KVxuICAgICAgLmZhaWwoZXJyb3IgPT4gdGhpcy5faGFuZGxlRXJyb3JzKGVycm9yLnJlc3BvbnNlSlNPTiB8fCB7fSkpXG4gICAgICAuZG9uZShyZXNwb25zZSA9PiB7XG4gICAgICAgIGNvbnN0IHJhdGVzID0gcmVzcG9uc2Uuc2hpcHBpbmdfcmF0ZXM7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NCYXNlID0gW107XG5cbiAgICAgICAgaWYgKHNoaXBwaW5nQWRkcmVzcy56aXAubGVuZ3RoKSB7XG4gICAgICAgICAgYWRkcmVzc0Jhc2UucHVzaChzaGlwcGluZ0FkZHJlc3MuemlwLnRyaW0oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hpcHBpbmdBZGRyZXNzLnByb3ZpbmNlLmxlbmd0aCkge1xuICAgICAgICAgIGFkZHJlc3NCYXNlLnB1c2goc2hpcHBpbmdBZGRyZXNzLnByb3ZpbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaGlwcGluZ0FkZHJlc3MuY291bnRyeS5sZW5ndGgpIHtcbiAgICAgICAgICBhZGRyZXNzQmFzZS5wdXNoKHNoaXBwaW5nQWRkcmVzcy5jb3VudHJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSBhZGRyZXNzQmFzZS5qb2luKCcsICcpO1xuXG4gICAgICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgICAgIGlmIChyYXRlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RSYXRlID0gd2luZG93LlNob3BpZnkuZm9ybWF0TW9uZXkoXG4gICAgICAgICAgICByYXRlc1swXS5wcmljZSxcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MubW9uZXlGb3JtYXQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBtZXNzYWdlID0gdGhpcy5zaGlwcGluZy5tdWx0aXBsZV9yYXRlc1xuICAgICAgICAgICAgLnJlcGxhY2UoJyphZGRyZXNzKicsIGFkZHJlc3MpXG4gICAgICAgICAgICAucmVwbGFjZSgnKm51bWJlcl9vZl9yYXRlcyonLCByYXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAucmVwbGFjZSgnKnJhdGUqJywgYDxzcGFuIGNsYXNzPVwibW9uZXlcIj4ke2ZpcnN0UmF0ZX08L3NwYW4+YCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IHRoaXMuc2hpcHBpbmcub25lX3JhdGUucmVwbGFjZSgnKmFkZHJlc3MqJywgYWRkcmVzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZSA9IHRoaXMuc2hpcHBpbmcubm9fcmF0ZXM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByYXRlc0xpc3QgPSByYXRlcy5tYXAocmF0ZSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJpY2UgPSB3aW5kb3cuU2hvcGlmeS5mb3JtYXRNb25leShcbiAgICAgICAgICAgIHJhdGUucHJpY2UsXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLm1vbmV5Rm9ybWF0LFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcmF0ZVZhbHVlID0gdGhpcy5zaGlwcGluZy5yYXRlX3ZhbHVlXG4gICAgICAgICAgICAucmVwbGFjZSgnKnJhdGVfdGl0bGUqJywgcmF0ZS5uYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoJypyYXRlKicsIGA8c3BhbiBjbGFzcz1cIm1vbmV5XCI+JHtwcmljZX08L3NwYW4+YCk7XG5cbiAgICAgICAgICByZXR1cm4gYDxsaT4ke3JhdGVWYWx1ZX08L2xpPmA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2hhbmRsZVNoaXBwaW5nUmVzcG9uc2Uoe1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgcmF0ZXM6IHJhdGVzTGlzdCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIF9lbmFibGVTaGlwcGluZ0J1dHRvbigpIHtcbiAgICB0aGlzLiRzaGlwcGluZ1N1Ym1pdFxuICAgICAgLnRleHQodGhpcy5zaGlwcGluZy5jYWxjdWxhdGVfc2hpcHBpbmcpXG4gICAgICAuYXR0cignZGlzYWJsZWQnLCBmYWxzZSk7XG4gIH1cblxuICBfZGlzYWJsZVNoaXBwaW5nQnV0dG9uKCkge1xuICAgIHRoaXMuJHNoaXBwaW5nU3VibWl0LnRleHQodGhpcy5zaGlwcGluZy5jYWxjdWxhdGluZykuYXR0cignZGlzYWJsZWQnLCB0cnVlKTtcbiAgfVxuXG4gIF9zaG93U2hpcHBpbmdSZXNwb25zZSgpIHtcbiAgICB0aGlzLiRzaGlwcGluZ1Jlc3BvbnNlLmFkZENsYXNzKCd2aXNpYmxlJyk7XG4gIH1cblxuICBfaGlkZVNoaXBwaW5nUmVzcG9uc2UoKSB7XG4gICAgdGhpcy4kc2hpcHBpbmdSZXNwb25zZS5yZW1vdmVDbGFzcygndmlzaWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzaGlwcGluZyByZXNwb25zZXNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHNoaXBwaW5nUmVzcG9uc2VcbiAgICogQHByb3BlcnR5IHtTdHJpbmd9IHNoaXBwaW5nUmVzcG9uc2UubWVzc2FnZXMgLSBFcnJvciAvIFN1Y2Nlc3MgbWVzc2FnZVxuICAgKiBAcHJvcGVydHkge0FycmF5fFN0cmluZ30gc2hpcHBpbmdSZXNwb25zZS5yYXRlcyAtIFNoaXBwaW5nIHJhdGVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGFuZGxlU2hpcHBpbmdSZXNwb25zZShzaGlwcGluZ1Jlc3BvbnNlID0ge30pIHtcbiAgICAvLyBIaWRlIHRoZSByZXNwb25zZSBzbyB0aGF0IGl0IGNhbiBiZSBwb3B1bGF0ZWQgc21vb3RobHlcbiAgICB0aGlzLl9oaWRlU2hpcHBpbmdSZXNwb25zZSgpO1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IHNoaXBwaW5nUmVzcG9uc2UubWVzc2FnZSB8fCBudWxsO1xuICAgIGNvbnN0IHJhdGVzID0gc2hpcHBpbmdSZXNwb25zZS5yYXRlcyB8fCBudWxsO1xuXG4gICAgLy8gRW1wdHkgb3V0IGNvbnRlbnRzXG4gICAgdGhpcy4kc2hpcHBpbmdSZXNwb25zZU1lc3NhZ2UuZW1wdHkoKTtcbiAgICB0aGlzLiRzaGlwcGluZ1Jlc3BvbnNlUmF0ZXMuZW1wdHkoKTtcblxuICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICB0aGlzLiRzaGlwcGluZ1Jlc3BvbnNlTWVz
1c2FnZVxuICAgICAgICAuaHRtbChtZXNzYWdlKVxuICAgICAgICAuZmluZCgnLm1vbmV5JylcbiAgICAgICAgLmVhY2goKGluZGV4LCBtb25leSkgPT4gQ3VycmVuY3lDb252ZXJ0ZXIudXBkYXRlKG1vbmV5KSk7XG4gICAgfVxuXG4gICAgaWYgKHJhdGVzKSB7XG4gICAgICB0aGlzLiRzaGlwcGluZ1Jlc3BvbnNlUmF0ZXNcbiAgICAgICAgLmh0bWwocmF0ZXMpXG4gICAgICAgIC5maW5kKCcubW9uZXknKVxuICAgICAgICAuZWFjaCgoaW5kZXgsIG1vbmV5KSA9PiBDdXJyZW5jeUNvbnZlcnRlci51cGRhdGUobW9uZXkpKTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCB0aGUgY2FsY3VsYXRpbmcgYnV0dG9uIHNvIGl0IGNhbiBiZSB1c2VkIGFnYWluXG4gICAgdGhpcy5fZW5hYmxlU2hpcHBpbmdCdXR0b24oKTtcblxuICAgIC8vIE5vIGVycm9yIHByb3ZpZGVkXG4gICAgaWYgKCFtZXNzYWdlICYmICFyYXRlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNob3cgdGhlIHJlc3BvbnNlXG4gICAgdGhpcy5fc2hvd1NoaXBwaW5nUmVzcG9uc2UoKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticCart.js\n")},
1"./source/scripts/sections/StaticCollection.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return StaticCollection; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var rimg_shopify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rimg-shopify */ \"./node_modules/rimg-shopify/dist/index.es.js\");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shopify-currency-converter */ \"./node_modules/shopify-currency-converter/dist/index.js\");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var shopify_asyncview__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shopify-asyncview */ \"./node_modules/shopify-asyncview/dist/index.es.js\");\n/* harmony import */ var intersection_observer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! intersection-observer */ \"./node_modules/intersection-observer/intersection-observer.js\");\n/* harmony import */ var intersection_observer__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(intersection_observer__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _helpers_ProductReviews__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../helpers/ProductReviews */ \"./source/scripts/helpers/ProductReviews.js\");\n/* harmony import */ var _components_ProductGridItem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/ProductGridItem */ \"./source/scripts/components/ProductGridItem.js\");\n/* harmony import */ var _components_RecentlyViewed__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/RecentlyViewed */ \"./source/scripts/components/RecentlyViewed.js\");\n/* harmony import */ var _components_Modal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/Modal */ \"./source/scripts/components/Modal.js\");\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to de
1structure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\n\n\n\n\n\n\nfunction decodeUrlQueryParams(url) {\n var queryParamsString = new RegExp(/.*\\?([^#]+)/).exec(url);\n var queryParams = {};\n\n if (queryParamsString && queryParamsString.length >= 2) {\n queryParamsString[1].split('&').forEach(function (param) {\n var _param$split = param.split('='),\n _param$split2 = _slicedToArray(_param$split, 2),\
1n key = _param$split2[0],\n value = _param$split2[1];\n\n queryParams[decodeURIComponent(key)] = decodeURIComponent(value);\n });\n }\n\n return queryParams;\n}\n\nfunction sanitizeQueryParams(params) {\n var sanitizedParams = params;\n\n if (_typeof(sanitizedParams) !== 'object') {\n throw new Error('params is not of type Object');\n }\n\n if ('page' in sanitizedParams && sanitizedParams.page === 1) {\n delete sanitizedParams.page;\n }\n\n if ('view' in sanitizedParams) {\n if (sanitizedParams.view.indexOf('_ajax-collection-') !== -1) {\n sanitizedParams.view = sanitizedParams.view.replace('_ajax-collection-', '');\n }\n\n if (sanitizedParams.view === '_ajax-collection') {\n delete sanitizedParams.view;\n }\n }\n\n return sanitizedParams;\n}\n\nvar StaticCollection =\n/*#__PURE__*/\nfunction () {\n function StaticCollection(section) {\n _classCallCheck(this, StaticCollection);\n\n this.id = section.id;\n this.el = section.el;\n this.context = section.data.context;\n this.events = [];\n this.processing = false;\n this.queryParams = _objectSpread({}, decodeUrlQueryParams(window.location.search));\n this.filtersContent = '[data-productgrid-filters-content]';\n this.sortContent = '[data-productgrid-sort-content]';\n this.$sortTrigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-productgrid-trigger-sort]', this.el);\n this.$showbyTrigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-show-by]', this.el);\n this.$sortTriggerButton = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-productgrid-trigger-sort-button]', this.el);\n this.$sortTriggerModal = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-productgrid-modal-sort]', this.el);\n this.$filtersTrigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-productgrid-trigger-filters]', this.el);\n this.$additionalTags = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-filter-toggle]', this.el);\n this.$allTags = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"\".concat(this.filtersContent, \" .filter-item a:not([data-filter-toggle])\"), this.el);\n this.$viewToggle = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-collection-view]', this.el);\n this.$gridContainer = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.productgrid--outer', this.el);\n this.$gridTagLinks = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.filter-item--grid a, .filter-item--grid-simple a', this.el);\n this.$paginationLinks = jquery__WEBPACK_IMPORTED_MODULE_0___default()('a.pagination--item', this.el);\n this.sidebarContainer = this.el.querySelector('.productgrid--sidebar');\n this.responseContainer = this.el.querySelector('.results--container');\n this.clickToLoadTrigger = this.el.querySelector('[data-click-to-load]');\n this.clickToLoad = this.el.querySelector('.click-to-load');\n this.infiniteScrollTrigger = this.el.querySelector('[data-infinite-scroll]');\n this.infiniteScroll = this.el.querySelector('.infinite-scroll');\n this.productGrid = this.responseContainer.querySelector('.productgrid--items');\n this.paginationContainer = this.responseContainer.querySelector('.pagination--container:not(.visually-hidden)');\n this._changeSortingButton = this._changeSortingButton.bind(this);\n this._activateTag = this._activateTag.bind(this);\n this._toggleTags = this._toggleTags.bind(this);\n this._toggleView = this._toggleView.bind(this); // Ajax Search functions\n\n this._ajaxFilter = this._ajaxFilter.bind(this);\n this.modal = new _components_Modal__WEBPACK_IMPORTED_MODULE_8__[\"default\"]();\n this.recentlyViewed = new _components_RecentlyViewed__WEBPACK_IMPORTED_MODULE_7__[\"default\"](section);\n\n if (window.history.scrollRestoration && (this.infiniteScroll || this.clickToLoad)) {\n window.history.scrollRestoration = 'manual';\n }\n\n this._initProductItems(this.productGrid.querySelectorAll('[data-product-item]'));\n\n this._bindEvents();\n }\n\n _createClass(StaticCollection, [{\n key: \"onSectionUnload\",\n value: function onSectionUnload() {\n this.events.forEac
1h(function ($el) {\n return $el.off('.collection');\n });\n this.modal.unload();\n this.recentlyViewed.unload();\n this.productItems.forEach(function (productItem) {\n productItem.unload();\n });\n }\n }, {\n key: \"_initProductItems\",\n value: function _initProductItems(productEls) {\n this.productItems = [];\n\n for (var i = 0; i < productEls.length; i++) {\n var productItem = productEls[i];\n this.productItems.push(new _components_ProductGridItem__WEBPACK_IMPORTED_MODULE_6__[\"default\"]({\n $el: jquery__WEBPACK_IMPORTED_MODULE_0___default()(productItem),\n id: this.id,\n product: JSON.parse(productItem.querySelector('[data-product-data]').innerHTML),\n queryParams: this.queryParams\n }));\n var moneyEls = productItem.querySelectorAll('.money');\n\n for (var j = 0; j < moneyEls.length; j++) {\n shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2___default.a.update(moneyEls[j]);\n }\n }\n\n if (jquery__WEBPACK_IMPORTED_MODULE_0___default()('.spr-badge', this.el)) {\n Object(_helpers_ProductReviews__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n }\n }\n /**\n * Style a tag as active after click, before page transition\n *\n * @param event\n * @private\n */\n\n }, {\n key: \"_activateTag\",\n value: function _activateTag(event) {\n if (this.processing) {\n event.preventDefault();\n return;\n }\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.target).closest('.filter-item').toggleClass('filter-item--active').toggleClass('filter-item--inactive');\n\n this._ajaxFilter(event);\n }\n /**\n * Expand / Collapse additional tags in the sidebar\n *\n * @param event\n * @private\n */\n\n }, {\n key: \"_toggleTags\",\n value: function _toggleTags(event) {\n event.preventDefault();\n\n if (this.processing) {\n return;\n }\n\n var $trigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget);\n var $items = $trigger.parent().siblings('[data-hidden-default]');\n var siblingsVisible = $trigger.data('filter-toggle');\n $items.toggleClass('filter-item--hidden', siblingsVisible);\n $trigger.data('filter-toggle', !siblingsVisible).text(!siblingsVisible ? this.context.see_less : this.context.see_more);\n\n if (this.modal.isOpen()) {\n this.modal.position();\n }\n }\n /**\n * Sort by opens a modal on mobile, this handles button events\n *\n * @param event\n * @private\n */\n\n }, {\n key: \"_changeSortingButton\",\n value: function _changeSortingButton(event) {\n if (this.processing) {\n return;\n }\n\n var activeClass = 'utils-sortby--modal-button--active';\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget).addClass(activeClass).parent().siblings().find(\".\".concat(activeClass)).removeClass(activeClass);\n\n this._ajaxFilter(event);\n }\n /**\n * Toggle grid or list view\n *\n */\n\n }, {\n key: \"_toggleView\",\n value: function _toggleView(event) {\n var _this = this;\n\n var view = event.currentTarget.getAttribute('data-collection-view');\n this.queryParams.grid_list = view;\n\n this._updateView(this.queryParams.grid_list);\n\n this._updateHistory(window.location.pathname);\n\n if (this.productItems.length) {\n this.productItems.forEach(function (productItem) {\n productItem.handleViewChange(_this.queryParams.grid_list);\n });\n }\n }\n }, {\n key: \"_updateView\",\n value: function _updateView() {\n var view = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'grid-view';\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.utils-viewtoggle-button', this.el).removeClass('active');\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-collection-view=\".concat(view, \"]\")).addClass('active');\n var className = view.replace('-', '');\n\n if (className === 'listview') {\n this.$gridContainer.removeClass('productgrid-gri
1dview');\n } else {\n this.$gridContainer.removeClass('productgrid-listview');\n }\n\n this.$gridContainer.addClass(\"productgrid-\".concat(className));\n }\n /* AJAX search functions */\n\n }, {\n key: \"_setProcessing\",\n value: function _setProcessing() {\n var processing = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'filter';\n this.processing = processing;\n\n if (processing) {\n if (type === 'filter') {\n var y = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).scrollTop();\n\n if (y >= 310) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({\n scrollTop: y - 300\n }, 150).animate({\n scrollTop: 10\n }, 0).animate({\n scrollTop: 0\n }, 150);\n } else {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({\n scrollTop: 0\n }, 150);\n }\n }\n\n if (this.sidebarContainer) {\n this.sidebarContainer.classList.add(\"processing--\".concat(type));\n }\n\n this.responseContainer.classList.add(\"processing--\".concat(type));\n } else {\n if (this.sidebarContainer) {\n this.sidebarContainer.classList.add(\"processing--\".concat(type));\n }\n\n this.responseContainer.classList.remove(\"processing--\".concat(type));\n }\n }\n /**\n * Retrieve the template containing filtered product items and tags via AJAX\n */\n\n }, {\n key: \"_ajaxFilter\",\n value: function _ajaxFilter(event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.processing === true) {\n return;\n }\n\n var target = event.currentTarget;\n var fetchUrl = window.location.pathname;\n this.queryParams.page = 1;\n\n if (target.hasAttribute('data-show-by')) {\n // 'Show by' - number of products per page\n this.queryParams.view = target.getAttribute('data-show-by');\n } else if (target.hasAttribute('data-productgrid-trigger-sort') || target.hasAttribute('data-productgrid-trigger-sort-button')) {\n // Sortby select/button\n this.queryParams.sort_by = jquery__WEBPACK_IMPORTED_MODULE_0___default()(target).val();\n } else if (target.hasAttribute('data-to-page')) {\n // Pagination link\n this.queryParams.page = target.getAttribute('data-to-page');\n } else {\n // Filter links\n var href = target.getAttribute('href');\n var queryParams = decodeUrlQueryParams(href);\n delete this.queryParams.constraint;\n\n if (queryParams.constraint) {\n this.queryParams.constraint = queryParams.constraint;\n }\n\n fetchUrl = href.replace(/\\?[^#]+/, '');\n }\n\n this._ajaxFetch(fetchUrl, 'filter');\n }\n }, {\n key: \"_ajaxPagination\",\n value: function _ajaxPagination() {\n var infiniteScroll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n this.queryParams.page = infiniteScroll ? this.infiniteScrollTrigger.getAttribute('data-to-page') : this.clickToLoadTrigger.getAttribute('data-to-page');\n\n this._ajaxFetch(window.location.pathname, 'pagination');\n }\n }, {\n key: \"_ajaxFetch\",\n value: function _ajaxFetch(url, type) {\n var _this2 = this;\n\n // Trigger UI processing state\n this._setProcessing(true, type);\n\n this.queryParams = sanitizeQueryParams(this.queryParams);\n\n var params = _objectSpread({}, this.queryParams);\n\n params.view = this.queryParams.view ? \"_ajax-collection-\".concat(this.queryParams.view) : '_ajax-collection';\n shopify_asyncview__WEBPACK_IMPORTED_MODULE_3__[\"default\"].load(url, params).then(function (_ref) {\n var html = _ref.html;\n\n if (type === 'pagination') {\n var fragment = document.createDocumentFragment();\n var productItems = document.createElement('div');\n productItems.innerHTML = html.productgridItems;\n\n while (productItems.firstChild) {\n fragment.appendChild(productItems.firstChild);\n }\n\n var newProductItems = fragment.querySelectorAll('[data-product-item]');\n\n _this2.productGrid.appendChild(fragment);\n\n _this2._initProductItems(newProductItems);\n\n _this2.paginationContainer.innerHTML = html.pagination;\n }
1 else {\n _this2.productItems.forEach(function (item) {\n return item.unload();\n });\n\n _this2.responseContainer.innerHTML = html.productgrid;\n\n _this2._initProductItems(_this2.responseContainer.querySelectorAll('[data-product-item]'));\n\n if (_this2.sidebarContainer) {\n _this2.sidebarContainer.innerHTML = html.sidebar;\n }\n }\n\n _this2._updateView(_this2.queryParams.grid_list);\n\n rimg_shopify__WEBPACK_IMPORTED_MODULE_1__[\"default\"].watch(_this2.responseContainer);\n\n if (_this2.modal.isOpen()) {\n _this2.modal.close();\n }\n\n _this2._updateHistory(url); // Update link bindings with new DOM elements\n\n\n _this2._updateLinkBindings();\n\n _this2._bindEvents(); // Once it's all updated, update the UI to show processing is complete\n\n\n _this2._setProcessing(false, type);\n });\n }\n /**\n * Unbind AJAX events for links no longer on the page, and bind new links\n */\n\n }, {\n key: \"_updateLinkBindings\",\n value: function _updateLinkBindings() {\n this.events.forEach(function ($el) {\n return $el.off('.collection');\n });\n this.$gridTagLinks = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.filter-item--grid a, .filter-item--grid-simple a', this.el);\n this.$additionalTags = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-filter-toggle]', this.el);\n this.$viewToggle = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-collection-view]', this.el);\n this.$filtersTrigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-productgrid-trigger-filters]', this.el);\n this.$sortTriggerModal = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-productgrid-modal-sort]', this.el);\n this.$sortTrigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-productgrid-trigger-sort]', this.el);\n this.$sortTriggerButton = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-productgrid-trigger-sort-button]', this.el);\n this.$showbyTrigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-show-by]', this.el);\n this.$paginationLinks = jquery__WEBPACK_IMPORTED_MODULE_0___default()('a.pagination--item', this.el);\n this.$allTags = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"\".concat(this.filtersContent, \" .filter-item a:not([data-filter-toggle])\"), this.el);\n this.clickToLoad = this.el.querySelector('.click-to-load');\n this.clickToLoadTrigger = this.el.querySelector('[data-click-to-load]');\n this.infiniteScrollTrigger = this.el.querySelector('[data-infinite-scroll]');\n this.infiniteScroll = this.el.querySelector('.infinite-scroll');\n this.productGrid = this.responseContainer.querySelector('.productgrid--items');\n this.paginationContainer = this.responseContainer.querySelector('.pagination--container:not(.visually-hidden)');\n }\n /**\n * Bind filter link click events to new ajax functionality\n */\n\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents() {\n var _this$events,\n _this3 = this;\n\n var links = this.$gridTagLinks.get().concat(this.$showbyTrigger.get());\n\n (_this$events = this.events).push.apply(_this$events, _toConsumableArray(links.map(function (el) {\n return jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).on('click.collection', _this3._ajaxFilter);\n })));\n\n this.events.push(this.$sortTrigger.on('change.collection', this._ajaxFilter), this.$viewToggle.on('click.collection', this._toggleView), this.$filtersTrigger.on('click.collection', function () {\n return _this3.modal.open(_this3.filtersContent, 'productgrid-filters');\n }), this.$allTags.on('click.collection', this._activateTag), this.$additionalTags.on('click.collection', this._toggleTags), this.$sortTriggerModal.on('click.collection', function () {\n return _this3.modal.open(_this3.sortContent, 'productgrid-sort');\n }), this.$sortTriggerButton.on('click.collection', this._changeSortingButton));\n\n if (this.infiniteScrollTrigger) {\n var observer = new IntersectionObserver(function (entries) {\n entr
1ies.forEach(function (entry) {\n if (entry.intersectionRatio > 0) {\n _this3._ajaxPagination(true);\n }\n });\n });\n observer.observe(this.infiniteScrollTrigger);\n } else if (this.clickToLoad) {\n this.events.push(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.clickToLoadTrigger).on('click.collection', function () {\n return _this3._ajaxPagination(false);\n }));\n } else {\n this.events.push(this.$paginationLinks.on('click.collection', this._ajaxFilter));\n }\n }\n /**\n * Update the page URL so users can link to their particular search\n */\n\n }, {\n key: \"_updateHistory\",\n value: function _updateHistory(url) {\n var _this4 = this;\n\n if (window.Shopify && window.Shopify.designMode || !window.history.pushState) {\n return;\n }\n\n var querylessHref = url.replace(/\\?[^#]+/, '');\n var href = querylessHref.replace(/([^#]+)(.*)/, function (match, address, hash) {\n return \"\".concat(address, \"?\").concat(Object.keys(_this4.queryParams).sort().map(function (key) {\n return \"\".concat(encodeURIComponent(key), \"=\").concat(encodeURIComponent(_this4.queryParams[key]));\n }).join('&')).concat(hash);\n });\n\n if (window.top.location.href !== href) {\n window.history.pushState({}, '', href);\n }\n }\n }]);\n\n return StaticCollection;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNDb2xsZWN0aW9uLmpzP2YzM2YiXSwibmFtZXMiOlsiZGVjb2RlVXJsUXVlcnlQYXJhbXMiLCJ1cmwiLCJxdWVyeVBhcmFtc1N0cmluZyIsIlJlZ0V4cCIsImV4ZWMiLCJxdWVyeVBhcmFtcyIsImxlbmd0aCIsInNwbGl0IiwiZm9yRWFjaCIsInBhcmFtIiwia2V5IiwidmFsdWUiLCJkZWNvZGVVUklDb21wb25lbnQiLCJzYW5pdGl6ZVF1ZXJ5UGFyYW1zIiwicGFyYW1zIiwic2FuaXRpemVkUGFyYW1zIiwiRXJyb3IiLCJwYWdlIiwidmlldyIsImluZGV4T2YiLCJyZXBsYWNlIiwiU3RhdGljQ29sbGVjdGlvbiIsInNlY3Rpb24iLCJpZCIsImVsIiwiY29udGV4dCIsImRhdGEiLCJldmVudHMiLCJwcm9jZXNzaW5nIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJmaWx0ZXJzQ29udGVudCIsInNvcnRDb250ZW50IiwiJHNvcnRUcmlnZ2VyIiwiJCIsIiRzaG93YnlUcmlnZ2VyIiwiJHNvcnRUcmlnZ2VyQnV0dG9uIiwiJHNvcnRUcmlnZ2VyTW9kYWwiLCIkZmlsdGVyc1RyaWdnZXIiLCIkYWRkaXRpb25hbFRhZ3MiLCIkYWxsVGFncyIsIiR2aWV3VG9nZ2xlIiwiJGdyaWRDb250YWluZXIiLCIkZ3JpZFRhZ0xpbmtzIiwiJHBhZ2luYXRpb25MaW5rcyIsInNpZGViYXJDb250YWluZXIiLCJxdWVyeVNlbGVjdG9yIiwicmVzcG9uc2VDb250YWluZXIiLCJjbGlja1RvTG9hZFRyaWdnZXIiLCJjbGlja1RvTG9hZCIsImluZmluaXRlU2Nyb2xsVHJpZ2dlciIsImluZmluaXRlU2Nyb2xsIiwicHJvZHVjdEdyaWQiLCJwYWdpbmF0aW9uQ29udGFpbmVyIiwiX2NoYW5nZVNvcnRpbmdCdXR0b24iLCJiaW5kIiwiX2FjdGl2YXRlVGFnIiwiX3RvZ2dsZVRhZ3MiLCJfdG9nZ2xlVmlldyIsIl9hamF4RmlsdGVyIiwibW9kYWwiLCJNb2RhbCIsInJlY2VudGx5Vmlld2VkIiwiUmVjZW50bHlWaWV3ZWQiLCJoaXN0b3J5Iiwic2Nyb2xsUmVzdG9yYXRpb24iLCJfaW5pdFByb2R1Y3RJdGVtcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJfYmluZEV2ZW50cyIsIiRlbCIsIm9mZiIsInVubG9hZCIsInByb2R1Y3RJdGVtcyIsInByb2R1Y3RJdGVtIiwicHJvZHVjdEVscyIsImkiLCJwdXNoIiwiUHJvZHVjdEdyaWRJdGVtIiwicHJvZHVjdCIsIkpTT04iLCJwYXJzZSIsImlubmVySFRNTCIsIm1vbmV5RWxzIiwiaiIsIkN1cnJlbmN5Q29udmVydGVyIiwidXBkYXRlIiwiaW5pdFNob3BpZnlQcm9kdWN0UmV2aWV3cyIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJ0YXJnZXQiLCJjbG9zZXN0IiwidG9nZ2xlQ2xhc3MiLCIkdHJpZ2dlciIsImN1cnJlbnRUYXJnZXQiLCIkaXRlbXMiLCJwYXJlbnQiLCJzaWJsaW5ncyIsInNpYmxpbmdzVmlzaWJsZSIsInRleHQiLCJzZWVfbGVzcyIsInNlZV9tb3JlIiwiaXNPcGVuIiwicG9zaXRpb24iLCJhY3RpdmVDbGFzcyIsImFkZENsYXNzIiwiZmluZCIsInJlbW92ZUNsYXNzIiwiZ2V0QXR0cmlidXRlIiwiZ3JpZF9saXN0IiwiX3VwZGF0ZVZpZXciLCJfdXBkYXRlSGlzdG9yeSIsInBhdGhuYW1lIiwiaGFuZGxlVmlld0NoYW5nZSIsImNsYXNzTmFtZSIsInR5cGUiLCJ5Iiwic2Nyb2xsVG9wIiwiYW5pbWF0ZSIsImNsYXNzTGlzdCIsImFkZCIsInJlbW92ZSIsInN0b3BQcm9wYWdhdGlvbiIsImZldGNoVXJsIiwiaGFzQXR0cmlidXRlIiwic29ydF9ieSIsInZhbCIsImhyZWYiLCJjb25zdHJhaW50IiwiX2FqYXhGZXRjaCIsIl9zZXRQcm9jZXNzaW5nIiwiQXN5bmNWaWV3IiwibG9hZCIsInRoZW4iLCJodG1sIiwiZnJhZ21lbnQiLCJkb2N1bWVudCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJjcmVhdGVFbGVtZW50IiwicHJvZHVjdGdyaWRJdGVtcyIsImZpcnN0Q2hpbGQiLCJhcHBlbmRDaGlsZCIsIm5ld1Byb2R1Y3RJdGVtcyIsInBhZ2luYXRpb24iLCJpdGVtIiwicHJvZHVjdGdyaWQiLCJzaWRlYmFyIiwicmltZyIsIndhdGNoIiwiY2xvc2UiLCJfdXBkYXRlTGlua0JpbmRpbmdzIiwibGlua3MiLCJnZXQiLCJ
1jb25jYXQiLCJtYXAiLCJvbiIsIm9wZW4iLCJvYnNlcnZlciIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiZW50cmllcyIsImVudHJ5IiwiaW50ZXJzZWN0aW9uUmF0aW8iLCJfYWpheFBhZ2luYXRpb24iLCJvYnNlcnZlIiwiU2hvcGlmeSIsImRlc2lnbk1vZGUiLCJwdXNoU3RhdGUiLCJxdWVyeWxlc3NIcmVmIiwibWF0Y2giLCJhZGRyZXNzIiwiaGFzaCIsIk9iamVjdCIsImtleXMiLCJzb3J0IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsInRvcCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBU0Esb0JBQVQsQ0FBOEJDLEdBQTlCLEVBQW1DO0FBQ2pDLE1BQU1DLGlCQUFpQixHQUFHLElBQUlDLE1BQUosQ0FBVyxhQUFYLEVBQTBCQyxJQUExQixDQUErQkgsR0FBL0IsQ0FBMUI7QUFDQSxNQUFNSSxXQUFXLEdBQUcsRUFBcEI7O0FBRUEsTUFBSUgsaUJBQWlCLElBQUlBLGlCQUFpQixDQUFDSSxNQUFsQixJQUE0QixDQUFyRCxFQUF3RDtBQUN0REoscUJBQWlCLENBQUMsQ0FBRCxDQUFqQixDQUFxQkssS0FBckIsQ0FBMkIsR0FBM0IsRUFBZ0NDLE9BQWhDLENBQXdDLFVBQUFDLEtBQUssRUFBSTtBQUFBLHlCQUMxQkEsS0FBSyxDQUFDRixLQUFOLENBQVksR0FBWixDQUQwQjtBQUFBO0FBQUEsVUFDeENHLEdBRHdDO0FBQUEsVUFDbkNDLEtBRG1DOztBQUcvQ04saUJBQVcsQ0FBQ08sa0JBQWtCLENBQUNGLEdBQUQsQ0FBbkIsQ0FBWCxHQUF1Q0Usa0JBQWtCLENBQUNELEtBQUQsQ0FBekQ7QUFDRCxLQUpEO0FBS0Q7O0FBRUQsU0FBT04sV0FBUDtBQUNEOztBQUVELFNBQVNRLG1CQUFULENBQTZCQyxNQUE3QixFQUFxQztBQUNuQy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VBQU1DLGFBQWEsR0FBR3RLLEdBQUcsQ0FBQ21CLE9BQUosQ0FBWSxTQUFaLEVBQXVCLEVBQXZCLENBQXRCO0FBQ0EsVUFBTTJHLElBQUksR0FBR3dDLGFBQWEsQ0FBQ25KLE9BQWQsQ0FDWCxhQURXLEVBRVgsVUFBQ29KLEtBQUQsRUFBUUMsT0FBUixFQUFpQkMsSUFBakI7QUFBQSx5QkFBNkJELE9BQTdCLGNBQXdDRSxNQUFNLENBQUNDLElBQVAsQ0FBWSxNQUFJLENBQUN2SyxXQUFqQixFQUNyQ3dLLElBRHFDLEdBRXJDbkIsR0FGcUMsQ0FHcEMsVUFBQWhKLEdBQUc7QUFBQSwyQkFBT29LLGtCQUFrQixDQUFDcEssR0FBRCxDQUF6QixjQUFrQ29LLGtCQUFrQixDQUNyRCxNQUFJLENBQUN6SyxXQUFMLENBQWlCSyxHQUFqQixDQURxRCxDQUFwRDtBQUFBLFNBSGlDLEVBT3JDcUssSUFQcUMsQ0FPaEMsR0FQZ0MsQ0FBeEMsU0FPZUwsSUFQZjtBQUFBLE9BRlcsQ0FBYjs7QUFZQSxVQUFJN0ksTUFBTSxDQUFDbUosR0FBUCxDQUFXbEosUUFBWCxDQUFvQmlHLElBQXBCLEtBQTZCQSxJQUFqQyxFQUF1QztBQUNyQ2xHLGNBQU0sQ0FBQ29DLE9BQVAsQ0FBZXFHLFNBQWYsQ0FBeUIsRUFBekIsRUFBNkIsRUFBN0IsRUFBaUN2QyxJQUFqQztBQUNEO0FBQ0YiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNDb2xsZWN0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCByaW1nIGZyb20gJ3JpbWctc2hvcGlmeSc7XG5pbXBvcnQgQ3VycmVuY3lDb252ZXJ0ZXIgZnJvbSAnc2hvcGlmeS1jdXJyZW5jeS1jb252ZXJ0ZXInO1xuaW1wb3J0IEFzeW5jVmlldyBmcm9tICdzaG9waWZ5LWFzeW5jdmlldyc7XG5pbXBvcnQgJ2ludGVyc2VjdGlvbi1vYnNlcnZlcic7XG5cbmltcG9ydCBpbml0U2hvcGlmeVByb2R1Y3RSZXZpZXdzIGZyb20gJy4uL2hlbHBlcnMvUHJvZHVjdFJldmlld3MnO1xuaW1wb3J0IFByb2R1Y3RHcmlkSXRlbSBmcm9tICcuLi9jb21wb25lbnRzL1Byb2R1Y3RHcmlkSXRlbSc7XG5pbXBvcnQgUmVjZW50bHlWaWV3ZWQgZnJvbSAnLi4vY29tcG9uZW50cy9SZWNlbnRseVZpZXdlZCc7XG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vY29tcG9uZW50cy9Nb2RhbCc7XG5cbmZ1bmN0aW9uIGRlY29kZVVybFF1ZXJ5UGFyYW1zKHVybCkge1xuICBjb25zdCBxdWVyeVBhcmFtc1N0cmluZyA9IG5ldyBSZWdFeHAoLy4qXFw/KFteI10rKS8pLmV4ZWModXJsKTtcbiAgY29uc3QgcXVlcnlQYXJhbXMgPSB7fTtcblxuICBpZiAocXVlcnlQYXJhbXNTdHJpbmcgJiYgcXVlcnlQYXJhbXNTdHJpbmcubGVuZ3RoID49IDIpIHtcbiAgICBxdWVyeVBhcmFtc1N0cmluZ1sxXS5zcGxpdCgnJicpLmZvckVhY2gocGFyYW0gPT4ge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFyYW0uc3BsaXQoJz0nKTtcblxuICAgICAgcXVlcnlQYXJhbXNbZGVjb2RlVVJJQ29tcG9uZW50KGtleSldID0gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybi
1BxdWVyeVBhcmFtcztcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVRdWVyeVBhcmFtcyhwYXJhbXMpIHtcbiAgY29uc3Qgc2FuaXRpemVkUGFyYW1zID0gcGFyYW1zO1xuXG4gIGlmICh0eXBlb2Ygc2FuaXRpemVkUGFyYW1zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFyYW1zIGlzIG5vdCBvZiB0eXBlIE9iamVjdCcpO1xuICB9XG5cbiAgaWYgKCdwYWdlJyBpbiBzYW5pdGl6ZWRQYXJhbXMgJiYgc2FuaXRpemVkUGFyYW1zLnBhZ2UgPT09IDEpIHtcbiAgICBkZWxldGUgc2FuaXRpemVkUGFyYW1zLnBhZ2U7XG4gIH1cblxuICBpZiAoJ3ZpZXcnIGluIHNhbml0aXplZFBhcmFtcykge1xuICAgIGlmIChzYW5pdGl6ZWRQYXJhbXMudmlldy5pbmRleE9mKCdfYWpheC1jb2xsZWN0aW9uLScpICE9PSAtMSkge1xuICAgICAgc2FuaXRpemVkUGFyYW1zLnZpZXcgPSBzYW5pdGl6ZWRQYXJhbXMudmlldy5yZXBsYWNlKFxuICAgICAgICAnX2FqYXgtY29sbGVjdGlvbi0nLFxuICAgICAgICAnJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNhbml0aXplZFBhcmFtcy52aWV3ID09PSAnX2FqYXgtY29sbGVjdGlvbicpIHtcbiAgICAgIGRlbGV0ZSBzYW5pdGl6ZWRQYXJhbXMudmlldztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2FuaXRpemVkUGFyYW1zO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0aWNDb2xsZWN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2VjdGlvbikge1xuICAgIHRoaXMuaWQgPSBzZWN0aW9uLmlkO1xuICAgIHRoaXMuZWwgPSBzZWN0aW9uLmVsO1xuICAgIHRoaXMuY29udGV4dCA9IHNlY3Rpb24uZGF0YS5jb250ZXh0O1xuICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge1xuICAgICAgLi4uZGVjb2RlVXJsUXVlcnlQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksXG4gICAgfTtcblxuICAgIHRoaXMuZmlsdGVyc0NvbnRlbnQgPSAnW2RhdGEtcHJvZHVjdGdyaWQtZmlsdGVycy1jb250ZW50XSc7XG4gICAgdGhpcy5zb3J0Q29udGVudCA9ICdbZGF0YS1wcm9kdWN0Z3JpZC1zb3J0LWNvbnRlbnRdJztcbiAgICB0aGlzLiRzb3J0VHJpZ2dlciA9ICQoJ1tkYXRhLXByb2R1Y3RncmlkLXRyaWdnZXItc29ydF0nLCB0aGlzLmVsKTtcbiAgICB0aGlzLiRzaG93YnlUcmlnZ2VyID0gJCgnW2RhdGEtc2hvdy1ieV0nLCB0aGlzLmVsKTtcbiAgICB0aGlzLiRzb3J0VHJpZ2dlckJ1dHRvbiA9ICQoXG4gICAgICAnW2RhdGEtcHJvZHVjdGdyaWQtdHJpZ2dlci1zb3J0LWJ1dHRvbl0nLFxuICAgICAgdGhpcy5lbCxcbiAgICApO1xuICAgIHRoaXMuJHNvcnRUcmlnZ2VyTW9kYWwgPSAkKCdbZGF0YS1wcm9kdWN0Z3JpZC1tb2RhbC1zb3J0XScsIHRoaXMuZWwpO1xuICAgIHRoaXMuJGZpbHRlcnNUcmlnZ2VyID0gJCgnW2RhdGEtcHJvZHVjdGdyaWQtdHJpZ2dlci1maWx0ZXJzXScsIHRoaXMuZWwpO1xuICAgIHRoaXMuJGFkZGl0aW9uYWxUYWdzID0gJCgnW2RhdGEtZmlsdGVyLXRvZ2dsZV0nLCB0aGlzLmVsKTtcbiAgICB0aGlzLiRhbGxUYWdzID0gJChcbiAgICAgIGAke3RoaXMuZmlsdGVyc0NvbnRlbnR9IC5maWx0ZXItaXRlbSBhOm5vdChbZGF0YS1maWx0ZXItdG9nZ2xlXSlgLFxuICAgICAgdGhpcy5lbCxcbiAgICApO1xuICAgIHRoaXMuJHZpZXdUb2dnbGUgPSAkKCdbZGF0YS1jb2xsZWN0aW9uLXZpZXddJywgdGhpcy5lbCk7XG4gICAgdGhpcy4kZ3JpZENvbnRhaW5lciA9ICQoJy5wcm9kdWN0Z3JpZC0tb3V0ZXInLCB0aGlzLmVsKTtcbiAgICB0aGlzLiRncmlkVGFnTGlua3MgPSAkKFxuICAgICAgJy5maWx0ZXItaXRlbS0tZ3JpZCBhLCAuZmlsdGVyLWl0ZW0tLWdyaWQtc2ltcGxlIGEnLFxuICAgICAgdGhpcy5lbCxcbiAgICApO1xuICAgIHRoaXMuJHBhZ2luYXRpb25MaW5rcyA9ICQoJ2EucGFnaW5hdGlvbi0taXRlbScsIHRoaXMuZWwpO1xuICAgIHRoaXMuc2lkZWJhckNvbnRhaW5lciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLnByb2R1Y3RncmlkLS1zaWRlYmFyJyk7XG4gICAgdGhpcy5yZXNwb25zZUNvbnRhaW5lciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLnJlc3VsdHMtLWNvbnRhaW5lcicpO1xuICAgIHRoaXMuY2xpY2tUb0xvYWRUcmlnZ2VyID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1jbGljay10by1sb2FkXScpO1xuICAgIHRoaXMuY2xpY2tUb0xvYWQgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJy5jbGljay10by1sb2FkJyk7XG4gICAgdGhpcy5pbmZpbml0ZVNjcm9sbFRyaWdnZXIgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnW2RhdGEtaW5maW5pdGUtc2Nyb2xsXScsXG4gICAgKTtcbiAgICB0aGlzLmluZmluaXRlU2Nyb2xsID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuaW5maW5pdGUtc2Nyb2xsJyk7XG4gICAgdGhpcy5wcm9kdWN0R3JpZCA9IHRoaXMucmVzcG9uc2VDb250YWluZXIucXVlcnlTZWxlY3RvcihcbiAgICAgICcucHJvZHVjdGdyaWQtLWl0ZW1zJyxcbiAgICApO1xuICAgIHRoaXMucGFnaW5hdGlvbkNvbnRhaW5lciA9IHRoaXMucmVzcG9uc2VDb250YWluZXIucXVlcnlTZWxlY3RvcihcbiAgICAgICcucGFnaW5hdGlvbi0tY29udGFpbmVyOm5vdCgudmlzdWFsbHktaGlkZGVuKScsXG4gICAgKTtcblxuICAgIHRoaXMuX2NoYW5nZVNvcnRpbmdCdXR0b24gPSB0aGlzLl9jaGFuZ2VTb3J0aW5nQnV0dG9uLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fYWN0aXZhdGVUYWcgPSB0aGlzLl9hY3RpdmF0ZVRhZy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX3RvZ2dsZVRhZ3MgPSB0aGlzLl90b2dnbGVUYWdzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fdG9nZ2xlVmlldyA9IHRoaXMuX3RvZ2dsZVZpZXcuYmluZCh0aGlzKTtcblxuICAgIC8vIEFqYXggU2VhcmNoIGZ1bmN0aW9uc1xuICAgIHRoaXMuX2FqYXhGaWx0ZXIgPSB0aGlzLl9hamF4RmlsdGVyLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLm1vZGFsID0gbmV3IE1vZGFsKCk7XG4gICAgdGhpcy5yZWNlbnRseVZpZXdlZCA9IG5ldyBSZWNlbnRseVZpZXdlZChzZWN0aW9uKTtcblxuICAgIGlmIChcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uXG4gICAgICAmJiAodGhpcy5pbmZpbml0ZVNjcm9sbCB8fCB0aGlzLmNsaWNrVG9Mb2FkKVxuICAgICkge1xuICAgICAgd2luZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSAnbWFudWFsJztcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0UHJvZHVjdEl0ZW1zKHRoaXMucHJvZHVjdEdyaWQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtcHJvZHVjdC1pdGVtXScpKTtcbiAgICB0aGlzLl9iaW5kRXZlbnRzKCk7XG4gIH1cblxuICBvblNlY3Rpb25VbmxvYWQoKSB7XG4gICAgdGhpcy5ldmVudHMuZm9yRWFjaCgkZWwgPT4gJGVsLm9mZignLmNvbGxlY3Rpb24nKSk7XG5cbiAgICB0aGlzLm1vZGFsLnVubG9hZCgpO1xuICAgIHRoaXMucmVjZW50bHlWaWV3ZWQudW5sb2FkKCk7XG5cbiAgICB0aGlzLnByb2R1Y3RJdGVtcy5mb3JFYWNoKHByb2R1Y3RJdGVtID0+IHtcbiAgICAgIHByb2R1Y3RJdGVtLnVubG9hZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgX2luaXRQcm9kdWN0SXRlbXMocHJvZHVjdEVscykge1xuICAgIHRoaXMucHJvZHVjdEl0ZW1zID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb2R1Y3RFbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHByb2R1Y3RJdGVtID0gcHJvZHVjdEVsc1tpXTtcbiAgICAgIHRoaXMucHJvZHVjdEl0ZW1zLnB1c2goXG4gICAgICAgIG5ldyBQcm9kdWN0R3JpZEl0ZW0oe1xuICAgICAgICAgICRlbDogJChwcm9kdWN0SXRlbSksXG4gICAgICAgICAgaWQ6IHR
1oaXMuaWQsXG4gICAgICAgICAgcHJvZHVjdDogSlNPTi5wYXJzZShcbiAgICAgICAgICAgIHByb2R1Y3RJdGVtLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXByb2R1Y3QtZGF0YV0nKS5pbm5lckhUTUwsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICBjb25zdCBtb25leUVscyA9IHByb2R1Y3RJdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tb25leScpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vbmV5RWxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIEN1cnJlbmN5Q29udmVydGVyLnVwZGF0ZShtb25leUVsc1tqXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCQoJy5zcHItYmFkZ2UnLCB0aGlzLmVsKSkge1xuICAgICAgaW5pdFNob3BpZnlQcm9kdWN0UmV2aWV3cygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdHlsZSBhIHRhZyBhcyBhY3RpdmUgYWZ0ZXIgY2xpY2ssIGJlZm9yZSBwYWdlIHRyYW5zaXRpb25cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWN0aXZhdGVUYWcoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICQoZXZlbnQudGFyZ2V0KVxuICAgICAgLmNsb3Nlc3QoJy5maWx0ZXItaXRlbScpXG4gICAgICAudG9nZ2xlQ2xhc3MoJ2ZpbHRlci1pdGVtLS1hY3RpdmUnKVxuICAgICAgLnRvZ2dsZUNsYXNzKCdmaWx0ZXItaXRlbS0taW5hY3RpdmUnKTtcblxuICAgIHRoaXMuX2FqYXhGaWx0ZXIoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZCAvIENvbGxhcHNlIGFkZGl0aW9uYWwgdGFncyBpbiB0aGUgc2lkZWJhclxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90b2dnbGVUYWdzKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCAkdHJpZ2dlciA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgJGl0ZW1zID0gJHRyaWdnZXIucGFyZW50KCkuc2libGluZ3MoJ1tkYXRhLWhpZGRlbi1kZWZhdWx0XScpO1xuICAgIGNvbnN0IHNpYmxpbmdzVmlzaWJsZSA9ICR0cmlnZ2VyLmRhdGEoJ2ZpbHRlci10b2dnbGUnKTtcblxuICAgICRpdGVtcy50b2dnbGVDbGFzcygnZmlsdGVyLWl0ZW0tLWhpZGRlbicsIHNpYmxpbmdzVmlzaWJsZSk7XG4gICAgJHRyaWdnZXJcbiAgICAgIC5kYXRhKCdmaWx0ZXItdG9nZ2xlJywgIXNpYmxpbmdzVmlzaWJsZSlcbiAgICAgIC50ZXh0KCFzaWJsaW5nc1Zpc2libGUgPyB0aGlzLmNvbnRleHQuc2VlX2xlc3MgOiB0aGlzLmNvbnRleHQuc2VlX21vcmUpO1xuXG4gICAgaWYgKHRoaXMubW9kYWwuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMubW9kYWwucG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU29ydCBieSBvcGVucyBhIG1vZGFsIG9uIG1vYmlsZSwgdGhpcyBoYW5kbGVzIGJ1dHRvbiBldmVudHNcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hhbmdlU29ydGluZ0J1dHRvbihldmVudCkge1xuICAgIGlmICh0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVDbGFzcyA9ICd1dGlscy1zb3J0YnktLW1vZGFsLWJ1dHRvbi0tYWN0aXZlJztcblxuICAgICQoZXZlbnQuY3VycmVudFRhcmdldClcbiAgICAgIC5hZGRDbGFzcyhhY3RpdmVDbGFzcylcbiAgICAgIC5wYXJlbnQoKVxuICAgICAgLnNpYmxpbmdzKClcbiAgICAgIC5maW5kKGAuJHthY3RpdmVDbGFzc31gKVxuICAgICAgLnJlbW92ZUNsYXNzKGFjdGl2ZUNsYXNzKTtcblxuICAgIHRoaXMuX2FqYXhGaWx0ZXIoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBncmlkIG9yIGxpc3Qgdmlld1xuICAgKlxuICAgKi9cbiAgX3RvZ2dsZVZpZXcoZXZlbnQpIHtcbiAgICBjb25zdCB2aWV3ID0gZXZlbnQuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sbGVjdGlvbi12aWV3Jyk7XG4gICAgdGhpcy5xdWVyeVBhcmFtcy5ncmlkX2xpc3QgPSB2aWV3O1xuXG4gICAgdGhpcy5fdXBkYXRlVmlldyh0aGlzLnF1ZXJ5UGFyYW1zLmdyaWRfbGlzdCk7XG4gICAgdGhpcy5fdXBkYXRlSGlzdG9yeSh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpO1xuICAgIGlmICh0aGlzLnByb2R1Y3RJdGVtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucHJvZHVjdEl0ZW1zLmZvckVhY2gocHJvZHVjdEl0ZW0gPT4ge1xuICAgICAgICBwcm9kdWN0SXRlbS5oYW5kbGVWaWV3Q2hhbmdlKHRoaXMucXVlcnlQYXJhbXMuZ3JpZF9saXN0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVWaWV3KHZpZXcgPSAnZ3JpZC12aWV3Jykge1xuICAgICQoJy51dGlscy12aWV3dG9nZ2xlLWJ1dHRvbicsIHRoaXMuZWwpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAkKGBbZGF0YS1jb2xsZWN0aW9uLXZpZXc9JHt2aWV3fV1gKS5hZGRDbGFzcygnYWN0aXZlJyk7XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB2aWV3LnJlcGxhY2UoJy0nLCAnJyk7XG5cbiAgICBpZiAoY2xhc3NOYW1lID09PSAnbGlzdHZpZXcnKSB7XG4gICAgICB0aGlzLiRncmlkQ29udGFpbmVyLnJlbW92ZUNsYXNzKCdwcm9kdWN0Z3JpZC1ncmlkdmlldycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiRncmlkQ29udGFpbmVyLnJlbW92ZUNsYXNzKCdwcm9kdWN0Z3JpZC1saXN0dmlldycpO1xuICAgIH1cblxuICAgIHRoaXMuJGdyaWRDb250YWluZXIuYWRkQ2xhc3MoYHByb2R1Y3RncmlkLSR7Y2xhc3NOYW1lfWApO1xuICB9XG5cbiAgLyogQUpBWCBzZWFyY2ggZnVuY3Rpb25zICovXG4gIF9zZXRQcm9jZXNzaW5nKHByb2Nlc3NpbmcgPSB0cnVlLCB0eXBlID0gJ2ZpbHRlcicpIHtcbiAgICB0aGlzLnByb2Nlc3NpbmcgPSBwcm9jZXNzaW5nO1xuXG4gICAgaWYgKHByb2Nlc3NpbmcpIHtcbiAgICAgIGlmICh0eXBlID09PSAnZmlsdGVyJykge1xuICAgICAgICBjb25zdCB5ID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpO1xuICAgICAgICBpZiAoeSA+PSAzMTApIHtcbiAgICAgICAgICAkKCdodG1sLCBib2R5JylcbiAgICAgICAgICAgIC5hbmltYXRlKHsgc2Nyb2xsVG9wOiB5IC0gMzAwIH0sIDE1MClcbiAgICAgICAgICAgIC5hbmltYXRlKHsgc2Nyb2xsVG9wOiAxMCB9LCAwKVxuICAgICAgICAgICAgLmFuaW1hdGUoeyBzY3JvbGxUb3A6IDAgfSwgMTUwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7IHNjcm9sbFRvcDogMCB9LCAxNTApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnNpZGViYXJDb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5zaWRlYmFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoYHByb2Nlc3NpbmctLSR7dHlwZX1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzcG9uc2VDb250YWluZXIuY2xhc3NMaXN0LmFkZChgcHJvY2Vzc2luZy0tJHt0eXBlfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zaWRlYmFyQ29udGFpbmVyKSB7XG4gICAgICAgI
1HRoaXMuc2lkZWJhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKGBwcm9jZXNzaW5nLS0ke3R5cGV9YCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlc3BvbnNlQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoYHByb2Nlc3NpbmctLSR7dHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHRlbXBsYXRlIGNvbnRhaW5pbmcgZmlsdGVyZWQgcHJvZHVjdCBpdGVtcyBhbmQgdGFncyB2aWEgQUpBWFxuICAgKi9cbiAgX2FqYXhGaWx0ZXIoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMucHJvY2Vzc2luZyA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgbGV0IGZldGNoVXJsID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG4gICAgdGhpcy5xdWVyeVBhcmFtcy5wYWdlID0gMTtcblxuICAgIGlmICh0YXJnZXQuaGFzQXR0cmlidXRlKCdkYXRhLXNob3ctYnknKSkge1xuICAgICAgLy8gJ1Nob3cgYnknIC0gbnVtYmVyIG9mIHByb2R1Y3RzIHBlciBwYWdlXG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1zLnZpZXcgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXNob3ctYnknKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1wcm9kdWN0Z3JpZC10cmlnZ2VyLXNvcnQnKVxuICAgICAgfHwgdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1wcm9kdWN0Z3JpZC10cmlnZ2VyLXNvcnQtYnV0dG9uJylcbiAgICApIHtcbiAgICAgIC8vIFNvcnRieSBzZWxlY3QvYnV0dG9uXG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1zLnNvcnRfYnkgPSAkKHRhcmdldCkudmFsKCk7XG4gICAgfSBlbHNlIGlmICh0YXJnZXQuaGFzQXR0cmlidXRlKCdkYXRhLXRvLXBhZ2UnKSkge1xuICAgICAgLy8gUGFnaW5hdGlvbiBsaW5rXG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1zLnBhZ2UgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXRvLXBhZ2UnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmlsdGVyIGxpbmtzXG4gICAgICBjb25zdCBocmVmID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBkZWNvZGVVcmxRdWVyeVBhcmFtcyhocmVmKTtcblxuICAgICAgZGVsZXRlIHRoaXMucXVlcnlQYXJhbXMuY29uc3RyYWludDtcbiAgICAgIGlmIChxdWVyeVBhcmFtcy5jb25zdHJhaW50KSB7XG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXMuY29uc3RyYWludCA9IHF1ZXJ5UGFyYW1zLmNvbnN0cmFpbnQ7XG4gICAgICB9XG5cbiAgICAgIGZldGNoVXJsID0gaHJlZi5yZXBsYWNlKC9cXD9bXiNdKy8sICcnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9hamF4RmV0Y2goZmV0Y2hVcmwsICdmaWx0ZXInKTtcbiAgfVxuXG4gIF9hamF4UGFnaW5hdGlvbihpbmZpbml0ZVNjcm9sbCA9IGZhbHNlKSB7XG4gICAgdGhpcy5xdWVyeVBhcmFtcy5wYWdlID0gaW5maW5pdGVTY3JvbGxcbiAgICAgID8gdGhpcy5pbmZpbml0ZVNjcm9sbFRyaWdnZXIuZ2V0QXR0cmlidXRlKCdkYXRhLXRvLXBhZ2UnKVxuICAgICAgOiB0aGlzLmNsaWNrVG9Mb2FkVHJpZ2dlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtdG8tcGFnZScpO1xuXG4gICAgdGhpcy5fYWpheEZldGNoKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgJ3BhZ2luYXRpb24nKTtcbiAgfVxuXG4gIF9hamF4RmV0Y2godXJsLCB0eXBlKSB7XG4gICAgLy8gVHJpZ2dlciBVSSBwcm9jZXNzaW5nIHN0YXRlXG4gICAgdGhpcy5fc2V0UHJvY2Vzc2luZyh0cnVlLCB0eXBlKTtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gc2FuaXRpemVRdWVyeVBhcmFtcyh0aGlzLnF1ZXJ5UGFyYW1zKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIC4uLnRoaXMucXVlcnlQYXJhbXMsXG4gICAgfTtcblxuICAgIHBhcmFtcy52aWV3ID0gdGhpcy5xdWVyeVBhcmFtcy52aWV3XG4gICAgICA/IGBfYWpheC1jb2xsZWN0aW9uLSR7dGhpcy5xdWVyeVBhcmFtcy52aWV3fWBcbiAgICAgIDogJ19hamF4LWNvbGxlY3Rpb24nO1xuXG4gICAgQXN5bmNWaWV3LmxvYWQodXJsLCBwYXJhbXMpLnRoZW4oKHsgaHRtbCB9KSA9PiB7XG4gICAgICBpZiAodHlwZSA9PT0gJ3BhZ2luYXRpb24nKSB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICBjb25zdCBwcm9kdWN0SXRlbXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgICBwcm9kdWN0SXRlbXMuaW5uZXJIVE1MID0gaHRtbC5wcm9kdWN0Z3JpZEl0ZW1zO1xuXG4gICAgICAgIHdoaWxlIChwcm9kdWN0SXRlbXMuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHByb2R1Y3RJdGVtcy5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdQcm9kdWN0SXRlbXMgPSBmcmFnbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICdbZGF0YS1wcm9kdWN0LWl0ZW1dJyxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wcm9kdWN0R3JpZC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgICAgIHRoaXMuX2luaXRQcm9kdWN0SXRlbXMobmV3UHJvZHVjdEl0ZW1zKTtcblxuICAgICAgICB0aGlzLnBhZ2luYXRpb25Db250YWluZXIuaW5uZXJIVE1MID0gaHRtbC5wYWdpbmF0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0SXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0udW5sb2FkKCkpO1xuICAgICAgICB0aGlzLnJlc3BvbnNlQ29udGFpbmVyLmlubmVySFRNTCA9IGh0bWwucHJvZHVjdGdyaWQ7XG4gICAgICAgIHRoaXMuX2luaXRQcm9kdWN0SXRlbXMoXG4gICAgICAgICAgdGhpcy5yZXNwb25zZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1wcm9kdWN0LWl0ZW1dJyksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2lkZWJhckNvbnRhaW5lcikge1xuICAgICAgICAgI
1HRoaXMuc2lkZWJhckNvbnRhaW5lci5pbm5lckhUTUwgPSBodG1sLnNpZGViYXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fdXBkYXRlVmlldyh0aGlzLnF1ZXJ5UGFyYW1zLmdyaWRfbGlzdCk7XG5cbiAgICAgIHJpbWcud2F0Y2godGhpcy5yZXNwb25zZUNvbnRhaW5lcik7XG5cbiAgICAgIGlmICh0aGlzLm1vZGFsLmlzT3BlbigpKSB7XG4gICAgICAgIHRoaXMubW9kYWwuY2xvc2UoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdXBkYXRlSGlzdG9yeSh1cmwpO1xuXG4gICAgICAvLyBVcGRhdGUgbGluayBiaW5kaW5ncyB3aXRoIG5ldyBET00gZWxlbWVudHNcbiAgICAgIHRoaXMuX3VwZGF0ZUxpbmtCaW5kaW5ncygpO1xuICAgICAgdGhpcy5fYmluZEV2ZW50cygpO1xuXG4gICAgICAvLyBPbmNlIGl0J3MgYWxsIHVwZGF0ZWQsIHVwZGF0ZSB0aGUgVUkgdG8gc2hvdyBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlXG4gICAgICB0aGlzLl9zZXRQcm9jZXNzaW5nKGZhbHNlLCB0eXBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmJpbmQgQUpBWCBldmVudHMgZm9yIGxpbmtzIG5vIGxvbmdlciBvbiB0aGUgcGFnZSwgYW5kIGJpbmQgbmV3IGxpbmtzXG4gICAqL1xuICBfdXBkYXRlTGlua0JpbmRpbmdzKCkge1xuICAgIHRoaXMuZXZlbnRzLmZvckVhY2goJGVsID0+ICRlbC5vZmYoJy5jb2xsZWN0aW9uJykpO1xuXG4gICAgdGhpcy4kZ3JpZFRhZ0xpbmtzID0gJChcbiAgICAgICcuZmlsdGVyLWl0ZW0tLWdyaWQgYSwgLmZpbHRlci1pdGVtLS1ncmlkLXNpbXBsZSBhJyxcbiAgICAgIHRoaXMuZWwsXG4gICAgKTtcbiAgICB0aGlzLiRhZGRpdGlvbmFsVGFncyA9ICQoJ1tkYXRhLWZpbHRlci10b2dnbGVdJywgdGhpcy5lbCk7XG4gICAgdGhpcy4kdmlld1RvZ2dsZSA9ICQoJ1tkYXRhLWNvbGxlY3Rpb24tdmlld10nLCB0aGlzLmVsKTtcbiAgICB0aGlzLiRmaWx0ZXJzVHJpZ2dlciA9ICQoJ1tkYXRhLXByb2R1Y3RncmlkLXRyaWdnZXItZmlsdGVyc10nLCB0aGlzLmVsKTtcbiAgICB0aGlzLiRzb3J0VHJpZ2dlck1vZGFsID0gJCgnW2RhdGEtcHJvZHVjdGdyaWQtbW9kYWwtc29ydF0nLCB0aGlzLmVsKTtcbiAgICB0aGlzLiRzb3J0VHJpZ2dlciA9ICQoJ1tkYXRhLXByb2R1Y3RncmlkLXRyaWdnZXItc29ydF0nLCB0aGlzLmVsKTtcbiAgICB0aGlzLiRzb3J0VHJpZ2dlckJ1dHRvbiA9ICQoXG4gICAgICAnW2RhdGEtcHJvZHVjdGdyaWQtdHJpZ2dlci1zb3J0LWJ1dHRvbl0nLFxuICAgICAgdGhpcy5lbCxcbiAgICApO1xuICAgIHRoaXMuJHNob3dieVRyaWdnZXIgPSAkKCdbZGF0YS1zaG93LWJ5XScsIHRoaXMuZWwpO1xuICAgIHRoaXMuJHBhZ2luYXRpb25MaW5rcyA9ICQoJ2EucGFnaW5hdGlvbi0taXRlbScsIHRoaXMuZWwpO1xuICAgIHRoaXMuJGFsbFRhZ3MgPSAkKFxuICAgICAgYCR7dGhpcy5maWx0ZXJzQ29udGVudH0gLmZpbHRlci1pdGVtIGE6bm90KFtkYXRhLWZpbHRlci10b2dnbGVdKWAsXG4gICAgICB0aGlzLmVsLFxuICAgICk7XG4gICAgdGhpcy5jbGlja1RvTG9hZCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLmNsaWNrLXRvLWxvYWQnKTtcbiAgICB0aGlzLmNsaWNrVG9Mb2FkVHJpZ2dlciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtY2xpY2stdG8tbG9hZF0nKTtcbiAgICB0aGlzLmluZmluaXRlU2Nyb2xsVHJpZ2dlciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihcbiAgICAgICdbZGF0YS1pbmZpbml0ZS1zY3JvbGxdJyxcbiAgICApO1xuICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgP
1SB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJy5pbmZpbml0ZS1zY3JvbGwnKTtcbiAgICB0aGlzLnByb2R1Y3RHcmlkID0gdGhpcy5yZXNwb25zZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5wcm9kdWN0Z3JpZC0taXRlbXMnLFxuICAgICk7XG4gICAgdGhpcy5wYWdpbmF0aW9uQ29udGFpbmVyID0gdGhpcy5yZXNwb25zZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5wYWdpbmF0aW9uLS1jb250YWluZXI6bm90KC52aXN1YWxseS1oaWRkZW4pJyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgZmlsdGVyIGxpbmsgY2xpY2sgZXZlbnRzIHRvIG5ldyBhamF4IGZ1bmN0aW9uYWxpdHlcbiAgICovXG4gIF9iaW5kRXZlbnRzKCkge1xuICAgIGNvbnN0IGxpbmtzID0gdGhpcy4kZ3JpZFRhZ0xpbmtzLmdldCgpLmNvbmNhdCh0aGlzLiRzaG93YnlUcmlnZ2VyLmdldCgpKTtcblxuICAgIHRoaXMuZXZlbnRzLnB1c2goXG4gICAgICAuLi5saW5rcy5tYXAoZWwgPT4gJChlbCkub24oJ2NsaWNrLmNvbGxlY3Rpb24nLCB0aGlzLl9hamF4RmlsdGVyKSksXG4gICAgKTtcbiAgICB0aGlzLmV2ZW50cy5wdXNoKFxuICAgICAgdGhpcy4kc29ydFRyaWdnZXIub24oJ2NoYW5nZS5jb2xsZWN0aW9uJywgdGhpcy5fYWpheEZpbHRlciksXG4gICAgICB0aGlzLiR2aWV3VG9nZ2xlLm9uKCdjbGljay5jb2xsZWN0aW9uJywgdGhpcy5fdG9nZ2xlVmlldyksXG4gICAgICB0aGlzLiRmaWx0ZXJzVHJpZ2dlci5vbignY2xpY2suY29sbGVjdGlvbicsICgpID0+IHRoaXMubW9kYWwub3Blbih0aGlzLmZpbHRlcnNDb250ZW50LCAncHJvZHVjdGdyaWQtZmlsdGVycycpKSxcbiAgICAgIHRoaXMuJGFsbFRhZ3Mub24oJ2NsaWNrLmNvbGxlY3Rpb24nLCB0aGlzLl9hY3RpdmF0ZVRhZyksXG4gICAgICB0aGlzLiRhZGRpdGlvbmFsVGFncy5vbignY2xpY2suY29sbGVjdGlvbicsIHRoaXMuX3RvZ2dsZVRhZ3MpLFxuICAgICAgdGhpcy4kc29ydFRyaWdnZXJNb2RhbC5vbignY2xpY2suY29sbGVjdGlvbicsICgpID0+IHRoaXMubW9kYWwub3Blbih0aGlzLnNvcnRDb250ZW50LCAncHJvZHVjdGdyaWQtc29ydCcpKSxcbiAgICAgIHRoaXMuJHNvcnRUcmlnZ2VyQnV0dG9uLm9uKCdjbGljay5jb2xsZWN0aW9uJywgdGhpcy5fY2hhbmdlU29ydGluZ0J1dHRvbiksXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsVHJpZ2dlcikge1xuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgICAgaWYgKGVudHJ5LmludGVyc2VjdGlvblJhdGlvID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fYWpheFBhZ2luYXRpb24odHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuaW5maW5pdGVTY3JvbGxUcmlnZ2VyKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2xpY2tUb0xvYWQpIHtcbiAgICAgIHRoaXMuZXZlbnRzLnB1c2goXG4gICAgICAgICQodGhpcy5jbGlja1RvTG9hZFRyaWdnZXIpLm9uKCdjbGljay5jb2xsZWN0aW9uJywgKCkgPT4gdGhpcy5fYWpheFBhZ2luYXRpb24oZmFsc2UpKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXZlbnRzLnB1c2goXG4gICAgICAgIHRoaXMuJHBhZ2luYXRpb25MaW5rcy5vbignY2xpY2suY29sbGVjdGlvbicsIHRoaXMuX2FqYXhGaWx0ZXIpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBwYWdlIFVSTCBzbyB1c2VycyBjYW4gbGluayB0byB0aG
1VpciBwYXJ0aWN1bGFyIHNlYXJjaFxuICAgKi9cbiAgX3VwZGF0ZUhpc3RvcnkodXJsKSB7XG4gICAgaWYgKFxuICAgICAgKHdpbmRvdy5TaG9waWZ5ICYmIHdpbmRvdy5TaG9waWZ5LmRlc2lnbk1vZGUpXG4gICAgICB8fCAhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlsZXNzSHJlZiA9IHVybC5yZXBsYWNlKC9cXD9bXiNdKy8sICcnKTtcbiAgICBjb25zdCBocmVmID0gcXVlcnlsZXNzSHJlZi5yZXBsYWNlKFxuICAgICAgLyhbXiNdKykoLiopLyxcbiAgICAgIChtYXRjaCwgYWRkcmVzcywgaGFzaCkgPT4gYCR7YWRkcmVzc30/JHtPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5UGFyYW1zKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5tYXAoXG4gICAgICAgICAga2V5ID0+IGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgICAgIHRoaXMucXVlcnlQYXJhbXNba2V5XSxcbiAgICAgICAgICApfWAsXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oJyYnKX0ke2hhc2h9YCxcbiAgICApO1xuXG4gICAgaWYgKHdpbmRvdy50b3AubG9jYXRpb24uaHJlZiAhPT0gaHJlZikge1xuICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCAnJywgaHJlZik7XG4gICAgfVxuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticCollection.js\n")},
1"./source/scripts/sections/StaticCollectionMinimal.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return StaticCollectionMinimal; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var rimg_shopify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rimg-shopify */ \"./node_modules/rimg-shopify/dist/index.es.js\");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shopify-currency-converter */ \"./node_modules/shopify-currency-converter/dist/index.js\");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var shopify_asyncview__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shopify-asyncview */ \"./node_modules/shopify-asyncview/dist/index.es.js\");\n/* harmony import */ var intersection_observer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! intersection-observer */ \"./node_modules/intersection-observer/intersection-observer.js\");\n/* harmony import */ var intersection_observer__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(intersection_observer__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _helpers_ProductReviews__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../helpers/ProductReviews */ \"./source/scripts/helpers/ProductReviews.js\");\n/* harmony import */ var _components_ProductGridItem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/ProductGridItem */ \"./source/scripts/components/ProductGridItem.js\");\n/* harmony import */ var _components_RecentlyViewed__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/RecentlyViewed */ \"./source/scripts/components/RecentlyViewed.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\nvar StaticCollectionMinimal =\n/*#__PURE__*/\nfunction () {\n function StaticCollectionMinimal(section) {\n _classCallCheck(this, StaticCollectionMinimal);\n\n this.el = section.el;\n this.id = section.id; // Pagination\n\n this.paginationStyle = section.data.pagination_style;\n this.clickToLoadTrigger = this.el.querySelector('[data-click-to-load]');\n this.clickToLoad = this.el.querySelector('.click-to-load');\n this.infiniteScrollTrigger = this.el.querySelector('[data-infinite-scroll]');\n this.infiniteScroll = this.el.querySelector('.infinite-scroll');\n this.paginationLinks = this.el.querySelectorAll('a.pagination--item');\n this.responseContainer = this.el.querySelector('.results--container');\n this.paginationContainer = this.responseContainer.querySelector('.pagination--container:not(.visually-hidden)');\n this.productGrid = this.responseContainer.querySelector('.productgrid--items');\n this.toPage = null; // Product Cards\n\n this.productItemEls = this.productGrid.querySelectorAll('[data-product-item]');\n this.productItems = [];\n this.recentlyViewed = new _components_RecentlyViewed__WEBPACK_IMPORTED_MODULE_7__[\"default\"](section);\n this._processing = this._processing.bind(this);\n this._bindEvents = this._bindEvents.bind(this);\n this._unbindEvents = this._unbindEvents.bind(this);\n this._initProductCards = this._initProductCards.bind(this);\n this._updateHistory = this._updateHistory.bind(this);\n this._fetchProductCards = this._fetchProductCards.bind(this);\n\n this._initProductCards(this.productItemEls);\n\n this._bindEvents();\n }\n\n _createClass(StaticCollectionMinimal, [{\n key: \"_bindEvents\",\n value: function _bindEvents() {\n var _this = this;\n\n if (this.clickToLoadTrigger) {\n this.clickToLoadTrigger.addEventListener('click', this._fetchProductCards);\n } else if (this.infiniteScrollTrigger) {\n var observer = new IntersectionObserver(function (entries) {\n entr
1ies.forEach(function (entry) {\n if (entry.intersectionRatio > 0) {\n _this._fetchProductCards(false);\n }\n });\n });\n observer.observe(this.infiniteScrollTrigger);\n } else {\n this.paginationLinks.forEach(function (link) {\n link.addEventListener('click', _this._fetchProductCards);\n });\n }\n }\n }, {\n key: \"_unbindEvents\",\n value: function _unbindEvents() {\n var _this2 = this;\n\n if (this.clickToLoadTrigger) {\n this.clickToLoadTrigger.removeEventListener('click', this._fetchProductCards);\n } else {\n this.paginationLinks.forEach(function (link) {\n link.removeEventListener('click', _this2._fetchProductCards);\n });\n }\n }\n }, {\n key: \"onSectionUnload\",\n value: function onSectionUnload() {\n this._unbindEvents();\n\n this.recentlyViewed.unload();\n this.productItems.forEach(function (productItem) {\n productItem.unload();\n });\n }\n }, {\n key: \"_initProductCards\",\n value: function _initProductCards(productEls) {\n for (var i = 0; i < productEls.length; i++) {\n var productItem = productEls[i];\n this.productItems.push(new _components_ProductGridItem__WEBPACK_IMPORTED_MODULE_6__[\"default\"]({\n $el: jquery__WEBPACK_IMPORTED_MODULE_0___default()(productItem),\n id: this.id,\n product: JSON.parse(productItem.querySelector('[data-product-data]').innerHTML),\n queryParams: {\n page: this.toPage\n }\n }));\n var moneyEls = productItem.querySelectorAll('.money');\n\n for (var j = 0; j < moneyEls.length; j++) {\n shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2___default.a.update(moneyEls[j]);\n }\n }\n\n if (jquery__WEBPACK_IMPORTED_MODULE_0___default()('.spr-badge', this.el)) {\n Object(_helpers_ProductReviews__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n }\n }\n }, {\n key: \"_processing\",\n value: function _processing(isProcessing) {\n if (isProcessing && this.paginationStyle === 'traditional') {\n this.responseContainer.classList.add('processing--filter');\n var y = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).scrollTop();\n\n if (y >= 310) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({\n scrollTop: y - 300\n }, 150).animate({\n scrollTop: 10\n }, 0).animate({\n scrollTop: 0\n }, 150);\n } else {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({\n scrollTop: 0\n }, 150);\n }\n } else if (isProcessing && this.paginationStyle !== 'traditional') {\n this.responseContainer.classList.add('processing--pagination');\n } else if (!isProcessing && this.paginationStyle === 'traditional') {\n this.responseContainer.classList.remove('processing--filter');\n } else {\n this.responseContainer.classList.remove('processing--pagination');\n }\n }\n }, {\n key: \"_fetchProductCards\",\n value: function _fetchProductCards(event) {\n var _this3 = this;\n\n this._processing(true);\n\n this.toPage = event ? event.target.dataset.toPage : this.infiniteScrollTrigger.dataset.toPage;\n\n if (event) {\n event.preventDefault();\n }\n\n var fetchUrl = window.location.pathname;\n var params = {\n page: this.toPage,\n view: '_ajax-minimal'\n };\n shopify_asyncview__WEBPACK_IMPORTED_MODULE_3__[\"default\"].load(fetchUrl, params).then(function (_ref) {\n var html = _ref.html;\n var fragment = document.createDocumentFragment();\n var productItems = document.createElement('div');\n productItems.innerHTML = html.productgridItems;\n\n while (productItems.firstChild) {\n fragment.appendChild(productItems.firstChild);\n }\n\n if (_this3.paginationStyle === 'traditional') {\n _this3.productItems.forEac
1h(function (item) {\n return item.unload();\n });\n\n _this3.productItems = [];\n _this3.responseContainer.innerHTML = html.productgrid;\n\n _this3._initProductCards(_this3.responseContainer.querySelectorAll('[data-product-item]'));\n } else {\n var newProductItems = fragment.querySelectorAll('[data-product-item]');\n\n _this3.productGrid.appendChild(fragment);\n\n _this3._initProductCards(newProductItems);\n }\n\n _this3.paginationContainer.innerHTML = html.pagination;\n rimg_shopify__WEBPACK_IMPORTED_MODULE_1__[\"default\"].watch(_this3.responseContainer);\n\n _this3._unbindEvents();\n\n _this3.clickToLoadTrigger = _this3.el.querySelector('[data-click-to-load]');\n _this3.clickToLoad = _this3.el.querySelector('.click-to-load');\n _this3.infiniteScrollTrigger = _this3.el.querySelector('[data-infinite-scroll]');\n _this3.infiniteScroll = _this3.el.querySelector('.infinite-scroll');\n _this3.paginationLinks = _this3.el.querySelectorAll('a.pagination--item');\n\n _this3._bindEvents();\n\n _this3._updateHistory(fetchUrl, params);\n\n _this3._processing(false);\n });\n }\n }, {\n key: \"_updateHistory\",\n value: function _updateHistory(url, params) {\n if (window.Shopify && window.Shopify.designMode || !window.history.pushState) {\n return;\n }\n\n var href = \"\".concat(url, \"?page=\").concat(params.page);\n window.history.pushState({}, '', href);\n }\n }]);\n\n return StaticCollectionMinimal;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNDb2xsZWN0aW9uTWluaW1hbC5qcz82OTUzIl0sIm5hbWVzIjpbIlN0YXRpY0NvbGxlY3Rpb25NaW5pbWFsIiwic2VjdGlvbiIsImVsIiwiaWQiLCJwYWdpbmF0aW9uU3R5bGUiLCJkYXRhIiwicGFnaW5hdGlvbl9zdHlsZSIsImNsaWNrVG9Mb2FkVHJpZ2dlciIsInF1ZXJ5U2VsZWN0b3IiLCJjbGlja1RvTG9hZCIsImluZmluaXRlU2Nyb2xsVHJpZ2dlciIsImluZmluaXRlU2Nyb2xsIiwicGFnaW5hdGlvbkxpbmtzIiwicXVlcnlTZWxlY3RvckFsbCIsInJlc3BvbnNlQ29udGFpbmVyIiwicGFnaW5hdGlvbkNvbnRhaW5lciIsInByb2R1Y3RHcmlkIiwidG9QYWdlIiwicHJvZHVjdEl0ZW1FbHMiLCJwcm9kdWN0SXRlbXMiLCJyZWNlbnRseVZpZXdlZCIsIlJlY2VudGx5Vmlld2VkIiwiX3Byb2Nlc3NpbmciLCJiaW5kIiwiX2JpbmRFdmVudHMiLCJfdW5iaW5kRXZlbnRzIiwiX2luaXRQcm9kdWN0Q2FyZHMiLCJfdXBkYXRlSGlzdG9yeSIsIl9mZXRjaFByb2R1Y3RDYXJkcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvYnNlcnZlciIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiZW50cmllcyIsImZvckVhY2giLCJlbnRyeSIsImludGVyc2VjdGlvblJhdGlvIiwib2JzZXJ2ZSIsImxpbmsiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidW5sb2FkIiwicHJvZHVjdEl0ZW0iLCJwcm9kdWN0RWxzIiwiaSIsImxlbmd0aCIsInB1c2giLCJQcm9kdWN0R3JpZEl0ZW0iLCIkZWwiLCIkIiwicHJvZHVjdCIsIkpTT04iLCJwYXJzZSIsImlubmVySFRNTCIsInF1ZXJ5UGFyYW1zIiwicGFnZSIsIm1vbmV5RWxzIiwiaiIsIkN1cnJlbmN5Q29udmVydGVyIiwidXBkYXRlIiwiaW5pdFNob3BpZnlQcm9kdWN0UmV2aWV3cyIsImlzUHJvY2Vzc2luZyIsImNsYXNzTGlzdCIsImFkZCIsInkiLCJ3aW5kb3ciLCJzY3JvbGxUb3AiLCJhbmltYXRlIiwicmVtb3ZlIiwiZXZlbnQiLCJ0YXJnZXQiLCJkYXRhc2V0IiwicHJldmVudERlZmF1bHQiLCJmZXRjaFVybCIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJwYXJhbXMiLCJ2aWV3IiwiQXN5bmNWaWV3IiwibG9hZCIsInRoZW4iLCJodG1sIiwiZnJhZ21lbnQiLCJkb2N1bWVudCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJjcmVhdGVFbGVtZW50IiwicHJvZHVjdGdyaWRJdGVtcyIsImZpcnN0Q2hpbGQiLCJhcHBlbmRDaGlsZCIsIml0ZW0iLCJwcm9kdWN0Z3JpZCIsIm5ld1Byb2R1Y3RJdGVtcyIsInBhZ2luYXRpb24iLCJyaW1nIiwid2F0Y2giLCJ1cmwiLCJTaG9waWZ5IiwiZGVzaWduTW9kZSIsImhpc3RvcnkiLCJwdXNoU3RhdGUiLCJocmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7SUFFcUJBLHVCOzs7QUFDbkIsbUNBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFDbkIsU0FBS0MsRUFBTCxHQUFVRCxPQUFPLENBQUNDLEVBQWxCO0FBQ0EsU0FBS0MsRUFBTCxHQUFVRixPQUFPLENBQUNFLEVBQWxCLENBRm1CLENBSW5COztBQUNBLFNBQUtDLGVBQUwsR0FBdUJILE9BQU8sQ0FBQ0ksSUFBUixDQUFhQyxnQkFBcEM7QUFDQSxTQUFLQyxrQkFBTCxHQUEwQixLQUFLTCxFQUFMLENBQVFNLGFBQVIsQ0FBc0Isc0JBQXRCLENBQTFCO0FBQ0EsU0FBS0MsV0FBTCxHQUFtQixLQUFLUCxFQUFMLENBQVFNLGFBQVIsQ0FBc0IsZ0JBQXRCLENBQW5CO0FBQ0EsU0FBS0UscUJBQUwsR0FBNkIsS0FBS1IsRUFBTCxDQUFRTSxhQUFSLENBQXNCLHdCQUF0QixD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UFpQ0MsSUFBakM7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL3NlY3Rpb25zL1N0YXRpY0NvbGxlY3Rpb25NaW5pbWFsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCByaW1nIGZyb20gJ3JpbWctc2hvcGlmeSc7XG5pbXBvcnQgQ3VycmVuY3lDb252ZXJ0ZXIgZnJvbSAnc2hvcGlmeS1jdXJyZW5jeS1jb252ZXJ0ZXInO1xuaW1wb3J0IEFzeW5jVmlldyBmcm9tICdzaG9waWZ5LWFzeW5jdmlldyc7XG5pbXBvcnQgJ2ludGVyc2VjdGlvbi1vYnNlcnZlcic7XG5cbmltcG9ydCBpbml0U2hvcGlmeVByb2R1Y3RSZXZpZXdzIGZyb20gJy4uL2hlbHBlcnMvUHJvZHVjdFJldmlld3MnO1xuaW1wb3J0IFByb2R1Y3RHcmlkSXRlbSBmcm9tICcuLi9jb21wb25lbnRzL1Byb2R1Y3RHcmlkSXRlbSc7XG5pbXBvcnQgUmVjZW50bHlWaWV3ZWQgZnJvbSAnLi4vY29tcG9uZW50cy9SZWNlbnRseVZpZXdlZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRpY0NvbGxlY3Rpb25NaW5pbWFsIHtcbiAgY29uc3RydWN0b3Ioc2VjdGlvbikge1xuICAgIHRoaXMuZWwgPSBzZWN0aW9uLmVsO1xuICAgIHRoaXMuaWQgPSBzZWN0aW9uLmlkO1xuXG4gICAgLy8gUGFnaW5hdGlvblxuICAgIHRoaXMucGFnaW5hdGlvblN0eWxlID0gc2VjdGlvbi5kYXRhLnBhZ2luYXRpb25fc3R5bGU7XG4gICAgdGhpcy5jbGlja1RvTG9hZFRyaWdnZXIgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNsaWNrLXRvLWxvYWRdJyk7XG4gICAgdGhpcy5jbGlja1RvTG9hZCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLmNsaWNrLXRvLWxvYWQnKTtcbiAgICB0aGlzLmluZmluaXRlU2Nyb2xsVHJpZ2dlciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaW5maW5pdGUtc2Nyb2xsXScpO1xuICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgP
1SB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJy5pbmZpbml0ZS1zY3JvbGwnKTtcbiAgICB0aGlzLnBhZ2luYXRpb25MaW5rcyA9IHRoaXMuZWwucXVlcnlTZWxlY3RvckFsbCgnYS5wYWdpbmF0aW9uLS1pdGVtJyk7XG4gICAgdGhpcy5yZXNwb25zZUNvbnRhaW5lciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLnJlc3VsdHMtLWNvbnRhaW5lcicpO1xuICAgIHRoaXMucGFnaW5hdGlvbkNvbnRhaW5lciA9IHRoaXMucmVzcG9uc2VDb250YWluZXIucXVlcnlTZWxlY3RvcignLnBhZ2luYXRpb24tLWNvbnRhaW5lcjpub3QoLnZpc3VhbGx5LWhpZGRlbiknKTtcbiAgICB0aGlzLnByb2R1Y3RHcmlkID0gdGhpcy5yZXNwb25zZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcucHJvZHVjdGdyaWQtLWl0ZW1zJyk7XG4gICAgdGhpcy50b1BhZ2UgPSBudWxsO1xuICAgIC8vIFByb2R1Y3QgQ2FyZHNcbiAgICB0aGlzLnByb2R1Y3RJdGVtRWxzID0gdGhpcy5wcm9kdWN0R3JpZC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1wcm9kdWN0LWl0ZW1dJyk7XG4gICAgdGhpcy5wcm9kdWN0SXRlbXMgPSBbXTtcblxuICAgIHRoaXMucmVjZW50bHlWaWV3ZWQgPSBuZXcgUmVjZW50bHlWaWV3ZWQoc2VjdGlvbik7XG5cbiAgICB0aGlzLl9wcm9jZXNzaW5nID0gdGhpcy5fcHJvY2Vzc2luZy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2JpbmRFdmVudHMgPSB0aGlzLl9iaW5kRXZlbnRzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fdW5iaW5kRXZlbnRzID0gdGhpcy5fdW5iaW5kRXZlbnRzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5faW5pdFByb2R1Y3RDYXJkcyA9IHRoaXMuX2luaXRQcm9kdWN0Q2FyZHMuYmluZCh0aGlzKTtcbiAgICB0aGlzLl91cGRhdGVIaXN0b3J5ID0gdGhpcy5fdXBkYXRlSGlzdG9yeS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2ZldGNoUHJvZHVjdENhcmRzID0gdGhpcy5fZmV0Y2hQcm9kdWN0Q2FyZHMuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuX2luaXRQcm9kdWN0Q2FyZHModGhpcy5wcm9kdWN0SXRlbUVscyk7XG4gICAgdGhpcy5fYmluZEV2ZW50cygpO1xuICB9XG5cbiAgX2JpbmRFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuY2xpY2tUb0xvYWRUcmlnZ2VyKSB7XG4gICAgICB0aGlzLmNsaWNrVG9Mb2FkVHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2ZldGNoUHJvZHVjdENhcmRzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGxUcmlnZ2VyKSB7XG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICBpZiAoZW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9mZXRjaFByb2R1Y3RDYXJkcyhmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuaW5maW5pdGVTY3JvbGxUcmlnZ2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uTGlua3MuZm9yRWFjaChsaW5rID0+IHtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2ZldGNoUHJvZHVjdENhcmRzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF91bmJpbmRFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuY2xpY2tUb0xvYWRUcmlnZ2VyKSB7XG4gICAgICB0aGlzLmNsaWNrVG9Mb2FkVHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2ZldGNoUHJvZHVjdENhcmRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uTGlua3MuZm9yRWFjaChsaW5rID0+IHtcbiAgICAgICAgbGluay5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2ZldGNoUHJvZHVjdENhcmRzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLl91bmJpbmRFdmVudHMoKTtcbiAgICB0aGlzLnJlY2VudGx5Vmlld2VkLnVubG9hZCgpO1xuXG4gICAgdGhpcy5wcm9kdWN0SXRlbXMuZm9yRWFjaChwcm9kdWN0SXRlbSA9PiB7XG4gICAgICBwcm9kdWN0SXRlbS51bmxvYWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9pbml0UHJvZHVjdENhcmRzKHByb2R1Y3RFbHMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb2R1Y3RFbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHByb2R1Y3RJdGVtID0gcHJvZHVjdEVsc1tpXTtcbiAgICAgIHRoaXMucHJvZHVjdEl0ZW1zLnB1c2goXG4gICAgICAgIG5ldyBQcm9kdWN0R3JpZEl0ZW0oe1xuICAgICAgICAgICRlbDogJChwcm9kdWN0SXRlbSksXG4gICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgcHJvZHVjdDogSlNPTi5wYXJzZShwcm9kdWN0SXRlbS5xdWVyeVNlbGVjdG9yKCdbZGF0YS1wcm9kdWN0LWRhdGFdJykuaW5uZXJIVE1MKSxcbiAgICAgICAgICBxdWVyeVBhcmFtczogeyBwYWdlOiB0aGlzLnRvUGFnZSB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IG1vbmV5RWxzID0gcHJvZHVjdEl0ZW0ucXVlcnlTZWxlY3RvckFsbCgnLm1vbmV5Jyk7XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbW9uZXlFbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgQ3VycmVuY3lDb252ZXJ0ZXIudXBkYXRlKG1vbmV5RWxzW2pdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoJCgnLnNwci1iYWRnZScsIHRoaXMuZWwpKSB7XG4gICAgICBpbml0U2hvcGlmeVByb2R1Y3RSZXZpZXdzKCk7XG4gICAgfVxuICB9XG5cbiAgX3Byb2Nlc3NpbmcoaXNQcm9jZXNzaW5nKSB7XG4gICAgaWYgKGlzUHJvY2Vzc2luZyAmJiB0aGlzLnBhZ2luYXRpb25TdHlsZSA9PT0gJ3RyYWRpdGlvbmFsJykge1xuICAgICAgdGhpcy5yZXNwb25zZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdwcm9jZXNzaW5nLS1maWx0ZXInKTtcblxuICAgICAgY29uc3QgeSA9ICQod2luZG93KS5zY3JvbGxUb3AoKTtcbiAgICAgIGlmICh5ID49IDMxMCkge1xuICAgICAgICAkKCdodG1sLCBib2R5JylcbiAgICAgICAgICAuYW5pbWF0ZSh7IHNjcm9sbFRvcDogeSAtIDMwMCB9LCAxNTApXG4gICAgICAgICAgLmFuaW1hdGUoeyBzY3JvbGxUb3A6IDEwIH0sIDApXG4gICAgICAgICAgLmFuaW1hdGUoeyBzY3JvbGxUb3A6IDAgfSwgMTUwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAwIH0sIDE1MCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NpbmcgJiYgdGhpcy5wYWdpbmF0aW9uU3R5bGUgIT09ICd0cmFkaXRpb25hbCcpIHtcbiAgICAgIHRoaXMucmVzcG9uc2VDb250YWluZXIuY2xhc3NMaXN0LmFkZCgncHJvY2Vzc2luZy0tcGFnaW5hdGlvbic
1pO1xuICAgIH0gZWxzZSBpZiAoIWlzUHJvY2Vzc2luZyAmJiB0aGlzLnBhZ2luYXRpb25TdHlsZSA9PT0gJ3RyYWRpdGlvbmFsJykge1xuICAgICAgdGhpcy5yZXNwb25zZUNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdwcm9jZXNzaW5nLS1maWx0ZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNwb25zZUNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdwcm9jZXNzaW5nLS1wYWdpbmF0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgX2ZldGNoUHJvZHVjdENhcmRzKGV2ZW50KSB7XG4gICAgdGhpcy5fcHJvY2Vzc2luZyh0cnVlKTtcblxuICAgIHRoaXMudG9QYWdlID0gZXZlbnQgPyBldmVudC50YXJnZXQuZGF0YXNldC50b1BhZ2UgOiB0aGlzLmluZmluaXRlU2Nyb2xsVHJpZ2dlci5kYXRhc2V0LnRvUGFnZTtcblxuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBmZXRjaFVybCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIHBhZ2U6IHRoaXMudG9QYWdlLFxuICAgICAgdmlldzogJ19hamF4LW1pbmltYWwnLFxuICAgIH07XG5cbiAgICBBc3luY1ZpZXcubG9hZChmZXRjaFVybCwgcGFyYW1zKVxuICAgICAgLnRoZW4oKHsgaHRtbCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICBjb25zdCBwcm9kdWN0SXRlbXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgICBwcm9kdWN0SXRlbXMuaW5uZXJIVE1MID0gaHRtbC5wcm9kdWN0Z3JpZEl0ZW1zO1xuXG4gICAgICAgIHdoaWxlIChwcm9kdWN0SXRlbXMuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHByb2R1Y3RJdGVtcy5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25TdHlsZSA9PT0gJ3RyYWRpdGlvbmFsJykge1xuICAgICAgICAgIHRoaXMucHJvZHVjdEl0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLnVubG9hZCgpKTtcbiAgICAgICAgICB0aGlzLnByb2R1Y3RJdGVtcyA9IFtdO1xuICAgICAgICAgIHRoaXMucmVzcG9uc2VDb250YWluZXIuaW5uZXJIVE1MID0gaHRtbC5wcm9kdWN0Z3JpZDtcbiAgICAgICAgICB0aGlzLl9pbml0UHJvZHVjdENhcmRzKHRoaXMucmVzcG9uc2VDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtcHJvZHVjdC1pdGVtXScpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBuZXdQcm9kdWN0SXRlbXMgPSBmcmFnbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1wcm9kdWN0LWl0ZW1dJyk7XG4gICAgICAgICAgdGhpcy5wcm9kdWN0R3JpZC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgICAgICAgdGhpcy5faW5pdFByb2R1Y3RDYXJkcyhuZXdQcm9kdWN0SXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uQ29udGFpbmVyLmlubmVySFRNTCA9IGh0bWwucGFnaW5hdGlvbjtcbiAgICAgICAgcmltZy53YXRjaCh0aGlzLnJlc3BvbnNlQ29udGFpbmVyKTtcblxuICAgICAgICB0aGlzLl91bmJpbmRFdmVudHMoKTtcblxuICAgICAgICB0aGlzLmNsaWNrVG9Mb2FkVHJpZ2dlciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtY2xpY2stdG8tbG9hZF0nKTtcbiAgICAgICAgdGhpcy5jbGlja1RvTG9hZCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLmNsaWNrLXRvLWxvYWQnKTtcbiAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbFRyaWdnZXIgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWluZmluaXRlLXNjcm9sbF0nKTtcbiAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLmluZmluaXRlLXNjcm9sbCcpO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25MaW5rcyA9IHRoaXMuZWwucXVlcnlTZWxlY3RvckFsbCgnYS5wYWdpbmF0aW9uLS1pdGVtJyk7XG5cbiAgICAgICAgdGhpcy5fYmluZEV2ZW50cygpO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZUhpc3RvcnkoZmV0Y2hVcmwsIHBhcmFtcyk7XG5cbiAgICAgICAgdGhpcy5fcHJvY2Vzc2luZyhmYWxzZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIF91cGRhdGVIaXN0b3J5KHVybCwgcGFyYW1zKSB7XG4gICAgaWYgKCh3aW5kb3cuU2hvcGlmeSAmJiB3aW5kb3cuU2hvcGlmeS5kZXNpZ25Nb2RlKSB8fCAhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaHJlZiA9IGAke3VybH0/cGFnZT0ke3BhcmFtcy5wYWdlfWA7XG5cbiAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCBocmVmKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticCollectionMinimal.js\n")},
1"./source/scripts/sections/StaticPassword.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return StaticPassword; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _components_Modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Modal */ "./source/scripts/components/Modal.js");\n/* harmony import */ var _Forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Forms */ "./source/scripts/Forms.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\nvar StaticPassword =\n/*#__PURE__*/\nfunction () {\n function StaticPassword(section) {\n _classCallCheck(this, StaticPassword);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.modalForms = null;\n this.newsletterForm = null;\n this.modalContents = \'[data-passwordentry]\';\n this.$newsletterForm = this.$el.find(\'[data-password-newsletter]\');\n this.modalOpen = this.onModalOpen.bind(this);\n this.modalClose = this.onModalClose.bind(this);\n this._openModal = this._openModal.bind(this);\n this.modal = new _components_Modal__WEBPACK_IMPORTED_MODULE_1__["default"]({\n onOpen: this.modalOpen,\n onClose: this.modalClose\n });\n\n if (this.$newsletterForm) {\n this.newsletterForm = new _Forms__WEBPACK_IMPORTED_MODULE_2__["default"](this.$newsletterForm);\n }\n\n this._checkForPasswordAttempt();\n\n this._bindEvents();\n }\n\n _createClass(StaticPassword, [{\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.$el.off(\'.static-password\');\n\n if (this.newsletterForm) {\n this.newsletterForm.unload();\n }\n\n if (this.modalForms) {\n this.modalForms.unload();\n }\n }\n }, {\n key: "onModalOpen",\n value: function onModalOpen() {\n var $contents = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'[data-passwordentry-contents]\');\n this.modalForms = new _Forms__WEBPACK_IMPORTED_MODULE_2__["default"]($contents);\n }\n }, {\n key: "onModalClose",\n value: function onModalClose() {\n this.modalForms.unload();\n this.modalForms = null;\n }\n }, {\n key: "_bindEvents",\n value: function _bindEvents() {\n this.$el.on(\'click.static-password\', \'[data-passwordentry-toggle]\', this._openModal);\n }\n }, {\n key: "_openModal",\n value: function _openModal() {\n this.modal.open(this.modalContents, \'passwordentry\');\n }\n }, {\n key: "_checkForPasswordAttempt",\n value: function _checkForPasswordAttempt() {\n if (!jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'[data-passwordentry-errors]\').length) {\n return;\n }\n\n this._openModal();\n }\n }]);\n\n return StaticPassword;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNQYXNzd29yZC5qcz9jYTQ2Il0sIm5hbWVzIjpbIlN0YXRpY1Bhc3N3b3JkIiwic2VjdGlvbiIsIiRlbCIsIiQiLCJlbCIsIm1vZGFsRm9ybXMiLCJuZXdzbGV0dGVyRm9ybSIsIm1vZGFsQ29udGVudHMiLCIkbmV3c2xldHRlckZvcm0iLCJmaW5kIiwibW9kYWxPcGVuIiwib25Nb2RhbE9wZW4iLCJiaW5kIiwibW9kYWxDbG9zZSIsIm9uTW9kYWxDbG9zZSIsIl9vcGVuTW9kYWwiLCJtb2RhbCIsIk1vZGFsIiwib25PcGVuIiwib25DbG9zZSIsIkZvcm1zIiwiX2NoZWNrRm9yUGFzc3dvcmRBdHRlbXB0IiwiX2JpbmRF
1dmVudHMiLCJvZmYiLCJ1bmxvYWQiLCIkY29udGVudHMiLCJvbiIsIm9wZW4iLCJsZW5ndGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBO0FBRUE7QUFDQTs7SUFFcUJBLGM7OztBQUNuQiwwQkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUNuQixTQUFLQyxHQUFMLEdBQVdDLDZDQUFDLENBQUNGLE9BQU8sQ0FBQ0csRUFBVCxDQUFaO0FBRUEsU0FBS0MsVUFBTCxHQUFrQixJQUFsQjtBQUNBLFNBQUtDLGNBQUwsR0FBc0IsSUFBdEI7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLHNCQUFyQjtBQUNBLFNBQUtDLGVBQUwsR0FBdUIsS0FBS04sR0FBTCxDQUFTTyxJQUFULENBQWMsNEJBQWQsQ0FBdkI7QUFFQSxTQUFLQyxTQUFMLEdBQWlCLEtBQUtDLFdBQUwsQ0FBaUJDLElBQWpCLENBQXNCLElBQXRCLENBQWpCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixLQUFLQyxZQUFMLENBQWtCRixJQUFsQixDQUF1QixJQUF2QixDQUFsQjtBQUNBLFNBQUtHLFVBQUwsR0FBa0IsS0FBS0EsVUFBTCxDQUFnQkgsSUFBaEIsQ0FBcUIsSUFBckIsQ0FBbEI7QUFFQSxTQUFLSSxLQUFMLEdBQWEsSUFBSUMseURBQUosQ0FBVTtBQUNyQkMsWUFBTSxFQUFFLEtBQUtSLFNBRFE7QUFFckJTLGFBQU8sRUFBRSxLQUFLTjtBQUZPLEtBQVYsQ0FBYjs7QUFLQSxRQUFJLEtBQUtMLGVBQVQsRUFBMEI7QUFDeEIsV0FBS0YsY0FBTCxHQUFzQixJQUFJYyw4Q0FBSixDQUFVLEtBQUtaLGVBQWYsQ0FBdEI7QUFDRDs7QUFFRCxTQUFLYSx3QkFBTDs7QUFDQSxTQUFLQyxXQUFMO0FBQ0Q7Ozs7c0NBRWlCO0FBQ2hCLFdBQUtwQixHQUFMLENBQVNxQixHQUFULENBQWEsa0JBQWI7O0FBRUEsVUFBSSxLQUFLakIsY0FBVCxFQUF5QjtBQUN2QixhQUFLQSxjQUFMLENBQW9Ca0IsTUFBcEI7QUFDRDs7QUFFRCxVQUFJLEtBQUtuQixVQUFULEVBQXFCO0FBQ25CLGFBQUtBLFVBQUwsQ0FBZ0JtQixNQUFoQjtBQUNEO0FBQ0Y7OztrQ0FFYTtBQUNaLFVBQU1DLFNBQVMsR0FBR3RCLDZDQUFDLENBQUMsK0JBQUQsQ0FBbkI7QUFDQSxXQUFLRSxVQUFMLEdBQWtCLElBQUllLDhDQUFKLENBQVVLLFNBQVYsQ0FBbEI7QUFDRDs7O21DQUVjO0FBQ2IsV0FBS3BCLFVBQUwsQ0FBZ0JtQixNQUFoQjtBQUNBLFdBQUtuQixVQUFMLEdBQWtCLElBQWxCO0FBQ0Q7OztrQ0FFYTtBQUNaLFdBQUtILEdBQUwsQ0FBU3dCLEVBQVQsQ0FDRSx1QkFERixFQUVFLDZCQUZGLEVBR0UsS0FBS1gsVUFIUDtBQUtEOzs7aUNBRVk7QUFDWCxXQUFLQyxLQUFMLENBQVdXLElBQVgsQ0FBZ0IsS0FBS3BCLGFBQXJCLEVBQW9DLGVBQXBDO0FBQ0Q7OzsrQ0FFMEI7QUFDekIsVUFBSSxDQUFDSiw2Q0FBQyxDQUFDLDZCQUFELENBQUQsQ0FBaUN5QixNQUF0QyxFQUE4QztBQUM1QztBQUNEOztBQUVELFdBQUtiLFVBQUw7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL3NlY3Rpb25zL1N0YXRpY1Bhc3N3b3JkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuaW1wb3J0IE1vZGFsIGZyb20gJy4uL2NvbXBvbmVudHMvTW9kYWwnO1xuaW1wb3J0IEZvcm1zIGZyb20gJy4uL0Zvcm1zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGljUGFzc3dvcmQge1xuICBjb25zdHJ1Y3RvcihzZWN0aW9uKSB7XG4gICAgdGhpcy4kZWwgPSAkKHNlY3Rpb24uZWwpO1xuXG4gICAgdGhpcy5tb2RhbEZvcm1zID0gbnVsbDtcbiAgICB0aGlzLm5ld3NsZXR0ZXJGb3JtID0gbnVsbDtcbiAgICB0aGlzLm1vZGFsQ29udGVudHMgPSAnW2RhdGEtcGFzc3dvcmRlbnRyeV0nO1xuICAgIHRoaXMuJG5ld3NsZXR0ZXJGb3JtID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtcGFzc3dvcmQtbmV3c2xldHRlcl0nKTtcblxuICAgIHRoaXMubW9kYWxPcGVuID0gdGhpcy5vbk1vZGFsT3Blbi5iaW5kKHRoaXMpO1xuICAgIHRoaXMubW9kYWxDbG9zZSA9IHRoaXMub25Nb2RhbENsb3NlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb3Blbk1vZGFsID0gdGhpcy5fb3Blbk1vZGFsLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLm1vZGFsID0gbmV3IE1vZGFsKHtcbiAgICAgIG9uT3BlbjogdGhpcy5tb2RhbE9wZW4sXG4gICAgICBvbkNsb3NlOiB0aGlzLm1vZGFsQ2xvc2UsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy4kbmV3c2xldHRlckZvcm0pIHtcbiAgICAgIHRoaXMubmV3c2xldHRlckZvcm0gPSBuZXcgRm9ybXModGhpcy4kbmV3c2xldHRlckZvcm0pO1xuICAgIH1cblxuICAgIHRoaXMuX2NoZWNrRm9yUGFzc3dvcmRBdHRlbXB0KCk7XG4gICAgdGhpcy5fYmluZEV2ZW50cygpO1xuICB9XG5cbiAgb25TZWN0aW9uVW5sb2FkKCkge1xuICAgIHRoaXMuJGVsLm9mZignLnN0YXRpYy1wYXNzd29yZCcpO1xuXG4gICAgaWYgKHRoaXMubmV3c2xldHRlckZvcm0pIHtcbiAgICAgIHRoaXMubmV3c2xldHRlckZvcm0udW5sb2FkKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW9kYWxGb3Jtcykge1xuICAgICAgdGhpcy5tb2RhbEZvcm1zLnVubG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uTW9kYWxPcGVuKCkge1xuICAgIGNvbnN0ICRjb250ZW50cyA9ICQoJ1tkYXRhLXBhc3N3b3JkZW50cnktY29udGVudHNdJyk7XG4gICAgdGhpcy5tb2RhbEZvcm1zID0gbmV3IEZvcm1zKCRjb250ZW50cyk7XG4gIH1cblxuICBvbk1vZGFsQ2xvc2UoKSB7XG4gICAgdGhpcy5tb2RhbEZvcm1zLnVubG9hZCgpO1xuICAgIHRoaXMubW9kYWxGb3JtcyA9IG51bGw7XG4gIH1cblxuICBfYmluZEV2ZW50cygpIHtcbiAgICB0aGlzLiRlbC5vbihcbiAgICAgICdjbGljay5zdGF0aWMtcGFzc3dvcmQnLFxuICAgICAgJ1tkYXRhLXBhc3N3b3JkZW50cnktdG9nZ2xlXScsXG4gICAgICB0aGlzLl9vcGVuTW9kYWwsXG4gICAgKTtcbiAgfVxuXG4gIF9vcGVuTW9kYWwoKSB7XG4gICAgdGhpcy5tb2RhbC5vcGVuKHRoaXMubW9kYWxDb250ZW50cywgJ3Bhc3N3b3JkZW50cnknKTtcbiAgfVxuXG4gIF9jaGVja0ZvclBhc3N3b3JkQXR0ZW1wdCgpIHtcbiAgICBpZiAoISQoJ1tkYXRhLXBhc3N3b3JkZW50cnktZXJyb3JzXScpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX29wZW5Nb2RhbCgpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticPassword.js\n')},
1"./source/scripts/sections/StaticProduct.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return StaticProduct; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! scriptjs */ "./node_modules/scriptjs/dist/script.js");\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(scriptjs__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shopify-currency-converter */ "./node_modules/shopify-currency-converter/dist/index.js");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Layout */ "./source/scripts/Layout.js");\n/* harmony import */ var _Forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Forms */ "./source/scripts/Forms.js");\n/* harmony import */ var _components_RichText__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/RichText */ "./source/scripts/components/RichText.js");\n/* harmony import */ var _components_ProductDetails__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/ProductDetails */ "./source/scripts/components/ProductDetails.js");\n/* harmony import */ var _components_ProductGridItem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/ProductGridItem */ "./source/scripts/components/ProductGridItem.js");\n/* harmony import */ var _components_ProductRowScroller__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/ProductRowScroller */ "./source/scripts/components/ProductRowScroller.js");\n/* harmony import */ var _components_RecentlyViewed__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../components/RecentlyViewed */ "./source/scripts/components/RecentlyViewed.js");\n/* harmony import */ var _components_ProductSlideshow__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../components/ProductSlideshow */ "./source/scripts/components/ProductSlideshow.js");\n/* harmony import */ var _components_Leadform__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../components/Leadform */ "./source/scripts/components/Leadform.js");\n/* harmony import */ var _shortcodes_Shortcodes__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../shortcodes/Shortcodes */ "./source/scripts/shortcodes/Shortcodes.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar StaticProduct =\n/*#__PURE__*/\nfunction () {\n function StaticProduct(section) {\n var _this = this;\n\n _classCallCheck(this, StaticProduct);\n\n this.section = section;\n this.postMessage = section.postMessage;\n this.context = section.data.context;\n this.settings = section.data.settings;\n this.product = section.data.product;\n this.richText = null;\n this.reviewForm = null;\n this.flickity = null;\n this.flickityOptions = null;\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);
1\n this.$product = this.$el.find(\'[data-product-wrapper]\');\n\n if (this.settings) {\n this.isThreeColumn = this.settings.layout === \'layout--three-col\';\n } // History\n\n\n this.isThemeEditor = window.Shopify && window.Shopify.designMode;\n this.useHistory = !this.isThemeEditor && window.history.replaceState && this.settings.enableHistory;\n this.$gallery = this.$product.find(\'[data-product-gallery]\');\n this.$slideshow = this.$el.find(\'[data-product-slideshow]\'); // Product details\n\n this.$details = this.$product.find(\'[data-product-details]\'); // Product description\n\n this.$description = this.$product.find(\'[data-product-description]\');\n this.$readmore = this.$product.find(\'.product-readmore\'); // Product form containers\n\n this.$formRegular = this.$product.find(\'[data-product-form-regular]\');\n this.$formAlt = this.$product.find(\'[data-product-form-alt]\'); // Product form area\n\n this.$formArea = this.$product.find(\'[data-product-form-area]\'); // Move product form and information on breakpoint change\n\n this.layoutHandler = this.onBreakpointChange.bind(this);\n _Layout__WEBPACK_IMPORTED_MODULE_3__["default"].onBreakpointChange(this.layoutHandler); // Related Products\n\n this.$relatedProducts = this.$el.find(\'[data-related-products]\');\n this.relatedProducts = [];\n this.productItems = [];\n this.relatedProductsScroller = null; // Product reviews\n\n this.$productReviews = this.$el.find(\'[data-product-reviews]\'); // Product lead form\n\n this.$leadFormTrigger = this.$el.find(\'[data-lead-form-modal-trigger]\');\n\n this._moveForm();\n\n if (this.$description.length) {\n this.richText = new _components_RichText__WEBPACK_IMPORTED_MODULE_5__["default"](this.$description);\n }\n\n if (this.$readmore.length) {\n this.richText = new _components_RichText__WEBPACK_IMPORTED_MODULE_5__["default"](this.$readmore);\n }\n\n if (this.$relatedProducts.length) {\n this.relatedProductsScroller = new _components_ProductRowScroller__WEBPACK_IMPORTED_MODULE_8__["default"](section.el.querySelector(\'[data-product-row]\'));\n this.$relatedProducts.find(\'[data-product-item]\').each(function (i, productItem) {\n _this.productItems.push(new _components_ProductGridItem__WEBPACK_IMPORTED_MODULE_7__["default"]({\n $el: jquery__WEBPACK_IMPORTED_MODULE_0___default()(productItem),\n id: _this.section.id,\n product: JSON.parse(productItem.querySelector(\'[data-product-data]\').innerHTML)\n }));\n });\n /* If related products are disabled/enabled with while in the TE,\n * they\'ll have shop.currency as the monetary value. This updates it to\n * the active currency\n */\n\n this.$relatedProducts.find(\'.money\').each(function (index, el) {\n return shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2___default.a.update(el);\n });\n }\n\n if (this.$productReviews.length) {\n this.reviewForm = new _Forms__WEBPACK_IMPORTED_MODULE_4__["default"](this.$productReviews, \'.spr-form-input\');\n }\n\n if (this.$leadFormTrigger.length) {\n this.leadForm = new _components_Leadform__WEBPACK_IMPORTED_MODULE_11__["default"]({\n el: this.section.el,\n $trigger: this.$leadFormTrigger\n });\n } // Instantiate ProductDetails after Shopify API is loaded\n\n\n scriptjs__WEBPACK_IMPORTED_MODULE_1___default()(jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'[data-scripts]\').data(\'shopify-api-url\'), function () {\n var options = {\n $formArea: _this.$formArea,\n $gallery: _this.$gallery,\n $details: _this.$details,\n context: _this.context,\n settings: _this.settings,\n product: _this.product,\n useHistory: _this.useHistory\n };\n _this.productDetails = new _components_ProductDetails__WEBPACK_IMPORTED_MODULE_6__["default"](options);\n });\n this.productSlideshow = new _components_ProductSlideshow__WEBPACK_IMPORTED_MODULE_10__["default"]({\n $slideshow: this.$slideshow\n });\n\n if (this.settings.enableTurbolinks && window.Shopify && window.Shopify.PaymentButton) {\n window.Shopify.PaymentButton.init();\n }\n\n this.recentlyViewed = new _components_RecentlyViewed__WEBPACK_IMPORTED_MODULE_9__["default"](section);\n this.shortcodes = new _shortcodes_Shortcodes__WEBPACK_IMPORTED_MODULE_12__["default"](section.el);\n }\n\n _createClass(StaticProduct, [{\n key: "onSectionUnload",\n value: function onSectionUnload() {\n _Layout__WEBPACK_IMPORTED_MODULE_3__["default"].offBreakp
1ointChange(this.layoutHandler);\n this.productDetails.unload();\n this.productSlideshow.unload();\n\n if (this.richText) {\n this.richText.unload();\n }\n\n if (this.relatedProductsScroller) {\n this.relatedProductsScroller.unload();\n }\n\n this.relatedProducts.forEach(function (productItem) {\n productItem.unload();\n });\n\n if (this.reviewForm) {\n this.reviewForm.unload();\n }\n\n if (this.shortcodes) {\n this.shortcodes.unload();\n }\n }\n }, {\n key: "onBreakpointChange",\n value: function onBreakpointChange() {\n this._moveForm();\n }\n /**\n * Move product form if is a three column layout\n * @private\n */\n\n }, {\n key: "_moveForm",\n value: function _moveForm() {\n if (!this.isThreeColumn) return;\n\n if (_Layout__WEBPACK_IMPORTED_MODULE_3__["default"].isBreakpoint(\'L\')) {\n if (!jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(this.$formAlt[0], this.$formArea[0])) {\n var $form = this.$formArea.detach();\n this.$formAlt.append($form);\n }\n } else if (!jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(this.$formRegular[0], this.$formArea[0])) {\n var _$form = this.$formArea.detach();\n\n this.$formRegular.append(_$form);\n }\n }\n }]);\n\n return StaticProduct;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNQcm9kdWN0LmpzPzMyZjciXSwibmFtZXMiOlsiU3RhdGljUHJvZHVjdCIsInNlY3Rpb24iLCJwb3N0TWVzc2FnZSIsImNvbnRleHQiLCJkYXRhIiwic2V0dGluZ3MiLCJwcm9kdWN0IiwicmljaFRleHQiLCJyZXZpZXdGb3JtIiwiZmxpY2tpdHkiLCJmbGlja2l0eU9wdGlvbnMiLCIkZWwiLCIkIiwiZWwiLCIkcHJvZHVjdCIsImZpbmQiLCJpc1RocmVlQ29sdW1uIiwibGF5b3V0IiwiaXNUaGVtZUVkaXRvciIsIndpbmRvdyIsIlNob3BpZnkiLCJkZXNpZ25Nb2RlIiwidXNlSGlzdG9yeSIsImhpc3RvcnkiLCJyZXBsYWNlU3RhdGUiLCJlbmFibGVIaXN0b3J5IiwiJGdhbGxlcnkiLCIkc2xpZGVzaG93IiwiJGRldGFpbHMiLCIkZGVzY3JpcHRpb24iLCIkcmVhZG1vcmUiLCIkZm9ybVJlZ3VsYXIiLCIkZm9ybUFsdCIsIiRmb3JtQXJlYSIsImxheW91dEhhbmRsZXIiLCJvbkJyZWFrcG9pbnRDaGFuZ2UiLCJiaW5kIiwiJHJlbGF0ZWRQcm9kdWN0cyIsInJlbGF0ZWRQcm9kdWN0cyIsInByb2R1Y3RJdGVtcyIsInJlbGF0ZWRQcm9kdWN0c1Njcm9sbGVyIiwiJHByb2R1Y3RSZXZpZXdzIiwiJGxlYWRGb3JtVHJpZ2dlciIsIl9tb3ZlRm9ybSIsImxlbmd0aCIsIlJpY2hUZXh0IiwiUHJvZHVjdFJvd1Njcm9sbGVyIiwicXVlcnlTZWxlY3RvciIsImVhY2giLCJpIiwicHJvZHVjdEl0ZW0iLCJwdXNoIiwiUHJvZHVjdEdyaWRJdGVtIiwiaWQiLCJKU09OIiwicGFyc2UiLCJpbm5lckhUTUwiLCJpbmRleCIsIkN1cnJlbmN5Q29udmVydGVyIiwidXBkYXRlIiwiRm9ybXMiLCJsZWFkRm9ybSIsIkxlYWRmb3JtIiwiJHRyaWdnZXIiLCIkc2NyaXB0Iiwib3B0aW9ucyIsInByb2R1Y3REZXRhaWxzIiwiUHJvZHVjdERldGFpbHMiLCJwcm9kdWN0U2xpZGVzaG93IiwiUHJvZHVjdFNsaWRlc2hvdyIsImVuYWJsZVR1cmJvbGlua3MiLCJQYXltZW50QnV0dG9uIiwiaW5pdCIsInJlY2VudGx5Vmlld2VkIiwiUmVjZW50bHlWaWV3ZWQiLCJzaG9ydGNvZGVzIiwiU2hvcnRjb2RlcyIsIm9mZkJyZWFrcG9pbnRDaGFuZ2UiLCJ1bmxvYWQiLCJmb3JFYWNoIiwiaXNCcmVha3BvaW50IiwiY29udGFpbnMiLCIkZm9ybSIsImRldGFjaCIsImFwcGVuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7O0lBRXFCQSxhOzs7QUFDbkIseUJBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFBQTs7QUFDbkIsU0FBS0EsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0MsV0FBTCxHQUFtQkQsT0FBTyxDQUFDQyxXQUEzQjtBQUNBLFNBQUtDLE9BQUwsR0FBZUYsT0FBTyxDQUFDRyxJQUFSLENBQWFELE9BQTVCO0FBQ0EsU0FBS0UsUUFBTCxHQUFnQkosT0FBTyxDQUFDRyxJQUFSLENBQWFDLFFBQTdCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlTCxPQUFPLENBQUNHLElBQVIsQ0FBYUUsT0FBNUI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLElBQWhCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixJQUFsQjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0IsSUFBaEI7QUFDQSxTQUFLQyxlQUFMLEdBQXVCLElBQXZCO0FBRUEsU0FBS0MsR0FBTCxHQUFXQyw2Q0FBQyxDQUFDWCxPQUFPLENBQUNZLEVBQVQsQ0FBWjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0IsS0FBS0gsR0FBTCxDQUFTSSxJQUFULENBQWMsd0JBQWQsQ0FBaEI7O0FBRUEsUUFBSSxLQUFLVixRQUFULEVBQW1CO0FBQ2pCLFdBQUtXLGFB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UFXLEVBQUk7QUFDMUNBLG1CQUFXLENBQUM0QixNQUFaO0FBQ0QsT0FGRDs7QUFJQSxVQUFJLEtBQUt0RSxVQUFULEVBQXFCO0FBQ25CLGFBQUtBLFVBQUwsQ0FBZ0JzRSxNQUFoQjtBQUNEOztBQUVELFVBQUksS0FBS0gsVUFBVCxFQUFxQjtBQUNuQixhQUFLQSxVQUFMLENBQWdCRyxNQUFoQjtBQUNEO0FBQ0Y7Ozt5Q0FFb0I7QUFDbkIsV0FBS25DLFNBQUw7QUFDRDtBQUVEOzs7Ozs7O2dDQUlZO0FBQ1YsVUFBSSxDQUFDLEtBQUszQixhQUFWLEVBQXlCOztBQUV6QixVQUFJQywrQ0FBTSxDQUFDK0QsWUFBUCxDQUFvQixHQUFwQixDQUFKLEVBQThCO0FBQzVCLFlBQUksQ0FBQ3BFLDZDQUFDLENBQUNxRSxRQUFGLENBQVcsS0FBS2pELFFBQUwsQ0FBYyxDQUFkLENBQVgsRUFBNkIsS0FBS0MsU0FBTCxDQUFlLENBQWYsQ0FBN0IsQ0FBTCxFQUFzRDtBQUNwRCxjQUFNaUQsS0FBSyxHQUFHLEtBQUtqRCxTQUFMLENBQWVrRCxNQUFmLEVBQWQ7QUFDQSxlQUFLbkQsUUFBTCxDQUFjb0QsTUFBZCxDQUFxQkYsS0FBckI7QUFDRDtBQUNGLE9BTEQsTUFLTyxJQUFJLENBQUN0RSw2Q0FBQyxDQUFDcUUsUUFBRixDQUFXLEtBQUtsRCxZQU
1FMLENBQWtCLENBQWxCLENBQVgsRUFBaUMsS0FBS0UsU0FBTCxDQUFlLENBQWYsQ0FBakMsQ0FBTCxFQUEwRDtBQUMvRCxZQUFNaUQsTUFBSyxHQUFHLEtBQUtqRCxTQUFMLENBQWVrRCxNQUFmLEVBQWQ7O0FBQ0EsYUFBS3BELFlBQUwsQ0FBa0JxRCxNQUFsQixDQUF5QkYsTUFBekI7QUFDRDtBQUNGIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvc2VjdGlvbnMvU3RhdGljUHJvZHVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgJHNjcmlwdCBmcm9tICdzY3JpcHRqcyc7XG5pbXBvcnQgQ3VycmVuY3lDb252ZXJ0ZXIgZnJvbSAnc2hvcGlmeS1jdXJyZW5jeS1jb252ZXJ0ZXInO1xuaW1wb3J0IGxheW91dCBmcm9tICcuLi9MYXlvdXQnO1xuaW1wb3J0IEZvcm1zIGZyb20gJy4uL0Zvcm1zJztcblxuaW1wb3J0IFJpY2hUZXh0IGZyb20gJy4uL2NvbXBvbmVudHMvUmljaFRleHQnO1xuaW1wb3J0IFByb2R1Y3REZXRhaWxzIGZyb20gJy4uL2NvbXBvbmVudHMvUHJvZHVjdERldGFpbHMnO1xuaW1wb3J0IFByb2R1Y3RHcmlkSXRlbSBmcm9tICcuLi9jb21wb25lbnRzL1Byb2R1Y3RHcmlkSXRlbSc7XG5pbXBvcnQgUHJvZHVjdFJvd1Njcm9sbGVyIGZyb20gJy4uL2NvbXBvbmVudHMvUHJvZHVjdFJvd1Njcm9sbGVyJztcbmltcG9ydCBSZWNlbnRseVZpZXdlZCBmcm9tICcuLi9jb21wb25lbnRzL1JlY2VudGx5Vmlld2VkJztcbmltcG9ydCBQcm9kdWN0U2xpZGVzaG93IGZyb20gJy4uL2NvbXBvbmVudHMvUHJvZHVjdFNsaWRlc2hvdyc7XG5cbmltcG9ydCBMZWFkZm9ybSBmcm9tICcuLi9jb21wb25lbnRzL0xlYWRmb3JtJztcblxuaW1wb3J0IFNob3J0Y29kZXMgZnJvbSAnLi4vc2hvcnRjb2Rlcy9TaG9ydGNvZGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGljUHJvZHVjdCB7XG4gIGNvbnN0cnVjdG9yKHNlY3Rpb24pIHtcbiAgICB0aGlzLnNlY3Rpb24gPSBzZWN0aW9uO1xuICAgIHRoaXMucG9zdE1lc3NhZ2UgPSBzZWN0aW9uLnBvc3RNZXNzYWdlO1xuICAgIHRoaXMuY29udGV4dCA9IHNlY3Rpb24uZGF0YS5jb250ZXh0O1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZWN0aW9uLmRhdGEuc2V0dGluZ3M7XG4gICAgdGhpcy5wcm9kdWN0ID0gc2VjdGlvbi5kYXRhLnByb2R1Y3Q7XG4gICAgdGhpcy5yaWNoVGV4dCA9IG51bGw7XG4gICAgdGhpcy5yZXZpZXdGb3JtID0gbnVsbDtcbiAgICB0aGlzLmZsaWNraXR5ID0gbnVsbDtcbiAgICB0aGlzLmZsaWNraXR5T3B0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLiRlbCA9ICQoc2VjdGlvbi5lbCk7XG4gICAgdGhpcy4kcHJvZHVjdCA9IHRoaXMuJGVsLmZpbmQoJ1tkYXRhLXByb2R1Y3Qtd3JhcHBlcl0nKTtcblxuICAgIGlmICh0aGlzLnNldHRpbmdzKSB7XG4gICAgICB0aGlzLmlzVGhyZWVDb2x1bW4gPSB0aGlzLnNldHRpbmdzLmxheW91dCA9PT0gJ2xheW91dC0tdGhyZWUtY29sJztcbiAgICB9XG5cbiAgICAvLyBIaXN0b3J5XG4gICAgdGhpcy5pc1RoZW1lRWRpdG9yID0gd2luZG93LlNob3BpZnkgJiYgd2luZG93LlNob3BpZnkuZGVzaWduTW9kZTtcbiAgICB0aGlzLnVzZUhpc3RvcnkgPSAhdGhpcy5pc1RoZW1lRWRpdG9yICYmIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSAmJlxuICAgICAgdGhpcy5zZXR0aW5ncy5lbmFibGVIaXN0b3J5O1xuXG4gICAgdGhpcy4kZ2FsbGVyeSA9IHRoaXMuJHByb2R1Y3QuZmluZCgnW2RhdGEtcHJvZHVjdC1nYWxsZXJ5XScpO1xuICAgIHRoaXMuJHNsaWRlc2hvdyA9IHRoaXMuJGVsLmZpbmQoJ1tkYXRhLXByb2R1Y3Qtc2xpZGVzaG93XScpO1xuXG4gICAgLy8gUHJvZHVjdCBkZXRhaWxzXG4gICAgdGhpcy4kZGV0YWlscyA9IHRoaXMuJHByb2R1Y3QuZmluZCgnW2RhdGEtcHJvZHVjdC1kZXRhaWxzXScpO1xuXG4gICAgLy8gUHJvZHVjdCBkZXNjcmlwdGlvblxuICAgIHRoaXMuJGRlc2NyaXB0aW9uID0gdGhpcy4kcHJvZHVjdC5maW5kKCdbZGF0YS1wcm9kdWN0LWRlc2NyaXB0aW9uXScpO1xuICAgIHRoaXMuJHJlYWRtb3JlID0gdGhpcy4kcHJvZHVjdC5maW5kKCcucHJvZHVjdC1yZWFkbW9yZScpO1xuXG4gICAgLy8gUHJvZHVjdCBmb3JtIGNvbnRhaW5lcnNcbiAgICB0aGlzLiRmb3JtUmVndWxhciA9IHRoaXMuJHByb2R1Y3QuZmluZCgnW2RhdGEtcHJvZHVjdC1mb3JtLXJlZ3VsYXJdJyk7XG4gICAgdGhpcy4kZm9ybUFsdCA9IHRoaXMuJHByb2R1Y3QuZmluZCgnW2RhdGEtcHJvZHVjdC1mb3JtLWFsdF0nKTtcblxuICAgIC8vIFByb2R1Y3QgZm9ybSBhcmVhXG4gICAgdGhpcy4kZm9ybUFyZWEgPSB0aGlzLiRwcm9kdWN0LmZpbmQoJ1tkYXRhLXByb2R1Y3QtZm9ybS1hcmVhXScpO1xuXG4gICAgLy8gTW92ZSBwcm9kdWN0IGZvcm0gYW5kIGluZm9ybWF0aW9uIG9uIGJyZWFrcG9pbnQgY2hhbmdlXG4gICAgdGhpcy5sYXlvdXRIYW5kbGVyID0gdGhpcy5vbkJyZWFrcG9pbnRDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICBsYXlvdXQub25CcmVha3BvaW50Q2hhbmdlKHRoaXMubGF5b3V0SGFuZGxlcik7XG5cbiAgICAvLyBSZWxhdGVkIFByb2R1Y3RzXG4gICAgdGhpcy4kcmVsYXRlZFByb2R1Y3RzID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtcmVsYXRlZC1wcm9kdWN0c10nKTtcbiAgICB0aGlzLnJlbGF0ZWRQcm9kdWN0cyA9IFtdO1xuICAgIHRoaXMucHJvZHVjdEl0ZW1zID0gW107XG4gICAgdGhpcy5yZWxhdGVkUHJvZHVjdHNTY3JvbGxlciA9IG51bGw7XG5cbiAgICAvLyBQcm9kdWN0IHJldmlld3NcbiAgICB0aGlzLiRwcm9kdWN0UmV2aWV3cyA9IHRoaXMuJGVsLmZpbmQoJ1tkYXRhLXByb2R1Y3QtcmV2aWV3c10nKTtcblxuICAgIC8vIFByb2R1Y3QgbGVhZCBmb3JtXG4gICAgdGhpcy4kbGVhZEZvcm1UcmlnZ2VyID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtbGVhZC1mb3JtLW1vZGFsLXRyaWdnZXJdJyk7XG5cbiAgICB0aGlzLl9tb3ZlRm9ybSgpO1xuXG4gICAgaWYgKHRoaXMuJGRlc2NyaXB0aW9uLmxlbmd0aCkge1xuICAgICAgdGhpcy5yaWNoVGV4dCA9IG5ldyBSaWNoVGV4dCh0aGlzLiRkZXNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuJHJlYWRtb3JlLmxlbmd0aCkge1xuICAgICAgdGhpcy5yaWNoVGV4dCA9IG5ldyBSaWNoVGV4dCh0aGlzLiRyZWFkbW9yZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuJHJlbGF0ZWRQcm9k
1dWN0cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmVsYXRlZFByb2R1Y3RzU2Nyb2xsZXIgPSBuZXcgUHJvZHVjdFJvd1Njcm9sbGVyKHNlY3Rpb24uZWwucXVlcnlTZWxlY3RvcignW2RhdGEtcHJvZHVjdC1yb3ddJykpO1xuXG4gICAgICB0aGlzLiRyZWxhdGVkUHJvZHVjdHMuZmluZCgnW2RhdGEtcHJvZHVjdC1pdGVtXScpLmVhY2goKGksIHByb2R1Y3RJdGVtKSA9PiB7XG4gICAgICAgIHRoaXMucHJvZHVjdEl0ZW1zLnB1c2goXG4gICAgICAgICAgbmV3IFByb2R1Y3RHcmlkSXRlbSh7XG4gICAgICAgICAgICAkZWw6ICQocHJvZHVjdEl0ZW0pLFxuICAgICAgICAgICAgaWQ6IHRoaXMuc2VjdGlvbi5pZCxcbiAgICAgICAgICAgIHByb2R1Y3Q6IEpTT04ucGFyc2UocHJvZHVjdEl0ZW0ucXVlcnlTZWxlY3RvcignW2RhdGEtcHJvZHVjdC1kYXRhXScpLmlubmVySFRNTCksXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgLyogSWYgcmVsYXRlZCBwcm9kdWN0cyBhcmUgZGlzYWJsZWQvZW5hYmxlZCB3aXRoIHdoaWxlIGluIHRoZSBURSxcbiAgICAgICAqIHRoZXknbGwgaGF2ZSBzaG9wLmN1cnJlbmN5IGFzIHRoZSBtb25ldGFyeSB2YWx1ZS4gVGhpcyB1cGRhdGVzIGl0IHRvXG4gICAgICAgKiB0aGUgYWN0aXZlIGN1cnJlbmN5XG4gICAgICAgKi9cbiAgICAgIHRoaXMuJHJlbGF0ZWRQcm9kdWN0cy5maW5kKCcubW9uZXknKS5lYWNoKChpbmRleCwgZWwpID0+IEN1cnJlbmN5Q29udmVydGVyLnVwZGF0ZShlbCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiRwcm9kdWN0UmV2aWV3cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmV2aWV3Rm9ybSA9IG5ldyBGb3Jtcyh0aGlzLiRwcm9kdWN0UmV2aWV3cywgJy5zcHItZm9ybS1pbnB1dCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiRsZWFkRm9ybVRyaWdnZXIubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxlYWRGb3JtID0gbmV3IExlYWRmb3JtKHsgZWw6IHRoaXMuc2VjdGlvbi5lbCwgJHRyaWdnZXI6IHRoaXMuJGxlYWRGb3JtVHJpZ2dlciB9KTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YW50aWF0ZSBQcm9kdWN0RGV0YWlscyBhZnRlciBTaG9waWZ5IEFQSSBpcyBsb2FkZWRcbiAgICAkc2NyaXB0KCQoJ1tkYXRhLXNjcmlwdHNdJykuZGF0YSgnc2hvcGlmeS1hcGktdXJsJyksICgpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICRmb3JtQXJlYTogdGhpcy4kZm9ybUFyZWEsXG4gICAgICAgICRnYWxsZXJ5OiB0aGlzLiRnYWxsZXJ5LFxuICAgICAgICAkZGV0YWlsczogdGhpcy4kZGV0YWlscyxcbiAgICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0LFxuICAgICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcbiAgICAgICAgcHJvZHVjdDogdGhpcy5wcm9kdWN0LFxuICAgICAgICB1c2VIaXN0b3J5OiB0aGlzLnVzZUhpc3RvcnksXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnByb2R1Y3REZXRhaWxzID0gbmV3IFByb2R1Y3REZXRhaWxzKG9wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9kdWN0U2xpZGVzaG93ID0gbmV3IFByb2R1Y3RTbGlkZXNob3coe1xuICAgICAgJHNsaWRlc2hvdzogdGhpcy4kc2xpZGVzaG93LFxuICAgIH0pO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zZXR0aW5ncy5lbmFibGVUdXJib2xpbmtzXG4gICAgICAmJiB3aW5kb3cuU2hvcGlmeVxuICAgICAgJiYgd2luZG93LlNob3BpZnkuUGF5bWVudEJ1dHRvblxuICAgICkge1xuICAgICAgd2luZG93LlNob3BpZnkuUGF5bWVudEJ1dHRvbi5pbml0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNlbnRseVZpZXdlZCA9IG5ldyBSZWNlbnRseVZpZXdlZChzZWN0aW9uKTtcblxuICAgIHRoaXMuc2hvcnRjb2RlcyA9IG5ldyBTaG9ydGNvZGVzKHNlY3Rpb24uZWwpO1xuICB9XG5cbiAgb25TZWN0aW9uVW5sb2FkKCkge1xuICAgIGxheW91dC5vZmZCcmVha3BvaW50Q2hhbmdlKHRoaXMubGF5b3V0SGFuZGxlcik7XG4gICAgdGhpcy5wcm9kdWN0RGV0YWlscy51bmxvYWQoKTtcbiAgICB0aGlzLnByb2R1Y3RTbGlkZXNob3cudW5sb2FkKCk7XG5cbiAgICBpZiAodGhpcy5yaWNoVGV4dCkge1xuICAgICAgdGhpcy5yaWNoVGV4dC51bmxvYWQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWxhdGVkUHJvZHVjdHNTY3JvbGxlcikge1xuICAgICAgdGhpcy5yZWxhdGVkUHJvZHVjdHNTY3JvbGxlci51bmxvYWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbGF0ZWRQcm9kdWN0cy5mb3JFYWNoKHByb2R1Y3RJdGVtID0+IHtcbiAgICAgIHByb2R1Y3RJdGVtLnVubG9hZCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucmV2aWV3Rm9ybSkge1xuICAgICAgdGhpcy5yZXZpZXdGb3JtLnVubG9hZCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3J0Y29kZXMpIHtcbiAgICAgIHRoaXMuc2hvcnRjb2Rlcy51bmxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkJyZWFrcG9pbnRDaGFuZ2UoKSB7XG4gICAgdGhpcy5fbW92ZUZvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHByb2R1Y3QgZm9ybSBpZiBpcyBhIHRocmVlIGNvbHVtbiBsYXlvdXRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlRm9ybSgpIHtcbiAgICBpZiAoIXRoaXMuaXNUaHJlZUNvbHVtbikgcmV0dXJuO1xuXG4gICAgaWYgKGxheW91dC5pc0JyZWFrcG9pbnQoJ0wnKSkge1xuICAgICAgaWYgKCEkLmNvbnRhaW5zKHRoaXMuJGZvcm1BbHRbMF0sIHRoaXMuJGZvcm1BcmVhWzBdKSkge1xuICAgICAgICBjb25zdCAkZm9ybSA9IHRoaXMuJGZvcm1BcmVhLmRldGFjaCgpO1xuICAgICAgICB0aGlzLiRmb3JtQWx0LmFwcGVuZCgkZm9ybSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghJC5jb250YWlucyh0aGlzLiRmb3JtUmVndWxhclswXSwgdGhpcy4kZm9ybUFyZWFbMF0pKSB7XG4gICAgICBjb25zdCAkZm9ybSA9IHRoaXMuJGZvcm1BcmVhLmRldGFjaCgpO1xuICAgICAgdGhpcy4kZm9ybVJlZ3VsYXIuYXBwZW5kKCRmb3JtKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticProduct.js\n')},
1"./source/scripts/sections/StaticSearch.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return StaticSearch; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var rimg_shopify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rimg-shopify */ \"./node_modules/rimg-shopify/dist/index.es.js\");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shopify-currency-converter */ \"./node_modules/shopify-currency-converter/dist/index.js\");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var shopify_asyncview__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! shopify-asyncview */ \"./node_modules/shopify-asyncview/dist/index.es.js\");\n/* harmony import */ var _components_ProductGridItem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/ProductGridItem */ \"./source/scripts/components/ProductGridItem.js\");\n/* harmony import */ var _components_search_SearchForm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/search/SearchForm */ \"./source/scripts/components/search/SearchForm.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\nvar StaticSearch =\n/*#__PURE__*/\nfunction () {\n function StaticSearch(section) {\n var _this = this;\n\n _classCallCheck(this, StaticSearch);\n\n this.section = section;\n this.responseContainer = this.section.el.querySelector('[data-html]');\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.searchFieldSelector = '[data-live-search]';\n this.paginationSelector = 'a.pagination--item';\n this.$searchField = this.$el.find(this.searchFieldSelector);\n this.paginationLinks = this.section.el.querySelectorAll(this.paginationSelector);\n this.ajaxEvents = [];\n this.processing = false;\n this._ajaxFetch = this._ajaxFetch.bind(this);\n this._initProducts = this._initProducts.bind(this);\n this.paginationLinks.forEach(function (el) {\n _this.ajaxEvents.push(jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).on('click', _this._ajaxFetch));\n }); // Product items\n\n this.productItems = [];\n\n this._initProducts();\n\n this._updatePrices();\n\n this.searchForm = new _components_search_SearchForm__WEBPACK_IMPORTED_MODULE_5__[\"default\"](this.$searchField);\n\n window.onpopstate = function (event) {\n _this._ajaxFetch(event);\n };\n }\n\n _createClass(StaticSearch, [{\n key: \"_ajaxFetch\",\n value: function _ajaxFetch(event) {\n var _this2 = this;\n\n event.preventDefault();\n event.stopPropagation();\n var fetchUrl;\n var pageNumber;\n\n if (event.type === 'popstate') {\n fetchUrl = event.state.path;\n pageNumber = event.state.toPage;\n } else {\n fetchUrl = event.currentTarget.getAttribute('href').replace('&view=undefined', '');\n pageNumber = event.currentTarget.getAttribute('data-to-page');\n }\n\n this.processing = true;\n this.responseContainer.classList.add('processing');\n shopify_asyncview__WEBPACK_IMPORTED_MODULE_3__[\"default\"].load(fetchUrl, {\n view: ''\n }).then(function (_ref) {\n var html = _ref.html;
1\n\n _this2.ajaxEvents.forEach(function ($el) {\n return $el.off('click', _this2._ajaxFetch);\n });\n\n _this2.ajaxEvents = [];\n _this2.responseContainer.innerHTML = html;\n\n _this2.searchForm.unload();\n\n _this2.$searchField = _this2.$el.find(_this2.searchFieldSelector);\n _this2.searchForm = new _components_search_SearchForm__WEBPACK_IMPORTED_MODULE_5__[\"default\"](_this2.$searchField);\n rimg_shopify__WEBPACK_IMPORTED_MODULE_1__[\"default\"].watch(_this2.responseContainer);\n\n _this2._initProducts();\n\n _this2.paginationLinks = _this2.section.el.querySelectorAll(_this2.paginationSelector);\n\n _this2.paginationLinks.forEach(function (el) {\n _this2.ajaxEvents.push(jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).on('click', _this2._ajaxFetch));\n });\n\n if (event.type !== 'popstate') {\n var newUrl = \"\".concat(window.location.protocol, \"//\").concat(window.location.host).concat(fetchUrl);\n window.history.pushState({\n path: fetchUrl,\n toPage: pageNumber\n }, '', newUrl);\n }\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({\n scrollTop: 0\n }, 'slow');\n\n _this2.responseContainer.classList.remove('processing');\n });\n }\n }, {\n key: \"_initProducts\",\n value: function _initProducts() {\n var _this3 = this;\n\n if (this.productItems.length > 0) {\n this.productItems.forEach(function (productItem) {\n productItem.unload();\n });\n this.productItems = [];\n }\n\n var $productItems = this.$el.find('[data-product-item]');\n $productItems.each(function (i, productItem) {\n _this3.productItems.push(new _components_ProductGridItem__WEBPACK_IMPORTED_MODULE_4__[\"default\"]({\n $el: jquery__WEBPACK_IMPORTED_MODULE_0___default()(productItem),\n id: _this3.section.id,\n product: JSON.parse(productItem.querySelector('[data-product-data]').innerHTML)\n }));\n });\n }\n }, {\n key: \"onSectionUnload\",\n value: function onSectionUnload() {\n this.searchForm.unload();\n this.productItems.forEach(function (productItem) {\n productItem.unload();\n });\n }\n }, {\n key: \"_updatePrices\",\n value: function _updatePrices() {\n this.$el.find('.money').each(function (index, el) {\n return shopify_currency_converter__WEBPACK_IMPORTED_MODULE_2___default.a.update(el);\n });\n }\n }]);\n\n return StaticSearch;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNTZWFyY2guanM/NGU2NyJdLCJuYW1lcyI6WyJTdGF0aWNTZWFyY2giLCJzZWN0aW9uIiwicmVzcG9uc2VDb250YWluZXIiLCJlbCIsInF1ZXJ5U2VsZWN0b3IiLCIkZWwiLCIkIiwic2VhcmNoRmllbGRTZWxlY3RvciIsInBhZ2luYXRpb25TZWxlY3RvciIsIiRzZWFyY2hGaWVsZCIsImZpbmQiLCJwYWdpbmF0aW9uTGlua3MiLCJxdWVyeVNlbGVjdG9yQWxsIiwiYWpheEV2ZW50cyIsInByb2Nlc3NpbmciLCJfYWpheEZldGNoIiwiYmluZCIsIl9pbml0UHJvZHVjdHMiLCJmb3JFYWNoIiwicHVzaCIsIm9uIiwicHJvZHVjdEl0ZW1zIiwiX3VwZGF0ZVByaWNlcyIsInNlYXJjaEZvcm0iLCJTZWFyY2hGb3JtIiwid2luZG93Iiwib25wb3BzdGF0ZSIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJmZXRjaFVybCIsInBhZ2VOdW1iZXIiLCJ0eXBlIiwic3RhdGUiLCJwYXRoIiwidG9QYWdlIiwiY3VycmVudFRhcmdldCIsImdldEF0dHJpYnV0ZSIsInJlcGxhY2UiLCJjbGFzc0xpc3QiLCJhZGQiLCJBc3luY1ZpZXciLCJsb2FkIiwidmlldyIsInRoZW4iLCJodG1sIiwib2ZmIiwiaW5uZXJIVE1MIiwidW5sb2FkIiwicmltZyIsIndhdGNoIiwibmV3VXJsIiwibG9jYXRpb24iLCJwcm90b2NvbCIsImhvc3QiLCJoaXN0b3J5IiwicHVzaFN0YXRlIiwiYW5pbWF0ZSIsInNjcm9sbFRvcCIsInJlbW92ZSIsImxlbmd0aCIsInByb2R1Y3RJdGVtIiwiJHByb2R1Y3RJdGVtcyIsImVhY2giLCJpIiwiUHJvZHVjdEdyaWRJdGVtIiwiaWQiLCJwcm9kdWN0IiwiSlNPTiIsInBhcnNlIiwiaW5kZXgiLCJDdXJyZW5jeUNvbnZlcnRlciIsInVwZGF0ZSJd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0MsQ0FBRCxFQUFJSCxXQUFKLEVBQW9CO0FBQ3JDLGNBQUksQ0FBQ3hDLFlBQUwsQ0FBa0JGLElBQWxCLENBQ0UsSUFBSThDLG1FQUFKLENBQW9CO0FBQ2xCNUQsYUFBRyxFQUFFQyw2Q0FBQyxDQUFDdUQsV0FBRCxDQURZO0FBRWxCSyxZQUFFLEVBQUUsTUFBSSxDQUFDakUsT0FBTCxDQUFhaUUsRUFGQztBQUdsQkMsaUJBQU8sRUFBRUMsSUFBSSxDQUFDQyxLQUFMLENBQ1BSLFdBQVcsQ0FBQ3pELGFBQVosQ0FBMEIscUJBQTFCLEVBQWlEMkMsU0FEMUM7QUFIUyxTQUFwQixDQURGO0FBU0QsT0FWRDtBQVdEOzs7c0NBRWlCO0FBQ2hCLFdBQUt4QixVQUFMLENBQWdCeUIsTUFBaEI7QUFFQSxXQUFLM0IsWUFBTCxDQUFrQkgsT0FBbEIsQ0FBMEIsVUFBQTJDLFdBQVcsRUFBSTtBQUN2Q0EsbUJBQVcsQ0FBQ2IsTUFBWjtBQUNELE9BRkQ7QUFHRDs7O29DQUVlO0FBQ2QsV0FBSzNDLEdBQUwsQ0FBU0ssSUFBVCxDQUFjLFFBQWQsRUFBd0JxRCxJQUF4QixDQUE2QixVQUFDTyxLQUFELEVBQVFuRSxFQUFSO0FBQUEsZUFBZW9FLGlFQUFpQixDQUFDQyxNQUFsQixDQUF5QnJFLEVBQXpCLENBQWY7QUFBQSxPQUE3QjtBQUNEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvc2VjdGlvbnMvU3RhdGljU2VhcmNoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCByaW1nIGZyb20gJ3JpbWctc2hvcGlmeSc7XG5pbXBvcnQgQ3VycmVuY3lDb252ZXJ0ZXIgZnJvbSAnc2hvcGlmeS1jdXJyZW5jeS1jb252ZXJ0ZXInO1xuaW1wb3J0IEFzeW5jVmlldyBmcm9tICdzaG9waWZ5LWFzeW5jdmlldyc7XG5cbmltcG9ydCBQcm9kdWN0R3JpZEl0ZW0gZnJvbSAnLi4vY29tcG9uZW50cy9Qcm9kdWN0R3JpZEl0ZW0nO1xuaW1wb3J0IFNlYXJjaEZvcm0gZnJvbSAnLi4vY29tcG9uZW50cy9zZWFyY2gvU2VhcmNoRm9ybSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRpY1NlYXJjaCB7XG4gIGNvbnN0cnVjdG9yKHNlY3Rpb24pIHtcbiAgICB0aGlzLnNlY3Rpb24gPSBzZWN0aW9uO1xuICAgIHRoaXMucmVzcG9uc2VDb250YWluZXIgPSB0aGlzLnNlY3Rpb24uZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaHRtbF0nKTtcbiAgICB0aGlzLiRlbCA9ICQoc2VjdGlvbi5lbCk7XG4gICAgdGhpcy5zZWFyY2hGaWVsZFNlbGVjdG9yID0gJ1tkYXRhLWxpdmUtc2VhcmNoXSc7XG4gICAgdGhpcy5wYWdpbmF0aW9uU2VsZWN0b3IgPSAnYS5wYWdpbmF0aW9uLS1pdGVtJztcbiAgICB0aGlzLiRzZWFyY2hGaWVsZCA9IHRoaXMuJGVsLmZpbmQodGhpcy5zZWFyY2hGaWVsZFNlbGVjdG9yKTtcbiAgICB0aGlzLnBhZ2luYXRpb25MaW5rcyA9IHRoaXMuc2VjdGlvbi5lbC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VsZWN0b3IsXG4gICAgKTtcbiAgICB0aGlzLmFqYXhFdmVudHMgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcblxuICAgI
1HRoaXMuX2FqYXhGZXRjaCA9IHRoaXMuX2FqYXhGZXRjaC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2luaXRQcm9kdWN0cyA9IHRoaXMuX2luaXRQcm9kdWN0cy5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5wYWdpbmF0aW9uTGlua3MuZm9yRWFjaChlbCA9PiB7XG4gICAgICB0aGlzLmFqYXhFdmVudHMucHVzaCgkKGVsKS5vbignY2xpY2snLCB0aGlzLl9hamF4RmV0Y2gpKTtcbiAgICB9KTtcblxuICAgIC8vIFByb2R1Y3QgaXRlbXNcbiAgICB0aGlzLnByb2R1Y3RJdGVtcyA9IFtdO1xuICAgIHRoaXMuX2luaXRQcm9kdWN0cygpO1xuXG4gICAgdGhpcy5fdXBkYXRlUHJpY2VzKCk7XG4gICAgdGhpcy5zZWFyY2hGb3JtID0gbmV3IFNlYXJjaEZvcm0odGhpcy4kc2VhcmNoRmllbGQpO1xuXG4gICAgd2luZG93Lm9ucG9wc3RhdGUgPSBldmVudCA9PiB7XG4gICAgICB0aGlzLl9hamF4RmV0Y2goZXZlbnQpO1xuICAgIH07XG4gIH1cblxuICBfYWpheEZldGNoKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGxldCBmZXRjaFVybDtcbiAgICBsZXQgcGFnZU51bWJlcjtcblxuICAgIGlmIChldmVudC50eXBlID09PSAncG9wc3RhdGUnKSB7XG4gICAgICBmZXRjaFVybCA9IGV2ZW50LnN0YXRlLnBhdGg7XG4gICAgICBwYWdlTnVtYmVyID0gZXZlbnQuc3RhdGUudG9QYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICBmZXRjaFVybCA9IGV2ZW50LmN1cnJlbnRUYXJnZXRcbiAgICAgICAgLmdldEF0dHJpYnV0ZSgnaHJlZicpXG4gICAgICAgIC5yZXBsYWNlKCcmdmlldz11bmRlZmluZWQnLCAnJyk7XG4gICAgICBwYWdlTnVtYmVyID0gZXZlbnQuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdG8tcGFnZScpO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc2luZyA9IHRydWU7XG4gICAgdGhpcy5yZXNwb25zZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdwcm9jZXNzaW5nJyk7XG5cbiAgICBBc3luY1ZpZXcubG9hZChmZXRjaFVybCwgeyB2aWV3OiAnJyB9KS50aGVuKCh7IGh0bWwgfSkgPT4ge1xuICAgICAgdGhpcy5hamF4RXZlbnRzLmZvckVhY2goJGVsID0+ICRlbC5vZmYoJ2NsaWNrJywgdGhpcy5fYWpheEZldGNoKSk7XG4gICAgICB0aGlzLmFqYXhFdmVudHMgPSBbXTtcblxuICAgICAgdGhpcy5yZXNwb25zZUNvbnRhaW5lci5pbm5lckhUTUwgPSBodG1sO1xuXG4gICAgICB0aGlzLnNlYXJjaEZvcm0udW5sb2FkKCk7XG4gICAgICB0aGlzLiRzZWFyY2hGaWVsZCA9IHRoaXMuJGVsLmZpbmQodGhpcy5zZWFyY2hGaWVsZFNlbGVjdG9yKTtcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IG5ldyBTZWFyY2hGb3JtKHRoaXMuJHNlYXJjaEZpZWxkKTtcblxuICAgICAgcmltZy53YXRjaCh0aGlzLnJlc3BvbnNlQ29udGFpbmVyKTtcbiAgICAgIHRoaXMuX2luaXRQcm9kdWN0cygpO1xuXG4gICAgICB0aGlzLnBhZ2luYXRpb25MaW5rcyA9IHRoaXMuc2VjdGlvbi5lbC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZWxlY3RvcixcbiAgICAgICk7XG5cbiAgICAgIHRoaXMucGFnaW5hdGlvbkxpbmtzLmZvckVhY2goZWwgPT4ge1xuICAgICAgICB0aGlzLmFqYXhFdmVudHMucHVzaCgkKGVsKS5vbignY2xpY2snLCB0aGlzLl9hamF4RmV0Y2gpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZXZlbnQudHlwZSAhPT0gJ3BvcHN0YXRlJykge1xuICAgICAgICBjb25zdCBuZXdVcmwgPSBgJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ob3N0XG4gICAgICAgIH0ke2ZldGNoVXJsfWA7XG5cbiAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKFxuICAgICAgICAgIHsgcGF0aDogZmV0Y2hVcmwsIHRvUGFnZTogcGFnZU51bWJlciB9LFxuICAgICAgICAgICcnLFxuICAgICAgICAgIG5ld1VybCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgJCgnaHRtbCwgYm9keScpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IDAgfSwgJ3Nsb3cnKTtcblxuICAgICAgdGhpcy5yZXNwb25zZUNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdwcm9jZXNzaW5nJyk7XG4gICAgfSk7XG4gIH1cblxuICBfaW5pdFByb2R1Y3RzKCkge1xuICAgIGlmICh0aGlzLnByb2R1Y3RJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnByb2R1Y3RJdGVtcy5mb3JFYWNoKHByb2R1Y3RJdGVtID0+IHtcbiAgICAgICAgcHJvZHVjdEl0ZW0udW5sb2FkKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5wcm9kdWN0SXRlbXMgPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCAkcHJvZHVjdEl0ZW1zID0gdGhpcy4kZWwuZmluZCgnW2RhdGEtcHJvZHVjdC1pdGVtXScpO1xuXG4gICAgJHByb2R1Y3RJdGVtcy5lYWNoKChpLCBwcm9kdWN0SXRlbSkgPT4ge1xuICAgICAgdGhpcy5wcm9kdWN0SXRlbXMucHVzaChcbiAgICAgICAgbmV3IFByb2R1Y3RHcmlkSXRlbSh7XG4gICAgICAgICAgJGVsOiAkKHByb2R1Y3RJdGVtKSxcbiAgICAgICAgICBpZDogdGhpcy5zZWN0aW9uLmlkLFxuICAgICAgICAgIHByb2R1Y3Q6IEpTT04ucGFyc2UoXG4gICAgICAgICAgICBwcm9kdWN0SXRlbS5xdWVyeVNlbGVjdG9yKCdbZGF0YS1wcm9kdWN0LWRhdGFdJykuaW5uZXJIVE1MLFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLnNlYXJjaEZvcm0udW5sb2FkKCk7XG5cbiAgICB0aGlzLnByb2R1Y3RJdGVtcy5mb3JFYWNoKHByb2R1Y3RJdGVtID0+IHtcbiAgICAgIHByb2R1Y3RJdGVtLnVubG9hZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgX3VwZGF0ZVByaWNlcygpIHtcbiAgICB0aGlzLiRlbC5maW5kKCcubW9uZXknKS5lYWNoKChpbmRleCwgZWwpID0+IEN1cnJlbmN5Q29udmVydGVyLnVwZGF0ZShlbCkpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticSearch.js\n")},
1"./source/scripts/sections/StaticSectionFooter.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return StaticSectionFooter; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Accordion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Accordion */ "./source/scripts/Accordion.js");\n/* harmony import */ var _Forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Forms */ "./source/scripts/Forms.js");\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Layout */ "./source/scripts/Layout.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar StaticSectionFooter =\n/*#__PURE__*/\nfunction () {\n function StaticSectionFooter(section) {\n _classCallCheck(this, StaticSectionFooter);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.Accordion = new _Accordion__WEBPACK_IMPORTED_MODULE_1__["default"](this.$el);\n this.forms = new _Forms__WEBPACK_IMPORTED_MODULE_2__["default"](this.$el); // Handle Accordion interaction when window size changes\n\n this.layoutHandler = this.onBreakpointChange.bind(this);\n _Layout__WEBPACK_IMPORTED_MODULE_3__["default"].onBreakpointChange(this.layoutHandler);\n\n this._bindEvents();\n }\n\n _createClass(StaticSectionFooter, [{\n key: "_bindEvents",\n value: function _bindEvents() {\n var _this = this;\n\n this.$el.on(\'click.footer\', \'[data-accordion-trigger]\', function (event) {\n event.preventDefault();\n\n _this._toggleAccordion(jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget).parent());\n });\n }\n }, {\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.$el.off(\'.footer\');\n this.forms.unload();\n delete this.Accordion;\n }\n }, {\n key: "onSectionBlockSelect",\n value: function onSectionBlockSelect(block) {\n var $block = jquery__WEBPACK_IMPORTED_MODULE_0___default()(block.el);\n\n if ($block.hasClass(\'has-accordion\')) {\n this._toggleAccordion($block, true);\n }\n }\n }, {\n key: "onSectionBlockDeselect",\n value: function onSectionBlockDeselect(block) {\n var $block = jquery__WEBPACK_IMPORTED_MODULE_0___default()(block.el);\n\n if ($block.hasClass(\'has-accordion\')) {\n this._toggleAccordion($block, false);\n }\n }\n }, {\n key: "_toggleAccordion",\n value: function _toggleAccordion($block) {\n if (_Layout__WEBPACK_IMPORTED_MODULE_3__["default"].isBreakpoint(\'L\')) {\n return;\n }\n\n this.Accordion.toggle($block);\n }\n }, {\n key: "onBreakpointChange",\n value: function onBreakpointChange(event, breakpoints) {\n if (_Layout__WEBPACK_IMPORTED_MODULE_3__["default"].isBreakpoint(\'L\')) {\n this.Accordion.openAll();\n } else if (breakpoints.previous === \'L\' && !_Layout__WEBPACK_IMPORTED_MODULE_3__["default"].isBreakpoint(\'L\')) {\n this.Accordion.closeOpen();\n }\n }\n }]);\n\n return StaticSectionFooter;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNTZWN0aW9uRm9vdGVyLmpzPzQ5NjQiXSwibmFtZXMiOlsiU3RhdGljU2VjdGlvbkZvb3RlciIsInNlY3Rpb24iLCIkZWwiLCIkIiwiZWwiLCJBY2NvcmRpb24iLCJmb3JtcyIsIkZvcm1zIiwibGF5b3V0SGFuZGxlciIsIm9uQnJlYWtwb2ludENoYW5nZSIsImJpbmQiLCJsYXlvdXQiLCJfYmluZEV2ZW50cyIsIm9uIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsIl90b2dnbGVBY2NvcmRpb24iLCJjdXJyZW50VGFyZ2V0IiwicGFyZW50Iiwib2ZmIiwidW5sb2FkIiwiYmxvY2siLCIkYmxvY2siLCJoYXNDbGFzcyIsImlzQnJlYWtwb2ludCIsInRvZ2dsZSIsImJyZWFrcG9pbnRzIiwib3BlbkFsbCIsInByZXZpb3VzIiwiY2xvc2VPcGVuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7QUFFQTtBQUNBO0FBQ0E7O0lBRXFCQSxtQjs7O0F
1BQ25CLCtCQUFZQyxPQUFaLEVBQXFCO0FBQUE7O0FBQ25CLFNBQUtDLEdBQUwsR0FBV0MsNkNBQUMsQ0FBQ0YsT0FBTyxDQUFDRyxFQUFULENBQVo7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLElBQUlBLGtEQUFKLENBQWMsS0FBS0gsR0FBbkIsQ0FBakI7QUFFQSxTQUFLSSxLQUFMLEdBQWEsSUFBSUMsOENBQUosQ0FBVSxLQUFLTCxHQUFmLENBQWIsQ0FKbUIsQ0FNbkI7O0FBQ0EsU0FBS00sYUFBTCxHQUFxQixLQUFLQyxrQkFBTCxDQUF3QkMsSUFBeEIsQ0FBNkIsSUFBN0IsQ0FBckI7QUFDQUMsbURBQU0sQ0FBQ0Ysa0JBQVAsQ0FBMEIsS0FBS0QsYUFBL0I7O0FBRUEsU0FBS0ksV0FBTDtBQUNEOzs7O2tDQUVhO0FBQUE7O0FBQ1osV0FBS1YsR0FBTCxDQUFTVyxFQUFULENBQVksY0FBWixFQUE0QiwwQkFBNUIsRUFBd0QsVUFBQUMsS0FBSyxFQUFJO0FBQy9EQSxhQUFLLENBQUNDLGNBQU47O0FBQ0EsYUFBSSxDQUFDQyxnQkFBTCxDQUFzQmIsNkNBQUMsQ0FBQ1csS0FBSyxDQUFDRyxhQUFQLENBQUQsQ0FBdUJDLE1BQXZCLEVBQXRCO0FBQ0QsT0FIRDtBQUlEOzs7c0NBRWlCO0FBQ2hCLFdBQUtoQixHQUFMLENBQVNpQixHQUFULENBQWEsU0FBYjtBQUNBLFdBQUtiLEtBQUwsQ0FBV2MsTUFBWDtBQUVBLGFBQU8sS0FBS2YsU0FBWjtBQUNEOzs7eUNBRW9CZ0IsSyxFQUFPO0FBQzFCLFVBQU1DLE1BQU0sR0FBR25CLDZDQUFDLENBQUNrQixLQUFLLENBQUNqQixFQUFQLENBQWhCOztBQUVBLFVBQUlrQixNQUFNLENBQUNDLFFBQVAsQ0FBZ0IsZUFBaEIsQ0FBSixFQUFzQztBQUNwQyxhQUFLUCxnQkFBTCxDQUFzQk0sTUFBdEIsRUFBOEIsSUFBOUI7QUFDRDtBQUNGOzs7MkNBRXNCRCxLLEVBQU87QUFDNUIsVUFBTUMsTUFBTSxHQUFHbkIsNkNBQUMsQ0FBQ2tCLEtBQUssQ0FBQ2pCLEVBQVAsQ0FBaEI7O0FBRUEsVUFBSWtCLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQixlQUFoQixDQUFKLEVBQXNDO0FBQ3BDLGFBQUtQLGdCQUFMLENBQXNCTSxNQUF0QixFQUE4QixLQUE5QjtBQUNEO0FBQ0Y7OztxQ0FFZ0JBLE0sRUFBUTtBQUN2QixVQUFJWCwrQ0FBTSxDQUFDYSxZQUFQLENBQW9CLEdBQXBCLENBQUosRUFBOEI7QUFDNUI7QUFDRDs7QUFFRCxXQUFLbkIsU0FBTCxDQUFlb0IsTUFBZixDQUFzQkgsTUFBdEI7QUFDRDs7O3VDQUVrQlIsSyxFQUFPWSxXLEVBQWE7QUFDckMsVUFBSWYsK0NBQU0sQ0FBQ2EsWUFBUCxDQUFvQixHQUFwQixDQUFKLEVBQThCO0FBQzVCLGFBQUtuQixTQUFMLENBQWVzQixPQUFmO0FBQ0QsT0FGRCxNQUVPLElBQUlELFdBQVcsQ0FBQ0UsUUFBWixLQUF5QixHQUF6QixJQUFnQyxDQUFDakIsK0NBQU0sQ0FBQ2EsWUFBUCxDQUFvQixHQUFwQixDQUFyQyxFQUErRDtBQUNwRSxhQUFLbkIsU0FBTCxDQUFld0IsU0FBZjtBQUNEO0FBQ0YiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNTZWN0aW9uRm9vdGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuaW1wb3J0IEFjY29yZGlvbiBmcm9tICcuLi9BY2NvcmRpb24nO1xuaW1wb3J0IEZvcm1zIGZyb20gJy4uL0Zvcm1zJztcbmltcG9ydCBsYXlvdXQgZnJvbSAnLi4vTGF5b3V0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGljU2VjdGlvbkZvb3RlciB7XG4gIGNvbnN0cnVjdG9yKHNlY3Rpb24pIHtcbiAgICB0aGlzLiRlbCA9ICQoc2VjdGlvbi5lbCk7XG4gICAgdGhpcy5BY2NvcmRpb24gPSBuZXcgQWNjb3JkaW9uKHRoaXMuJGVsKTtcblxuICAgIHRoaXMuZm9ybXMgPSBuZXcgRm9ybXModGhpcy4kZWwpO1xuXG4gICAgLy8gSGFuZGxlIEFjY29yZGlvbiBpbnRlcmFjdGlvbiB3aGVuIHdpbmRvdyBzaXplIGNoYW5nZXNcbiAgICB0aGlzLmxheW91dEhhbmRsZXIgPSB0aGlzLm9uQnJlYWtwb2ludENoYW5nZS5iaW5kKHRoaXMpO1xuICAgIGxheW91dC5vbkJyZWFrcG9pbnRDaGFuZ2UodGhpcy5sYXlvdXRIYW5kbGVyKTtcblxuICAgIHRoaXMuX2JpbmRFdmVudHMoKTtcbiAgfVxuXG4gIF9iaW5kRXZlbnRzKCkge1xuICAgIHRoaXMuJGVsLm9uKCdjbGljay5mb290ZXInLCAnW2RhdGEtYWNjb3JkaW9uLXRyaWdnZXJdJywgZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuX3RvZ2dsZUFjY29yZGlvbigkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLnBhcmVudCgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLiRlbC5vZmYoJy5mb290ZXInKTtcbiAgICB0aGlzLmZvcm1zLnVubG9hZCgpO1xuXG4gICAgZGVsZXRlIHRoaXMuQWNjb3JkaW9uO1xuICB9XG5cbiAgb25TZWN0aW9uQmxvY2tTZWxlY3QoYmxvY2spIHtcbiAgICBjb25zdCAkYmxvY2sgPSAkKGJsb2NrLmVsKTtcblxuICAgIGlmICgkYmxvY2suaGFzQ2xhc3MoJ2hhcy1hY2NvcmRpb24nKSkge1xuICAgICAgdGhpcy5fdG9nZ2xlQWNjb3JkaW9uKCRibG9jaywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25TZWN0aW9uQmxvY2tEZXNlbGVjdChibG9jaykge1xuICAgIGNvbnN0ICRibG9jayA9ICQoYmxvY2suZWwpO1xuXG4gICAgaWYgKCRibG9jay5oYXNDbGFzcygnaGFzLWFjY29yZGlvbicpKSB7XG4gICAgICB0aGlzLl90b2dnbGVBY2NvcmRpb24oJGJsb2NrLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgX3RvZ2dsZUFjY29yZGlvbigkYmxvY2spIHtcbiAgICBpZiAobGF5b3V0LmlzQnJlYWtwb2ludCgnTCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5BY2NvcmRpb24udG9nZ2xlKCRibG9jayk7XG4gIH1cblxuICBvbkJyZWFrcG9pbnRDaGFuZ2UoZXZlbnQsIGJyZWFrcG9pbnRzKSB7XG4gICAgaWYgKGxheW91dC5pc0JyZWFrcG9pbnQoJ0wnKSkge1xuICAgICAgdGhpcy5BY2NvcmRpb24ub3BlbkFsbCgpO1xuICAgIH0gZWxzZSBpZiAoYnJlYWtwb2ludHMucHJldmlvdXMgPT09ICdMJyAmJiAhbGF5b3V0LmlzQnJlYWtwb2ludCgnTCcpKSB7XG4gICAgICB0aGlzLkFjY29yZGlvbi5jbG9zZU9wZW4oKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticSectionFooter.js\n')},
1"./source/scripts/sections/StaticSectionHeader.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return StaticSectionHeader; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shopify-currency-converter */ "./node_modules/shopify-currency-converter/dist/index.js");\n/* harmony import */ var shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! scriptjs */ "./node_modules/scriptjs/dist/script.js");\n/* harmony import */ var scriptjs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(scriptjs__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Forms__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Forms */ "./source/scripts/Forms.js");\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Layout */ "./source/scripts/Layout.js");\n/* harmony import */ var _components_header_TraditionalHeader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/header/TraditionalHeader */ "./source/scripts/components/header/TraditionalHeader.js");\n/* harmony import */ var _components_header_MinimalHeader__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../components/header/MinimalHeader */ "./source/scripts/components/header/MinimalHeader.js");\n/* harmony import */ var _components_header_BasicHeader__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../components/header/BasicHeader */ "./source/scripts/components/header/BasicHeader.js");\n/* harmony import */ var _components_navigation_NavMobile__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../components/navigation/NavMobile */ "./source/scripts/components/navigation/NavMobile.js");\n/* harmony import */ var _components_navigation_MegaNavScroller__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../components/navigation/MegaNavScroller */ "./source/scripts/components/navigation/MegaNavScroller.js");\n/* harmony import */ var _components_navigation_NavDesktopMenu__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../components/navigation/NavDesktopMenu */ "./source/scripts/components/navigation/NavDesktopMenu.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar StaticSectionHeader =\n/*#__PURE__*/\nfunction () {\n function StaticSectionHeader(section) {\n var _this = this;\n\n _classCallCheck(this, StaticSectionHeader);\n\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(section.el);\n this.settings = section.data.settings;\n this.currency = section.data.currency;\n this.postMessage = section.postMessage;\n this.headerSearch = null;\n this.$scripts = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'[data-scripts]\');\n this.$menuToggle = this.$el.find(\'[data-menu-toggle]\');\n this.$cartCount = this.$el.find(\'[data-header-cart-count]\');\n this.$searchField = this.$el.find(\'[data-live-search]\');\n this.$siteNavigation = this.$el.find(\'[data-site-navigation]\');\n this.$desktopNavigation = this.$siteNavigation.find(\'ul.navmenu-depth-1\');\n this.$headerTools = this.$siteNavigation.find(\'[data-header-actions]\');\n this.converter = \'[data-currency-converter]\';\n this.$converter = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.converter);\n var headerProperties = {\n section: section.el,\n postMessage: this.postMessage,\n $scripts: this.$scripts\n };\n\n switch (this.settings.header_layout) {\n case \'minimal\':\n this.header = new _components_header_MinimalHeader__WEBPACK_IMPORTED_MODULE_6__["default"](headerProperties, this.settings);\n break;\n\n case \'basic\':\n this.header = new _components_header_BasicHeader__WEBPACK_IMPORTED_MODULE_7__["default"](headerProperties, this.settings);\n break;\n\n case \'traditional\':\n this.header = new _components_header_TraditionalHeader__WEBPACK_IMPORTED_MODULE_5__["default"](headerProperties, this.settings);\n break;\n\n default:\n this.header = new _components_header_TraditionalHeader__WEBPACK_IMPORTED_MODULE_5__["default"](headerProperties, this.settings);\n break;\n }\n\n this.megaNavs = {};\n var meganavMenus = document.querySelectorAll(\'[data-meganav-menu]\');\n\n for (var i = 0; i < meganavMenus.length;
1 i++) {\n var el = meganavMenus[i];\n var id = el.getAttribute(\'data-meganav-id\');\n this.megaNavs[id] = new _components_navigation_MegaNavScroller__WEBPACK_IMPORTED_MODULE_9__["default"](jquery__WEBPACK_IMPORTED_MODULE_0___default()(el));\n }\n\n this.navMobile = new _components_navigation_NavMobile__WEBPACK_IMPORTED_MODULE_8__["default"]({\n $el: this.$el,\n $toggleOpen: this.$menuToggle\n });\n this.navDesktop = new _components_navigation_NavDesktopMenu__WEBPACK_IMPORTED_MODULE_10__["default"](document.querySelector(\'.site-navigation > [data-navmenu]\'));\n this.forms = new _Forms__WEBPACK_IMPORTED_MODULE_3__["default"](this.$el);\n\n if (this.currency.enable) {\n scriptjs__WEBPACK_IMPORTED_MODULE_2___default()(this.$scripts.data(\'shopify-currencies\'), function () {\n _this._converter();\n });\n }\n\n this.$el.on(\'cartcount:update\', function (event, data) {\n _this.$cartCount.attr(\'data-header-cart-count\', data.response.item_count).toggleClass(\'visible\', data.response.item_count > 0);\n });\n }\n\n _createClass(StaticSectionHeader, [{\n key: "onSectionDeselect",\n value: function onSectionDeselect() {\n this._closeAllMeganavs();\n\n this.header.sectionDeselect();\n }\n }, {\n key: "onSectionUnload",\n value: function onSectionUnload() {\n this.header.unload();\n this.navMobile.unload();
1\n this.navDesktop.unload();\n this.forms.unload();\n this.$el.off(\'cartcount:update\');\n\n if (this.currency.enable) {\n this.$converter.off(\'change.converter\');\n }\n }\n }, {\n key: "onSectionMessage",\n value: function onSectionMessage(name) {\n if (name === \'nav:close-all\' && _Layout__WEBPACK_IMPORTED_MODULE_4__["default"].isBreakpoint(\'L\')) {\n this._closeAllMeganavs();\n }\n }\n }, {\n key: "onSectionBlockSelect",\n value: function onSectionBlockSelect(block) {\n if (!_Layout__WEBPACK_IMPORTED_MODULE_4__["default"].isBreakpoint(\'L\')) {\n return;\n }\n\n this.header.onSectionBlockSelect(block);\n this.navDesktop.openMeganavBlock(this.megaNavs[block.id].$el[0]);\n }\n }, {\n key: "onSectionBlockDeselect",\n value: function onSectionBlockDeselect(block) {\n this.header.onSectionBlockDeselect(block);\n\n if (this.megaNavs[block.id]) {\n this.megaNavs[block.id].$el.removeClass(\'meganav-editing-block\');\n }\n }\n }, {\n key: "_converter",\n value: function _converter() {\n var _this2 = this;\n\n shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1___default.a.init({\n switcherSelector: this.converter,\n priceSelector: \'.money\',\n shopCurrency: this.currency.shop_currency,\n defaultCurrency: this.currency.default_currency,\n displayFormat: this.currency.display_format,\n moneyFormat: this.currency.money_format,\n moneyFormatNoCurrency: this.currency.money_format_no_currency,\n moneyFormatCurrency: this.currency.money_format_currency\n });\n this.$converter.on(\'change.converter\', function (event) {\n _this2.$converter.each(function (index, converter) {\n if (converter.value !== event.currentTarget.value) {\n converter.value = event.currentTarget.value;\n }\n });\n\n shopify_currency_converter__WEBPACK_IMPORTED_MODULE_1___default.a.setCurrency(event.currentTarget.value);\n });\n }\n }, {\n key: "_closeAllMeganavs",\n value: function _closeAllMeganavs() {\n var keys = Object.keys(this.megaNavs);\n\n for (var i = 0; keys.length < i; i++) {\n this.megaNavs[keys[i]].$el.removeClass(\'meganav-editing-block\');\n }\n }\n }]);\n\n return StaticSectionHeader;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNTZWN0aW9uSGVhZGVyLmpzP2VjYjMiXSwibmFtZXMiOlsiU3RhdGljU2VjdGlvbkhlYWRlciIsInNlY3Rpb24iLCIkZWwiLCIkIiwiZWwiLCJzZXR0aW5ncyIsImRhdGEiLCJjdXJyZW5jeSIsInBvc3RNZXNzYWdlIiwiaGVhZGVyU2VhcmNoIiwiJHNjcmlwdHMiLCIkbWVudVRvZ2dsZSIsImZpbmQiLCIkY2FydENvdW50IiwiJHNlYXJjaEZpZWxkIiwiJHNpdGVOYXZpZ2F0aW9uIiwiJGRlc2t0b3BOYXZpZ2F0aW9uIiwiJGhlYWRlclRvb2xzIiwiY29udmVydGVyIiwiJGNvbnZlcnRlciIsImhlYWRlclByb3BlcnRpZXMiLCJoZWFkZXJfbGF5b3V0IiwiaGVhZGVyIiwiTWluaW1hbEhlYWRlciIsIkJhc2ljSGVhZGVyIiwiVHJhZGl0aW9uYWxIZWFkZXIiLCJtZWdhTmF2cyIsIm1lZ2FuYXZNZW51cyIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImkiLCJsZW5ndGgiLCJpZCIsImdldEF0dHJpYnV0ZSIsIk1lZ2FOYXZTY3JvbGxlciIsIm5hdk1vYmlsZSIsIk5hdk1vYmlsZSIsIiR0b2dnbGVPcGVuIiwibmF2RGVza3RvcCIsIk5hdkRlc2t0b3BNZW51IiwicXVlcnlTZWxlY3RvciIsImZvcm1zIiwiRm9ybXMiLCJlbmFibGUiLCIkc2NyaXB0IiwiX2NvbnZlcnRlciIsIm9uIiwiZXZlbnQiLCJhdHRyIiwicmVzcG9uc2UiLCJpdGVtX2NvdW50IiwidG9nZ2xlQ2xhc3MiLCJfY2xvc2VBbGxNZWdhbmF2cyIsInNlY3Rpb25EZXNlbGVjdCIsInVubG9hZCIsIm9mZiIsIm5hbWUiLCJsYXlvdXQiLCJpc0JyZWFrcG9pbnQiLCJibG9jayIsIm9uU2VjdGlvbkJsb2NrU2VsZWN0Iiwib3Blbk1lZ2FuYXZCbG9jayIsIm9uU2VjdGlvbkJsb2NrRGVzZWxlY3QiLCJyZW1vdmVDbGFzcyIsIkN1cnJlbmN5Q29udmVydGVyIiwiaW5pdCIsInN3aXRjaGVyU2VsZWN0b3IiLCJwcmljZVNlbGVjdG9yIiwic2hvcEN1cnJlbmN5Iiwic2hvcF9jdXJyZW5jeSIsImRlZmF1bHRDdXJyZW5jeSIsImRlZmF1bHRfY3VycmVuY3kiLCJkaXNwbGF5Rm9ybWF0IiwiZGlzcGxheV9mb3JtYXQiLCJtb25leUZvcm1hdCIsIm1vbmV5X2Zvcm1hdCIsIm1vbmV5Rm9ybWF0Tm9DdXJyZW5jeSIsIm1vbmV5X2Zvcm1hdF9ub19jdXJyZW5jeSIsIm1vbmV5Rm9ybWF0Q3VycmVuY3kiLCJtb25leV9mb3JtYXRfY3VycmVuY3kiLCJlYWNoIiwiaW5kZXgiLCJ2YWx1ZSIsImN1cnJlbnRUYXJnZXQiLCJzZXRDdXJyZW5jeSIsImtleXMiLCJPYmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztJQUVxQkEsbUI7OztBQUNuQiwrQkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUFBOztBQUNuQixTQUFLQyxHQU
1FMLEdBQVdDLDZDQUFDLENBQUNGLE9BQU8sQ0FBQ0csRUFBVCxDQUFaO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQkosT0FBTyxDQUFDSyxJQUFSLENBQWFELFFBQTdCO0FBQ0EsU0FBS0UsUUFBTCxHQUFnQk4sT0FBTyxDQUFDSyxJQUFSLENBQWFDLFFBQTdCO0FBQ0EsU0FBS0MsV0FBTCxHQUFtQlAsT0FBTyxDQUFDTyxXQUEzQjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsSUFBcEI7QUFFQSxTQUFLQyxRQUFMLEdBQWdCUCw2Q0FBQyxDQUFDLGdCQUFELENBQWpCO0FBRUEsU0FBS1EsV0FBTCxHQUFtQixLQUFLVCxHQUFMLENBQVNVLElBQVQsQ0FBYyxvQkFBZCxDQUFuQjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsS0FBS1gsR0FBTCxDQUFTVSxJQUFULENBQWMsMEJBQWQsQ0FBbEI7QUFDQSxTQUFLRSxZQUFMLEdBQW9CLEtBQUtaLEdBQUwsQ0FBU1UsSUFBVCxDQUFjLG9CQUFkLENBQXBCO0FBRUEsU0FBS0csZUFBTCxHQUF1QixLQUFLYixHQUFMLENBQVNVLElBQVQsQ0FBYyx3QkFBZCxDQUF2QjtBQUNBLFNBQUtJLGtCQUFMLEdBQTBCLEtBQUtELGVBQUwsQ0FBcUJILElBQXJCLENBQTBCLG9CQUExQixDQUExQjtBQUNBLFNBQUtLLFlBQUwsR0FBb0IsS0FBS0YsZUFBTCxDQUFxQkgsSUFBckIsQ0FBMEIsdUJBQTFCLENBQXBCO0FBRUEsU0FBS00sU0FBTCxHQUFpQiwyQkFBakI7QUFDQSxTQUFLQyxVQUFMLEdBQWtCaEIsNkNBQUMsQ0FBQyxLQUFLZSxTQUFOLENBQW5CO0FBRUEsUUFBTUUsZ0JBQWdCLEdBQUc7QUFDdkJuQixhQUFPLEVBQUVBLE9BQU8sQ0FBQ0csRUFETTtBQUV2QkksaUJBQVcsRUFBRSxLQUFLQSxXQUZLO0FBR3ZCRSxjQUFRLEVBQUUsS0FBS0E7QUFIUSxLQUF6Qjs7QUFNQSxZQUFRLEtBQUtMLFFBQUwsQ0FBY2dCLGFBQXRCO0FBQ0UsV0FBSyxTQUFMO0FBQ0UsYUFBS0MsTUFBTCxHQUFjLElBQUlDLHdFQUFKLENBQWtCSCxnQkFBbEIsRUFBb0MsS0FBS2YsUUFBekMsQ0FBZDtBQUNBOztBQUNGLFdBQUssT0FBTDtBQUNFLGFBQUtpQixNQUFMLEdBQWMsSUFBSUUsc0VBQUosQ0FBZ0JKLGdCQUFoQixFQUFrQyxLQUFLZixRQUF2QyxDQUFkO0FBQ0E7O0FBQ0YsV0FBSyxhQUFMO0FBQ0UsYUFBS2lCLE1BQUwsR0FBYyxJQUFJRyw0RUFBSixDQUFzQkwsZ0JBQXRCLEVBQXdDLEtBQUtmLFFBQTdDLENBQWQ7QUFDQTs7QUFDRjtBQUNFLGFBQUtpQixNQUFMLEdBQWMsSUFBSUcsNEVBQUosQ0FBc0JMLGdCQUF0QixFQUF3QyxLQUFLZixRQUE3QyxDQUFkO0FBQ0E7QUFaSjs7QUFlQSxTQUFLcUIsUUFBTCxHQUFnQixFQUFoQjtBQUNBLFFBQU1DLFlBQVksR0FBR0MsUUFBUSxDQUFDQyxnQkFBVCxDQUEwQixxQkFBMUIsQ0FBckI7O0FBQ0EsU0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHSCxZQUFZLENBQUNJLE1BQWpDLEVBQXlDRCxDQUFDLEVBQTFDLEVBQThDO0FBQzVDLFVBQU0xQixFQUFFLEdBQUd1QixZQUFZLENBQUNHLENBQUQsQ0FBdkI7QUFDQSxVQUFNRSxFQUFFLEdBQUc1QixFQUFFLENBQUM2QixZQUFILENBQWdCLGlCQUFoQixDQUFYO0FBQ0EsV0FBS1AsUUFBTCxDQUFjTSxFQUFkLElBQW9CLElBQUlFLDhFQUFKLENBQW9CL0IsNkNBQUMsQ0FBQ0MsRUFBRCxDQUFyQixDQUFwQjtBQUNEOztBQUVELFNBQUsrQixTQUFMLEdBQWlCLElBQUlDLHdFQUFKLENBQWM7QUFDN0JsQyxTQUFHLEVBQUUsS0FBS0EsR0FEbUI7QUFFN0JtQyxpQkFBVyxFQUFFLEtBQUsxQjtBQUZXLEtBQWQsQ0FBakI7QUFLQSxTQUFLMkIsVUFBTCxHQUFrQixJQUFJQyw4RUFBSixDQUNoQlgsUUFBUSxDQUFDWSxhQUFULENBQXVCLG1DQUF2QixDQURnQixDQUFsQjtBQUlBLFNBQUtDLEtBQUwsR0FBYSxJQUFJQyw4Q0FBSixDQUFVLEtBQUt4QyxHQUFmLENBQWI7O0FBRUEsUUFBSSxLQUFLSyxRQUFMLENBQWNvQyxNQUFsQixFQUEwQjtBQUN4QkMscURBQU8sQ0FBQyxLQUFLbEMsUUFBTCxDQUFjSixJQUFkLENBQW1CLG9CQUFuQixDQUFELEVBQTJDLFlBQU07QUFDdEQsYUFBSSxDQUFDdUMsVUFBTDtBQUNELE9BRk0sQ0FBUDtBQUdEOztBQUVELFNBQUszQyxHQUFMLENBQVM0QyxFQUFULENBQVksa0JBQVosRUFBZ0MsVUFBQ0MsS0FBRCxFQUFRekMsSUFBUixFQUFpQjtBQUMvQyxXQUFJLENBQUNPLFVBQUwsQ0FDR21DLElBREgsQ0FDUSx3QkFEUixFQUNrQzFDLElBQUksQ0FBQzJDLFFBQUwsQ0FBY0MsVUFEaEQsRUFFR0MsV0FGSCxDQUVlLFNBRmYsRUFFMEI3QyxJQUFJLENBQUMyQyxRQUFMLENBQWNDLFVBQWQsR0FBMkIsQ0FGckQ7QUFHRCxLQUpEO0FBS0Q7Ozs7d0NBRW1CO0FBQ2xCLFdBQUtFLGlCQUFMOztBQUNBLFdBQUs5QixNQUFMLENBQVkrQixlQUFaO0FBQ0Q7OztzQ0FFaUI7QUFDaEIsV0FBSy9CLE1BQUwsQ0FBWWdDLE1BQVo7QUFDQSxXQUFLbkIsU0FBTCxDQUFlbUIsTUFBZjtBQUNBLFdBQUtoQixVQUFMLENBQWdCZ0IsTUFBaEI7QUFDQSxXQUFLYixLQUFMLENBQVdhLE1BQVg7QUFFQSxXQUFLcEQsR0FBTCxDQUFTcUQsR0FBVCxDQUFhLGtCQUFiOztBQUVBLFVBQUksS0FBS2hELFFBQUwsQ0FBY29DLE1BQWxCLEVBQTBCO0FBQ3hCLGFBQUt4QixVQUFMLENBQWdCb0MsR0FBaEIsQ0FBb0Isa0JBQXBCO0FBQ0Q7QUFDRjs7O3FDQUVnQkMsSSxFQUFNO0FBQ3JCLFVBQUlBLElBQUksS0FBSyxlQUFULElBQTRCQywrQ0FBTSxDQUFDQyxZQUFQLENBQW9CLEdBQXBCLENBQWhDLEVBQTBEO0FBQ3hELGFBQUtOLGlCQUFMO0FBQ0Q7QUFDRjs7O3lDQUVvQk8sSyxFQUFPO0FBQzFCLFVBQUksQ0FBQ0YsK0NBQU0sQ0FBQ0MsWUFBUCxDQUFvQixHQUFwQixDQUFMLEVBQStCO0FBQzdCO0FBQ0Q7O0FBRUQsV0FBS3BDLE1BQUwsQ0FBWXNDLG9CQUFaLENBQWlDRCxLQUFqQztBQUNBLF
1dBQUtyQixVQUFMLENBQWdCdUIsZ0JBQWhCLENBQWlDLEtBQUtuQyxRQUFMLENBQWNpQyxLQUFLLENBQUMzQixFQUFwQixFQUF3QjlCLEdBQXhCLENBQTRCLENBQTVCLENBQWpDO0FBQ0Q7OzsyQ0FFc0J5RCxLLEVBQU87QUFDNUIsV0FBS3JDLE1BQUwsQ0FBWXdDLHNCQUFaLENBQW1DSCxLQUFuQzs7QUFFQSxVQUFJLEtBQUtqQyxRQUFMLENBQWNpQyxLQUFLLENBQUMzQixFQUFwQixDQUFKLEVBQTZCO0FBQzNCLGFBQUtOLFFBQUwsQ0FBY2lDLEtBQUssQ0FBQzNCLEVBQXBCLEVBQXdCOUIsR0FBeEIsQ0FBNEI2RCxXQUE1QixDQUF3Qyx1QkFBeEM7QUFDRDtBQUNGOzs7aUNBRVk7QUFBQTs7QUFDWEMsdUVBQWlCLENBQUNDLElBQWxCLENBQXVCO0FBQ3JCQyx3QkFBZ0IsRUFBRSxLQUFLaEQsU0FERjtBQUVyQmlELHFCQUFhLEVBQUUsUUFGTTtBQUdyQkMsb0JBQVksRUFBRSxLQUFLN0QsUUFBTCxDQUFjOEQsYUFIUDtBQUlyQkMsdUJBQWUsRUFBRSxLQUFLL0QsUUFBTCxDQUFjZ0UsZ0JBSlY7QUFLckJDLHFCQUFhLEVBQUUsS0FBS2pFLFFBQUwsQ0FBY2tFLGNBTFI7QUFNckJDLG1CQUFXLEVBQUUsS0FBS25FLFFBQUwsQ0FBY29FLFlBTk47QUFPckJDLDZCQUFxQixFQUFFLEtBQUtyRSxRQUFMLENBQWNzRSx3QkFQaEI7QUFRckJDLDJCQUFtQixFQUFFLEtBQUt2RSxRQUFMLENBQWN3RTtBQVJkLE9BQXZCO0FBV0EsV0FBSzVELFVBQUwsQ0FBZ0IyQixFQUFoQixDQUFtQixrQkFBbkIsRUFBdUMsVUFBQUMsS0FBSyxFQUFJO0FBQzlDLGNBQUksQ0FBQzVCLFVBQUwsQ0FBZ0I2RCxJQUFoQixDQUFxQixVQUFDQyxLQUFELEVBQVEvRCxTQUFSLEVBQXNCO0FBQ3pDLGNBQUlBLFNBQVMsQ0FBQ2dFLEtBQVYsS0FBb0JuQyxLQUFLLENBQUNvQyxhQUFOLENBQW9CRCxLQUE1QyxFQUFtRDtBQUNqRGhFLHFCQUFTLENBQUNnRSxLQUFWLEdBQWtCbkMsS0FBSyxDQUFDb0MsYUFBTixDQUFvQkQsS0FBdEM7QUFDRDtBQUNGLFNBSkQ7O0FBTUFsQix5RUFBaUIsQ0FBQ29CLFdBQWxCLENBQThCckMsS0FBSyxDQUFDb0MsYUFBTixDQUFvQkQsS0FBbEQ7QUFDRCxPQVJEO0FBU0Q7Ozt3Q0FFbU
1I7QUFDbEIsVUFBTUcsSUFBSSxHQUFHQyxNQUFNLENBQUNELElBQVAsQ0FBWSxLQUFLM0QsUUFBakIsQ0FBYjs7QUFDQSxXQUFLLElBQUlJLENBQUMsR0FBRyxDQUFiLEVBQWdCdUQsSUFBSSxDQUFDdEQsTUFBTCxHQUFjRCxDQUE5QixFQUFpQ0EsQ0FBQyxFQUFsQyxFQUFzQztBQUNwQyxhQUFLSixRQUFMLENBQWMyRCxJQUFJLENBQUN2RCxDQUFELENBQWxCLEVBQXVCNUIsR0FBdkIsQ0FBMkI2RCxXQUEzQixDQUF1Qyx1QkFBdkM7QUFDRDtBQUNGIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvc2VjdGlvbnMvU3RhdGljU2VjdGlvbkhlYWRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgQ3VycmVuY3lDb252ZXJ0ZXIgZnJvbSAnc2hvcGlmeS1jdXJyZW5jeS1jb252ZXJ0ZXInO1xuaW1wb3J0ICRzY3JpcHQgZnJvbSAnc2NyaXB0anMnO1xuXG5pbXBvcnQgRm9ybXMgZnJvbSAnLi4vRm9ybXMnO1xuaW1wb3J0IGxheW91dCBmcm9tICcuLi9MYXlvdXQnO1xuaW1wb3J0IFRyYWRpdGlvbmFsSGVhZGVyIGZyb20gJy4uL2NvbXBvbmVudHMvaGVhZGVyL1RyYWRpdGlvbmFsSGVhZGVyJztcbmltcG9ydCBNaW5pbWFsSGVhZGVyIGZyb20gJy4uL2NvbXBvbmVudHMvaGVhZGVyL01pbmltYWxIZWFkZXInO1xuaW1wb3J0IEJhc2ljSGVhZGVyIGZyb20gJy4uL2NvbXBvbmVudHMvaGVhZGVyL0Jhc2ljSGVhZGVyJztcbmltcG9ydCBOYXZNb2JpbGUgZnJvbSAnLi4vY29tcG9uZW50cy9uYXZpZ2F0aW9uL05hdk1vYmlsZSc7XG5pbXBvcnQgTWVnYU5hdlNjcm9sbGVyIGZyb20gJy4uL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9NZWdhTmF2U2Nyb2xsZXInO1xuaW1wb3J0IE5hdkRlc2t0b3BNZW51IGZyb20gJy4uL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9OYXZEZXNrdG9wTWVudSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRpY1NlY3Rpb25IZWFkZXIge1xuICBjb25zdHJ1Y3RvcihzZWN0aW9uKSB7XG4gICAgdGhpcy4kZWwgPSAkKHNlY3Rpb24uZWwpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZWN0aW9uLmRhdGEuc2V0dGluZ3M7XG4gICAgdGhpcy5jdXJyZW5jeSA9IHNlY3Rpb24uZGF0YS5jdXJyZW5jeTtcbiAgICB0aGlzLnBvc3RNZXNzYWdlID0gc2VjdGlvbi5wb3N0TWVzc2FnZTtcbiAgICB0aGlzLmhlYWRlclNlYXJjaCA9IG51bGw7XG5cbiAgICB0aGlzLiRzY3JpcHRzID0gJCgnW2RhdGEtc2NyaXB0c10nKTtcblxuICAgIHRoaXMuJG1lbnVUb2dnbGUgPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1tZW51LXRvZ2dsZV0nKTtcbiAgICB0aGlzLiRjYXJ0Q291bnQgPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1oZWFkZXItY2FydC1jb3VudF0nKTtcbiAgICB0aGlzLiRzZWFyY2hGaWVsZCA9IHRoaXMuJGVsLmZpbmQoJ1tkYXRhLWxpdmUtc2VhcmNoXScpO1xuXG4gICAgdGhpcy4kc2l0ZU5hdmlnYXRpb24gPSB0aGlzLiRlbC5maW5kKCdbZGF0YS1zaXRlLW5hdmlnYXRpb25dJyk7XG4gICAgdGhpcy4kZGVza3RvcE5hdmlnYXRpb24gPSB0aGlzLiRzaXRlTmF2aWdhdGlvbi5maW5kKCd1bC5uYXZtZW51LWRlcHRoLTEnKTtcbiAgICB0aGlzLiRoZWFkZXJUb29scyA9IHRoaXMuJHNpdGVOYXZpZ2F0aW9uLmZpbmQoJ1tkYXRhLWhlYWRlci1hY3Rpb25zXScpO1xuXG4gICAgdGhpcy5jb252ZXJ0ZXIgPSAnW2RhdGEtY3VycmVuY3ktY29udmVydGVyXSc7XG4gICAgdGhpcy4kY29udmVydGVyID0gJCh0aGlzLmNvbnZlcnRlcik7XG5cbiAgICBjb25zdCBoZWFkZXJQcm9wZXJ0aWVzID0ge1xuICAgICAgc2VjdGlvbjogc2VjdGlvbi5lbCxcbiAgICAgIHBvc3RNZXNzYWdlOiB0aGlzLnBvc3RNZXNzYWdlLFxuICAgICAgJHNjcmlwdHM6IHRoaXMuJHNjcmlwdHMsXG4gICAgfTtcblxuICAgIHN3aXRjaCAodGhpcy5zZXR0aW5ncy5oZWFkZXJfbGF5b3V0KSB7XG4gICAgICBjYXNlICdtaW5pbWFsJzpcbiAgICAgICAgdGhpcy5oZWFkZXIgPSBuZXcgTWluaW1hbEhlYWRlcihoZWFkZXJQcm9wZXJ0aWVzLCB0aGlzLnNldHRpbmdzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdiYXNpYyc6XG4gICAgICAgIHRoaXMuaGVhZGVyID0gbmV3IEJhc2ljSGVhZGVyKGhlYWRlclByb3BlcnRpZXMsIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RyYWRpdGlvbmFsJzpcbiAgICAgICAgdGhpcy5oZWFkZXIgPSBuZXcgVHJhZGl0aW9uYWxIZWFkZXIoaGVhZGVyUHJvcGVydGllcywgdGhpcy5zZXR0aW5ncyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5oZWFkZXIgPSBuZXcgVHJhZGl0aW9uYWxIZWFkZXIoaGVhZGVyUHJvcGVydGllcywgdGhpcy5zZXR0aW5ncyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMubWVnYU5hdnMgPSB7fTtcbiAgICBjb25zdCBtZWdhbmF2TWVudXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tZWdhbmF2LW1lbnVdJyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZWdhbmF2TWVudXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsID0gbWVnYW5hdk1lbnVzW2ldO1xuICAgICAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWVnYW5hdi1pZCcpO1xuICAgICAgdGhpcy5tZWdhTmF2c1tpZF0gPSBuZXcgTWVnYU5hdlNjcm9sbGVyKCQoZWwpKTtcbiAgICB9XG5cbiAgICB0aGlzLm5hdk1vYmlsZSA9IG5ldyBOYXZNb2JpbGUoe1xuICAgICAgJGVsOiB0aGlzLiRlbCxcbiAgICAgICR0b2dnbGVPcGVuOiB0aGlzLiRtZW51VG9nZ2xlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYXZEZXNrdG9wID0gbmV3IE5hdkRlc2t0b3BNZW51KFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNpdGUtbmF2aWdhdGlvbiA+IFtkYXRhLW5hdm1lbnVdJyksXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXMgPSBuZXcgRm9ybXModGhpcy4kZWwpO1xuXG4gICAgaWYgKHRoaXMuY3VycmVuY3kuZW5hYmxlKSB7XG4gICAgICAkc2NyaXB0KHRoaXMuJHNjcmlwdHMuZGF0YSgnc2hvcGlmeS1jdXJyZW5jaWVzJyksICgpID0+IHtcbiAgICAgICAgdGhpcy5fY29udmVydGVyKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLiRlbC5vb
1ignY2FydGNvdW50OnVwZGF0ZScsIChldmVudCwgZGF0YSkgPT4ge1xuICAgICAgdGhpcy4kY2FydENvdW50XG4gICAgICAgIC5hdHRyKCdkYXRhLWhlYWRlci1jYXJ0LWNvdW50JywgZGF0YS5yZXNwb25zZS5pdGVtX2NvdW50KVxuICAgICAgICAudG9nZ2xlQ2xhc3MoJ3Zpc2libGUnLCBkYXRhLnJlc3BvbnNlLml0ZW1fY291bnQgPiAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VjdGlvbkRlc2VsZWN0KCkge1xuICAgIHRoaXMuX2Nsb3NlQWxsTWVnYW5hdnMoKTtcbiAgICB0aGlzLmhlYWRlci5zZWN0aW9uRGVzZWxlY3QoKTtcbiAgfVxuXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLmhlYWRlci51bmxvYWQoKTtcbiAgICB0aGlzLm5hdk1vYmlsZS51bmxvYWQoKTtcbiAgICB0aGlzLm5hdkRlc2t0b3AudW5sb2FkKCk7XG4gICAgdGhpcy5mb3Jtcy51bmxvYWQoKTtcblxuICAgIHRoaXMuJGVsLm9mZignY2FydGNvdW50OnVwZGF0ZScpO1xuXG4gICAgaWYgKHRoaXMuY3VycmVuY3kuZW5hYmxlKSB7XG4gICAgICB0aGlzLiRjb252ZXJ0ZXIub2ZmKCdjaGFuZ2UuY29udmVydGVyJyk7XG4gICAgfVxuICB9XG5cbiAgb25TZWN0aW9uTWVzc2FnZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgPT09ICduYXY6Y2xvc2UtYWxsJyAmJiBsYXlvdXQuaXNCcmVha3BvaW50KCdMJykpIHtcbiAgICAgIHRoaXMuX2Nsb3NlQWxsTWVnYW5hdnMoKTtcbiAgICB9XG4gIH1cblxuICBvblNlY3Rpb25CbG9ja1NlbGVjdChibG9jaykge1xuICAgIGlmICghbGF5b3V0LmlzQnJlYWtwb2ludCgnTCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5oZWFkZXIub25TZWN0aW9uQmxvY2tTZWxlY3QoYmxvY2spO1xuICAgIHRoaXMubmF2RGVza3RvcC5vcGVuTWVnYW5hdkJsb2NrKHRoaXMubWVnYU5hdnNbYmxvY2suaWRdLiRlbFswXSk7XG4gIH1cblxuICBvblNlY3Rpb25CbG9ja0Rlc2VsZWN0KGJsb2NrKSB7XG4gICAgdGhpcy5oZWFkZXIub25TZWN0aW9uQmxvY2tEZXNlbGVjdChibG9jayk7XG5cbiAgICBpZiAodGhpcy5tZWdhTmF2c1tibG9jay5pZF0pIHtcbiAgICAgIHRoaXMubWVnYU5hdnNbYmxvY2suaWRdLiRlbC5yZW1vdmVDbGFzcygnbWVnYW5hdi1lZGl0aW5nLWJsb2NrJyk7XG4gICAgfVxuICB9XG5cbiAgX2NvbnZlcnRlcigpIHtcbiAgICBDdXJyZW5jeUNvbnZlcnRlci5pbml0KHtcbiAgICAgIHN3aXRjaGVyU2VsZWN0b3I6IHRoaXMuY29udmVydGVyLFxuICAgICAgcHJpY2VTZWxlY3RvcjogJy5tb25leScsXG4gICAgICBzaG9wQ3VycmVuY3k6IHRoaXMuY3VycmVuY3kuc2hvcF9jdXJyZW5jeSxcbiAgICAgIGRlZmF1bHRDdXJyZW5jeTogdGhpcy5jdXJyZW5jeS5kZWZhdWx0X2N1cnJlbmN5LFxuICAgICAgZGlzcGxheUZvcm1hdDogdGhpcy5jdXJyZW5jeS5kaXNwbGF5X2Zvcm1hdCxcbiAgICAgIG1vbmV5Rm9ybWF0OiB0aGlzLmN1cnJlbmN5Lm1vbmV5X2Zvcm1hdCxcbiAgICAgIG1vbmV5Rm9ybWF0Tm9DdXJyZW5jeTogdGhpcy5jdXJyZW5jeS5tb25leV9mb3JtYXRfbm9fY3VycmVuY3ksXG4gICAgICBtb25leUZvcm1hdEN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5Lm1vbmV5X2Zvcm1hdF9jdXJyZW5jeSxcbiAgICB9KTtcblxuICAgIHRoaXMuJGNvbnZlcnRlci5vbignY2hhbmdlLmNvbnZlcnRlcicsIGV2ZW50ID0+IHtcbiAgICAgIHRoaXMuJGNvbnZlcnRlci5lYWNoKChpbmRleCwgY29udmVydGVyKSA9PiB7XG4gICAgICAgIGlmIChjb252ZXJ0ZXIudmFsdWUgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWUpIHtcbiAgICAgICAgICBjb252ZXJ0ZXIudmFsdWUgPSBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgQ3VycmVuY3lDb252ZXJ0ZXIuc2V0Q3VycmVuY3koZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBfY2xvc2VBbGxNZWdhbmF2cygpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5tZWdhTmF2cyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGtleXMubGVuZ3RoIDwgaTsgaSsrKSB7XG4gICAgICB0aGlzLm1lZ2FOYXZzW2tleXNbaV1dLiRlbC5yZW1vdmVDbGFzcygnbWVnYW5hdi1lZGl0aW5nLWJsb2NrJyk7XG4gICAgfVxuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticSectionHeader.js\n')},
1"./source/scripts/sections/StaticSlideshow.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return StaticSlideshow; });\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! just-debounce */ \"./node_modules/just-debounce/index.js\");\n/* harmony import */ var just_debounce__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(just_debounce__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flickity */ \"./node_modules/flickity/js/index.js\");\n/* harmony import */ var flickity__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flickity__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Layout */ \"./source/scripts/Layout.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\nvar StaticSlideshow =\n/*#__PURE__*/\nfunction () {\n function StaticSlideshow(section) {\n _classCallCheck(this, StaticSlideshow);\n\n this.el = section.el;\n this.settings = section.data;\n this.$window = jquery__WEBPACK_IMPORTED_MODULE_2___default()(window);\n this.carousel = this.el.querySelector('.slideshow');\n this.slides = '.slideshow-slide';\n this.container = this.el.querySelector('.slideshow-height-fullscreen');\n this.isFullscreen = !!this.container;\n this.selectBlockOnLoad = true;\n this.continueAutoplay = true;\n this.stopAutoplay = false;\n this.autoplayTimeout = 0;\n this.$firstSlideImage = null;\n this.flickity = null;\n this.flickityOptions = null;\n\n if (this.carousel && this.carousel.querySelectorAll(this.slides).length > 1) {\n this._initSlider();\n }\n }\n\n _createClass(StaticSlideshow, [{\n key: \"_initSlider\",\n value: function _initSlider() {\n var _this = this;\n\n this.flickityOptions = {\n autoPlay: this.settings.enable_autoplay ? this.settings.autoplay_duration * 1000 : false,\n setGallerySize: !this.isFullscreen,\n pauseAutoPlayOnHover: false,\n accessibility: true,\n adaptiveHeight: true,\n cellAlign: 'left',\n cellSelector: this.slides,\n contain: true,\n wrapAround: true,\n arrowShape: {\n x0: 10,\n x1: 60,\n y1: 50,\n x2: 65,\n y2: 45,\n x3: 20\n }\n };\n this.$firstSlideImage = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this.slides, this.carousel).find('img[data-rimg]').first();\n\n var initFlickity = function initFlickity() {\n _this.flickity = new flickity__WEBPACK_IMPORTED_MODULE_1___default.a(_this.carousel, _this.flickityOptions);\n\n _this._bindEvents();\n }; // If image isn't lazy loaded, it may load before\n // this JS runs, so we need to check\n\n\n if (this.$firstSlideImage.length && !this.$firstSlideImage[0].complete) {\n var loadEventName = this.settings.lazyLoad ? 'rimg:load' : 'load';\n this.$firstSlideImage.one(loadEventName, initFlickity);\n } else {\n initFlickity();\n }\n }\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents() {\n var _this2 = this;\n\n this._slideshowHeight();\n\n this._positionDots();\n\n this._changeArrrowColors();\n\n this.$window.on('resize.slideshow', just_debounce__WEBPACK_IMPORTED_MODULE_0___default()(function () {\n _this2._slideshowHeight();\n\n _this2._positionDots();\n\n _this2._changeArrrowColors();\n }));\n this.flickity.on('select', function () {\n _this2._slideshowHeight();\n\n _this2._positionDots();\n\n _this2._changeArrrowColors();\n\n _this2.selectBlockOnLoad = false;\n\n if (_this2.settings.enable_autoplay && !_this2.stopAutoplay) {\n _this2.flickity.pausePlayer();\n\n if (_this2.continueAutoplay) {\n _this2.autoplayTimeout = 0;\n } else {\n _this2.autoplayTimeout = 10000;\n }\n\n _this2.continueAutoplay = true;\n setTimeout(function () {\n _this2.flickity.playPlayer();\n }, _this2.autoplayTimeout);\n }\n });\n this.flickity.on('dragStart', function () {\n _this2.continueAutoplay = false;\n });\n\n this.stopAutoplaying = function () {\n _this2.stopAutoplay = true;\n\n _this2.flickity.stopPlayer();\n }; // For users that need to use a keyboard for navigation, we want to pause the player\n // when they are focused on it, and we also want to slide to the slide their focus is on.\n\n\n this.slideElements = this.el.querySelectorAll(this.slides);
1\n this.slideElements.forEach(function (slide) {\n slide.addEventListener('focusin', function () {\n _this2.stopAutoplaying();\n\n var $slides = jquery__WEBPACK_IMPORTED_MODULE_2___default()(_this2.slides);\n var $slide = jquery__WEBPACK_IMPORTED_MODULE_2___default()(slide);\n var slideIndex = $slides.index($slide);\n\n _this2.flickity.select(slideIndex, false, true);\n });\n }); // For screen readers, we will add a live region that is hidden to users,\n // but is read when clicking the nagivation buttons\n\n this.liveregion = document.createElement('div');\n this.liveregion.setAttribute('aria-live', 'polite');\n this.liveregion.setAttribute('class', 'live-region visually-hidden');\n this.el.appendChild(this.liveregion);\n\n this.handleManualSlideChange = function () {\n _this2.stopAutoplaying();\n\n _this2.liveregion.textContent = \"Slide autoplay stopped.\\n On slide \".concat(_this2.flickity.selectedIndex + 1, \" of \").concat(_this2.flickity.slides.length);\n }; // stop autoplaying if a user has interacted with the slideshow next/previous buttons\n\n\n this.el.querySelector('.flickity-prev-next-button.next').addEventListener('click', this.handleManualSlideChange);\n this.el.querySelector('.flickity-prev-next-button.previous').addEventListener('click', this.handleManualSlideChange);\n }\n }, {\n key: \"_positionDots\",\n value: function _positionDots() {\n var pageDots = this.el.querySelector('.flickity-page-dots');\n var top = 'auto';\n\n if (_Layout__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isBreakpoint('XS') && !this.isFullscreen) {\n var content = this.flickity.selectedElement.querySelector('.slideshow-slide-content');\n var height = this.flickity.selectedElement.querySelector('.slideshow-background').offsetHeight;\n var dotGutter = 5;\n\n if (content) {\n top = \"\".concat(height + dotGutter, \"px\");\n } else {\n var pageDotsHeight = pageDots.offsetHeight;\n var dotBottomGutter = 20; // If no content, and mobile, offset by height of dots, and the bottom gutter\n\n top = \"\".concat(height - (pageDotsHeight + dotBottomGutter), \"px\");\n }\n }\n\n pageDots.style.top = top;\n }\n }, {\n key: \"_changeArrrowColors\",\n value: function _changeArrrowColors() {\n var currentColor = this.flickity.selectedElement.querySelector('.slideshow-background').dataset;\n var dots = this.el.querySelectorAll('.flickity-page-dots .dot');\n\n if (_Layout__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isBreakpoint('XS') && !this.isFullscreen) {\n currentColor = currentColor.themecolor;\n } else {\n currentColor = currentColor.slidecolor;\n }\n\n this.el.querySelector('.flickity-prev-next-button.previous svg').style.fill = currentColor;\n this.el.querySelector('.flickity-prev-next-button.next svg').style.fill = currentColor;\n\n for (var i = 0; i < dots.length; i++) {\n dots[i].style.background = currentColor;\n }\n }\n }, {\n key: \"_slideshowHeight\",\n value: function _slideshowHeight() {\n if (this.isFullscreen) {\n var offsetHeight = document.querySelector('[data-site-header]').getBoundingClientRect().height;\n var announcement = document.querySelector('.site-announcement');\n\n if (announcement) {\n offsetHeight += announcement.getBoundingClientRect().height;\n }\n\n this.el.querySelector('.flickity-viewport').style.height = \"calc(100vh - \".concat(offsetHeight, \"px)\");\n this.container.style.height = \"calc(100vh - \".concat(offsetHeight, \"px)\");\n }\n }\n }, {\n key: \"onSectionUnload\",\n value: function onSectionUnload() {\n this._destroyFlickity();\n\n this.$window.off('.slideshow');\n this.$firstSlideImage.off('rimg:load');\n }\n }, {\n key: \"_destroyFlickity\",\n value: function _destroyFlickity() {\n if (!this.flickity) {\n return;\n }\n\n this.flickity.destroy();\n }\n }, {\n key: \"onSectionBlockSelect\",\n value: function onSectionBlockSelect(block) {\n var _this3 = this;\n\n setTimeout(function () {\n _this3.flickity.resize();\n }, 100);\n var $slides = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this.slides);\n var $slide = jquery__WEBPACK_IMPORTED_MODULE_2___default()(block.el);\n var slideIndex = $slides.index($slide);\n\n if (this.settings.enable_autoplay) {\n this.stopAutoplay = true;\n this.flickity.pausePlayer();\n }\n\n if (!$slide.hasClass('is-selected') && !this.selectBlockOnLoad) {\n this.flickity.select(slideIndex, false, false);\n } else if (this.selectBlockOnLoad) {\n this.flickity.select(slideIndex, false, true);\n }\n }\n }, {\n key: \"onSectionBlockDeselect\",\n value: function onSectionBlockDeselect() {\n if (this.settings.enable_autoplay) {\n this.stopAutoplay = false;\n this.flickity.playPlayer();\n }\n }\n }]);\n\n return StaticSlideshow;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNTbGlkZXNob3cuanM/Zjg3ZiJdLCJuYW1lcyI6WyJTdGF0aWNTbGlkZXNob3ciLCJzZWN0aW9uIiwiZWwiLCJzZXR0aW5ncyIsImRhdGEiLCIkd2luZG93IiwiJCIsIndpbmRvdyIsImNhcm91c2VsIiwicXVlcnlTZWxlY3RvciIsInNsaWRlcyIsImNvbn
1RhaW5lciIsImlzRnVsbHNjcmVlbiIsInNlbGVjdEJsb2NrT25Mb2FkIiwiY29udGludWVBdXRvcGxheSIsInN0b3BBdXRvcGxheSIsImF1dG9wbGF5VGltZW91dCIsIiRmaXJzdFNsaWRlSW1hZ2UiLCJmbGlja2l0eSIsImZsaWNraXR5T3B0aW9ucyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJfaW5pdFNsaWRlciIsImF1dG9QbGF5IiwiZW5hYmxlX2F1dG9wbGF5IiwiYXV0b3BsYXlfZHVyYXRpb24iLCJzZXRHYWxsZXJ5U2l6ZSIsInBhdXNlQXV0b1BsYXlPbkhvdmVyIiwiYWNjZXNzaWJpbGl0eSIsImFkYXB0aXZlSGVpZ2h0IiwiY2VsbEFsaWduIiwiY2VsbFNlbGVjdG9yIiwiY29udGFpbiIsIndyYXBBcm91bmQiLCJhcnJvd1NoYXBlIiwieDAiLCJ4MSIsInkxIiwieDIiLCJ5MiIsIngzIiwiZmluZCIsImZpcnN0IiwiaW5pdEZsaWNraXR5IiwiRmxpY2tpdHkiLCJfYmluZEV2ZW50cyIsImNvbXBsZXRlIiwibG9hZEV2ZW50TmFtZSIsImxhenlMb2FkIiwib25lIiwiX3NsaWRlc2hvd0hlaWdodCIsIl9wb3NpdGlvbkRvdHMiLCJfY2hhbmdlQXJycm93Q29sb3JzIiwib24iLCJkZWJvdW5jZSIsInBhdXNlUGxheWVyIiwic2V0VGltZW91dCIsInBsYXlQbGF5ZXIiLCJzdG9wQXV0b3BsYXlpbmciLCJzdG9wUGxheWVyIiwic2xpZGVFbGVtZW50cyIsImZvckVhY2giLCJzbGlkZSIsImFkZEV2ZW50TGlzdGVuZXIiLCIkc2xpZGVzIiwiJHNsaWRlIiwic2xpZGVJbmRleCIsImluZGV4Iiwic2VsZWN0IiwibGl2ZXJlZ2lvbiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiaGFuZGxlTWFudWFsU2xpZGVDaGFuZ2UiLCJ0ZXh0Q29udGVudCIsInNlbGVjdGVkSW5kZXgiLCJwYWdlRG90cyIsInRvcCIsImxheW91dCIsImlzQnJlYWtwb2ludCIsImNvbnRlbnQiLCJzZWxlY3RlZEVsZW1lbnQiLCJoZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJkb3RHdXR0ZXIiLCJwYWdlRG90c0hlaWdodCIsImRvdEJvdHRvbUd1dHRlciIsInN0eWxlIiwiY3VycmVudENvbG9yIiwiZGF0YXNldCIsImRvdHMiLCJ0aGVtZWNvbG9yIiwic2xpZGVjb2xvciIsImZpbGwiLCJpIiwiYmFja2dyb3VuZCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImFubm91bmNlbWVudCIsIl9kZXN0cm95RmxpY2tpdHkiLCJvZmYiLCJkZXN0cm95IiwiYmxvY2siLCJyZXNpemUiLCJoYXNDbGFzcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0lBRXFCQSxlOzs7QUFDbkIsMkJBQVlDLE9BQVosRUFBcUI7QUFBQTs7QUFDbkIsU0FBS0MsRUFBTCxHQUFVRCxPQUFPLENBQUNDLEVBQWxCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQkYsT0FBTyxDQUFDRyxJQUF4QjtBQUNBLFNBQUtDLE9BQUwsR0FBZUMsNkNBQUMsQ0FBQ0MsTUFBRCxDQUFoQjtBQUVBLFNBQUtDLFFBQUwsR0FBZ0IsS0FBS04sRUFBTCxDQUFRTyxhQUFSLENBQXNCLFlBQXRCLENBQWhCO0FBQ0EsU0FBS0MsTUFBTCxHQUFjLGtCQUFkO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixLQUFLVCxFQUFMLENBQVFPLGFBQVIsQ0FBc0IsOEJBQXRCLENBQWpCO0FBQ0EsU0FBS0csWUFBTCxHQUFvQixDQUFDLENBQUMsS0FBS0QsU0FBM0I7QUFDQSxTQUFLRSxpQkFBTCxHQUF5QixJQUF6QjtBQUNBLFNBQUtDLGdCQUFMLEdBQXdCLElBQXhCO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQixLQUFwQjtBQUNBLFNBQUtDLGVBQUwsR0FBdUIsQ0FBdkI7QUFDQSxTQUFLQyxnQkFBTCxHQUF3QixJQUF4QjtBQUVBLFNBQUtDLFFBQUwsR0FBZ0IsSUFBaEI7QUFDQSxTQUFLQyxlQUFML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UwsQ0FBY3FCLGVBQWxCLEVBQW1DO0FBQ2pDLGFBQUtULFlBQUwsR0FBb0IsSUFBcEI7QUFDQSxhQUFLRyxRQUFMLENBQWNxQyxXQUFkO0FBQ0Q7O0FBRUQsVUFBSSxDQUFDVSxNQUFNLENBQUN1QyxRQUFQLENBQWdCLGFBQWhCLENBQUQsSUFBbUMsQ0FBQyxLQUFLM0YsaUJBQTdDLEVBQWdFO0FBQzlELGFBQUtLLFFBQUwsQ0FBY2tELE1BQWQsQ0FBcUJGLFVBQXJCLEVBQWlDLEtBQWpDLEVBQXdDLEtBQXhDO0FBQ0QsT0FGRCxNQUVPLElBQUksS0FBS3JELGlCQUFULEVBQTRCO0FBQ2pDLGFBQUtLLFFBQUwsQ0FBY2tELE1BQWQsQ0FBcUJGLFVBQXJCLEVBQWlDLEtBQWpDLEVBQXdDLElBQXhDO0FBQ0Q7QUFDRjs7OzZDQUV3QjtBQUN2QixVQUFJLEtBQUsvRCxRQUFMLENBQWNxQixlQUFsQixFQUFtQztBQUNqQyxhQUFLVCxZQUFMLEdBQW9CLEtBQXBCO0FBQ0EsYUFBS0csUUFBTCxDQUFjdUMsVUFBZDtBQUNEO0FBQ0YiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNTbGlkZXNob3cuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVib3VuY2UgZnJvbSAnanVzdC1kZWJvdW5jZSc7XG5pbXBvcnQgRmxpY2tpdHkgZnJvbSAnZmxpY2tpdHknO1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBsYXlvdXQgZnJvbSAnLi4vTGF5b3V0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGljU2xpZGVzaG93IHtcbiAgY29uc3RydWN0b3Ioc2VjdGlvbikge1xuICAgIHRoaXMuZWwgPSBzZWN0aW9uLmVsO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZWN0aW9uLmRhdGE7XG4gICAgdGhpcy4kd2luZG93ID0gJCh3aW5kb3cpO1xuXG4gICAgdGhpcy5jYXJvdXNlbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLnNsaWRlc2hvdycpO1xuICAgIHRoaXMuc2xpZGVzID0gJy5zbGlkZXNob3ctc2xpZGUnO1xuICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuc2xpZGVzaG93LWhlaWdodC1mdWxsc2NyZWVuJyk7XG4gICAgdGhpcy5pc0Z1bGxzY3JlZW4gPSAhIXRoaXMuY29udGFpbmVyO1xuICAgIHRoaXMuc2VsZWN0QmxvY2tPbkxvYWQgPSB0cnVlO1xuICAgIHRoaXMuY29udGludWVBdXRvcGxheSA9IHRydWU7XG4gICAgdGhpcy5zdG9wQXV0b3BsYXkgPSBmYWxzZTtcbiAgICB0aGlzLmF1dG9wbGF5VGltZW91dCA9IDA7XG4gICAgdGhpcy4kZmlyc3RTbGlkZUltYWdlID0gbnVsbDtcblxuICAgIHRoaXMuZmxpY2tpdHkgPSBudWxsO1xuICAgIHRoaXMuZmxpY2tpdHlPcHRpb25zID0gbnVsbDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuY2Fyb3VzZWxcbiAgICAgICYmIHRoaXMuY2Fyb3VzZWwucXVlcnlTZWxlY3RvckFsbCh0aGlzLnNsaWRlcykubGVuZ3RoID4gMVxuICAgICkge1xuICAgICAgdGhpcy5faW5pdFNsaWRlcigpO1xuICAgIH1cbiAgfVxuXG4gIF9pbml0U2xpZGVyKCkge1xuICAgIHRoaXMuZmxpY2tpdHlPcHRpb25zID0ge1xuICAgICAgYXV0b1BsYXk6IHRoaXMuc2V0dGluZ3MuZW5hYmxlX2F1dG9wbGF5XG4gICAgICAgID8gdGhpcy5zZXR0aW5ncy5hdXRvcGxheV9kdXJhdGlvbiAqIDEwMDBcbiAgICAgICAgOiBmYWxzZSxcbiAgICAgIHNldEdhbGxlcnlTaXplOiAhdGhpcy5pc0Z1bGxzY3JlZW4sXG4gICAgICBwYXVzZUF1dG9QbGF5T25Ib3ZlcjogZmFsc2UsXG4gICAgICBhY2Nlc3NpYmlsaXR5OiB0cnVlLFxuICAgICAgYWRhcHRpdmVIZWlnaHQ6IHRydWUsXG4gICAgICBjZWxsQWxpZ246ICdsZWZ0JyxcbiAgICAgIGNlbGxTZWxlY3RvcjogdGhpcy5zbGlkZXMsXG4gICAgICBjb250YWluOiB0cnVlLFxuICAgICAgd3JhcEFyb3VuZDogdHJ1ZSxcbiAgICAgIGFycm93U2hhcGU6IHtcbiAgICAgICAgeDA6IDEwLFxuICAgICAgICB4MTogNjAsXG4gICAgICAgIHkxOiA1MCxcbiAgICAgICAgeDI6IDY1LFxuICAgICAgICB5MjogNDUsXG4gICAgICAgIHgzOiAyMCxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHRoaXMuJGZpcnN0U2xpZGVJbWFnZSA9ICQodGhpcy5zbGlkZXMsIHRoaXMuY2Fyb3VzZWwpXG4gICAgICAuZmluZCgnaW1nW2RhdGEtcmltZ10nKVxuICAgICAgLmZpcnN0KCk7XG5cbiAgICBjb25zdCBpbml0RmxpY2tpdHkgPSAoKSA9PiB7XG4gICAgICB0aGlzLmZsaWNraXR5ID0gbmV3IEZsaWNraXR5KHRoaXMuY2Fyb3VzZWwsIHRoaXMuZmxpY2tpdHlPcHRpb25zKTtcbiAgICAgIHRoaXMuX2JpbmRFdmVudHMoKTtcbiAgICB9O1xuXG4gICAgLy8gSWYgaW1hZ2UgaXNuJ3QgbGF6eSBsb2FkZWQsIGl0IG1heSBsb2FkIGJlZm9yZVxuICAgIC8vIHRoaXMgSlMgcnVucywgc28gd2UgbmVlZCB0byBjaGVja1xuICAgIGlmICh0aGlzLiRmaXJzdFNsaWRlSW1hZ2UubGVuZ3RoICYmICF0aGlzLiRmaXJzdFNsaWRlSW1hZ2VbMF0uY29tcGxldGUpIHtcbiAgICAgIGNvbnN0IGxvYWRFdmVudE5hbWUgPSB0aGlzLnNldHRpbmdzLmxhenlMb2FkID8gJ3JpbWc6bG9h
1ZCcgOiAnbG9hZCc7XG4gICAgICB0aGlzLiRmaXJzdFNsaWRlSW1hZ2Uub25lKGxvYWRFdmVudE5hbWUsIGluaXRGbGlja2l0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluaXRGbGlja2l0eSgpO1xuICAgIH1cbiAgfVxuXG4gIF9iaW5kRXZlbnRzKCkge1xuICAgIHRoaXMuX3NsaWRlc2hvd0hlaWdodCgpO1xuICAgIHRoaXMuX3Bvc2l0aW9uRG90cygpO1xuICAgIHRoaXMuX2NoYW5nZUFycnJvd0NvbG9ycygpO1xuXG4gICAgdGhpcy4kd2luZG93Lm9uKFxuICAgICAgJ3Jlc2l6ZS5zbGlkZXNob3cnLFxuICAgICAgZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zbGlkZXNob3dIZWlnaHQoKTtcbiAgICAgICAgdGhpcy5fcG9zaXRpb25Eb3RzKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZUFycnJvd0NvbG9ycygpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuZmxpY2tpdHkub24oJ3NlbGVjdCcsICgpID0+IHtcbiAgICAgIHRoaXMuX3NsaWRlc2hvd0hlaWdodCgpO1xuICAgICAgdGhpcy5fcG9zaXRpb25Eb3RzKCk7XG4gICAgICB0aGlzLl9jaGFuZ2VBcnJyb3dDb2xvcnMoKTtcblxuICAgICAgdGhpcy5zZWxlY3RCbG9ja09uTG9hZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5lbmFibGVfYXV0b3BsYXkgJiYgIXRoaXMuc3RvcEF1dG9wbGF5KSB7XG4gICAgICAgIHRoaXMuZmxpY2tpdHkucGF1c2VQbGF5ZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5jb250aW51ZUF1dG9wbGF5KSB7XG4gICAgICAgICAgdGhpcy5hdXRvcGxheVRpbWVvdXQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYXV0b3BsYXlUaW1lb3V0ID0gMTAwMDA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRpbnVlQXV0b3BsYXkgPSB0cnVlO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmxpY2tpdHkucGxheVBsYXllcigpO1xuICAgICAgICB9LCB0aGlzLmF1dG9wbGF5VGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmZsaWNraXR5Lm9uKCdkcmFnU3RhcnQnLCAoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRpbnVlQXV0b3BsYXkgPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcEF1dG9wbGF5aW5nID0gKCkgPT4ge1xuICAgICAgdGhpcy5zdG9wQXV0b3BsYXkgPSB0cnVlO1xuICAgICAgdGhpcy5mbGlja2l0eS5zdG9wUGxheWVyKCk7XG4gICAgfTtcblxuICAgIC8vIEZvciB1c2VycyB0aGF0IG5lZWQgdG8gdXNlIGEga2V5Ym9hcmQgZm9yIG5hdmlnYXRpb24sIHdlIHdhbnQgdG8gcGF1c2UgdGhlIHBsYXllclxuICAgIC8vIHdoZW4gdGhleSBhcmUgZm9jdXNlZCBvbiBpdCwgYW5kIHdlIGFsc28gd2FudCB0byBzbGlkZSB0byB0aGUgc2xpZGUgdGhlaXIgZm9jdXMgaXMgb24uXG4gICAgdGhpcy5zbGlkZUVsZW1lbnRzID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuc2xpZGVzKTtcbiAgICB0aGlzLnNsaWRlRWxlbWVudHMuZm9yRWFjaChzbGlkZSA9PiB7XG4gICAgICBzbGlkZS5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnN0b3BBdXRvcGxheWluZygpO1xuICAgICAgICBjb25zdCAkc2xpZGVzID0gJCh0aGlzLnNsaWRlcyk7XG4gICAgICAgIGNvbnN0ICRzbGlkZSA9ICQoc2xpZGUpO1xuICAgICAgICBjb25zdCBzbGlkZUluZGV4ID0gJHNsaWRlcy5pbmRleCgkc2xpZGUpO1xuICAgICAgICB0aGlzLmZsaWNraXR5LnNlbGVjdChzbGlkZUluZGV4LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEZvciBzY3JlZW4gcmVhZGVycywgd2Ugd2lsbCBhZGQgYSBsaXZlIHJlZ2lvbiB0aGF0IGlzIGhpZGRlbiB0byB1c2VycyxcbiAgICAvLyBidXQgaXMgcmVhZCB3aGVuIGNsaWNraW5nIHRoZSBuYWdpdmF0aW9uIGJ1dHRvbnNcbiAgICB0aGlzLmxpdmVyZWdpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLmxpdmVyZWdpb24uc2V0QXR0cmlidXRlKCdhcmlhLWxpdmUnLCAncG9saXRlJyk7XG4gICAgdGhpcy5saXZlcmVnaW9uLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnbGl2ZS1yZWdpb24gdmlzdWFsbHktaGlkZGVuJyk7XG4gICAgdGhpcy5lbC5hcHBlbmRDaGlsZCh0aGlzLmxpdmVyZWdpb24pO1xuXG4gICAgdGhpcy5oYW5kbGVNYW51YWxTbGlkZUNoYW5nZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuc3RvcEF1dG9wbGF5aW5nKCk7XG4gICAgICB0aGlzLmxpdmVyZWdpb24udGV4dENvbnRlbnQgPSBgU2xpZGUgYXV0b3BsYXkgc3RvcHBlZC5cbiAgICAgICAgT24gc2xpZGUgJHt0aGlzLmZsaWNraXR5LnNlbGVjdGVkSW5kZXggKyAxfSBvZiAke1xuICB0aGlzLmZsaWNraXR5LnNsaWRlcy5sZW5ndGhcbn1gO1xuICAgIH07XG5cbiAgICAvLyBzdG9wIGF1dG9wbGF5aW5nIGlmIGEgdXNlciBoYXMgaW50ZXJhY3RlZCB3aXRoIHRoZSBzbGlkZXNob3cgbmV4dC9wcmV2aW91cyBidXR0b25zXG4gICAgdGhpcy5lbFxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5mbGlja2l0eS1wcmV2LW5leHQtYnV0dG9uLm5leHQnKVxuICAgICAgLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVNYW51YWxTbGlkZUNoYW5nZSk7XG4gICAgdGhpcy5lbFxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5mbGlja2l0eS1wcmV2LW5leHQtYnV0dG9uLnByZXZpb3VzJylcbiAgICAgIC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlTWFudWFsU2xpZGVDaGFuZ2UpO1xuICB9XG5cbiAgX3Bvc2l0aW9uRG90cygpIHtcbiAgICBjb25zdCBwYWdlRG90cyA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLmZsaWNraXR5LXBhZ2UtZG90cycpO1xuICAgIGxldCB0b3AgPSAnYXV0byc7XG5cbiAgICBpZiAobGF5b3V0LmlzQnJlYWtwb2ludCgnWFMnKSAmJiAhdGhpcy5pc0Z1bGxzY3JlZW4pIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmZsaWNraXR5LnNlbGVjdGVkRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnNsaWRlc2hvdy1zbGlkZS1jb250ZW50JyxcbiAgICAgICk7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmZsaWNraXR5LnNlbGVjdGVkRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnNsaWRlc2hvdy1iYWNrZ3JvdW5kJyxcbiAgICAgICkub2Zmc2V0SGVpZ2h0O1xuICAgICAgY29uc3QgZG90R3V0dG
1VyID0gNTtcblxuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgdG9wID0gYCR7aGVpZ2h0ICsgZG90R3V0dGVyfXB4YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhZ2VEb3RzSGVpZ2h0ID0gcGFnZURvdHMub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBkb3RCb3R0b21HdXR0ZXIgPSAyMDtcblxuICAgICAgICAvLyBJZiBubyBjb250ZW50LCBhbmQgbW9iaWxlLCBvZmZzZXQgYnkgaGVpZ2h0IG9mIGRvdHMsIGFuZCB0aGUgYm90dG9tIGd1dHRlclxuICAgICAgICB0b3AgPSBgJHtoZWlnaHQgLSAocGFnZURvdHNIZWlnaHQgKyBkb3RCb3R0b21HdXR0ZXIpfXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYWdlRG90cy5zdHlsZS50b3AgPSB0b3A7XG4gIH1cblxuICBfY2hhbmdlQXJycm93Q29sb3JzKCkge1xuICAgIGxldCBjdXJyZW50Q29sb3IgPSB0aGlzLmZsaWNraXR5LnNlbGVjdGVkRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5zbGlkZXNob3ctYmFja2dyb3VuZCcsXG4gICAgKS5kYXRhc2V0O1xuICAgIGNvbnN0IGRvdHMgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5mbGlja2l0eS1wYWdlLWRvdHMgLmRvdCcpO1xuXG4gICAgaWYgKGxheW91dC5pc0JyZWFrcG9pbnQoJ1hTJykgJiYgIXRoaXMuaXNGdWxsc2NyZWVuKSB7XG4gICAgICBjdXJyZW50Q29sb3IgPSBjdXJyZW50Q29sb3IudGhlbWVjb2xvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudENvbG9yID0gY3VycmVudENvbG9yLnNsaWRlY29sb3I7XG4gICAgfVxuXG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5mbGlja2l0eS1wcmV2LW5leHQtYnV0dG9uLnByZXZpb3VzIHN2ZycsXG4gICAgKS5zdHlsZS5maWxsID0gY3VycmVudENvbG9yO1xuICAgIHRoaXMuZWwucXVlcnlTZWxlY3RvcihcbiAgICAgICcuZmxpY2tpdHktcHJldi1uZXh0LWJ1dHRvbi5uZXh0IHN2ZycsXG4gICAgKS5zdHlsZS5maWxsID0gY3VycmVudENvbG9yO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkb3RzW2ldLnN0eWxlLmJhY2tncm91bmQgPSBjdXJyZW50Q29sb3I7XG4gICAgfVxuICB9XG5cbiAgX3NsaWRlc2hvd0hlaWdodCgpIHtcbiAgICBpZiAodGhpcy5pc0Z1bGxzY3JlZW4pIHtcbiAgICAgIGxldCBvZmZzZXRIZWlnaHQgPSBkb2N1bWVudFxuICAgICAgICAucXVlcnlTZWxlY3RvcignW2RhdGEtc2l0ZS1oZWFkZXJdJylcbiAgICAgICAgLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgIGNvbnN0IGFubm91bmNlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zaXRlLWFubm91bmNlbWVudCcpO1xuXG4gICAgICBpZiAoYW5ub3VuY2VtZW50KSB7XG4gICAgICAgIG9mZnNldEhlaWdodCArPSBhbm5vdW5jZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcuZmxpY2tpdHktdmlld3BvcnQnLFxuICAgICAgKS5zdHlsZS5oZWlnaHQgPSBgY2FsYygxMDB2aCAtICR7b2Zmc2V0SGVpZ2h0fXB4KWA7XG4gICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBgY2FsYygxMDB2aCAtICR7b2Zmc2V0SGVpZ2h0fXB4KWA7XG4gICAgfVxuICB9XG5cbiAgb25TZWN0aW9uVW5sb2FkKCkge1xuICAgIHRoaXMuX2Rlc3Ryb3lGbGlja2l0eSgpO1xuICAgIHRoaXMuJHdpbmRvdy5vZmYoJy5zbGlkZXNob3cnKTtcbiAgICB0aGlzLiRmaXJzdFNsaWRlSW1hZ2Uub2ZmKCdyaW1nOmxvYWQnKTtcbiAgfVxuXG4gIF9kZXN0cm95RmxpY2tpdHkoKSB7XG4gICAgaWYgKCF0aGlzLmZsaWNraXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5mbGlja2l0eS5kZXN0cm95KCk7XG4gIH1cblxuICBvblNlY3Rpb25CbG9ja1NlbGVjdChibG9jaykge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mbGlja2l0eS5yZXNpemUoKTtcbiAgICB9LCAxMDApO1xuXG4gICAgY29uc3QgJHNsaWRlcyA9ICQodGhpcy5zbGlkZXMpO1xuICAgIGNvbnN0ICRzbGlkZSA9ICQoYmxvY2suZWwpO1xuICAgIGNvbnN0IHNsaWRlSW5kZXggPSAkc2xpZGVzLmluZGV4KCRzbGlkZSk7XG5cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5lbmFibGVfYXV0b3BsYXkpIHtcbiAgICAgIHRoaXMuc3RvcEF1dG9wbGF5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmxpY2tpdHkucGF1c2VQbGF5ZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoISRzbGlkZS5oYXNDbGFzcygnaXMtc2VsZWN0ZWQnKSAmJiAhdGhpcy5zZWxlY3RCbG9ja09uTG9hZCkge1xuICAgICAgdGhpcy5mbGlja2l0eS5zZWxlY3Qoc2xpZGVJbmRleCwgZmFsc2UsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0QmxvY2tPbkxvYWQpIHtcbiAgICAgIHRoaXMuZmxpY2tpdHkuc2VsZWN0KHNsaWRlSW5kZXgsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBvblNlY3Rpb25CbG9ja0Rlc2VsZWN0KCkge1xuICAgIGlmICh0aGlzLnNldHRpbmdzLmVuYWJsZV9hdXRvcGxheSkge1xuICAgICAgdGhpcy5zdG9wQXV0b3BsYXkgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmxpY2tpdHkucGxheVBsYXllcigpO1xuICAgIH1cbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticSlideshow.js\n")},
1"./source/scripts/shortcodes/Details.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Details; });\n/* harmony import */ var _Shortcode__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Shortcode */ "./source/scripts/shortcodes/Shortcode.js");\nfunction _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\nvar Details =\n/*#__PURE__*/\nfunction (_Shortcode) {\n _inherits(Details, _Shortcode);\n\n _createClass(Details, null, [{\n key: "shortcode",\n get: function get() {\n return \'details\';\n }\n }]);\n\n function Details(el) {\n var _this;\n\n _classCallCheck(this, Details);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Details).call(this));\n _this.summary = el.querySelector(\'summary\'); // We need to add a wrapper to remove the outline when clicking on the summary.\n // This way there will still be an outline for keyboard users.\n\n var summaryWrapper = document.createElement(\'div\');\n summaryWrapper.setAttribute(\'tabindex\', \'-1\');\n summaryWrapper.classList.add(\'summary-wrapper\');\n summaryWrapper.innerHTML = _this.summary.innerHTML;\n _this.summary.innerHTML = \'\';\n\n _this.summary.appendChild(summaryWrapper);\n\n return _this;\n }\n\n return Details;\n}(_Shortcode__WEBPACK_IMPORTED_MODULE_0__["default"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zaG9ydGNvZGVzL0RldGFpbHMuanM/M2VkYyJdLCJuYW1lcyI6WyJEZXRhaWxzIiwiZWwiLCJzdW1tYXJ5IiwicXVlcnlTZWxlY3RvciIsInN1bW1hcnlXcmFwcGVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiY2xhc3NMaXN0IiwiYWRkIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJTaG9ydGNvZGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztJQUVxQkEsTzs7Ozs7Ozt3QkFDSTtBQUNyQixhQUFPLFNBQVA7QUFDRDs7O0FBRUQsbUJBQVlDLEVBQVosRUFBZ0I7QUFBQTs7QUFBQTs7QUFDZDtBQUVBLFVBQUtDLE9BQUwsR0FBZUQsRUFBRSxDQUFDRSxhQUFILENBQWlCLFNBQWpCLENBQWYsQ0FIYyxDQUtkO0F
1BQ0E7O0FBQ0EsUUFBTUMsY0FBYyxHQUFHQyxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBdkI7QUFDQUYsa0JBQWMsQ0FBQ0csWUFBZixDQUE0QixVQUE1QixFQUF3QyxJQUF4QztBQUNBSCxrQkFBYyxDQUFDSSxTQUFmLENBQXlCQyxHQUF6QixDQUE2QixpQkFBN0I7QUFDQUwsa0JBQWMsQ0FBQ00sU0FBZixHQUEyQixNQUFLUixPQUFMLENBQWFRLFNBQXhDO0FBRUEsVUFBS1IsT0FBTCxDQUFhUSxTQUFiLEdBQXlCLEVBQXpCOztBQUNBLFVBQUtSLE9BQUwsQ0FBYVMsV0FBYixDQUF5QlAsY0FBekI7O0FBYmM7QUFjZjs7O0VBbkJrQ1Esa0QiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zaG9ydGNvZGVzL0RldGFpbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2hvcnRjb2RlIGZyb20gJy4vU2hvcnRjb2RlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGV0YWlscyBleHRlbmRzIFNob3J0Y29kZSB7XG4gIHN0YXRpYyBnZXQgc2hvcnRjb2RlKCkge1xuICAgIHJldHVybiAnZGV0YWlscyc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihlbCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnN1bW1hcnkgPSBlbC5xdWVyeVNlbGVjdG9yKCdzdW1tYXJ5Jyk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIGFkZCBhIHdyYXBwZXIgdG8gcmVtb3ZlIHRoZSBvdXRsaW5lIHdoZW4gY2xpY2tpbmcgb24gdGhlIHN1bW1hcnkuXG4gICAgLy8gVGhpcyB3YXkgdGhlcmUgd2lsbCBzdGlsbCBiZSBhbiBvdXRsaW5lIGZvciBrZXlib2FyZCB1c2Vycy5cbiAgICBjb25zdCBzdW1tYXJ5V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHN1bW1hcnlXcmFwcGVyLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICBzdW1tYXJ5V3JhcHBlci5jbGFzc0xpc3QuYWRkKCdzdW1tYXJ5LXdyYXBwZXInKTtcbiAgICBzdW1tYXJ5V3JhcHBlci5pbm5lckhUTUwgPSB0aGlzLnN1bW1hcnkuaW5uZXJIVE1MO1xuXG4gICAgdGhpcy5zdW1tYXJ5LmlubmVySFRNTCA9ICcnO1xuICAgIHRoaXMuc3VtbWFyeS5hcHBlbmRDaGlsZChzdW1tYXJ5V3JhcHBlcik7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/shortcodes/Details.js\n')},
1"./source/scripts/shortcodes/ProductCTA.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ProductCTA; });\n/* harmony import */ var _Shortcode__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Shortcode */ \"./source/scripts/shortcodes/Shortcode.js\");\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\n\nvar ProductCTA =\n/*#__PURE__*/\nfunction (_Shortcode) {\n _inherits(ProductCTA, _Shortcode);\n\n _createClass(ProductCTA, null, [{\n key: \"shortcode\",\n get: function get() {\n return 'product-cta';\n }\n }]);\n\n function ProductCTA(el) {\n var _this;\n\n _classCallCheck(this, ProductCTA);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ProductCTA).call(this));\n _this.productFormEl = null;\n var parentEl = el.parentElement;\n\n while (parentEl) {\n _this.productFormEl = parentEl.hasAttribute('[data-product-form]') ? parentEl : parentEl.querySelector('[data-product-form]');\n if (_this.productFormEl) break;\n parentEl = parentEl.parentElement;\n }\n\n if (!_this.productFormEl) {\n throw new Error('ProductCTA: No product form found.');\n } // Keep a reference to shortcode element to unhide\n\n\n _this.el = el;\n _this.variantId = el.getAttribute('variant-id'); // Build the call to action element\n\n _this.ctaEl = document.createElement('a');\n\n _this.ctaEl.classList.add('shortcode--product-cta');\n\n if (el.getAttribute('button-style')) {\n _this.ctaEl.setAttribute('button-style', el.getAttribute('button-style'));\n }\n\n if (el.getAttribute('button-size')) {\n _this.ctaEl.setAttribute('button-size', el.getAttribute('button-size'));\n }\n\n _this.ctaEl.href = el.getAttribute('link');\n _this.ctaEl.innerHTML = el.innerHTML; // Remove element from DOM and insert new element into position\n\n _this.el.toggleAttribute('hidden', true);\n\n _this.productFormEl.parentNode.insertBefore(_this.ctaEl, _this.productFormEl.nextSibling);\n\n if (_this.variantId) {\n var variantsEl = _this.productFormEl.querySelector('[data-variants]');\n\n _this._registerEvent({\n el: variantsEl,\n event: 'change',\n listener: _this._onVariantChange.bind(_assertThisInitialized(_this))\n });\n\n _this._setVisible(variantsEl.value === _this.variantId);\n } else {\n _this._setVisible(true);\n }\n\n return _this;\n }\n\n _createClass(ProductCTA, [{\n key: \"unload\",\n value: function unload() {\n _get(_getPrototypeOf(ProductCTA.prototype), \"unload\", this).call(this);\n\n this.productFormEl.parentNode.removeChild(this.ctaEl);\n this.el.toggleAttribute('hidden', false);\n }\n }, {\n key: \"_setVisible\",\n value: function _setVisible(visible) {\n this.ctaEl.toggleAttribute('hidden', !visible);\n }\n }, {\n key: \"_onVariantChange\",\n value: function _onVariantChange(e) {\n this._setVisible(e.currentTarget.value === this.variantId);\n }\n }]);\n\n return ProductCTA;\n}(_Shortcode__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zaG9ydGNvZGVzL1Byb2R1Y3RDVEEuanM/YmE0MCJdLCJuYW1lcyI6WyJQcm9kdWN0Q1RBIiwiZWwiLCJwcm9kdWN0Rm9ybUVsIiwicGFyZW50RWwiLCJwYXJlbnRFbGVtZW50IiwiaGFzQXR0cmlidXRlIiwicXVlcnlTZWxlY3RvciIsIkVycm9yIiwidmFyaWFudElkIiwiZ2V0QXR0cmlidXRlIiwiY3RhRWwiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJzZXRBdHRyaWJ1dGUiLCJocmVmIiwiaW5uZXJIVE1MIiwidG9nZ2xlQXR0cmlidXRlIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsIm5leHRTaWJsaW5nIiwidmFyaWFudHNFbCIsIl9yZWdpc3RlckV2ZW50IiwiZXZlbnQiLCJsaXN0ZW5lciIsIl9vblZhcmlhbnRDaGFuZ2UiLCJiaW5kIiwiX3NldFZpc2libGUiLCJ2YWx1ZSIsInJlbW92ZUNoaWxkIiwidmlzaWJsZSIsImUiLCJjdXJyZW50VGFyZ2V0IiwiU2hvcnRjb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0lBRXFCQSxVOzs7Ozs7O3dCQUNJO0FBQ3JCLGFBQU8sYUFBUDtBQUNEOzs7QUFFRCxzQkFBWUMsRUFBWixFQUFnQjtBQUFBOztBQUFBOztBQUNkO0FBRUEsVUFBS0MsYUFBTCxHQUFxQixJQUFyQjtBQUNBLFFBQUlDLFFBQVEsR0FBR0YsRUFBRSxDQUFDRyxhQUFsQjs7QUFFQSxXQUFPRCxRQUFQLEVBQWlCO0F
1BQ2YsWUFBS0QsYUFBTCxHQUFxQkMsUUFBUSxDQUFDRSxZQUFULENBQXNCLHFCQUF0QixJQUErQ0YsUUFBL0MsR0FBMERBLFFBQVEsQ0FBQ0csYUFBVCxDQUF1QixxQkFBdkIsQ0FBL0U7QUFFQSxVQUFJLE1BQUtKLGFBQVQsRUFBd0I7QUFFeEJDLGNBQVEsR0FBR0EsUUFBUSxDQUFDQyxhQUFwQjtBQUNEOztBQUVELFFBQUksQ0FBQyxNQUFLRixhQUFWLEVBQXlCO0FBQ3ZCLFlBQU0sSUFBSUssS0FBSixDQUFVLG9DQUFWLENBQU47QUFDRCxLQWhCYSxDQWtCZDs7O0FBQ0EsVUFBS04sRUFBTCxHQUFVQSxFQUFWO0FBRUEsVUFBS08sU0FBTCxHQUFpQlAsRUFBRSxDQUFDUSxZQUFILENBQWdCLFlBQWhCLENBQWpCLENBckJjLENBdUJkOztBQUNBLFVBQUtDLEtBQUwsR0FBYUMsUUFBUSxDQUFDQyxhQUFULENBQXVCLEdBQXZCLENBQWI7O0FBQ0EsVUFBS0YsS0FBTCxDQUFXRyxTQUFYLENBQXFCQyxHQUFyQixDQUF5Qix3QkFBekI7O0FBQ0EsUUFBSWIsRUFBRSxDQUFDUSxZQUFILENBQWdCLGNBQWhCLENBQUosRUFBcUM7QUFDbkMsWUFBS0MsS0FBTCxDQUFXSyxZQUFYLENBQXdCLGNBQXhCLEVBQXdDZCxFQUFFLENBQUNRLFlBQUgsQ0FBZ0IsY0FBaEIsQ0FBeEM7QUFDRDs7QUFDRCxRQUFJUixFQUFFLENBQUNRLFlBQUgsQ0FBZ0IsYUFBaEIsQ0FBSixFQUFvQztBQUNsQyxZQUFLQyxLQUFMLENBQVdLLFlBQVgsQ0FBd0IsYUFBeEIsRUFBdUNkLEVBQUUsQ0FBQ1EsWUFBSCxDQUFnQixhQUFoQixDQUF2QztBQUNEOztBQUNELFVBQUtDLEtBQUwsQ0FBV00sSUFBWCxHQUFrQmYsRUFBRSxDQUFDUSxZQUFILENBQWdCLE1BQWhCLENBQWxCO0FBQ0EsVUFBS0MsS0FBTCxDQUFXTyxTQUFYLEdBQXVCaEIsRUFBRSxDQUFDZ0IsU0FBMUIsQ0FqQ2MsQ0FtQ2Q7O0FBQ0EsVUFBS2hCLEVBQUwsQ0FBUWlCLGVBQVIsQ0FBd0IsUUFBeEIsRUFBa0MsSUFBbEM7O0FBQ0EsVUFBS2hCLGFBQUwsQ0FBbUJpQixVQUFuQixDQUE4QkMsWUFBOUIsQ0FBMkMsTUFBS1YsS0FBaEQsRUFBdUQsTUFBS1IsYUFBTCxDQUFtQm1CLFdBQTFFOztBQUVBLFFBQUksTUFBS2IsU0FBVCxFQUFvQjtBQUNsQixVQUFNYyxVQUFVLEdBQUcsTUFBS3BCLGFBQUwsQ0FBbUJJLGFBQW5CLENBQWlDLGlCQUFqQyxDQUFuQjs7QUFDQSxZQUFLaUIsY0FBTCxDQUFvQjtBQUFFdEIsVUFBRSxFQUFFcUIsVUFBTjtBQUFrQkUsYUFBSyxFQUFFLFFBQXpCO0FBQW1DQyxnQkFBUSxFQUFFLE1BQUtDLGdCQUFMLENBQXNCQyxJQUF0QjtBQUE3QyxPQUFwQjs7QUFDQSxZQUFLQyxXQUFMLENBQWlCTixVQUFVLENBQUNPLEtBQVgsS0FBcUIsTUFBS3JCLFNBQTNDO0FBQ0QsS0FKRCxNQUlPO0FBQ0wsWUFBS29CLFdBQUwsQ0FBaUIsSUFBakI7QUFDRDs7QUE3Q2E7QUE4Q2Y7Ozs7NkJBRVE7QUFDUDs7QUFFQSxXQUFLMUIsYUFBTCxDQUFtQmlCLFVBQW5CLENBQThCVyxXQUE5QixDQUEwQyxLQUFLcEIsS0FBL0M7QUFDQSxXQUFLVCxFQUFMLENBQVFpQixlQUFSLENBQXdCLFFBQXhCLEVBQWtDLEtBQWxDO0FBQ0Q7OztnQ0FFV2EsTyxFQU
1FTO0FBQ25CLFdBQUtyQixLQUFMLENBQVdRLGVBQVgsQ0FBMkIsUUFBM0IsRUFBcUMsQ0FBQ2EsT0FBdEM7QUFDRDs7O3FDQUVnQkMsQyxFQUFHO0FBQ2xCLFdBQUtKLFdBQUwsQ0FBaUJJLENBQUMsQ0FBQ0MsYUFBRixDQUFnQkosS0FBaEIsS0FBMEIsS0FBS3JCLFNBQWhEO0FBQ0Q7Ozs7RUFsRXFDMEIsa0QiLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zaG9ydGNvZGVzL1Byb2R1Y3RDVEEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2hvcnRjb2RlIGZyb20gJy4vU2hvcnRjb2RlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdENUQSBleHRlbmRzIFNob3J0Y29kZSB7XG4gIHN0YXRpYyBnZXQgc2hvcnRjb2RlKCkge1xuICAgIHJldHVybiAncHJvZHVjdC1jdGEnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZWwpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5wcm9kdWN0Rm9ybUVsID0gbnVsbDtcbiAgICBsZXQgcGFyZW50RWwgPSBlbC5wYXJlbnRFbGVtZW50O1xuXG4gICAgd2hpbGUgKHBhcmVudEVsKSB7XG4gICAgICB0aGlzLnByb2R1Y3RGb3JtRWwgPSBwYXJlbnRFbC5oYXNBdHRyaWJ1dGUoJ1tkYXRhLXByb2R1Y3QtZm9ybV0nKSA/IHBhcmVudEVsIDogcGFyZW50RWwucXVlcnlTZWxlY3RvcignW2RhdGEtcHJvZHVjdC1mb3JtXScpO1xuXG4gICAgICBpZiAodGhpcy5wcm9kdWN0Rm9ybUVsKSBicmVhaztcblxuICAgICAgcGFyZW50RWwgPSBwYXJlbnRFbC5wYXJlbnRFbGVtZW50O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5wcm9kdWN0Rm9ybUVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2R1Y3RDVEE6IE5vIHByb2R1Y3QgZm9ybSBmb3VuZC4nKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIGEgcmVmZXJlbmNlIHRvIHNob3J0Y29kZSBlbGVtZW50IHRvIHVuaGlkZVxuICAgIHRoaXMuZWwgPSBlbDtcblxuICAgIHRoaXMudmFyaWFudElkID0gZWwuZ2V0QXR0cmlidXRlKCd2YXJpYW50LWlkJyk7XG5cbiAgICAvLyBCdWlsZCB0aGUgY2FsbCB0byBhY3Rpb24gZWxlbWVudFxuICAgIHRoaXMuY3RhRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgdGhpcy5jdGFFbC5jbGFzc0xpc3QuYWRkKCdzaG9ydGNvZGUtLXByb2R1Y3QtY3RhJyk7XG4gICAgaWYgKGVsLmdldEF0dHJpYnV0ZSgnYnV0dG9uLXN0eWxlJykpIHtcbiAgICAgIHRoaXMuY3RhRWwuc2V0QXR0cmlidXRlKCdidXR0b24tc3R5bGUnLCBlbC5nZXRBdHRyaWJ1dGUoJ2J1dHRvbi1zdHlsZScpKTtcbiAgICB9XG4gICAgaWYgKGVsLmdldEF0dHJpYnV0ZSgnYnV0dG9uLXNpemUnKSkge1xuICAgICAgdGhpcy5jdGFFbC5zZXRBdHRyaWJ1dGUoJ2J1dHRvbi1zaXplJywgZWwuZ2V0QXR0cmlidXRlKCdidXR0b24tc2l6ZScpKTtcbiAgICB9XG4gICAgdGhpcy5jdGFFbC5ocmVmID0gZWwuZ2V0QXR0cmlidXRlKCdsaW5rJyk7XG4gICAgdGhpcy5jdGFFbC5pbm5lckhUTUwgPSBlbC5pbm5lckhUTUw7XG5cbiAgICAvLyBSZW1vdmUgZWxlbWVudCBmcm9tIERPTSBhbmQgaW5zZXJ0IG5ldyBlbGVtZW50IGludG8gcG9zaXRpb25cbiAgICB0aGlzLmVsLnRvZ2dsZUF0dHJpYnV0ZSgnaGlkZGVuJywgdHJ1ZSk7XG4gICAgdGhpcy5wcm9kdWN0Rm9ybUVsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY3RhRWwsIHRoaXMucHJvZHVjdEZvcm1FbC5uZXh0U2libGluZyk7XG5cbiAgICBpZiAodGhpcy52YXJpYW50SWQpIHtcbiAgICAgIGNvbnN0IHZhcmlhbnRzRWwgPSB0aGlzLnByb2R1Y3RGb3JtRWwucXVlcnlTZWxlY3RvcignW2RhdGEtdmFyaWFudHNdJyk7XG4gICAgICB0aGlzLl9yZWdpc3RlckV2ZW50KHsgZWw6IHZhcmlhbnRzRWwsIGV2ZW50OiAnY2hhbmdlJywgbGlzdGVuZXI6IHRoaXMuX29uVmFyaWFudENoYW5nZS5iaW5kKHRoaXMpIH0pO1xuICAgICAgdGhpcy5fc2V0VmlzaWJsZSh2YXJpYW50c0VsLnZhbHVlID09PSB0aGlzLnZhcmlhbnRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NldFZpc2libGUodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIHN1cGVyLnVubG9hZCgpO1xuXG4gICAgdGhpcy5wcm9kdWN0Rm9ybUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jdGFFbCk7XG4gICAgdGhpcy5lbC50b2dnbGVBdHRyaWJ1dGUoJ2hpZGRlbicsIGZhbHNlKTtcbiAgfVxuXG4gIF9zZXRWaXNpYmxlKHZpc2libGUpIHtcbiAgICB0aGlzLmN0YUVsLnRvZ2dsZUF0dHJpYnV0ZSgnaGlkZGVuJywgIXZpc2libGUpO1xuICB9XG5cbiAgX29uVmFyaWFudENoYW5nZShlKSB7XG4gICAgdGhpcy5fc2V0VmlzaWJsZShlLmN1cnJlbnRUYXJnZXQudmFsdWUgPT09IHRoaXMudmFyaWFudElkKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/shortcodes/ProductCTA.js\n")},
1"./source/scripts/shortcodes/Shortcode.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Shortcode; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar Shortcode =\n/*#__PURE__*/\nfunction () {\n _createClass(Shortcode, null, [{\n key: "getShortcodes",\n value: function getShortcodes(el) {\n var shortcodeEls = el.querySelectorAll(this.shortcode);\n var shortcodes = [];\n\n for (var i = shortcodeEls.length - 1; i >= 0; i--) {\n var shortcodeEl = shortcodeEls[i];\n shortcodes.push(new this(shortcodeEl));\n }\n\n return shortcodes;\n }\n }, {\n key: "isShortcode",\n value: function isShortcode(el) {\n return el.tagName === this.shortcode;\n }\n }, {\n key: "shortcode",\n get: function get() {\n throw new Error(\'Shortcode.shortcode is not defined.\');\n }\n }]);\n\n function Shortcode() {\n _classCallCheck(this, Shortcode);\n\n this.events = [];\n }\n\n _createClass(Shortcode, [{\n key: "unload",\n value: function unload() {\n this.events.forEach(function (_ref) {\n var el = _ref.el,\n event = _ref.event,\n listener = _ref.listener;\n return el.removeEventListener(event, listener);\n });\n }\n }, {\n key: "_registerEvent",\n value: function _registerEvent(_ref2) {\n var el = _ref2.el,\n event = _ref2.event,\n listener = _ref2.listener;\n this.events.push({\n el: el,\n event: event,\n listener: listener\n });\n el.addEventListener(event, listener);\n return {\n el: el,\n event: event,\n listener: listener\n };\n }\n }, {\n key: "_unregisterEvent",\n value: function _unregisterEvent(_ref3) {\n var el = _ref3.el,\n event = _ref3.event,\n listener = _ref3.listener;\n this.events.filter(function (e) {\n return el !== e.el || event !== e.event || listener !== e.listener;\n });\n el.removeEventListener(event, listener);\n return {\n el: el,\n event: event,\n listener: listener\n };\n }\n }]);\n\n return Shortcode;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zaG9ydGNvZGVzL1Nob3J0Y29kZS5qcz9iNTEzIl0sIm5hbWVzIjpbIlNob3J0Y29kZSIsImVsIiwic2hvcnRjb2RlRWxzIiwicXVlcnlTZWxlY3RvckFsbCIsInNob3J0Y29kZSIsInNob3J0Y29kZXMiLCJpIiwibGVuZ3RoIiwic2hvcnRjb2RlRWwiLCJwdXNoIiwidGFnTmFtZSIsIkVycm9yIiwiZXZlbnRzIiwiZm9yRWFjaCIsImV2ZW50IiwibGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsImZpbHRlciIsImUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0lBQXFCQSxTOzs7OztrQ0FLRUMsRSxFQUFJO0FBQ3ZCLFVBQU1DLFlBQVksR0FBR0QsRUFBRSxDQUFDRSxnQkFBSCxDQUFvQixLQUFLQyxTQUF6QixDQUFyQjtBQUNBLFVBQU1DLFVBQVUsR0FBRyxFQUFuQjs7QUFFQSxXQUFLLElBQUlDLENBQUMsR0FBR0osWUFBWSxDQUFDSyxNQUFiLEdBQXNCLENBQW5DLEVBQXNDRCxDQUFDLElBQUksQ0FBM0MsRUFBOENBLENBQUMsRUFBL0MsRUFBbUQ7QUFDakQsWUFBTUUsV0FBVyxHQUFHTixZQUFZLENBQUNJLENBQUQsQ0FBaEM7QUFFQUQsa0JBQVUsQ0FBQ0ksSUFBWCxDQUFnQixJQUFJLElBQUosQ0FBU0QsV0FBVCxDQUFoQjtBQUNEOztBQUVELGFBQU9ILFVBQVA7QUFDRDs7O2dDQUVrQkosRSxFQUFJO0FBQ3JCLGFBQU9BLEVBQUUsQ0FBQ1MsT0FBSCxLQUFlLEtBQUtOLFNBQTNCO0FBQ0Q7Ozt3QkFuQnNCO0FBQ3JCLFlBQU0sSUFBSU8sS0
1FBSixDQUFVLHFDQUFWLENBQU47QUFDRDs7O0FBbUJELHVCQUFjO0FBQUE7O0FBQ1osU0FBS0MsTUFBTCxHQUFjLEVBQWQ7QUFDRDs7Ozs2QkFFUTtBQUNQLFdBQUtBLE1BQUwsQ0FBWUMsT0FBWixDQUFvQjtBQUFBLFlBQUdaLEVBQUgsUUFBR0EsRUFBSDtBQUFBLFlBQU9hLEtBQVAsUUFBT0EsS0FBUDtBQUFBLFlBQWNDLFFBQWQsUUFBY0EsUUFBZDtBQUFBLGVBQTZCZCxFQUFFLENBQUNlLG1CQUFILENBQXVCRixLQUF2QixFQUE4QkMsUUFBOUIsQ0FBN0I7QUFBQSxPQUFwQjtBQUNEOzs7MENBRXVDO0FBQUEsVUFBdkJkLEVBQXVCLFNBQXZCQSxFQUF1QjtBQUFBLFVBQW5CYSxLQUFtQixTQUFuQkEsS0FBbUI7QUFBQSxVQUFaQyxRQUFZLFNBQVpBLFFBQVk7QUFDdEMsV0FBS0gsTUFBTCxDQUFZSCxJQUFaLENBQWlCO0FBQUVSLFVBQUUsRUFBRkEsRUFBRjtBQUFNYSxhQUFLLEVBQUxBLEtBQU47QUFBYUMsZ0JBQVEsRUFBUkE7QUFBYixPQUFqQjtBQUVBZCxRQUFFLENBQUNnQixnQkFBSCxDQUFvQkgsS0FBcEIsRUFBMkJDLFFBQTNCO0FBRUEsYUFBTztBQUFFZCxVQUFFLEVBQUZBLEVBQUY7QUFBTWEsYUFBSyxFQUFMQSxLQUFOO0FBQWFDLGdCQUFRLEVBQVJBO0FBQWIsT0FBUDtBQUNEOzs7NENBRXlDO0FBQUEsVUFBdkJkLEVBQXVCLFNBQXZCQSxFQUF1QjtBQUFBLFVBQW5CYSxLQUFtQixTQUFuQkEsS0FBbUI7QUFBQSxVQUFaQyxRQUFZLFNBQVpBLFFBQVk7QUFDeEMsV0FBS0gsTUFBTCxDQUFZTSxNQUFaLENBQW1CLFVBQUFDLENBQUM7QUFBQSxlQUFJbEIsRUFBRSxLQUFLa0IsQ0FBQyxDQUFDbEIsRUFBVCxJQUFlYSxLQUFLLEtBQUtLLENBQUMsQ0FBQ0wsS0FBM0IsSUFBb0NDLFFBQVEsS0FBS0ksQ0FBQyxDQUFDSixRQUF2RDtBQUFBLE9BQXBCO0FBRUFkLFF
1BQUUsQ0FBQ2UsbUJBQUgsQ0FBdUJGLEtBQXZCLEVBQThCQyxRQUE5QjtBQUVBLGFBQU87QUFBRWQsVUFBRSxFQUFGQSxFQUFGO0FBQU1hLGFBQUssRUFBTEEsS0FBTjtBQUFhQyxnQkFBUSxFQUFSQTtBQUFiLE9BQVA7QUFDRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL3Nob3J0Y29kZXMvU2hvcnRjb2RlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hvcnRjb2RlIHtcbiAgc3RhdGljIGdldCBzaG9ydGNvZGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTaG9ydGNvZGUuc2hvcnRjb2RlIGlzIG5vdCBkZWZpbmVkLicpO1xuICB9XG5cbiAgc3RhdGljIGdldFNob3J0Y29kZXMoZWwpIHtcbiAgICBjb25zdCBzaG9ydGNvZGVFbHMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuc2hvcnRjb2RlKTtcbiAgICBjb25zdCBzaG9ydGNvZGVzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gc2hvcnRjb2RlRWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBzaG9ydGNvZGVFbCA9IHNob3J0Y29kZUVsc1tpXTtcblxuICAgICAgc2hvcnRjb2Rlcy5wdXNoKG5ldyB0aGlzKHNob3J0Y29kZUVsKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3J0Y29kZXM7XG4gIH1cblxuICBzdGF0aWMgaXNTaG9ydGNvZGUoZWwpIHtcbiAgICByZXR1cm4gZWwudGFnTmFtZSA9PT0gdGhpcy5zaG9ydGNvZGU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmV2ZW50cyA9IFtdO1xuICB9XG5cbiAgdW5sb2FkKCkge1xuICAgIHRoaXMuZXZlbnRzLmZvckVhY2goKHsgZWwsIGV2ZW50LCBsaXN0ZW5lciB9KSA9PiBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcikpO1xuICB9XG5cbiAgX3JlZ2lzdGVyRXZlbnQoeyBlbCwgZXZlbnQsIGxpc3RlbmVyIH0pIHtcbiAgICB0aGlzLmV2ZW50cy5wdXNoKHsgZWwsIGV2ZW50LCBsaXN0ZW5lciB9KTtcblxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyKTtcblxuICAgIHJldHVybiB7IGVsLCBldmVudCwgbGlzdGVuZXIgfTtcbiAgfVxuXG4gIF91bnJlZ2lzdGVyRXZlbnQoeyBlbCwgZXZlbnQsIGxpc3RlbmVyIH0pIHtcbiAgICB0aGlzLmV2ZW50cy5maWx0ZXIoZSA9PiBlbCAhPT0gZS5lbCB8fCBldmVudCAhPT0gZS5ldmVudCB8fCBsaXN0ZW5lciAhPT0gZS5saXN0ZW5lcik7XG5cbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcik7XG5cbiAgICByZXR1cm4geyBlbCwgZXZlbnQsIGxpc3RlbmVyIH07XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/shortcodes/Shortcode.js\n')},
1"./source/scripts/shortcodes/Shortcodes.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Shortcodes; });\n/* harmony import */ var _ProductCTA__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ProductCTA */ "./source/scripts/shortcodes/ProductCTA.js");\n/* harmony import */ var _Details__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Details */ "./source/scripts/shortcodes/Details.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar Shortcodes =\n/*#__PURE__*/\nfunction () {\n function Shortcodes(el) {\n _classCallCheck(this, Shortcodes);\n\n this.shortcodes = [];\n this.shortcodes.concat(_ProductCTA__WEBPACK_IMPORTED_MODULE_0__["default"].getShortcodes(el));\n this.shortcodes.concat(_Details__WEBPACK_IMPORTED_MODULE_1__["default"].getShortcodes(el));\n }\n\n _createClass(Shortcodes, [{\n key: "unload",\n value: function unload() {\n this.shortcodes = this.shortcodes.filter(function (shortcode) {\n shortcode.unload();\n return false;\n });\n }\n }]);\n\n return Shortcodes;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy9zaG9ydGNvZGVzL1Nob3J0Y29kZXMuanM/NGUwYSJdLCJuYW1lcyI6WyJTaG9ydGNvZGVzIiwiZWwiLCJzaG9ydGNvZGVzIiwiY29uY2F0IiwiUHJvZHVjdENUQSIsImdldFNob3J0Y29kZXMiLCJEZXRhaWxzIiwiZmlsdGVyIiwic2hvcnRjb2RlIiwidW5sb2FkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQTs7SUFFcUJBLFU7OztBQUNuQixzQkFBWUMsRUFBWixFQUFnQjtBQUFBOztBQUNkLFNBQUtDLFVBQUwsR0FBa0IsRUFBbEI7QUFFQSxTQUFLQSxVQUFMLENBQWdCQyxNQUFoQixDQUF1QkMsbURBQVUsQ0FBQ0MsYUFBWCxDQUF5QkosRUFBekIsQ0FBdkI7QUFDQSxTQUFLQyxVQUFMLENBQWdCQyxNQUFoQixDQUF1QkcsZ0RBQU8sQ0FBQ0QsYUFBUixDQUFzQkosRUFBdEIsQ0FBdkI7QUFDRDs7Ozs2QkFFUTtBQUNQLFdBQUtDLFVBQUwsR0FBa0IsS0FBS0EsVUFBTCxDQUFnQkssTUFBaEIsQ0FBdUIsVUFBQUMsU0FBUyxFQUFJO0FBQ3BEQSxpQkFBUyxDQUFDQyxNQUFWO0FBQ0EsZUFBTyxLQUFQO0FBQ0QsT0FIaUIsQ0FBbEI7QUFJRCIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL3Nob3J0Y29kZXMvU2hvcnRjb2Rlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9kdWN0Q1RBIGZyb20gJy4vUHJvZHVjdENUQSc7XG5pbXBvcnQgRGV0YWlscyBmcm9tICcuL0RldGFpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaG9ydGNvZGVzIHtcbiAgY29uc3RydWN0b3IoZWwpIHtcbiAgICB0aGlzLnNob3J0Y29kZXMgPSBbXTtcblxuICAgIHRoaXMuc2hvcnRjb2Rlcy5jb25jYXQoUHJvZHVjdENUQS5nZXRTaG9ydGNvZGVzKGVsKSk7XG4gICAgdGhpcy5zaG9ydGNvZGVzLmNvbmNhdChEZXRhaWxzLmdldFNob3J0Y29kZXMoZWwpKTtcbiAgfVxuXG4gIHVubG9hZCgpIHtcbiAgICB0aGlzLnNob3J0Y29kZXMgPSB0aGlzLnNob3J0Y29kZXMuZmlsdGVyKHNob3J0Y29kZSA9PiB7XG4gICAgICBzaG9ydGNvZGUudW5sb2FkKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/shortcodes/Shortcodes.js\n')},
1"./source/scripts/templates/Account.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Account; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Forms */ \"./source/scripts/Forms.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar Account =\n/*#__PURE__*/\nfunction () {\n function Account() {\n _classCallCheck(this, Account);\n\n this.$accountContents = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-template-account]');\n this.$loginContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-template-account-login]');\n this.$addressesContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-template-account-addresses]');\n this.$addressButtonFocus = null;\n this._loginToggle = this._loginToggle.bind(this);\n\n if (this.$loginContent.length) {\n this._initLoginPage();\n }\n\n if (this.$addressesContent.length) {\n this._initAddressPage();\n }\n\n if (this.$accountContents.length) {\n this._init();\n }\n }\n\n _createClass(Account, [{\n key: \"_init\",\n value: function _init() {\n new _Forms__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this.$accountContents);\n }\n }, {\n key: \"_initLoginPage\",\n value: function _initLoginPage() {\n this.$loginToggle = this.$loginContent.find('[data-login-toggle]');\n this.$login = this.$loginContent.find('[data-account-login-main]');\n this.$recovery = this.$loginContent.find('[data-account-login-recovery]');\n this.$recoveryHasMessage = this.$recovery.find('[data-recovery-has-message]');\n this.$loginToggle.on('click', this._loginToggle);\n\n if (this.$recoveryHasMessage.length) {\n this._loginToggle();\n }\n }\n }, {\n key: \"_loginToggle\",\n value: function _loginToggle() {\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n if (event) {\n event.preventDefault();\n }\n\n this.$login.toggleClass('visible');\n this.$recovery.toggleClass('visible');\n }\n }, {\n key: \"_initAddressPage\",\n value: function _initAddressPage() {\n var _this = this;\n\n var $customerAddresses = this.$addressesContent.find('[data-address-id]');\n this.$addressesContent.on('click', '[data-edit-address]', function (event) {\n var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.currentTarget);\n var itemId = $target.attr('data-edit-address');\n $customerAddresses.removeClass('visible');\n _this.$addressButtonFocus = $target;\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-address-id=\\\"\".concat(itemId, \"\\\"]\")).addClass('visible').find('.form-field-input').eq(0).focus();\n });\n this.$addressesContent.on('click', '[data-edit-address-cancel]', function () {\n $customerAddresses.removeClass('visible');\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-address-id=\"new\"]').addClass('visible'); // Return focus to last used button\n\n _this.$addressButtonFocus.focus();\n\n _this.$addressButtonFocus = null;\n });\n this.$addressesContent.on('click', '[data-delete-address]', function (event) {\n var itemId = jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.target).attr('data-delete-address');\n Shopify.CustomerAddress.destroy(itemId, '');\n });\n $customerAddresses.each(function (i, el) {\n var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).attr('data-address-id');\n var countryEl = \"customer_addr_\".concat(id, \"_country\");\n var provinceEl = \"customer_addr_\".concat(id, \"_province\");\n var options = {\n hideElement: \"address_province_container_\".concat(id)\n }; // Initiate provinces for address forms\n\n new Shopify.CountryProvinceSelector(countryEl, provinceEl, options);\n });\n }\n }]);\n\n return Account;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy90ZW1wbGF0ZXMvQWNjb3VudC5qcz85OTZmIl0sIm5hbWVzIjpbIkFjY291bnQiLCIkYWNjb3VudENvbnRlbnRzIiwiJCIsIiRsb2dpbkNvbnRlbnQiLCIkYWRkcmVzc2VzQ29udGVudCIsIiRhZGRyZXNzQnV0dG9uRm9jdXMiLCJfbG9naW5Ub2dnbGUiLCJiaW5kIiwibGVuZ3RoIiwiX2luaXRMb2dpblBhZ2UiLCJfaW5pdEFkZHJlc3NQYWdlIiwiX2luaXQiLCJGb3JtcyIsIiRsb2dpblRvZ2dsZSIsImZpbmQiLCIkbG9naW4iLCIkcmVjb3ZlcnkiLCIkcmVjb3ZlcnlIYXNNZXNzYWdlIiwib24iLCJldmVudCIsInByZXZlbn
1REZWZhdWx0IiwidG9nZ2xlQ2xhc3MiLCIkY3VzdG9tZXJBZGRyZXNzZXMiLCIkdGFyZ2V0IiwiY3VycmVudFRhcmdldCIsIml0ZW1JZCIsImF0dHIiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwiZXEiLCJmb2N1cyIsInRhcmdldCIsIlNob3BpZnkiLCJDdXN0b21lckFkZHJlc3MiLCJkZXN0cm95IiwiZWFjaCIsImkiLCJlbCIsImlkIiwiY291bnRyeUVsIiwicHJvdmluY2VFbCIsIm9wdGlvbnMiLCJoaWRlRWxlbWVudCIsIkNvdW50cnlQcm92aW5jZVNlbGVjdG9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBRUE7O0lBRXFCQSxPOzs7QUFDbkIscUJBQWM7QUFBQTs7QUFDWixTQUFLQyxnQkFBTCxHQUF3QkMsNkNBQUMsQ0FBQyx5QkFBRCxDQUF6QjtBQUNBLFNBQUtDLGFBQUwsR0FBcUJELDZDQUFDLENBQUMsK0JBQUQsQ0FBdEI7QUFDQSxTQUFLRSxpQkFBTCxHQUF5QkYsNkNBQUMsQ0FBQyxtQ0FBRCxDQUExQjtBQUNBLFNBQUtHLG1CQUFMLEdBQTJCLElBQTNCO0FBRUEsU0FBS0MsWUFBTCxHQUFvQixLQUFLQSxZQUFMLENBQWtCQyxJQUFsQixDQUF1QixJQUF2QixDQUFwQjs7QUFFQSxRQUFJLEtBQUtKLGFBQUwsQ0FBbUJLLE1BQXZCLEVBQStCO0FBQzdCLFdBQUtDLGNBQUw7QUFDRDs7QUFFRCxRQUFJLEtBQUtMLGlCQUFMLENBQXVCSSxNQUEzQixFQUFtQztBQUNqQyxXQUFLRSxnQkFBTDtBQUNEOztBQUVELFFBQUksS0FBS1QsZ0JBQUwsQ0FBc0JPLE1BQTFCLEVBQWtDO0FBQ2hDLFdBQUtHLEtBQUw7QUFDRDtBQUNGOzs7OzRCQUVPO0FBQ04sVUFBSUMsOENBQUosQ0FBVSxLQUFLWCxnQkFBZjtBQUNEOzs7cUNBRWdCO0FBQ2YsV0FBS1ksWUFBTCxHQUFvQixLQUFLVixhQUFMLENBQW1CVyxJQUFuQixDQUF3QixxQkFBeEIsQ0FBcEI7QUFDQSxXQUFLQyxNQUFMLEdBQWMsS0FBS1osYUFBTCxDQUFtQlcsSUFBbkIsQ0FBd0IsMkJBQXhCLENBQWQ7QUFDQSxXQUFLRSxTQUFMLEdBQWlCLEtBQUtiLGFBQUwsQ0FBbUJXLElBQW5CLENBQXdCLCtCQUF4QixDQUFqQjtBQUNBLFdBQUtHLG1CQUFMLEdBQTJCLEtBQUtELFNBQUwsQ0FBZUYsSUFBZixDQUN6Qiw2QkFEeUIsQ0FBM0I7QUFJQSxXQUFLRCxZQUFMLENBQWtCSyxFQUFsQixDQUFxQixPQUFyQixFQUE4QixLQUFLWixZQUFuQzs7QUFFQSxVQUFJLEtBQUtXLG1CQUFMLENBQXlCVCxNQUE3QixFQUFxQztBQUNuQyxhQUFLRixZQUFMO0FBQ0Q7QUFDRjs7O21DQUUwQjtBQUFBLFVBQWRhLEtBQWMsdUVBQU4sSUFBTTs7QUFDekIsVUFBSUEsS0FBSixFQUFXO0FBQ1RBLGFBQUssQ0FBQ0MsY0FBTjtBQUNEOztBQUVELFdBQUtMLE1BQUwsQ0FBWU0sV0FBWixDQUF3QixTQUF4QjtBQUNBLFdBQUtMLFNBQUwsQ0FBZUssV0FBZixDQUEyQixTQUEzQjtBQUNEOzs7dUNBRWtCO0FBQUE7O0FBQ2pCLFVBQU1DLGtCQUFrQixHQUFHLEtBQUtsQixpQkFBTCxDQUF1QlUsSUFBdkIsQ0FBNEIsbUJBQTVCLENBQTNCO0FBRUEsV0FBS1YsaUJBQUwsQ0FBdUJjLEVBQXZCLENBQTBCLE9BQTFCLEVBQW1DLHFCQUFuQyxFQUEwRCxVQUFBQyxLQUFLLEVBQUk7QUFDakUsWUFBTUksT0FBTyxHQUFHckIsNkNBQUMsQ0FBQ2lCLEtBQUssQ0FBQ0ssYUFBUCxDQUFqQjtBQUNBLFlBQU1DLE1BQU0sR0FBR0YsT0FBTyxDQUFDRyxJQUFSLENBQWEsbUJBQWIsQ0FBZjtBQUVBSiwwQkFBa0IsQ0FBQ0ssV0FBbkIsQ0FBK0IsU0FBL0I7QUFDQSxhQUFJLENBQUN0QixtQkFBTCxHQUEyQmtCLE9BQTNCO0FBRUFyQixxREFBQyw4QkFBc0J1QixNQUF0QixTQUFELENBQ0dHLFFBREgsQ0FDWSxTQURaLEVBRUdkLElBRkgsQ0FFUSxtQkFGUixFQUdHZSxFQUhILENBR00sQ0FITixFQUlHQyxLQUpIO0FBS0QsT0FaRDtBQWNBLFdBQUsxQixpQkFBTCxDQUF1QmMsRUFBdkIsQ0FBMEIsT0FBMUIsRUFBbUMsNEJBQW5DLEVBQWlFLFlBQU07QUFDckVJLDBCQUFrQixDQUFDSyxXQUFuQixDQUErQixTQUEvQjtBQUNBekIscURBQUMsQ0FBQyx5QkFBRCxDQUFELENBQTZCMEIsUUFBN0IsQ0FBc0MsU0FBdEMsRUFGcUUsQ0FJckU7O0FBQ0EsYUFBSSxDQUFDdkIsbUJBQUwsQ0FBeUJ5QixLQUF6Qjs7QUFDQSxhQUFJLENBQUN6QixtQkFBTCxHQUEyQixJQUEzQjtBQUNELE9BUEQ7QUFTQSxXQUFLRCxpQkFBTCxDQUF1QmMsRUFBdkIsQ0FBMEIsT0FBMUIsRUFBbUMsdUJBQW5DLEVBQTRELFVBQUFDLEtBQUssRUFBSTtBQUNuRSxZQU
1FNTSxNQUFNLEdBQUd2Qiw2Q0FBQyxDQUFDaUIsS0FBSyxDQUFDWSxNQUFQLENBQUQsQ0FBZ0JMLElBQWhCLENBQXFCLHFCQUFyQixDQUFmO0FBQ0FNLGVBQU8sQ0FBQ0MsZUFBUixDQUF3QkMsT0FBeEIsQ0FBZ0NULE1BQWhDLEVBQXdDLEVBQXhDO0FBQ0QsT0FIRDtBQUtBSCx3QkFBa0IsQ0FBQ2EsSUFBbkIsQ0FBd0IsVUFBQ0MsQ0FBRCxFQUFJQyxFQUFKLEVBQVc7QUFDakMsWUFBTUMsRUFBRSxHQUFHcEMsNkNBQUMsQ0FBQ21DLEVBQUQsQ0FBRCxDQUFNWCxJQUFOLENBQVcsaUJBQVgsQ0FBWDtBQUVBLFlBQU1hLFNBQVMsMkJBQW9CRCxFQUFwQixhQUFmO0FBQ0EsWUFBTUUsVUFBVSwyQkFBb0JGLEVBQXBCLGNBQWhCO0FBQ0EsWUFBTUcsT0FBTyxHQUFHO0FBQUVDLHFCQUFXLHVDQUFnQ0osRUFBaEM7QUFBYixTQUFoQixDQUxpQyxDQU9qQzs7QUFDQSxZQUFJTixPQUFPLENBQUNXLHVCQUFaLENBQW9DSixTQUFwQyxFQUErQ0MsVUFBL0MsRUFBMkRDLE9BQTNEO0FBQ0QsT0FURDtBQVVEIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvdGVtcGxhdGVzL0FjY291bnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5pbXBvcnQgRm9ybXMgZnJvbSAnLi4vRm9ybXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2NvdW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy4kYWNjb3VudENvbnRlbnRzID0gJCgnW2RhdGEtdGVtcGxhdGUtYWNjb3VudF0nKTtcbiAgICB0aGlzLiRsb2dpbkNvbnRlbnQgPSAkKCdbZGF0YS10ZW1wbGF0ZS1hY2NvdW50LWxvZ2luXScpO1xuICAgIHRoaXMuJGFkZHJlc3Nlc0NvbnRlbnQgPSAkKCdbZGF0YS10ZW1wbGF0ZS1hY2NvdW50LWFkZHJlc3Nlc10nKTtcbiAgICB0aGlzLiRhZGRyZXNzQnV0dG9uRm9jdXMgPSBudWxsO1xuXG4gICAgdGhpcy5fbG9naW5Ub2dnbGUgPSB0aGlzLl9sb2dpblRvZ2dsZS5iaW5kKHRoaXMpO1xuXG4gICAgaWYgKHRoaXMuJGxvZ2luQ29udGVudC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2luaXRMb2dpblBhZ2UoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy4kYWRkcmVzc2VzQ29udGVudC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2luaXRBZGRyZXNzUGFnZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiRhY2NvdW50Q29udGVudHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgX2luaXQoKSB7XG4gICAgbmV3IEZvcm1zKHRoaXMuJGFjY291bnRDb250ZW50cyk7XG4gIH1cblxuICBfaW5pdExvZ2luUGFnZSgpIHtcbiAgICB0aGlzLiRsb2dpblRvZ2dsZSA9IHRoaXMuJGxvZ2luQ29udGVudC5maW5kKCdbZGF0YS1sb2dpbi10b2dnbGVdJyk7XG4gICAgdGhpcy4kbG9naW4gPSB0aGlzLiRsb2dpbkNvbnRlbnQuZmluZCgnW2RhdGEtYWNjb3VudC1sb2dpbi1tYWluXScpO1xuICAgIHRoaXMuJHJlY292ZXJ5ID0gdGhpcy4kbG9naW5Db250ZW50LmZpbmQoJ1tkYXRhLWFjY291bnQtbG9naW4tcmVjb3ZlcnldJyk7XG4gICAgdGhpcy4kcmVjb3ZlcnlIYXNNZXNzYWdlID0gdGhpcy4kcmVjb3ZlcnkuZmluZChcbiAgICAgICdbZGF0YS1yZWNvdmVyeS1oYXMtbWVzc2FnZV0nLFxuICAgICk7XG5cbiAgICB0aGlzLiRsb2dpblRvZ2dsZS5vbignY2xpY2snLCB0aGlzLl9sb2dpblRvZ2dsZSk7XG5cbiAgICBpZiAodGhpcy4kcmVjb3ZlcnlIYXNNZXNzYWdlLmxlbmd0aCkge1xuICAgICAgdGhpcy5fbG9naW5Ub2dnbGUoKTtcbiAgICB9XG4gIH1cblxuICBfbG9naW5Ub2dnbGUoZXZlbnQgPSBudWxsKSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRoaXMuJGxvZ2luLnRvZ2dsZUNsYXNzKCd2aXNpYmxlJyk7XG4gICAgdGhpcy4kcmVjb3ZlcnkudG9nZ2xlQ2xhc3MoJ3Zpc2libGUnKTtcbiAgfVxuXG4gIF9pbml0QWRkcmVzc1BhZ2UoKSB7XG4gICAgY29uc3QgJGN1c3RvbWVyQWRkcmVzc2VzID0gdGhpcy4kYWRkcmVzc2VzQ29udGVudC5maW5kKCdbZGF0YS1hZGRyZXNzLWlkXScpO1xuXG4gICAgdGhpcy4kYWRkcmVzc2VzQ29udGVudC5vbignY2xpY2snLCAnW2RhdGEtZWRpdC1hZGRyZXNzXScsIGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0ICR0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgICAgY29uc3QgaXRlbUlkID0gJHRhcmdldC5hdHRyKCdkYXRhLWVkaXQtYWRkcmVzcycpO1xuXG4gICAgICAkY3VzdG9tZXJBZGRyZXNzZXMucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcbiAgICAgIHRoaXMuJGFkZHJlc3NCdXR0b25Gb2N1cyA9ICR0YXJnZXQ7XG5cbiAgICAgICQoYFtkYXRhLWFkZHJlc3MtaWQ9XCIke2l0ZW1JZH1cIl1gKVxuICAgICAgICAuYWRkQ2xhc3MoJ3Zpc2libGUnKVxuICAgICAgICAuZmluZCgnLmZvcm0tZmllbGQtaW5wdXQnKVxuICAgICAgICAuZXEoMClcbiAgICAgICAgLmZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRhZGRyZXNzZXNDb250ZW50Lm9uKCdjbGljaycsICdbZGF0YS1lZGl0LWFkZHJlc3MtY2FuY2VsXScsICgpID0+IHtcbiAgICAgICRjdXN0b21lckFkZHJlc3Nlcy5yZW1vdmVDbGFzcygndmlzaWJsZScpO1xuICAgICAgJCgnW2RhdGEtYWRkcmVzcy1pZD1cIm5ld1wiXScpLmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cbiAgICAgIC8vIFJldHVybiBmb2N1cyB0byBsYXN0IHVzZWQgYnV0dG9uXG4gICAgICB0aGlzLiRhZGRyZXNzQnV0dG9uRm9jdXMuZm9jdXMoKTtcbiAgICAgIHRoaXMuJGFkZHJlc3NCdXR0b25Gb2N1cyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRhZGRyZXNzZXNDb250ZW50Lm9uKCdjbGljaycsICdbZGF0YS1kZWxldGUtYWRkcmVzc10nLCBldmVudCA9PiB7XG4gICAgICBjb25zdCBpdGVtSWQgPSAkKGV2ZW50LnRhcmdldCkuYXR0cignZGF0YS1kZWxldGUtYWRkcmVzcycpO1xuICAgICAgU2hvcGlmeS5DdXN0b21lckFkZHJlc3MuZGVzdHJveShpdGVtSWQsICcnKTtcbiAgICB9KTtcblxuICAgICRjdXN0b21lckFkZHJlc3Nlcy5lYWNoKChpLCBlbCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSAkKGVsKS5hdHRyKCdkYXRhLWFkZHJlc3MtaWQnKTtcblxuICAgICAgY29uc3QgY291bnRyeUVsID0gYGN1c3RvbWVyX2FkZHJfJHtpZH1fY291bnRyeWA7XG4gICAgICBjb25zdCBwcm92aW5jZUVsID0gYGN1c3RvbWVyX2FkZHJfJHtpZH1fcHJvdmluY2VgO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgaGlkZUVsZW1lbnQ6IGBhZGRyZXNzX3Byb3ZpbmNlX2NvbnRhaW5lcl8ke2lkfWAgfTtcblxuICAgICAgLy8gSW5pdGlhdGUgcHJvdmluY2VzIGZvciBhZGRyZXNzIGZvcm1zXG4gICAgICBuZXcgU2hvcGlmeS5
1Db3VudHJ5UHJvdmluY2VTZWxlY3Rvcihjb3VudHJ5RWwsIHByb3ZpbmNlRWwsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./source/scripts/templates/Account.js\n")},
1"./source/scripts/templates/Contact.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Contact; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Forms */ "./source/scripts/Forms.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\n\n\n\nvar Contact = function Contact() {\n _classCallCheck(this, Contact);\n\n this.$contactContents = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'[data-template-contact]\');\n\n if (this.$contactContents.length) {\n new _Forms__WEBPACK_IMPORTED_MODULE_1__["default"](this.$contactContents);\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy90ZW1wbGF0ZXMvQ29udGFjdC5qcz8yMTVkIl0sIm5hbWVzIjpbIkNvbnRhY3QiLCIkY29udGFjdENvbnRlbnRzIiwiJCIsImxlbmd0aCIsIkZvcm1zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFFQTs7SUFFcUJBLE8sR0FDbkIsbUJBQWM7QUFBQTs7QUFDWixPQUFLQyxnQkFBTCxHQUF3QkMsNkNBQUMsQ0FBQyx5QkFBRCxDQUF6Qjs7QUFFQSxNQUFJLEtBQUtELGdCQUFMLENBQXNCRSxNQUExQixFQUFrQztBQUNoQyxRQUFJQyw4Q0FBSixDQUFVLEtBQUtILGdCQUFmO0FBQ0Q7QUFDRixDIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvdGVtcGxhdGVzL0NvbnRhY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5pbXBvcnQgRm9ybXMgZnJvbSAnLi4vRm9ybXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250YWN0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy4kY29udGFjdENvbnRlbnRzID0gJCgnW2RhdGEtdGVtcGxhdGUtY29udGFjdF0nKTtcblxuICAgIGlmICh0aGlzLiRjb250YWN0Q29udGVudHMubGVuZ3RoKSB7XG4gICAgICBuZXcgRm9ybXModGhpcy4kY29udGFjdENvbnRlbnRzKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/templates/Contact.js\n')},
1"./source/scripts/templates/GiftCard.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return GiftCard; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar GiftCard =\n/*#__PURE__*/\nfunction () {\n function GiftCard() {\n _classCallCheck(this, GiftCard);\n\n this.el = document.querySelector('.giftcard');\n this.$el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.el);\n this.qrCode = this.el.querySelector('[data-giftcard-qr]');\n this.giftCardCode = this.el.querySelector('[data-giftcard-code]');\n\n this._bindEvents();\n\n this.addQrCode();\n }\n\n _createClass(GiftCard, [{\n key: \"addQrCode\",\n value: function addQrCode() {\n return new QRCode(this.qrCode, {\n text: jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.qrCode).data('giftcard-qr'),\n width: 120,\n height: 120\n });\n }\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents() {\n var _this = this;\n\n this.$el.on('click', '[data-giftcard-print]', function () {\n window.print();\n }); // Auto-select gift card code on click, based on ID passed to the function\n\n this.$el.on('click', '[data-giftcard-code]', function () {\n _this._selectText();\n });\n }\n }, {\n key: \"_selectText\",\n value: function _selectText() {\n var range = '';\n\n if (document.body.createTextRange) {\n // ms method\n range = document.body.createTextRange();\n range.moveToElementText(this.giftCardCode);\n range.select();\n } else if (window.getSelection) {\n // moz, opera, webkit method\n var selection = window.getSelection();\n range = document.createRange();\n range.selectNodeContents(this.giftCardCode);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n }]);\n\n return GiftCard;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy90ZW1wbGF0ZXMvR2lmdENhcmQuanM/ZTFkOCJdLCJuYW1lcyI6WyJHaWZ0Q2FyZCIsImVsIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiJGVsIiwiJCIsInFyQ29kZSIsImdpZnRDYXJkQ29kZSIsIl9iaW5kRXZlbnRzIiwiYWRkUXJDb2RlIiwiUVJDb2RlIiwidGV4dCIsImRhdGEiLCJ3aWR0aCIsImhlaWdodCIsIm9uIiwid2luZG93IiwicHJpbnQiLCJfc2VsZWN0VGV4dCIsInJhbmdlIiwiYm9keSIsImNyZWF0ZVRleHRSYW5nZSIsIm1vdmVUb0VsZW1lbnRUZXh0Iiwic2VsZWN0IiwiZ2V0U2VsZWN0aW9uIiwic2VsZWN0aW9uIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztJQUVxQkEsUTs7O0FBQ25CLHNCQUFjO0FBQUE7O0FBQ1osU0FBS0MsRUFBTCxHQUFVQyxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsV0FBdkIsQ0FBVjtBQUNBLFNBQUtDLEdBQUwsR0FBV0MsNkNBQUMsQ0FBQyxLQUFLSixFQUFOLENBQVo7QUFDQSxTQUFLSyxNQUFMLEdBQWMsS0FBS0wsRUFBTCxDQUFRRSxhQUFSLENBQXNCLG9CQUF0QixDQUFkO0FBQ0EsU0FBS0ksWUFBTCxHQUFvQixLQUFLTixFQUFMLENBQVFFLGFBQVIsQ0FBc0Isc0JBQXRCLENBQXBCOztBQUVBLFNBQUtLLFdBQUw7O0FBQ0EsU0FBS0MsU0FBTDtBQUNEOzs7O2dDQUVXO0FBQ1YsYUFBTyxJQUFJQyxNQUFKLENBQVcsS0FBS0osTUFBaEIsRUFBd0I7QUFDN0JLLFlBQUksRUFBRU4sNkNBQUMsQ0FBQyxLQUFLQyxNQUFOLENBQUQsQ0FBZU0sSUFBZixDQUFvQixhQUFwQixDQUR1QjtBQUU3QkMsYUFBSyxFQUFFLEdBRnNCO0FBRzdCQyxjQUFNLEVBQUU7QUFIcUIsT0FBeEIsQ0FBUDtBQUtEOzs7a0NBRWE7QUFBQTs7QUFDWixXQUFLVixHQUFMLENBQVNXLEVBQVQsQ0FBWSxPQUFaLEVBQXFCLHVCQUFyQixFQUE4QyxZQU
1FNO0FBQ2xEQyxjQUFNLENBQUNDLEtBQVA7QUFDRCxPQUZELEVBRFksQ0FLWjs7QUFDQSxXQUFLYixHQUFMLENBQVNXLEVBQVQsQ0FBWSxPQUFaLEVBQXFCLHNCQUFyQixFQUE2QyxZQUFNO0FBQ2pELGFBQUksQ0FBQ0csV0FBTDtBQUNELE9BRkQ7QUFHRDs7O2tDQUVhO0FBQ1osVUFBSUMsS0FBSyxHQUFHLEVBQVo7O0FBRUEsVUFBSWpCLFFBQVEsQ0FBQ2tCLElBQVQsQ0FBY0MsZUFBbEIsRUFBbUM7QUFDakM7QUFDQUYsYUFBSyxHQUFHakIsUUFBUSxDQUFDa0IsSUFBVCxDQUFjQyxlQUFkLEVBQVI7QUFDQUYsYUFBSyxDQUFDRyxpQkFBTixDQUF3QixLQUFLZixZQUE3QjtBQUNBWSxhQUFLLENBQUNJLE1BQU47QUFDRCxPQUxELE1BS08sSUFBSVAsTUFBTSxDQUFDUSxZQUFYLEVBQXlCO0FBQzlCO0FBQ0EsWUFBTUMsU0FBUyxHQUFHVCxNQUFNLENBQUNRLFlBQVAsRUFBbEI7QUFDQUwsYUFBSyxHQUFHakIsUUFBUSxDQUFDd0IsV0FBVCxFQUFSO0FBQ0FQLGFBQUssQ0FBQ1Esa0JBQU4sQ0FBeUIsS0FBS3BCLFlBQTlCO0FBQ0FrQixpQkFBUyxDQUFDRyxlQUFWO0FBQ0FILGlCQUFTLENBQUNJLFFBQVYsQ0FBbUJWLEtBQW5CO0FBQ0Q7QUFDRiIsImZpbGUiOiIuL3NvdXJjZS9zY3JpcHRzL3RlbXBsYXRlcy9HaWZ0Q2FyZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdpZnRDYXJkIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5naWZ0Y2FyZCcpO1xuICAgIHRoaXMuJGVsID0gJCh0aGlzLmVsKTtcbiAgICB0aGlzLnFyQ29kZSA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtZ2lmdGNhcmQtcXJdJyk7XG4gICAgdGhpcy5naWZ0Q2FyZENvZGUgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWdpZnRjYXJkLWNvZGVdJyk7XG5cbiAgICB0aGlzLl9iaW5kRXZlbnRzKCk7XG4gICAgdGhpcy5hZGRRckNvZGUoKTtcbiAgfVxuXG4gIGFkZFFyQ29kZSgpIHtcbiAgICByZXR1cm4gbmV3IFFSQ29kZSh0aGlzLnFyQ29kZSwge1xuICAgICAgdGV4dDogJCh0aGlzLnFyQ29kZSkuZGF0YSgnZ2lmdGNhcmQtcXInKSxcbiAgICAgIHdpZHRoOiAxMjAsXG4gICAgICBoZWlnaHQ6IDEyMCxcbiAgICB9KTtcbiAgfVxuXG4gIF9iaW5kRXZlbnRzKCkge1xuICAgIHRoaXMuJGVsLm9uKCdjbGljaycsICdbZGF0YS1naWZ0Y2FyZC1wcmludF0nLCAoKSA9PiB7XG4gICAgICB3aW5kb3cucHJpbnQoKTtcbiAgICB9KTtcblxuICAgIC8vIEF1dG8tc2VsZWN0IGdpZnQgY2FyZCBjb2RlIG9uIGNsaWNrLCBiYXNlZCBvbiBJRCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gICAgdGhpcy4kZWwub24oJ2NsaWNrJywgJ1tkYXRhLWdpZnRjYXJkLWNvZGVdJywgKCkgPT4ge1xuICAgICAgdGhpcy5fc2VsZWN0VGV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgX3NlbGVjdFRleHQoKSB7XG4gICAgbGV0IHJhbmdlID0gJyc7XG5cbiAgICBpZiAoZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UpIHtcbiAgICAgIC8vIG1zIG1ldGhvZFxuICAgICAgcmFuZ2UgPSBkb2N1bWVudC5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpO1xuICAgICAgcmFuZ2UubW92ZVRvRWxlbWVudFRleHQodGhpcy5naWZ0Q2FyZENvZGUpO1xuICAgICAgcmFuZ2Uuc2VsZWN0KCk7XG4gICAgfSBlbHNlIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAvLyBtb3osIG9wZXJhLCB3ZWJraXQgbWV0aG9kXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5naWZ0Q2FyZENvZGUpO1xuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/templates/GiftCard.js\n")},
1"./source/scripts/templates/Page.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Page; });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _components_RichText__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/RichText */ "./source/scripts/components/RichText.js");\n/* harmony import */ var _shortcodes_Shortcodes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shortcodes/Shortcodes */ "./source/scripts/shortcodes/Shortcodes.js");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\n\n\n\n\nvar Page = function Page() {\n _classCallCheck(this, Page);\n\n this.$pageContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\'[data-template-page]\');\n\n if (this.$pageContent.length) {\n new _components_RichText__WEBPACK_IMPORTED_MODULE_1__["default"](this.$pageContent);\n new _shortcodes_Shortcodes__WEBPACK_IMPORTED_MODULE_2__["default"](this.$pageContent[0]);\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zb3VyY2Uvc2NyaXB0cy90ZW1wbGF0ZXMvUGFnZS5qcz8wZGZjIl0sIm5hbWVzIjpbIlBhZ2UiLCIkcGFnZUNvbnRlbnQiLCIkIiwibGVuZ3RoIiwiUmljaFRleHQiLCJTaG9ydGNvZGVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFFQTs7SUFFcUJBLEksR0FDbkIsZ0JBQWM7QUFBQTs7QUFDWixPQUFLQyxZQUFMLEdBQW9CQyw2Q0FBQyxDQUFDLHNCQUFELENBQXJCOztBQUVBLE1BQUksS0FBS0QsWUFBTCxDQUFrQkUsTUFBdEIsRUFBOEI7QUFDNUIsUUFBSUMsNERBQUosQ0FBYSxLQUFLSCxZQUFsQjtBQUNBLFFBQUlJLDhEQUFKLENBQWUsS0FBS0osWUFBTCxDQUFrQixDQUFsQixDQUFmO0FBQ0Q7QUFDRixDIiwiZmlsZSI6Ii4vc291cmNlL3NjcmlwdHMvdGVtcGxhdGVzL1BhZ2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IFJpY2hUZXh0IGZyb20gJy4uL2NvbXBvbmVudHMvUmljaFRleHQnO1xuXG5pbXBvcnQgU2hvcnRjb2RlcyBmcm9tICcuLi9zaG9ydGNvZGVzL1Nob3J0Y29kZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy4kcGFnZUNvbnRlbnQgPSAkKCdbZGF0YS10ZW1wbGF0ZS1wYWdlXScpO1xuXG4gICAgaWYgKHRoaXMuJHBhZ2VDb250ZW50Lmxlbmd0aCkge1xuICAgICAgbmV3IFJpY2hUZXh0KHRoaXMuJHBhZ2VDb250ZW50KTtcbiAgICAgIG5ldyBTaG9ydGNvZGVzKHRoaXMuJHBhZ2VDb250ZW50WzBdKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/templates/Page.js\n')}
vendor: 3 bytes, line 1
1});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.