{
  "version": 3,
  "sources": ["/cdn/shop/t/49/assets/global.js?version=1.0.276"],
  "sourcesContent": ["function getFocusableElements(container) {\n  return Array.from(\n    container.querySelectorAll(\n      \"summary, a[href], button:enabled, [tabindex]:not([tabindex^='-']), [draggable], area, input:not([type=hidden]):enabled, select:enabled, textarea:enabled, object, iframe\"\n    )\n  );\n}\n\ndocument.querySelectorAll('[id^=\"Details-\"] summary').forEach((summary) => {\n  summary.setAttribute(\"role\", \"button\");\n  summary.setAttribute(\n    \"aria-expanded\",\n    summary.parentNode.hasAttribute(\"open\")\n  );\n\n  if (summary.nextElementSibling.getAttribute(\"id\")) {\n    summary.setAttribute(\"aria-controls\", summary.nextElementSibling.id);\n  }\n\n  summary.addEventListener(\"click\", (event) => {\n    event.currentTarget.setAttribute(\n      \"aria-expanded\",\n      !event.currentTarget.closest(\"details\").hasAttribute(\"open\")\n    );\n  });\n\n  if (summary.closest(\"header-drawer\")) return;\n  summary.parentElement.addEventListener(\"keyup\", onKeyUpEscape);\n});\n\nconst trapFocusHandlers = {};\n\nfunction trapFocus(container, elementToFocus = container) {\n  var elements = getFocusableElements(container);\n  var first = elements[0];\n  var last = elements[elements.length - 1];\n\n  removeTrapFocus();\n\n  trapFocusHandlers.focusin = (event) => {\n    if (\n      event.target !== container &&\n      event.target !== last &&\n      event.target !== first\n    )\n      return;\n\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.code.toUpperCase() !== \"TAB\") return; // If not TAB key\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  elementToFocus.focus();\n\n  if (\n    elementToFocus.tagName === \"INPUT\" &&\n    [\"search\", \"text\", \"email\", \"url\"].includes(elementToFocus.type) &&\n    elementToFocus.value\n  ) {\n    elementToFocus.setSelectionRange(0, elementToFocus.value.length);\n  }\n}\n\n// Here run the querySelector to figure out if the browser supports :focus-visible or not and run code based on it.\ntry {\n  document.querySelector(\":focus-visible\");\n} catch (e) {\n  focusVisiblePolyfill();\n}\n\nfunction focusVisiblePolyfill() {\n  const navKeys = [\n    \"ARROWUP\",\n    \"ARROWDOWN\",\n    \"ARROWLEFT\",\n    \"ARROWRIGHT\",\n    \"TAB\",\n    \"ENTER\",\n    \"SPACE\",\n    \"ESCAPE\",\n    \"HOME\",\n    \"END\",\n    \"PAGEUP\",\n    \"PAGEDOWN\",\n  ];\n  let currentFocusedElement = null;\n  let mouseClick = null;\n\n  window.addEventListener(\"keydown\", (event) => {\n    if (navKeys.includes(event.code.toUpperCase())) {\n      mouseClick = false;\n    }\n  });\n\n  window.addEventListener(\"mousedown\", (event) => {\n    mouseClick = true;\n  });\n\n  window.addEventListener(\n    \"focus\",\n    () => {\n      if (currentFocusedElement)\n        currentFocusedElement.classList.remove(\"focused\");\n\n      if (mouseClick) return;\n\n      currentFocusedElement = document.activeElement;\n      currentFocusedElement.classList.add(\"focused\");\n    },\n    true\n  );\n}\n\nfunction pauseAllMedia() {\n  document.querySelectorAll(\".js-youtube\").forEach((video) => {\n    video.contentWindow.postMessage(\n      '{\"event\":\"command\",\"func\":\"' + \"pauseVideo\" + '\",\"args\":\"\"}',\n      \"*\"\n    );\n  });\n  document.querySelectorAll(\".js-vimeo\").forEach((video) => {\n    video.contentWindow.postMessage('{\"method\":\"pause\"}', \"*\");\n  });\n  document.querySelectorAll(\"video\").forEach((video) => video.pause());\n  document.querySelectorAll(\"product-model\").forEach((model) => {\n    if (model.modelViewerUI) model.modelViewerUI.pause();\n  });\n}\n\nfunction removeTrapFocus(elementToFocus = null) {\n  document.removeEventListener(\"focusin\", trapFocusHandlers.focusin);\n  document.removeEventListener(\"focusout\", trapFocusHandlers.focusout);\n  document.removeEventListener(\"keydown\", trapFocusHandlers.keydown);\n\n  if (elementToFocus) elementToFocus.focus();\n}\n\nfunction onKeyUpEscape(event) {\n  if (event.code.toUpperCase() !== \"ESCAPE\") return;\n\n  const openDetailsElement = event.target.closest(\"details[open]\");\n  if (!openDetailsElement) return;\n\n  const summaryElement = openDetailsElement.querySelector(\"summary\");\n  openDetailsElement.removeAttribute(\"open\");\n  summaryElement.setAttribute(\"aria-expanded\", false);\n  summaryElement.focus();\n}\n\nclass QuantityInput extends HTMLElement {\n  constructor() {\n    super();\n    this.input = this.querySelector(\"input\");\n    this.changeEvent = new Event(\"change\", { bubbles: true });\n\n    this.input.addEventListener(\"change\", this.onInputChange.bind(this));\n    this.querySelectorAll(\"button\").forEach((button) =>\n      button.addEventListener(\"click\", this.onButtonClick.bind(this))\n    );\n  }\n\n  quantityUpdateUnsubscriber = undefined;\n\n  connectedCallback() {\n    this.validateQtyRules();\n    this.quantityUpdateUnsubscriber = subscribe(\n      PUB_SUB_EVENTS.quantityUpdate,\n      this.validateQtyRules.bind(this)\n    );\n  }\n\n  disconnectedCallback() {\n    if (this.quantityUpdateUnsubscriber) {\n      this.quantityUpdateUnsubscriber();\n    }\n  }\n\n  onInputChange(event) {\n    this.validateQtyRules();\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n    const previousValue = this.input.value;\n\n    event.target.name === \"plus\" ? this.input.stepUp() : this.input.stepDown();\n    if (previousValue !== this.input.value)\n      this.input.dispatchEvent(this.changeEvent);\n  }\n\n  validateQtyRules() {\n    const value = parseInt(this.input.value);\n    if (this.input.min) {\n      const min = parseInt(this.input.min);\n      const buttonMinus = this.querySelector(\".quantity-button[name='minus']\");\n      buttonMinus.classList.toggle(\"disabled\", value <= min);\n    }\n    if (this.input.max) {\n      const max = parseInt(this.input.max);\n      const buttonPlus = this.querySelector(\".quantity-button[name='plus']\");\n      buttonPlus.classList.toggle(\"disabled\", value >= max);\n    }\n  }\n}\n\ncustomElements.define(\"quantity-input\", QuantityInput);\n\nfunction debounce(fn, wait) {\n  let t;\n  return (...args) => {\n    clearTimeout(t);\n    t = setTimeout(() => fn.apply(this, args), wait);\n  };\n}\n\nfunction fetchConfig(type = \"json\") {\n  return {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Accept: `application/${type}`,\n    },\n  };\n}\n\n/*\n * Shopify Common JS\n *\n */\nif (typeof window.Shopify == \"undefined\") {\n  window.Shopify = {};\n}\n\nShopify.bind = function (fn, scope) {\n  return function () {\n    return fn.apply(scope, arguments);\n  };\n};\n\nShopify.setSelectorByValue = function (selector, value) {\n  for (var i = 0, count = selector.options.length; i < count; i++) {\n    var option = selector.options[i];\n    if (value == option.value || value == option.innerHTML) {\n      selector.selectedIndex = i;\n      return i;\n    }\n  }\n};\n\nShopify.addListener = function (target, eventName, callback) {\n  target.addEventListener\n    ? target.addEventListener(eventName, callback, false)\n    : target.attachEvent(\"on\" + eventName, callback);\n};\n\nShopify.postLink = function (path, options) {\n  options = options || {};\n  var method = options[\"method\"] || \"post\";\n  var params = options[\"parameters\"] || {};\n\n  var form = document.createElement(\"form\");\n  form.setAttribute(\"method\", method);\n  form.setAttribute(\"action\", path);\n\n  for (var key in params) {\n    var hiddenField = document.createElement(\"input\");\n    hiddenField.setAttribute(\"type\", \"hidden\");\n    hiddenField.setAttribute(\"name\", key);\n    hiddenField.setAttribute(\"value\", params[key]);\n    form.appendChild(hiddenField);\n  }\n  document.body.appendChild(form);\n  form.submit();\n  document.body.removeChild(form);\n};\n\nShopify.CountryProvinceSelector = function (\n  country_domid,\n  province_domid,\n  options\n) {\n  this.countryEl = document.getElementById(country_domid);\n  this.provinceEl = document.getElementById(province_domid);\n  this.provinceContainer = document.getElementById(\n    options[\"hideElement\"] || province_domid\n  );\n\n  Shopify.addListener(\n    this.countryEl,\n    \"change\",\n    Shopify.bind(this.countryHandler, this)\n  );\n\n  this.initCountry();\n  this.initProvince();\n};\n\nShopify.CountryProvinceSelector.prototype = {\n  initCountry: function () {\n    var value = this.countryEl.getAttribute(\"data-default\");\n    Shopify.setSelectorByValue(this.countryEl, value);\n    this.countryHandler();\n  },\n\n  initProvince: function () {\n    var value = this.provinceEl.getAttribute(\"data-default\");\n    if (value && this.provinceEl.options.length > 0) {\n      Shopify.setSelectorByValue(this.provinceEl, value);\n    }\n  },\n\n  countryHandler: function (e) {\n    var opt = this.countryEl.options[this.countryEl.selectedIndex];\n    var raw = opt.getAttribute(\"data-provinces\");\n    var provinces = JSON.parse(raw);\n\n    this.clearOptions(this.provinceEl);\n    if (provinces && provinces.length == 0) {\n      this.provinceContainer.style.display = \"none\";\n    } else {\n      for (var i = 0; i < provinces.length; i++) {\n        var opt = document.createElement(\"option\");\n        opt.value = provinces[i][0];\n        opt.innerHTML = provinces[i][1];\n        this.provinceEl.appendChild(opt);\n      }\n\n      this.provinceContainer.style.display = \"\";\n    }\n  },\n\n  clearOptions: function (selector) {\n    while (selector.firstChild) {\n      selector.removeChild(selector.firstChild);\n    }\n  },\n\n  setOptions: function (selector, values) {\n    for (var i = 0, count = values.length; i < values.length; i++) {\n      var opt = document.createElement(\"option\");\n      opt.value = values[i];\n      opt.innerHTML = values[i];\n      selector.appendChild(opt);\n    }\n  },\n};\n\n/* Mobile Navigation v1.1.0 */\nclass MenuDrawer extends HTMLElement {\n  constructor() {\n    super();\n\n    this.mainDetailsToggle = this.querySelector(\"details\");\n\n    this.addEventListener(\"keyup\", this.onKeyUp.bind(this));\n    this.addEventListener(\"focusout\", this.onFocusOut.bind(this));\n    this.bindEvents();\n  }\n\n  bindEvents() {\n    this.querySelectorAll(\"summary\").forEach((summary) =>\n      summary.addEventListener(\"click\", this.onSummaryClick.bind(this))\n    );\n    this.querySelectorAll(\".menu-drawer-close-button\").forEach((button) =>\n      button.addEventListener(\"click\", this.onCloseButtonClick.bind(this))\n    );\n  }\n\n  onKeyUp(event) {\n    if (event.code.toUpperCase() !== \"ESCAPE\") return;\n\n    const openDetailsElement = event.target.closest(\"details[open]\");\n    if (!openDetailsElement) return;\n\n    openDetailsElement === this.mainDetailsToggle\n      ? this.closeMenuDrawer(\n          event,\n          this.mainDetailsToggle.querySelector(\"summary\")\n        )\n      : this.closeSubmenu(openDetailsElement);\n  }\n\n  onSummaryClick(event) {\n    const summaryElement = event.currentTarget;\n    const detailsElement = summaryElement.parentNode;\n    const parentMenuElement = detailsElement.closest(\".has-submenu\");\n    const isOpen = detailsElement.hasAttribute(\"open\");\n    const reducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n\n    if (detailsElement.classList.contains(\"eb-mobile-collections-menu__details\")) {\n      window.requestAnimationFrame(() => {\n        summaryElement.setAttribute(\n          \"aria-expanded\",\n          detailsElement.hasAttribute(\"open\")\n        );\n      });\n      return;\n    }\n\n    function addTrapFocus() {\n      trapFocus(\n        summaryElement.nextElementSibling,\n        detailsElement.querySelector(\"button\")\n      );\n      summaryElement.nextElementSibling.removeEventListener(\n        \"transitionend\",\n        addTrapFocus\n      );\n    }\n\n    if (detailsElement === this.mainDetailsToggle) {\n      if (isOpen) event.preventDefault();\n      isOpen\n        ? this.closeMenuDrawer(event, summaryElement)\n        : this.openMenuDrawer(summaryElement);\n\n      if (window.matchMedia(\"(max-width: 990px)\")) {\n        document.documentElement.style.setProperty(\n          \"--viewport-height\",\n          `${window.innerHeight}px`\n        );\n      }\n    } else {\n      setTimeout(() => {\n        detailsElement.classList.add(\"menu-opening\");\n        summaryElement.setAttribute(\"aria-expanded\", true);\n        parentMenuElement && parentMenuElement.classList.add(\"submenu-open\");\n        !reducedMotion || reducedMotion.matches\n          ? addTrapFocus()\n          : summaryElement.nextElementSibling.addEventListener(\n              \"transitionend\",\n              addTrapFocus\n            );\n      }, 100);\n    }\n  }\n\n  openMenuDrawer(summaryElement) {\n    setTimeout(() => {\n      this.mainDetailsToggle.classList.add(\"menu-opening\");\n    });\n    summaryElement.setAttribute(\"aria-expanded\", true);\n    trapFocus(this.mainDetailsToggle, summaryElement);\n    document.body.classList.add(`overflow-hidden-${this.dataset.breakpoint}`);\n\n    if (window.matchMedia(\"(min-width: 768px)\").matches) {\n    document.body.style.overflow = \"hidden\";\n    document.body.style.padding = \"0 4px 0 0\";\n}\n\n    const animatedElements = this.querySelectorAll(\"[data-aos]\");\n    animatedElements.forEach((element) => {\n      element.classList.add(\"aos-animate\");\n    });\n  }\n\n  closeMenuDrawer(event, elementToFocus = false) {\n    if (event === undefined) return;\n\n    this.mainDetailsToggle.classList.remove(\"menu-opening\");\n    this.mainDetailsToggle.querySelectorAll(\"details\").forEach((details) => {\n      details.removeAttribute(\"open\");\n      details.classList.remove(\"menu-opening\");\n    });\n    this.mainDetailsToggle\n      .querySelectorAll(\".submenu-open\")\n      .forEach((submenu) => {\n        submenu.classList.remove(\"submenu-open\");\n      });\n    document.body.classList.remove(\n      `overflow-hidden-${this.dataset.breakpoint}`\n    );\n    removeTrapFocus(elementToFocus);\n    this.closeAnimation(this.mainDetailsToggle);\n\nif (window.matchMedia(\"(min-width: 768px)\").matches) {\n    setTimeout(() => {\n        document.body.style.overflow = \"scroll\";\n        document.body.style.padding = \"0\";\n      document.body.style.overflowX = \"hidden\";\n    }, 100); \n}\n\n     const animatedElements = this.querySelectorAll(\".aos-animate\");\n    animatedElements.forEach((element) => {\n      element.classList.remove(\"aos-animate\");\n    });\n  }\n\n  onFocusOut(event) {\n    setTimeout(() => {\n      if (\n        this.mainDetailsToggle.hasAttribute(\"open\") &&\n        !this.mainDetailsToggle.contains(document.activeElement)\n      )\n        this.closeMenuDrawer();\n    });\n  }\n\n  onCloseButtonClick(event) {\n    const detailsElement = event.currentTarget.closest(\"details\");\n    this.closeSubmenu(detailsElement);\n  }\n\n  closeSubmenu(detailsElement) {\n    const parentMenuElement = detailsElement.closest(\".submenu-open\");\n    parentMenuElement && parentMenuElement.classList.remove(\"submenu-open\");\n    detailsElement.classList.remove(\"menu-opening\");\n    detailsElement\n      .querySelector(\"summary\")\n      .setAttribute(\"aria-expanded\", false);\n    removeTrapFocus(detailsElement.querySelector(\"summary\"));\n    this.closeAnimation(detailsElement);\n  }\n\n  closeAnimation(detailsElement) {\n    let animationStart;\n\n    const handleAnimation = (time) => {\n      if (animationStart === undefined) {\n        animationStart = time;\n      }\n\n      const elapsedTime = time - animationStart;\n\n      if (elapsedTime < 400) {\n        window.requestAnimationFrame(handleAnimation);\n      } else {\n        detailsElement.removeAttribute(\"open\");\n        if (detailsElement.closest(\"details[open]\")) {\n          trapFocus(\n            detailsElement.closest(\"details[open]\"),\n            detailsElement.querySelector(\"summary\")\n          );\n        }\n      }\n    };\n\n    window.requestAnimationFrame(handleAnimation);\n  }\n}\n\ncustomElements.define(\"menu-drawer\", MenuDrawer);\n\nclass HeaderDrawer extends MenuDrawer {\n  constructor() {\n    super();\n  }\n\n  openMenuDrawer(summaryElement) {\n    this.header = this.header || document.querySelector(\".section-header\");\n    this.borderOffset =\n      this.borderOffset ||\n      this.closest(\".header-wrapper\").classList.contains(\n        \"header-wrapper--border-bottom\"\n      )\n        ? 1\n        : 0;\n    document.documentElement.style.setProperty(\n      \"--header-bottom-position\",\n      `${parseInt(\n        this.header.getBoundingClientRect().bottom - this.borderOffset\n      )}px`\n    );\n    this.header.classList.add(\"menu-open\");\n\n    setTimeout(() => {\n      this.mainDetailsToggle.classList.add(\"menu-opening\");\n    });\n\n    summaryElement.setAttribute(\"aria-expanded\", true);\n    trapFocus(this.mainDetailsToggle, summaryElement);\n    document.body.classList.add(`overflow-hidden-${this.dataset.breakpoint}`);\n  }\n\n  closeMenuDrawer(event, elementToFocus) {\n    super.closeMenuDrawer(event, elementToFocus);\n    this.header.classList.remove(\"menu-open\");\n  }\n}\n\ncustomElements.define(\"header-drawer\", HeaderDrawer);\n\nclass ModalDialog extends HTMLElement {\n  constructor() {\n    super();\n    this.querySelector('[id^=\"ModalClose-\"]').addEventListener(\n      \"click\",\n      this.hide.bind(this, false)\n    );\n    this.addEventListener(\"keyup\", (event) => {\n      if (event.code.toUpperCase() === \"ESCAPE\") this.hide();\n    });\n    if (this.classList.contains(\"media-modal\")) {\n      this.addEventListener(\"pointerup\", (event) => {\n        if (\n          event.pointerType === \"mouse\" &&\n          !event.target.closest(\"deferred-media, product-model\")\n        )\n          this.hide();\n      });\n    } else {\n      this.addEventListener(\"click\", (event) => {\n        if (event.target === this) this.hide();\n      });\n    }\n  }\n\n  connectedCallback() {\n    if (this.moved) return;\n    this.moved = true;\n    document.body.appendChild(this);\n  }\n\n  show(opener) {\n    this.openedBy = opener;\n    const popup = this.querySelector(\".template-popup\");\n    document.body.classList.add(\"overflow-hidden\");\n    this.setAttribute(\"open\", \"\");\n    if (popup) popup.loadContent();\n    trapFocus(this, this.querySelector('[role=\"dialog\"]'));\n    window.pauseAllMedia();\n  }\n\n  hide() {\n    document.body.classList.remove(\"overflow-hidden\");\n    document.body.dispatchEvent(new CustomEvent(\"modalClosed\"));\n    this.removeAttribute(\"open\");\n    removeTrapFocus(this.openedBy);\n    window.pauseAllMedia();\n  }\n}\ncustomElements.define(\"modal-dialog\", ModalDialog);\n\nclass ModalOpener extends HTMLElement {\n  constructor() {\n    super();\n\n    const button = this.querySelector(\"button\");\n\n    if (!button) return;\n    button.addEventListener(\"click\", () => {\n      const modal = document.querySelector(this.getAttribute(\"data-modal\"));\n      if (modal) modal.show(button);\n    });\n  }\n}\ncustomElements.define(\"modal-opener\", ModalOpener);\n\nclass DeferredMedia extends HTMLElement {\n  constructor() {\n    super();\n    const poster = this.querySelector('[id^=\"Deferred-Poster-\"]');\n    if (!poster) return;\n    poster.addEventListener(\"click\", this.loadContent.bind(this));\n  }\n\n  loadContent(focus = true) {\n    window.pauseAllMedia();\n    if (!this.getAttribute(\"loaded\")) {\n      const content = document.createElement(\"div\");\n      content.appendChild(\n        this.querySelector(\"template\").content.firstElementChild.cloneNode(true)\n      );\n\n      this.setAttribute(\"loaded\", true);\n      const deferredElement = this.appendChild(\n        content.querySelector(\"video, model-viewer, iframe\")\n      );\n      if (focus) deferredElement.focus();\n    }\n  }\n}\n\ncustomElements.define(\"deferred-media\", DeferredMedia);\n\n// v1.0.0: runs the callback right after the browser's own layout, where geometry reads are free.\nfunction runAfterLayout(callback) {\n  const observer = new ResizeObserver(() => {\n    observer.disconnect();\n    callback();\n  });\n  observer.observe(document.documentElement);\n}\n\nclass SliderComponent extends HTMLElement {\n  constructor() {\n    super();\n\n    this.slider = this.querySelector('[id^=\"Slider-\"]');\n    this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n    this.enableSliderLooping = false;\n    this.currentPageElement = this.querySelector(\".slider-counter--current\");\n    this.pageTotalElement = this.querySelector(\".slider-counter--total\");\n    this.prevButton = this.querySelector('button[name=\"previous\"]');\n    this.nextButton = this.querySelector('button[name=\"next\"]');\n\n    if (!this.slider || !this.nextButton) return;\n\n    // v1.1.0: slides are measured in the ResizeObserver callback, after the browser has laid out the page.\n    this.sliderItemsToShow = Array.from(this.sliderItems);\n    this.currentPage = 1;\n    this.pagesPending = true;\n    this.resizeObserver = new ResizeObserver(() => this.initPages());\n    this.resizeObserver.observe(this.slider);\n\n    this.slider.addEventListener(\"scroll\", this.update.bind(this));\n    this.prevButton.addEventListener(\"click\", this.onButtonClick.bind(this));\n    this.nextButton.addEventListener(\"click\", this.onButtonClick.bind(this));\n  }\n\n  initPages() {\n    this.pagesPending = false;\n    this.sliderItemsToShow = Array.from(this.sliderItems).filter(\n      (element) => element.clientWidth > 0\n    );\n\n    if (this.sliderItemsToShow.length < 2) return;\n\n    this.sliderItemOffset =\n      this.sliderItemsToShow[1].offsetLeft -\n      this.sliderItemsToShow[0].offsetLeft;\n    this.slidesPerPage = Math.floor(\n      (this.slider.clientWidth - this.sliderItemsToShow[0].offsetLeft) /\n        this.sliderItemOffset\n    );\n    this.totalPages = this.sliderItemsToShow.length - this.slidesPerPage + 1;\n\n    this.update();\n  }\n\n  resetPages() {\n    this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n    if (!this.resizeObserver) {\n      this.initPages();\n      return;\n    }\n    // v1.1.0: a new observation is delivered after the next layout, so initPages reads clean geometry.\n    this.pagesPending = true;\n    this.resizeObserver.unobserve(this.slider);\n    this.resizeObserver.observe(this.slider);\n  }\n\n  update() {\n    if (!this.slider || !this.nextButton || this.pagesPending) return;\n\n    // v1.1.0: all geometry is read before the first DOM write.\n    const scrollLeft = this.slider.scrollLeft;\n    const firstSlide = this.sliderItemsToShow[0];\n    const lastSlide = this.sliderItemsToShow[this.sliderItemsToShow.length - 1];\n    const firstVisible = !this.enableSliderLooping && Boolean(firstSlide) && this.isSlideVisible(firstSlide);\n    const lastVisible = !this.enableSliderLooping && Boolean(lastSlide) && this.isSlideVisible(lastSlide);\n    const previousPage = this.currentPage;\n    this.currentPage = Math.round(scrollLeft / this.sliderItemOffset) + 1;\n\n    if (this.currentPageElement && this.pageTotalElement) {\n      this.currentPageElement.textContent = this.currentPage;\n      this.pageTotalElement.textContent = this.totalPages;\n    }\n\n    if (this.currentPage != previousPage) {\n      this.dispatchEvent(\n        new CustomEvent(\"slideChanged\", {\n          detail: {\n            currentPage: this.currentPage,\n            currentElement: this.sliderItemsToShow[this.currentPage - 1],\n          },\n        })\n      );\n    }\n\n    if (this.enableSliderLooping) return;\n\n    if (firstVisible && scrollLeft === 0) {\n      this.prevButton.setAttribute(\"disabled\", \"disabled\");\n    } else {\n      this.prevButton.removeAttribute(\"disabled\");\n    }\n\n    if (lastVisible) {\n      this.nextButton.setAttribute(\"disabled\", \"disabled\");\n    } else {\n      this.nextButton.removeAttribute(\"disabled\");\n    }\n  }\n\n  isSlideVisible(element, offset = 0) {\n    const lastVisibleSlide =\n      this.slider.clientWidth + this.slider.scrollLeft - offset;\n    return (\n      element.offsetLeft + element.clientWidth <= lastVisibleSlide &&\n      element.offsetLeft >= this.slider.scrollLeft\n    );\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n    const step = event.currentTarget.dataset.step || 1;\n    this.slideScrollPosition =\n      event.currentTarget.name === \"next\"\n        ? this.slider.scrollLeft + step * this.sliderItemOffset\n        : this.slider.scrollLeft - step * this.sliderItemOffset;\n    this.slider.scrollTo({\n      left: this.slideScrollPosition,\n    });\n  }\n}\n\ncustomElements.define(\"slider-component\", SliderComponent);\n\nclass SlideshowComponent extends SliderComponent {\n  constructor() {\n    super();\n    this.sliderControlWrapper = this.querySelector(\".slider-buttons\");\n    this.enableSliderLooping = true;\n\n    if (!this.sliderControlWrapper) return;\n\n    this.sliderFirstItemNode = this.slider.querySelector(\".slideshow-slide\");\n    if (this.sliderItemsToShow.length > 0) this.currentPage = 1;\n\n    this.sliderControlLinksArray = Array.from(\n      this.sliderControlWrapper.querySelectorAll(\".slider-counter-link\")\n    );\n    this.sliderControlLinksArray.forEach((link) =>\n      link.addEventListener(\"click\", this.linkToSlide.bind(this))\n    );\n    this.slider.addEventListener(\"scroll\", this.setSlideVisibility.bind(this));\n    this.setSlideVisibility();\n\n    if (this.slider.getAttribute(\"data-autoplay\") === \"true\")\n      this.setAutoPlay();\n  }\n\n  setAutoPlay() {\n    this.sliderAutoplayButton = this.querySelector(\".slideshow-autoplay\");\n    this.autoplaySpeed = this.slider.dataset.speed * 1000;\n\n    this.sliderAutoplayButton.addEventListener(\n      \"click\",\n      this.autoPlayToggle.bind(this)\n    );\n    this.addEventListener(\"mouseover\", this.focusInHandling.bind(this));\n    this.addEventListener(\"mouseleave\", this.focusOutHandling.bind(this));\n    this.addEventListener(\"focusin\", this.focusInHandling.bind(this));\n    this.addEventListener(\"focusout\", this.focusOutHandling.bind(this));\n\n    this.play();\n    this.autoplayButtonIsSetToPlay = true;\n  }\n\n  onButtonClick(event) {\n    super.onButtonClick(event);\n    const isFirstSlide = this.currentPage === 1;\n    const isLastSlide = this.currentPage === this.sliderItemsToShow.length;\n\n    if (!isFirstSlide && !isLastSlide) return;\n\n    if (isFirstSlide && event.currentTarget.name === \"previous\") {\n      this.slideScrollPosition =\n        this.slider.scrollLeft +\n        this.sliderFirstItemNode.clientWidth * this.sliderItemsToShow.length;\n    } else if (isLastSlide && event.currentTarget.name === \"next\") {\n      this.slideScrollPosition = 0;\n    }\n    this.slider.scrollTo({\n      left: this.slideScrollPosition,\n    });\n  }\n\n  update() {\n    super.update();\n    this.sliderControlButtons = this.querySelectorAll(\".slider-counter-link\");\n    this.prevButton.removeAttribute(\"disabled\");\n\n    if (!this.sliderControlButtons.length) return;\n\n    this.sliderControlButtons.forEach((link) => {\n      link.classList.remove(\"slider-counter-link--active\");\n      link.removeAttribute(\"aria-current\");\n    });\n    this.sliderControlButtons[this.currentPage - 1].classList.add(\n      \"slider-counter-link--active\"\n    );\n    this.sliderControlButtons[this.currentPage - 1].setAttribute(\n      \"aria-current\",\n      true\n    );\n  }\n\n  autoPlayToggle() {\n    this.togglePlayButtonState(this.autoplayButtonIsSetToPlay);\n    this.autoplayButtonIsSetToPlay ? this.pause() : this.play();\n    this.autoplayButtonIsSetToPlay = !this.autoplayButtonIsSetToPlay;\n  }\n\n  focusOutHandling(event) {\n    const focusedOnAutoplayButton =\n      event.target === this.sliderAutoplayButton ||\n      this.sliderAutoplayButton.contains(event.target);\n    if (!this.autoplayButtonIsSetToPlay || focusedOnAutoplayButton) return;\n    this.play();\n  }\n\n  focusInHandling(event) {\n    const focusedOnAutoplayButton =\n      event.target === this.sliderAutoplayButton ||\n      this.sliderAutoplayButton.contains(event.target);\n    if (focusedOnAutoplayButton && this.autoplayButtonIsSetToPlay) {\n      this.play();\n    } else if (this.autoplayButtonIsSetToPlay) {\n      this.pause();\n    }\n  }\n\n  play() {\n    this.slider.setAttribute(\"aria-live\", \"off\");\n    clearInterval(this.autoplay);\n    this.autoplay = setInterval(\n      this.autoRotateSlides.bind(this),\n      this.autoplaySpeed\n    );\n  }\n\n  pause() {\n    this.slider.setAttribute(\"aria-live\", \"polite\");\n    clearInterval(this.autoplay);\n  }\n\n  togglePlayButtonState(pauseAutoplay) {\n    if (pauseAutoplay) {\n      this.sliderAutoplayButton.classList.add(\"slideshow-autoplay--paused\");\n      this.sliderAutoplayButton.setAttribute(\n        \"aria-label\",\n        window.accessibilityStrings.playSlideshow\n      );\n    } else {\n      this.sliderAutoplayButton.classList.remove(\"slideshow-autoplay--paused\");\n      this.sliderAutoplayButton.setAttribute(\n        \"aria-label\",\n        window.accessibilityStrings.pauseSlideshow\n      );\n    }\n  }\n\n  autoRotateSlides() {\n    const slideScrollPosition =\n      this.currentPage === this.sliderItems.length\n        ? 0\n        : this.slider.scrollLeft +\n          this.slider.querySelector(\".slideshow-slide\").clientWidth;\n    this.slider.scrollTo({\n      left: slideScrollPosition,\n      behavior: \"smooth\",\n    });\n  }\n\n  setSlideVisibility() {\n    this.sliderItemsToShow.forEach((item, index) => {\n      const linkElements = item.querySelectorAll(\"a\");\n      if (index === this.currentPage - 1) {\n        if (linkElements.length)\n          linkElements.forEach((button) => {\n            button.removeAttribute(\"tabindex\");\n          });\n        item.setAttribute(\"aria-hidden\", \"false\");\n        item.removeAttribute(\"tabindex\");\n        item.classList.add(\"active\");\n      } else {\n        if (linkElements.length)\n          linkElements.forEach((button) => {\n            button.setAttribute(\"tabindex\", \"-1\");\n          });\n        item.setAttribute(\"aria-hidden\", \"true\");\n        item.setAttribute(\"tabindex\", \"-1\");\n        item.classList.remove(\"active\");\n      }\n    });\n  }\n\n  linkToSlide(event) {\n    event.preventDefault();\n    const slideScrollPosition =\n      this.slider.scrollLeft +\n      this.sliderFirstItemNode.clientWidth *\n        (this.sliderControlLinksArray.indexOf(event.currentTarget) +\n          1 -\n          this.currentPage);\n    this.slider.scrollTo({\n      left: slideScrollPosition,\n      behavior: \"smooth\",\n    });\n  }\n}\n\ncustomElements.define(\"slideshow-component\", SlideshowComponent);\n\nclass VariantSelects extends HTMLElement {\n  constructor() {\n    super();\n    this.addEventListener(\"change\", this.onVariantChange);\n  }\n\n  onVariantChange(event) {\n    const previousVariantId = this.currentVariant?.id;\n    this.updateOptions();\n    this.updateMasterId();\n    // Globo selects the same size again after its own swatch change; skip the duplicate render.\n    if (previousVariantId && this.currentVariant?.id === previousVariantId) return;\n    this.toggleAddButton(true, \"\", false);\n    this.updatePickupAvailability();\n    this.updateSelectedSwatchValue(event);\n    this.removeErrorMessage();\n    this.updateVariantStatuses();\n\n    if (!this.currentVariant) {\n      this.toggleAddButton(true, \"\", true);\n      this.setUnavailable();\n    } else {\n      this.updateMedia();\n      this.updateURL();\n      this.updateVariantInput();\n      this.renderProductInfo();\n      this.updateShareUrl();\n    }\n  }\n\n  updateOptions() {\n    this.options = Array.from(\n      this.querySelectorAll(\"select\"),\n      (select) => select.value\n    );\n  }\n\n  updateMasterId() {\n    this.currentVariant = this.getVariantData().find((variant) => {\n      return !variant.options\n        .map((option, index) => {\n          return this.options[index] === option;\n        })\n        .includes(false);\n    });\n  }\n\n  updateSelectedSwatchValue({ target }) {\n    const { name, value, tagName } = target;\n\n    if (tagName === 'SELECT' && target.selectedOptions.length) {\n      const swatchValue = target.selectedOptions[0].dataset.optionSwatchValue;\n      const selectedDropdownSwatchValue = this.querySelector(`[data-selected-dropdown-swatch=\"${name}\"] > .swatch`);\n      if (!selectedDropdownSwatchValue) return;\n      if (swatchValue) {\n        selectedDropdownSwatchValue.style.setProperty('--swatch--background', swatchValue);\n        selectedDropdownSwatchValue.classList.remove('swatch--unavailable');\n      } else {\n        selectedDropdownSwatchValue.style.setProperty('--swatch--background', 'unset');\n        selectedDropdownSwatchValue.classList.add('swatch--unavailable');\n      }\n    } else if (tagName === 'INPUT' && target.type === 'radio') {\n      const selectedSwatchValue = this.querySelector(`[data-selected-swatch-value=\"${name}\"]`);\n      if (selectedSwatchValue) selectedSwatchValue.innerHTML = value;\n    }\n  }\n\n  updateMedia() {\n    if (!this.currentVariant) return;\n\n    const mediaGalleries = document.querySelectorAll(\n      `[id^=\"MediaGallery-${this.dataset.section}\"]`\n    );\n    mediaGalleries.forEach((mediaGallery) => mediaGallery.setActiveVariant?.(this.currentVariant.id));\n\n    if (!this.currentVariant.featured_media) return;\n\n    mediaGalleries.forEach((mediaGallery) => {\n      mediaGallery.setActiveMedia(\n        `${this.dataset.section}-${this.currentVariant.featured_media.id}`,\n        true\n      );\n    });\n\n    const modalContent = document.querySelector(\n      `#ProductModal-${this.dataset.section} .product-media-modal__content`\n    );\n    if (!modalContent) return;\n    const newMediaModal = modalContent.querySelector(\n      `[data-media-id=\"${this.currentVariant.featured_media.id}\"]`\n    );\n    modalContent.prepend(newMediaModal);\n  }\n\n  updateURL() {\n    if (!this.currentVariant || this.dataset.updateUrl === \"false\") return;\n    window.history.replaceState(\n      {},\n      \"\",\n      `${this.dataset.url}?variant=${this.currentVariant.id}`\n    );\n  }\n\n  updateShareUrl() {\n    const shareButton = document.getElementById(\n      `Share-${this.dataset.section}`\n    );\n    if (!shareButton || !shareButton.updateUrl) return;\n    shareButton.updateUrl(\n      `${window.shopUrl}${this.dataset.url}?variant=${this.currentVariant.id}`\n    );\n  }\n\n  updateVariantInput() {\n    const productForms = document.querySelectorAll(\n      `#product-form-${this.dataset.section}, #product-form-installment-${this.dataset.section}`\n    );\n    productForms.forEach((productForm) => {\n      const input = productForm.querySelector('input[name=\"id\"]');\n      input.value = this.currentVariant.id;\n      input.dispatchEvent(new Event(\"change\", { bubbles: true }));\n    });\n  }\n\n  updateVariantStatuses() {\n    const selectedOptionOneVariants = this.variantData.filter(\n      (variant) => this.querySelector(\":checked\").value === variant.option1\n    );\n    const inputWrappers = [...this.querySelectorAll(\".product-form-input\")];\n    inputWrappers.forEach((option, index) => {\n      if (index === 0) return;\n      const optionInputs = [\n        ...option.querySelectorAll('input[type=\"radio\"], option'),\n      ];\n      const previousOptionSelected =\n        inputWrappers[index - 1].querySelector(\":checked\").value;\n      const availableOptionInputsValue = selectedOptionOneVariants\n        .filter(\n          (variant) =>\n            variant.available &&\n            variant[`option${index}`] === previousOptionSelected\n        )\n        .map((variantOption) => variantOption[`option${index + 1}`]);\n      this.setInputAvailability(optionInputs, availableOptionInputsValue);\n    });\n  }\n\n  setInputAvailability(listOfOptions, listOfAvailableOptions) {\n    const hideVariants = document.querySelector('[data-hide-variants=\"true\"]') !== null;\n    listOfOptions.forEach((input) => {\n      if (listOfAvailableOptions.includes(input.getAttribute(\"value\"))) {\n        input.innerText = input.getAttribute(\"value\");\n        input.classList.remove(\"option-disabled\");\n        input.style.display = \"\";\n      } else {\n        if (hideVariants) {\n        input.style.display = \"none\";\n      } else {\n        input.innerText = window.variantStrings.unavailable_with_option.replace(\n          \"[value]\",\n          input.getAttribute(\"value\")\n        );\n        }\n      }\n    });\n  }\n\n  updatePickupAvailability() {\n    const pickUpAvailability = document.querySelector(\"pickup-availability\");\n    if (!pickUpAvailability) return;\n    if (typeof pickUpAvailability.fetchAvailability !== \"function\") return;\n\n    if (this.currentVariant && this.currentVariant.available) {\n      pickUpAvailability.fetchAvailability(this.currentVariant.id);\n    } else {\n      pickUpAvailability.removeAttribute(\"available\");\n      pickUpAvailability.innerHTML = \"\";\n    }\n  }\n\n  removeErrorMessage() {\n    const section = this.closest(\"section\");\n    if (!section) return;\n\n    const productForm = section.querySelector(\"product-form\");\n    if (productForm) productForm.handleErrorMessage();\n  }\n\n  renderProductInfo() {\n    const requestedVariantId = this.currentVariant.id;\n    const sectionId = this.dataset.originalSection\n      ? this.dataset.originalSection\n      : this.dataset.section;\n\n    fetch(\n      `${this.dataset.url}?variant=${requestedVariantId}&section_id=${\n        this.dataset.originalSection\n          ? this.dataset.originalSection\n          : this.dataset.section\n      }`\n    )\n      .then((response) => response.text())\n      .then((responseText) => {\n        // prevent unnecessary ui changes from abandoned selections\n        if (this.currentVariant.id !== requestedVariantId) return;\n\n        const html = new DOMParser().parseFromString(responseText, \"text/html\");\n        const destination = document.getElementById(\n          `price-${this.dataset.section}`\n        );\n        const source = html.getElementById(\n          `price-${\n            this.dataset.originalSection\n              ? this.dataset.originalSection\n              : this.dataset.section\n          }`\n        );\n        const skuSource = html.getElementById(\n          `Sku-${\n            this.dataset.originalSection\n              ? this.dataset.originalSection\n              : this.dataset.section\n          }`\n        );\n        const skuDestination = document.getElementById(\n          `Sku-${this.dataset.section}`\n        );\n        const inventorySource = html.getElementById(\n          `Inventory-${\n            this.dataset.originalSection\n              ? this.dataset.originalSection\n              : this.dataset.section\n          }`\n        );\n        const inventoryDestination = document.getElementById(\n          `Inventory-${this.dataset.section}`\n        );\n\n        if (source && destination) destination.innerHTML = source.innerHTML;\n        if (inventorySource && inventoryDestination)\n          inventoryDestination.innerHTML = inventorySource.innerHTML;\n        if (skuSource && skuDestination) {\n          skuDestination.innerHTML = skuSource.innerHTML;\n          skuDestination.classList.toggle(\n            \"visibility-hidden\",\n            skuSource.classList.contains(\"visibility-hidden\")\n          );\n        }\n\n        const price = document.getElementById(`price-${this.dataset.section}`);\n\n        if (price) price.classList.remove(\"visibility-hidden\");\n\n        if (inventoryDestination)\n          inventoryDestination.classList.toggle(\n            \"visibility-hidden\",\n            inventorySource.innerText === \"\"\n          );\n\n        const addButtonUpdated = html.getElementById(\n          `ProductSubmitButton-${sectionId}`\n        );\n        this.toggleAddButton(\n          addButtonUpdated ? addButtonUpdated.hasAttribute(\"disabled\") : true,\n          window.variantStrings.soldOut\n        );\n\n        publish(PUB_SUB_EVENTS.variantChange, {\n          data: {\n            sectionId,\n            html,\n            variant: this.currentVariant,\n          },\n        });\n      });\n  }\n\n  toggleAddButton(disable = true, text, modifyClass = true) {\n    const productForm = document.getElementById(\n      `product-form-${this.dataset.section}`\n    );\n    if (!productForm) return;\n    const addButton = productForm.querySelector('[name=\"add\"]');\n    const addButtonText = productForm.querySelector('[name=\"add\"] > span');\n    if (!addButton) return;\n\n    if (disable) {\n      addButton.setAttribute(\"disabled\", \"disabled\");\n      if (text) addButtonText.textContent = text;\n    } else {\n      addButton.removeAttribute(\"disabled\");\n      addButtonText.textContent = window.variantStrings.addToCart;\n    }\n\n    if (!modifyClass) return;\n  }\n\n  setUnavailable() {\n    const button = document.getElementById(\n      `product-form-${this.dataset.section}`\n    );\n    const addButton = button.querySelector('[name=\"add\"]');\n    const addButtonText = button.querySelector('[name=\"add\"] > span');\n    const price = document.getElementById(`price-${this.dataset.section}`);\n    const inventory = document.getElementById(\n      `Inventory-${this.dataset.section}`\n    );\n    const sku = document.getElementById(`Sku-${this.dataset.section}`);\n\n    if (!addButton) return;\n    addButtonText.textContent = window.variantStrings.unavailable;\n    if (price) price.classList.add(\"visibility-hidden\");\n    if (inventory) inventory.classList.add(\"visibility-hidden\");\n    if (sku) sku.classList.add(\"visibility-hidden\");\n  }\n\n  getVariantData() {\n    this.variantData =\n      this.variantData ||\n      JSON.parse(this.querySelector('[type=\"application/json\"]').textContent);\n    return this.variantData;\n  }\n}\n\ncustomElements.define(\"variant-selects\", VariantSelects);\n\nclass VariantRadios extends VariantSelects {\n  constructor() {\n    super();\n  }\n\n  setInputAvailability(listOfOptions, listOfAvailableOptions) {\n    listOfOptions.forEach((input) => {\n      if (listOfAvailableOptions.includes(input.getAttribute(\"value\"))) {\n        input.classList.remove(\"disabled\");\n      } else {\n        input.classList.add(\"disabled\");\n      }\n    });\n  }\n\n  updateOptions() {\n    const fieldsets = Array.from(this.querySelectorAll(\"fieldset\"));\n    this.options = fieldsets.map((fieldset) => {\n      return Array.from(fieldset.querySelectorAll(\"input\")).find(\n        (radio) => radio.checked\n      ).value;\n    });\n  }\n}\n\ncustomElements.define(\"variant-radios\", VariantRadios);\n\n// Mobile PDP variant cards v1.0.0.\nif (!customElements.get('eb-mobile-variant-cards')) {\n  customElements.define('eb-mobile-variant-cards', class EbMobileVariantCards extends HTMLElement {\n    constructor() {\n      super();\n      this.handleClick = this.handleClick.bind(this);\n      this.handleKeydown = this.handleKeydown.bind(this);\n      this.handleCanonicalChange = this.handleCanonicalChange.bind(this);\n    }\n\n    connectedCallback() {\n      if (this.initialized) return;\n\n      this.pickerShell = this.closest('[data-eb-mobile-variant-picker]');\n      this.canonicalPicker = this.pickerShell?.querySelector('variant-selects, variant-radios');\n      this.buttons = Array.from(this.querySelectorAll('[data-eb-mobile-variant-id]'));\n      if (!this.canonicalPicker || !this.buttons.length) return;\n\n      this.initialized = true;\n      this.addEventListener('click', this.handleClick);\n      this.addEventListener('keydown', this.handleKeydown);\n      this.canonicalPicker.addEventListener('change', this.handleCanonicalChange);\n\n      if (typeof subscribe === 'function' && typeof PUB_SUB_EVENTS !== 'undefined') {\n        this.unsubscribeVariantChange = subscribe(PUB_SUB_EVENTS.variantChange, ({ data }) => {\n          if (String(data?.sectionId) === String(this.dataset.section)) {\n            this.syncSelection(data.variant?.id);\n          }\n        });\n      }\n\n      this.syncSelection(this.getCanonicalVariantId());\n    }\n\n    disconnectedCallback() {\n      if (!this.initialized) return;\n\n      this.removeEventListener('click', this.handleClick);\n      this.removeEventListener('keydown', this.handleKeydown);\n      this.canonicalPicker?.removeEventListener('change', this.handleCanonicalChange);\n      this.unsubscribeVariantChange?.();\n      this.unsubscribeVariantChange = null;\n      this.initialized = false;\n    }\n\n    handleClick(event) {\n      const button = event.target.closest('[data-eb-mobile-variant-id]');\n      if (!button || button.disabled) return;\n\n      this.selectOption(button.dataset.ebMobileOptionValue, button.dataset.ebMobileVariantId);\n    }\n\n    handleKeydown(event) {\n      if (!['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) return;\n\n      const enabledButtons = this.buttons.filter((button) => !button.disabled);\n      if (!enabledButtons.length) return;\n\n      event.preventDefault();\n      const currentButton = event.target.closest('[data-eb-mobile-variant-id]');\n      const currentIndex = Math.max(0, enabledButtons.indexOf(currentButton));\n      let targetIndex = currentIndex;\n\n      if (event.key === 'Home') targetIndex = 0;\n      if (event.key === 'End') targetIndex = enabledButtons.length - 1;\n      if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n        targetIndex = (currentIndex - 1 + enabledButtons.length) % enabledButtons.length;\n      }\n      if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n        targetIndex = (currentIndex + 1) % enabledButtons.length;\n      }\n\n      enabledButtons[targetIndex].focus();\n      enabledButtons[targetIndex].click();\n    }\n\n    handleCanonicalChange() {\n      this.syncSelection(this.getCanonicalVariantId());\n    }\n\n    selectOption(optionValue, variantId) {\n      this.selectCanonicalOption(optionValue);\n      this.syncGloboSelection(optionValue);\n      window.setTimeout(() => {\n        const globoInput = this.syncGloboSelection(optionValue);\n        this.closest('product-info')\n          ?.querySelector('media-gallery')\n          ?.setActiveVariant(variantId);\n        // Globo filters the gallery thumbnails only on a change event of its own radio.\n        // No bubbling: the variant picker would handle the same size again and re-render the section.\n        globoInput?.dispatchEvent(new Event('change'));\n      });\n    }\n\n    selectCanonicalOption(optionValue) {\n      const select = this.canonicalPicker.querySelector('select');\n      if (select) {\n        select.value = optionValue;\n        if (select.value === optionValue) {\n          select.dispatchEvent(new Event('change', { bubbles: true }));\n        }\n        return;\n      }\n\n      const radio = Array.from(this.canonicalPicker.querySelectorAll('input[type=\"radio\"]'))\n        .find((input) => input.value === optionValue);\n      if (!radio) return;\n\n      radio.checked = true;\n      radio.dispatchEvent(new Event('change', { bubbles: true }));\n    }\n\n    syncGloboSelection(optionValue) {\n      const globoInputs = Array.from(\n        this.pickerShell.querySelectorAll('.globo-swatch-product-detail input[type=\"radio\"]')\n      );\n      const selectedInput = globoInputs.find((input) => input.value === optionValue);\n      if (!selectedInput) return;\n\n      globoInputs.forEach((input) => { input.checked = input === selectedInput; });\n      const selectedValue = selectedInput.closest('.swatch--gl')?.querySelector('.name-variant');\n      if (selectedValue) {\n        const prefix = document.createElement('span');\n        prefix.textContent = ': ';\n        selectedValue.replaceChildren(prefix, document.createTextNode(optionValue));\n      }\n      return selectedInput;\n    }\n\n    getCanonicalVariantId() {\n      if (this.canonicalPicker.currentVariant?.id) return this.canonicalPicker.currentVariant.id;\n\n      const productInfo = this.closest('product-info');\n      return productInfo?.querySelector('.product-variant-id')?.value || this.dataset.selectedVariantId;\n    }\n\n    syncSelection(variantId) {\n      if (!variantId) return;\n\n      const selectedButton = this.buttons.find(\n        (button) => String(button.dataset.ebMobileVariantId) === String(variantId)\n      );\n      if (!selectedButton) return;\n\n      this.dataset.selectedVariantId = variantId;\n      this.buttons.forEach((button) => {\n        const isSelected = button === selectedButton;\n        button.classList.toggle('is-selected', isSelected);\n        button.setAttribute('aria-checked', String(isSelected));\n        button.tabIndex = isSelected ? 0 : -1;\n      });\n\n      const selectedValue = this.querySelector('[data-eb-mobile-selected-value]');\n      if (selectedValue) selectedValue.textContent = selectedButton.dataset.ebMobileOptionValue;\n    }\n  });\n}\n\nclass ProductRecommendations extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    const handleIntersection = (entries, observer) => {\n      if (!entries[0].isIntersecting) return;\n      observer.unobserve(this);\n\n      fetch(this.dataset.url)\n        .then((response) => response.text())\n        .then((text) => {\n          const html = document.createElement(\"div\");\n          html.innerHTML = text;\n          const recommendations = html.querySelector(\"product-recommendations\");\n\n          if (recommendations && recommendations.innerHTML.trim().length) {\n            this.innerHTML = recommendations.innerHTML;\n          }\n\n          if (\n            !this.querySelector(\"slideshow-component\") &&\n            this.classList.contains(\"complementary-products\")\n          ) {\n            this.remove();\n          }\n\n          if (html.querySelector(\".grid-item\")) {\n            this.classList.add(\"product-recommendations--loaded\");\n          }\n        })\n        .catch((e) => {\n          console.error(e);\n        });\n    };\n\n    new IntersectionObserver(handleIntersection.bind(this), {\n      rootMargin: \"0px 0px 400px 0px\",\n    }).observe(this);\n  }\n}\n\ncustomElements.define(\"product-recommendations\", ProductRecommendations);\n\nclass ComparisonSlider extends HTMLElement {\n  constructor() {\n    super();\n\n    this.active = false;\n    this.button = this.querySelector(\"button\");\n    this.horizontal = this.dataset.layout === \"horizontal\";\n    this.bodyStyleOverflowY = document.body.style.overflowY;\n    this.init();\n\n    // Initialize Intersection Observer to trigger animation on scroll\n    this.observer = new IntersectionObserver((entries) => {\n      entries.forEach(entry => {\n        if (entry.isIntersecting) {\n          this.animateOnLoad(); // Trigger animation when in view\n          this.observer.disconnect(); // Stop observing once animation starts\n        }\n      });\n    });\n    this.observer.observe(this);\n  }\n\n  init() {\n    this.button.addEventListener(\"touchstart\", this.startHandler.bind(this));\n    document.body.addEventListener(\"touchend\", this.endHandler.bind(this));\n    document.body.addEventListener(\"touchmove\", this.onHandler.bind(this));\n\n    this.button.addEventListener(\"mousedown\", this.startHandler.bind(this));\n    document.body.addEventListener(\"mouseup\", this.endHandler.bind(this));\n    document.body.addEventListener(\"mousemove\", this.onHandler.bind(this));\n  }\n\n  animateOnLoad() {\n    let percent = 0;\n    const targetPercent = 50; // Final position\n    const speed = 1; // Adjust speed for slower animation\n\n    const animate = () => {\n      percent += speed; // Increment for smooth transition\n      this.style.setProperty(\"--percent\", percent + \"%\");\n\n      if (percent < targetPercent) {\n        requestAnimationFrame(animate); // Continue until target reached\n      } else {\n        this.style.setProperty(\"--percent\", targetPercent + \"%\"); // Set exact target position\n      }\n    };\n    requestAnimationFrame(animate);\n  }\n\n  startHandler() {\n    if (window.innerWidth <= 750) {\n      document.body.style.overflowY = \"hidden\";\n    }\n\n    this.active = true;\n    this.classList.add(\"scrolling\");\n  }\n\n  endHandler() {\n    this.active = false;\n    this.classList.remove(\"scrolling\");\n    document.body.style.overflowY = this.bodyStyleOverflowY;\n  }\n\n  onHandler(e) {\n    if (!this.active) return;\n\n    const event = (e.touches && e.touches[0]) || e;\n    const x = this.horizontal\n      ? event.pageX - this.offsetLeft\n      : event.pageY - this.offsetTop;\n\n    this.scrollIt(x);\n  }\n\n  scrollIt(x) {\n    const distance = this.horizontal ? this.clientWidth : this.clientHeight;\n\n    const max = distance - 20;\n    const min = 20;\n    const mouseX = Math.max(min, Math.min(x, max));\n    const mousePercent = (mouseX * 100) / distance;\n    this.style.setProperty(\"--percent\", mousePercent + \"%\");\n  }\n}\n\ncustomElements.define(\"comparison-slider\", ComparisonSlider);\n\n// Animate Details Element/\nclass CollapsibleRow extends HTMLElement {\n  constructor() {\n    super();\n\n    this.details = this.querySelector(\"details\");\n    this.summary = this.querySelector(\"summary\");\n    this.content = this.querySelector(\".collapsible__content\");\n\n    this.animation = null;\n    this.isClosing = false;\n    this.isExpanding = false;\n  }\n\n  connectedCallback() {\n    this.setListeners();\n  }\n\n  setListeners() {\n  if (!this.listenerAdded) {  \n    this.querySelector(\"summary\").addEventListener(\"click\", (e) => this.onClick(e));\n    this.listenerAdded = true;  \n  }\n}\n\n onClick(e) {\n  e.preventDefault(); \n  e.stopPropagation(); \n\n  this.details.style.overflow = \"hidden\";\n\n  if (this.isClosing || this.isExpanding) {\n    return; \n  }\n\n  if (!this.details.open) {\n    this.open();\n  } else {\n    this.shrink();\n  }\n}\n\nshrink() {\n\n  this.isClosing = true;\n\n  const startHeight = `${this.details.offsetHeight}px`;\n  const endHeight = `${this.summary.offsetHeight}px`;\n\n  if (this.animation) {\n    this.animation.cancel();\n  }\n\n  this.animation = this.details.animate(\n    {\n      height: [startHeight, endHeight],\n    },\n    {\n      duration: 300,\n      easing: \"ease\",\n    }\n  );\n\n  this.animation.onfinish = () => {\n    this.onAnimationFinish(false);\n  };\n  this.animation.oncancel = () => {\n    this.isClosing = false;\n  };\n}\n\n  open() {\n    this.details.style.height = `${this.details.offsetHeight}px`;\n    this.details.open = true;\n    window.requestAnimationFrame(() => this.expand());\n  }\n\n  expand() {\n\n    this.isExpanding = true;\n\n    const startHeight = `${this.details.offsetHeight}px`;\n    const endHeight = `${this.details.offsetHeight + this.content.offsetHeight}px`;\n\n    if (this.animation) {\n      this.animation.cancel();\n    }\n\n    this.animation = this.details.animate(\n      {\n        height: [startHeight, endHeight],\n      },\n      {\n        duration: 400,\n        easing: \"ease-out\",\n      }\n    );\n\n    this.animation.onfinish = () => this.onAnimationFinish(true);\n    this.animation.oncancel = () => {\n      this.isExpanding = false;\n    };\n  }\n\nonAnimationFinish(open) {\n  this.details.open = open;\n  this.animation = null;\n  this.isClosing = false;\n  this.isExpanding = false;\n  this.details.style.height = this.details.style.overflow = \"\";\n}\n}\n\ncustomElements.define(\"collapsible-row\", CollapsibleRow);\n\nclass CountdownTimer extends HTMLElement {\n  connectedCallback() {\n    // Retrieve attributes from the custom element\n    const endDateString = this.getAttribute(\"end-date\");\n    const endDate = new Date(endDateString + \" UTC\");\n    const utcEndDate = new Date(\n      Date.UTC(\n        endDate.getUTCFullYear(),\n        endDate.getUTCMonth(),\n        endDate.getUTCDate(),\n        0,\n        0,\n        0\n      )\n    );\n    const endTime = this.getAttribute(\"end-time\");\n    const countdownFinishedMessage = this.getAttribute(\n      \"countdown_finished_message\"\n    );\n\n    // Calculate the countdown time\n    const second = 1000;\n    const minute = second * 60;\n    const hour = minute * 60;\n    const day = hour * 24;\n    const countDownDateTimeUTC = new Date(\n      Date.UTC(\n        endDate.getUTCFullYear(),\n        endDate.getUTCMonth(),\n        endDate.getUTCDate(),\n        parseInt(endTime.split(\":\")[0]),\n        parseInt(endTime.split(\":\")[1]),\n        0\n      )\n    ).getTime();\n\n    // Update the countdown timer display\n    const updateTimer = () => {\n      const now = new Date().getTime();\n      const distance = countDownDateTimeUTC - now;\n\n      // Check if the countdown has reached zero\n      if (distance <= 0) {\n        clearInterval(interval); // Clear the interval to stop the countdown\n\n        if (countdownFinishedMessage) {\n          this.innerHTML = countdownFinishedMessage;\n        } else {\n          // Hide the section if no countdown finished message and the timer hits 0\n          this.closest(\".timer\").style.display = \"none\";\n        }\n        return;\n      }\n      const days = Math.floor(distance / day);\n      const hours = Math.floor((distance % day) / hour);\n      const minutes = Math.floor((distance % hour) / minute);\n      const seconds = Math.floor((distance % minute) / second);\n      const show_days = window.translations.count_days;\n      const show_hours = window.translations.count_hours;\n      const show_minutes = window.translations.count_minutes;\n      const show_seconds = window.translations.count_seconds;\n      this.innerHTML = `\n          <div class=\"js-timer-days\"><span class=\"timer-number\">${days}</span> <span class=\"timer-text\">${show_days}</span></div>\n          <div class=\"js-timer-hours\"><span class=\"timer-number\">${hours}</span> <span class=\"timer-text\">${show_hours}</span></div>\n          <div class=\"js-timer-minutes\"><span class=\"timer-number\">${minutes}</span> <span class=\"timer-text\">${show_minutes}</span></div>\n          <div class=\"js-timer-seconds\"><span class=\"timer-number\">${seconds}</span>  <span class=\"timer-text\">${show_seconds}</span></div>\n        `;\n\n    };\n    // Start the countdown timer\n    const interval = setInterval(updateTimer, second);\n  }\n}\n// Define the custom element\ncustomElements.define(\"countdown-timer\", CountdownTimer);\n\nclass LocationMap extends HTMLElement {\n  constructor() {\n    super();\n    this.apiKey = this.getAttribute(\"api-key\");\n    this.address = this.getAttribute(\"address\");\n    this.zoomLevel = parseInt(this.getAttribute(\"zoom-level\"));\n    this.markerContent = this.getAttribute(\"marker-content\");\n\n    // Define marker and map as instance variables\n    this.marker = null;\n    this.map = null;\n\n    // Keep track of whether the map has been created or not\n    this.mapCreated = false;\n  }\n\n  connectedCallback() {\n    // Check if the API key is available before loading the map\n    if (this.apiKey) {\n      this.loadGoogleMaps();\n    }\n  }\n\n  loadGoogleMaps() {\n    if (!window.googleMapsLoaded) {\n      window.googleMapsLoaded = new Promise((resolve) => {\n        const script = document.createElement(\"script\");\n        script.src = `https://maps.googleapis.com/maps/api/js?key=${this.apiKey}`;\n        script.onload = resolve;\n        document.head.appendChild(script);\n      });\n    }\n\n    window.googleMapsLoaded.then(() => this.initMap());\n  }\n\n  initMap() {\n    if (!this.mapCreated) {\n      const geocoder = new google.maps.Geocoder();\n      geocoder.geocode({ address: this.address }, (results, status) => {\n        if (status === google.maps.GeocoderStatus.OK) {\n          const latitude = results[0].geometry.location.lat();\n          const longitude = results[0].geometry.location.lng();\n\n          // Initialize the Google Map\n          const mapOptions = {\n            center: { lat: latitude, lng: longitude },\n            zoom: this.zoomLevel,\n          };\n          const mapElement = document.createElement(\"div\");\n          mapElement.style.height = \"400px\";\n          this.appendChild(mapElement);\n          this.map = new google.maps.Map(mapElement, mapOptions);\n\n          // Add a marker to the map\n          this.marker = new google.maps.Marker({\n            position: { lat: latitude, lng: longitude },\n            map: this.map,\n            title: this.address,\n          });\n\n          // Add marker content infowindow\n          const infowindow = new google.maps.InfoWindow({\n            content: this.markerContent,\n          });\n\n          // Open infowindow on marker click\n          this.marker.addListener(\"click\", () => {\n            this.fadeInInfoWindow(infowindow);\n          });\n\n          // Close infowindow when user clicks elsewhere on the map\n          google.maps.event.addListener(this.map, \"click\", () => {\n            infowindow.close();\n          });\n\n          // Set the mapCreated flag to true to prevent creating additional maps\n          this.mapCreated = true;\n        } else {\n          console.error(\n            \"Geocode was not successful for the following reason: \" + status\n          );\n        }\n      });\n    }\n  }\n\n  fadeInInfoWindow(infowindow) {\n    // Set initial opacity of the infowindow container to 0\n    infowindow.setOptions({ opacity: 0 });\n\n    // Open the infowindow\n    infowindow.open(this.map, this.marker);\n\n    // Add a small delay to give time for the infowindow to render\n    setTimeout(() => {\n      // Use CSS transition to fade-in the infowindow container\n      infowindow.setOptions({ opacity: 1 });\n    }, 50); // Adjust the delay as needed\n  }\n}\n\ncustomElements.define(\"location-map\", LocationMap);\n\nclass CustomTabs extends HTMLElement {\n  connectedCallback() {\n    const tabItems = this.querySelectorAll(\".tab-item a\");\n    const tabContents = this.querySelectorAll(\".tab-content\");\n\n    // Show the first tab content by default\n    tabContents[0].style.display = \"block\";\n    tabItems[0].classList.add(\"active\");\n\n    // Handle tab click event\n    tabItems.forEach((item, index) => {\n      item.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n\n        // Hide all tab content\n        tabContents.forEach((content) => {\n          content.style.display = \"none\";\n        });\n\n        // Show the clicked tab content\n        const target = item.getAttribute(\"href\");\n        this.querySelector(target).style.display = \"block\";\n\n        // Remove active class from all tab items\n        tabItems.forEach((tabItem) => {\n          tabItem.classList.remove(\"active\");\n        });\n\n        // Add active class to the clicked tab item\n        item.classList.add(\"active\");\n      });\n    });\n  }\n}\ncustomElements.define(\"custom-tabs\", CustomTabs);\n\nclass CustomTabsBlock extends HTMLElement {\n  connectedCallback() {\n    const tabItems = this.querySelectorAll(\".tab-item a\");\n    const tabContents = this.querySelectorAll(\".tab-content\");\n\n    if (tabItems.length === 0 || tabContents.length === 0) return;\n\n    // Hide all tabs except the first one\n    tabContents.forEach((content, index) => {\n      content.style.display = index === 0 ? \"block\" : \"none\";\n    });\n\n    tabItems[0].classList.add(\"active\");\n\n    tabItems.forEach((item) => {\n      item.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n\n        // Get the target tab ID\n        const target = item.getAttribute(\"href\");\n\n        // Hide all tab contents\n        tabContents.forEach((content) => {\n          content.style.display = \"none\";\n        });\n\n        // Show the correct tab content\n        const activeTab = this.querySelector(target);\n        if (activeTab) {\n          activeTab.style.display = \"block\";\n        }\n\n        // Remove active class from all tabs\n        tabItems.forEach((tabItem) => {\n          tabItem.classList.remove(\"active\");\n        });\n\n        // Add active class to the clicked tab\n        item.classList.add(\"active\");\n      });\n    });\n  }\n}\ncustomElements.define(\"custom-tabs-block\", CustomTabsBlock);\n\n// Text Scroll\n\nclass TextScroll extends HTMLElement {\n  constructor() {\n    super();\n    this.inner_element = null;\n    this.position = 0;\n    this.speed = 0;\n    this.box_width = 0;\n    this.inner_element_width = 0;\n    this.box = null;\n    this._running = false;\n\n    const getWidth = (element) => {\n      if (!element) return 0; \n      const rect = element.getBoundingClientRect();\n      return rect.right - rect.left;\n    };\n\n    const hasVisibleSpans = () => {\n      const spans = this.querySelectorAll(\".scroll-text-block > span\");\n      return spans.length > 0;\n    };\n\n    const setUpChildrens = () => {\n      if (!this.inner_element || !this.box) return;\n      const qty = Math.ceil(this.box_width / this.inner_element_width) + 1;\n      while (this.box.children.length < qty) {\n        this.box.appendChild(this.inner_element.cloneNode(true));\n      }\n      while (this.box.children.length > qty) {\n        this.box.removeChild(this.box.lastChild);\n      }\n    };\n\n    const refreshWidths = () => {\n      if (!this.box || !this.inner_element) return;\n      this.box_width = getWidth(this.box);\n      this.inner_element_width = getWidth(this.inner_element);\n    };\n\n    const nextFrame = (delta, direction) => {\n      if (!this.inner_element || !this.box || !hasVisibleSpans()) return; \n      refreshWidths();\n      setUpChildrens();\n\n      Array.from(this.box.children).forEach((el) => {\n        const translateX = direction === \"rtl\" ? this.position : -this.position;\n        el.style.transform = `translateX(${translateX}px)`;\n      });\n\n      this.position += (this.speed * delta) / 1000;\n      if (this.position >= this.inner_element_width) {\n        this.position %= this.inner_element_width;\n      }\n    };\n\n    this.start = (direction) => {\n      if (!this.inner_element || !this.box || !hasVisibleSpans()) return;\n      this._running = true;\n      let last_time = null;\n      const loop_func = () => {\n        if (!this._running || !hasVisibleSpans()) return;\n        const now = Date.now();\n        const delta = last_time === null ? 0 : now - last_time;\n        nextFrame(delta, direction);\n        last_time = now;\n        window.requestAnimationFrame(loop_func);\n      };\n      window.requestAnimationFrame(loop_func);\n    };\n\n    this.stop = () => {\n      this._running = false;\n    };\n\n    this.observeIntersection = (entries) => {\n      if (entries[0].isIntersecting && hasVisibleSpans()) {\n        this.start(this.dataset.scrollDirection);\n      } else {\n        this.stop();\n      }\n    };\n\n    this.init = (direction) => {\n      this.inner_element = this.children[0];\n      this.box = this;\n\n      if (!this.inner_element || !this.box || !hasVisibleSpans()) return;\n\n      this.box_width = getWidth(this.box);\n      this.inner_element_width = getWidth(this.inner_element);\n      setUpChildrens();\n\n      const intersectionObserver = new IntersectionObserver(this.observeIntersection);\n      intersectionObserver.observe(this);\n\n      if (this.dataset.stopOnHover === \"true\") {\n        this.addEventListener(\"mouseenter\", () => this.stop());\n        this.addEventListener(\"mouseleave\", () => this.start(direction));\n      }\n    };    \n\n    const speed =\n      window.innerWidth > 751\n        ? parseInt(this.dataset.scrollSpeed)\n        : parseInt(this.dataset.scrollSpeed) / 1.5;\n    const direction = this.dataset.scrollDirection;\n    this.speed = speed;\n\n    this.init(direction);\n  }\n}\n\nif (!customElements.get(\"text-scroll\")) {\n  customElements.define(\"text-scroll\", TextScroll);\n}\n\n// Image Hotspots\nclass ImageHotspots extends HTMLElement {\n  constructor() {\n    super();\n    this.sectionId = this.getAttribute(\"data-tooltips\");\n    this.attachEventListeners = this.attachEventListeners.bind(this);\n    this.updateContent = this.updateContent.bind(this);\n    this.loadFirstTooltip = this.loadFirstTooltip.bind(this);\n  }\n\n  connectedCallback() {\n    this.initializeSection();\n    this.reinitializeOnShopifyEvents();\n  }\n\n  updateContent(blockId, content) {\n    const gridItemRight = this.querySelector(\n      \".grid-item.right .dynamic-content-placeholder\"\n    );\n    if (gridItemRight) {\n      // Add a subtle fade-out animation before updating content\n      gridItemRight.style.transition =\n        \"opacity 0.4s ease-out, transform 0.4s ease-out\";\n      gridItemRight.style.opacity = \"0\";\n      gridItemRight.style.transform = \"translateY(10px)\"; // Slight slide-up effect\n\n      // Wait for the fade-out transition to complete before updating content\n      setTimeout(() => {\n        // Update the content\n        gridItemRight.innerHTML = content;\n\n        // Trigger a fade-in animation after content is updated\n        gridItemRight.style.opacity = \"1\";\n        gridItemRight.style.transform = \"translateY(0)\";\n      }, 400); // Match the duration of the fade-out animation\n    }\n  }\n\n  loadFirstTooltip() {\n    const firstTooltipButton = this.querySelector(\n      \".tooltip-item:first-child .tooltip-button\"\n    );\n    if (firstTooltipButton) {\n      const blockId = firstTooltipButton.value;\n      const tooltipContent = this.querySelector(\n        `#tooltip-overlay-${blockId}`\n      ).innerHTML;\n      this.updateContent(blockId, tooltipContent);\n    }\n  }\n\n  attachEventListeners() {\n    this.querySelectorAll(\"[data-tooltip-trigger]\").forEach((button) => {\n      button.addEventListener(\"click\", () => {\n        const blockId = button.value;\n        const tooltipContent = this.querySelector(\n          `#tooltip-overlay-${blockId}`\n        ).innerHTML;\n        this.updateContent(blockId, tooltipContent);\n      });\n    });\n  }\n\n  initializeSection() {\n    this.attachEventListeners();\n    this.loadFirstTooltip();\n  }\n\n  reinitializeOnShopifyEvents() {\n    if (window.Shopify && Shopify.designMode) {\n      document.addEventListener(\"shopify:section:load\", (event) => {\n        if (event.detail.sectionId === this.sectionId) {\n          this.initializeSection();\n        }\n      });\n\n      document.addEventListener(\"shopify:section:select\", (event) => {\n        if (event.detail.sectionId === this.sectionId) {\n          this.initializeSection();\n        }\n      });\n\n      document.addEventListener(\"shopify:section:reorder\", (event) => {\n        if (event.detail.sectionId === this.sectionId) {\n          this.initializeSection();\n        }\n      });\n    }\n  }\n}\n\n// Define the custom element\ncustomElements.define(\"image-hotspots\", ImageHotspots);\n\n// Initialize all existing sections on page load\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  document.querySelectorAll(\"image-hotspots\").forEach((section) => {\n    section.initializeSection();\n  });\n});\n\n// Tab Switcher\n\nclass TabSwitcher extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    this.querySelectorAll('input[type=\"radio\"]').forEach((radio) => {\n      radio.addEventListener('change', () => this.handleTabChange(radio));\n    });\n\n    document.addEventListener('shopify:section:select', () => {\n      const radio = this.querySelector('input[type=\"radio\"]:checked');\n      this.handleTabChange(radio);\n    });\n\n    const checkedRadio = this.querySelector('input[type=\"radio\"]:checked');\n    if (checkedRadio) {\n      this.handleTabChange(checkedRadio);  \n    } else {\n      const firstRadio = this.querySelector('input[type=\"radio\"]');\n      if (firstRadio) {\n        firstRadio.checked = true;  \n        this.handleTabChange(firstRadio);  \n      }\n    }\n\n    window.addEventListener('resize', () => {\n      const radio = this.querySelector('input[type=\"radio\"]:checked');\n      if (radio) {\n        this.updateGliderPosition(radio);\n      }\n    });\n  }\n\nhandleTabChange(radio) {\n    const parts = radio.id.split('-');\n    const sectionId = parts[1];\n\n    if (parts.length < 3) {\n        return; \n    }\n\n    const collectionNumber = parseInt(parts[parts.length - 1], 10) - 1;\n\n    this.querySelectorAll('.tab-content > div').forEach((content, index) => {\n        if (index === collectionNumber) {\n            content.style.display = 'block';\n            content.setAttribute('data-aos', 'fade-up');\n        } else {\n            content.style.display = 'none';\n            content.removeAttribute('data-aos');\n            content.classList.remove('aos-animate');\n        }\n    });\n\n    this.updateGliderPosition(radio);\n\n    if (typeof AOS !== 'undefined') {\n    AOS.init();\n}\n\n}\n\n  updateGliderPosition(radio) {\n    const glider = this.querySelector('.glider');\n    const selectedLabel = radio.nextElementSibling; \n\n    const tabWidth = selectedLabel.offsetWidth;\n    const tabLeft = selectedLabel.offsetLeft;\n\n    glider.style.width = `${tabWidth}px`;\n    glider.style.transform = `translateX(${tabLeft}px)`;\n  }\n}\n\ncustomElements.define('tab-switcher', TabSwitcher);\n\n// Slick Slider inspired with\n/*!\n * Copyright (c) 2024 by Pedro Castro (https://codepen.io/aspeddro/pen/zqyJBr)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software \n * and associated documentation files (the \"Software\"), to deal in the Software without restriction, \n * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, \n * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, \n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies \n * or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, \n * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR \n * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE \n * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, \n * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *  * Modified by: Mana Themes\n * Changes:\n * - The JavaScript has been extensively rewritten to enhance functionality and adapt it for the theme's specific requirements.\n * - The Liquid files have been customized to align with the theme's design and layout needs.\n */\n\nclass SlickSlider extends HTMLElement {\n  constructor() {\n    super();\n    this.current = 0;\n    this.autoUpdate = false;\n    this.timeTrans = 4000;\n    this.slides = null;\n  }\n\n  connectedCallback() {\n    this.initSlider();\n  }\n\n  initSlider() {\n    const slickMain = this.closest(\".slick-main\");\n    if (slickMain) {\n      const enableAutoplay = slickMain.getAttribute(\"data-enable-autoplay\");\n      const autoplaySpeed = slickMain.getAttribute(\"data-autoplay-speed\");\n      this.autoUpdate = enableAutoplay === \"true\";\n      this.timeTrans = autoplaySpeed ? parseInt(autoplaySpeed) * 1000 : 4000;\n    }\n    this.slides = this.querySelectorAll(\"li\");\n\n    if (this.autoUpdateInterval) {\n      clearInterval(this.autoUpdateInterval);\n    }\n\n    const existingNav = this.querySelector(\".nav_arrows\");\n    if (existingNav) {\n      existingNav.remove();\n    }\n\n\n    if (this.slides.length > 1) {\n      const nav = document.createElement(\"slick-nav\");\n      nav.className = \"nav_arrows\";\n\n      const prevBtn = document.createElement(\"button\");\n      prevBtn.className = \"prev\";\n      prevBtn.setAttribute(\"aria-label\", \"Prev\");\n\n      const nextBtn = document.createElement(\"button\");\n      nextBtn.className = \"next\";\n      nextBtn.setAttribute(\"aria-label\", \"Next\");\n\n      const counter = document.createElement(\"div\");\n      counter.className = \"slick-counter\";\n      counter.innerHTML = `<span>1</span><span>${this.slides.length}</span>`;\n\n      nav.appendChild(prevBtn);\n      nav.appendChild(counter);\n      nav.appendChild(nextBtn);\n      this.appendChild(nav);\n\n      this.slides[this.current].classList.add(\"current\");\n      this.slides[this.slides.length - 1].classList.add(\"prev_slide\");\n\n      prevBtn.addEventListener(\"click\", () => this.navigate(\"left\"));\n      nextBtn.addEventListener(\"click\", () => this.navigate(\"right\"));\n\n      setInterval(() => {\n        if (this.autoUpdate) this.navigate(\"right\");\n      }, this.timeTrans);\n\n      this.addEventListener(\"mouseenter\", () => (this.autoUpdate = false));\n      this.addEventListener(\"mouseleave\", () => (this.autoUpdate = true));\n\n      document.addEventListener(\"keydown\", (ev) => {\n        if (ev.key === \"ArrowLeft\") this.navigate(\"left\");\n        if (ev.key === \"ArrowRight\") this.navigate(\"right\");\n      });\n\n      this.addEventListener(\n        \"touchstart\",\n        (ev) => this.handleTouchStart(ev),\n        false\n      );\n      this.addEventListener(\n        \"touchmove\",\n        (ev) => this.handleTouchMove(ev),\n        false\n      );\n    }\n  }\n\n  navigate(direction) {\n    this.slides.forEach((slide) => {\n      slide.classList.remove(\"current\", \"prev_slide\");\n    });\n\n    if (direction === \"right\") {\n      this.current =\n        this.current < this.slides.length - 1 ? this.current + 1 : 0;\n    } else {\n      this.current =\n        this.current > 0 ? this.current - 1 : this.slides.length - 1;\n    }\n\n    const nextCurrent =\n      this.current < this.slides.length - 1 ? this.current + 1 : 0;\n    const prevCurrent =\n      this.current > 0 ? this.current - 1 : this.slides.length - 1;\n\n    this.slides[this.current].classList.add(\"current\");\n    this.slides[prevCurrent].classList.add(\"prev_slide\");\n\n    this.querySelector(\".slick-counter span:first-child\").textContent =\n      this.current + 1;\n  }\n  handleTouchStart(evt) {\n    this.xDown = evt.touches[0].clientX;\n    this.yDown = evt.touches[0].clientY;\n  }\n\n  handleTouchMove(evt) {\n    if (!this.xDown || !this.yDown) return;\n\n    const xUp = evt.touches[0].clientX;\n    const yUp = evt.touches[0].clientY;\n\n    const xDiff = this.xDown - xUp;\n    const yDiff = this.yDown - yUp;\n\n    if (Math.abs(xDiff) > Math.abs(yDiff)) {\n      if (xDiff > 0) this.navigate(\"right\");\n      else this.navigate(\"left\");\n    }\n\n    this.xDown = null;\n    this.yDown = null;\n  }\n  disconnectedCallback() {\n  if (this.autoUpdateInterval) {\n    clearInterval(this.autoUpdateInterval);\n  }\n }\n}\n\ncustomElements.define(\"slick-slider\", SlickSlider);\n\n// Anchor link on sliders\n\nfunction handleButtonClick(event) {\n  var clickedElement = event.target;\n\n  var sliderComponent = clickedElement.closest(\n    \"slider-component, slideshow-component\"\n  );\n\n  if (sliderComponent) {\n    if (clickedElement.matches(\".button\")) {\n      var href = clickedElement.getAttribute(\"href\");\n\n      if (href && href.startsWith(\"#\")) {\n        event.preventDefault();\n\n        var targetId = href.substring(1);\n        var targetElement = document.getElementById(targetId);\n\n        if (targetElement && targetElement.classList.contains(\"anchor\")) {\n          var slider = sliderComponent.querySelector(\n            \".slider.slider--mobile, .slider--desktop, .slider--everywhere\"\n          );\n          if (slider) {\n            var scrollSnapType = slider.style.scrollSnapType;\n            slider.style.scrollSnapType = \"none\";\n\n            targetElement.scrollIntoView({ behavior: \"smooth\" });\n\n            setTimeout(function () {\n              slider.style.scrollSnapType = scrollSnapType;\n            }, 500);\n          } else {\n            window.location.href = href;\n          }\n        } else {\n          window.location.href = href;\n        }\n      }\n    }\n  }\n}\n\ndocument.addEventListener(\"click\", handleButtonClick);\n\n// Product Layout Switcher Desktop\nfunction initializeLayoutSwitcher() {\n  var productGrid = document.getElementById(\"product-grid\");\n  var desktopLayoutOptionsContainer = document.querySelector(\".layout-options\");\n  var mobileLayoutOptionsContainer = document.querySelector(\n    \".mobile-layout-options\"\n  );\n\n  // Check if at least one layout options container exists\n  if (!desktopLayoutOptionsContainer && !mobileLayoutOptionsContainer) {\n    return; // Exit the function if neither container exists\n  }\n\n  var desktopLayoutOptions = document.querySelectorAll(\".layout-options li\");\n  var mobileLayoutOptions = document.querySelectorAll(\n    \".mobile-layout-options li\"\n  );\n\n  // v20260528: persist layout preference only after preferences consent.\n  // Task 104: consent comes from the Shopify Customer Privacy API (window.ebConsent), filled by Cookiebot or the Shopify banner.\n  function hasLayoutStorageConsent() {\n    return Boolean(window.ebConsent && window.ebConsent.get().preferences);\n  }\n\n  function getStoredLayout(key, fallback) {\n    if (!hasLayoutStorageConsent()) {\n      return fallback;\n    }\n\n    return localStorage.getItem(key) || fallback;\n  }\n\n  function saveStoredLayout(key, value) {\n    if (!hasLayoutStorageConsent() || !value) {\n      return;\n    }\n\n    localStorage.setItem(key, value);\n  }\n\n  // Get the default layout from local storage or data-columns attribute\n  var lastDesktopLayout, lastMobileLayout;\n\n  if (typeof Shopify === \"undefined\" || !Shopify.designMode) {\n    // Normal mode (not in design mode)\n    lastDesktopLayout = getStoredLayout(\n      \"lastDesktopLayout\",\n      productGrid?.getAttribute(\"data-columns-desktop\")\n    );\n    lastMobileLayout = getStoredLayout(\n      \"lastMobileLayout\",\n      productGrid?.getAttribute(\"data-columns-mobile\")\n    );\n  } else {\n    // In Shopify design mode\n    lastDesktopLayout = productGrid?.getAttribute(\"data-columns-desktop\");\n    lastMobileLayout = productGrid?.getAttribute(\"data-columns-mobile\");\n  }\n\n  function updateLayout(selectedLayout, layoutType) {\n    if (layoutType === \"desktop\") {\n      productGrid.className = productGrid.className.replace(\n        /grid--\\d-col-desktop/g,\n        \"\"\n      );\n      productGrid.classList.add(\"grid--\" + selectedLayout + \"-col-desktop\");\n      saveStoredLayout(\"lastDesktopLayout\", selectedLayout);\n    } else if (layoutType === \"mobile\") {\n      productGrid.className = productGrid.className.replace(\n        /grid--\\d-col-tablet-down/g,\n        \"\"\n      );\n      productGrid.classList.add(\"grid--\" + selectedLayout + \"-col-tablet-down\");\n      saveStoredLayout(\"lastMobileLayout\", selectedLayout);\n    }\n  }\n\n  function updateActiveClass(option, layoutType) {\n    var options =\n      layoutType === \"desktop\" ? desktopLayoutOptions : mobileLayoutOptions;\n    options.forEach(function (opt) {\n      opt.classList.remove(\"active\");\n    });\n    option.classList.add(\"active\");\n  }\n\n  function handleLayoutChange(event, layoutType) {\n    var target = event.target.closest(\"li\");\n    if (target) {\n      var selectedLayout = target.getAttribute(\"data-columns\");\n      updateLayout(selectedLayout, layoutType);\n      updateActiveClass(target, layoutType);\n    } \n  }\n\n  // Attach event listeners using delegation to handle dynamically added options\n  if (desktopLayoutOptionsContainer) {\n    desktopLayoutOptionsContainer.addEventListener(\"click\", function (event) {\n      handleLayoutChange(event, \"desktop\");\n    });\n  }\n  if (mobileLayoutOptionsContainer) {\n    mobileLayoutOptionsContainer.addEventListener(\"click\", function (event) {\n      handleLayoutChange(event, \"mobile\");\n    });\n  }\n  // Initialize the layout based on the local storage or the data-columns attribute from the Liquid file\n  updateLayout(lastDesktopLayout, \"desktop\");\n  updateLayout(lastMobileLayout, \"mobile\");\n\n  // Set the active class on the selected layout option\n  var defaultDesktopOption = document.querySelector(\n    \".layout-options li[data-columns='\" + lastDesktopLayout + \"']\"\n  );\n  if (defaultDesktopOption) defaultDesktopOption.classList.add(\"active\");\n\n  var defaultMobileOption = document.querySelector(\n    \".mobile-layout-options li[data-columns='\" + lastMobileLayout + \"']\"\n  );\n  if (defaultMobileOption) defaultMobileOption.classList.add(\"active\");\n}\n\n// Wait for the window load event to ensure everything is loaded\nwindow.addEventListener(\"load\", function () {\n  initializeLayoutSwitcher();\n\n  // Observe the active facets for changes\n  var activeFacetsElements = document.querySelectorAll(\".active-facets\");\n\n  activeFacetsElements.forEach(function (element) {\n    var observer = new MutationObserver(function (mutations) {\n      mutations.forEach(function (mutation) {\n        initializeLayoutSwitcher();\n      });\n    });\n\n    observer.observe(element, {\n      childList: true,\n      attributes: true,\n      subtree: true,\n    });\n  });\n  document.addEventListener('shopify:section:load', initializeLayoutSwitcher);\n});\n\n// Product page columns\n\n// TwoColumnLayout \u043F\u0435\u0440\u0435\u0435\u0445\u0430\u043B \u0432 assets/eb-two-column-layout.js (Task 100): \u043E\u043D \u0434\u043E\u043B\u0436\u0435\u043D \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0442\u044C\u0441\u044F\n// \u0434\u043E \u043F\u0435\u0440\u0432\u043E\u0439 \u043E\u0442\u0440\u0438\u0441\u043E\u0432\u043A\u0438 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0442\u043E\u0432\u0430\u0440\u0430, \u0430 global.js \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0441 defer, \u0443\u0436\u0435 \u043F\u043E\u0441\u043B\u0435 \u0440\u0430\u0437\u0431\u043E\u0440\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B.\n\n\n// Word Animator\n\nclass TextSlider extends HTMLElement {\n  constructor() {\n    super();\n    this.currentIndex = 0;\n    this.textElements = Array.from(this.querySelectorAll(\"div\")); \n    this.changeText = this.changeText.bind(this);\n\n    if (this.textElements.length > 0) {\n      this.textElements[this.currentIndex].classList.add(\"active\");\n    }\n  }\n\n  connectedCallback() {\n    if (this.textElements.length > 0) {\n      this.interval = setInterval(this.changeText, 6000);\n    }\n  }\n\n  disconnectedCallback() {\n    clearInterval(this.interval); \n  }\n\n  changeText() {\n    if (this.textElements.length > 0) {\n      this.textElements[this.currentIndex].classList.remove(\"active\");\n\n      this.currentIndex = (this.currentIndex + 1) % this.textElements.length;\n\n      this.textElements[this.currentIndex].classList.add(\"active\");\n    }\n  }\n}\n\ncustomElements.define('text-slider', TextSlider);\n\n// Infocards\n\nclass InfocardElement extends HTMLElement {\n  constructor() {\n      super();\n      this.expandedinfocard = null;\n      this.initialProperties = [];\n      this.finalProperties = [];\n      this.infocardClip = null;\n\n      this.expand = this.expand.bind(this);\n      this.collapse = this.collapse.bind(this);\n      this.onExpandTransitionEnd = this.onExpandTransitionEnd.bind(this);\n      this.onCollapseTransitionEnd = this.onCollapseTransitionEnd.bind(this);\n  }\n\n  connectedCallback() {\n      // Handle click to expand\n      this.addEventListener(\"click\", (e) => {\n          if (this.expandedinfocard) return;\n          this.expandedinfocard = this;\n\n          const closeButton = this.querySelector(\".js-close-button\");\n          if (closeButton) {\n              closeButton.removeEventListener(\"click\", this.collapse);\n              closeButton.addEventListener(\"click\", this.collapse);\n          }\n\n          this.expand();\n      });\n\n      // Handle keydown to expand\n      this.addEventListener(\"keydown\", (e) => {\n          if (this.expandedinfocard) return;\n\n          if (e.key === \"Enter\" || e.key === \" \") {\n              e.preventDefault(); // Prevent scrolling on Space\n              this.expandedinfocard = this;\n\n              const closeButton = this.querySelector(\".js-close-button\");\n              if (closeButton) {\n                  closeButton.removeEventListener(\"click\", this.collapse);\n                  closeButton.addEventListener(\"click\", this.collapse);\n              }\n\n              this.expand();\n          }\n      });\n\n      // Add ARIA attributes\n      this.setAttribute(\"role\", \"button\");\n      this.setAttribute(\"tabindex\", \"0\");\n      this.setAttribute(\"aria-expanded\", \"false\");\n  }\n\n  disconnectedCallback() {\n      const closeButton = this.querySelector(\".js-close-button\");\n      if (closeButton) closeButton.removeEventListener(\"click\", this.collapse);\n  }\n\n  expand() {\n      this.setAttribute(\"aria-expanded\", \"true\");\n      this.removeAttribute(\"data-aos\");\n\n      const infocardContent = this.getInfocardContent();\n      infocardContent.removeEventListener(\"transitionend\", this.onCollapseTransitionEnd);\n      infocardContent.addEventListener(\"transitionend\", this.onExpandTransitionEnd);\n\n      this.disablePageScroll();\n      this.collectInitialProperties();\n\n      this.classList.add(\"infocard--expanded\");\n\n      this.collectFinalProperties();\n      this.setInvertedTransformAndOpacity();\n      this.clipInfocardContent();\n\n      requestAnimationFrame(() => {\n          this.classList.add(\"infocard--animatable\");\n          this.startExpanding();\n      });\n  }\n\n  collapse(event) {\n      if (event) event.stopPropagation();\n      this.setAttribute(\"aria-expanded\", \"false\");\n\n      const infocardContent = this.getInfocardContent();\n      infocardContent.removeEventListener(\"transitionend\", this.onExpandTransitionEnd);\n      infocardContent.addEventListener(\"transitionend\", this.onCollapseTransitionEnd);\n\n      this.setCollapsingInitialStyles();\n\n      requestAnimationFrame(() => {\n          this.classList.add(\"infocard--animatable\");\n          this.startCollapsing();\n      });\n  }\n\n  onExpandTransitionEnd(e) {\n      if (e.target !== this.getInfocardContent()) return;\n      this.classList.remove(\"infocard--animatable\");\n      this.getInfocardContent().removeEventListener(\"transitionend\", this.onExpandTransitionEnd);\n      this.removeStyles();\n\n      // Focus the close button for better accessibility\n      const closeButton = this.querySelector(\".js-close-button\");\n      if (closeButton) closeButton.focus();\n  }\n\n  onCollapseTransitionEnd(e) {\n      if (e.target !== this.getInfocardContent()) return;\n      this.classList.remove(\"infocard--animatable\");\n      this.classList.remove(\"infocard--expanded\");\n\n      this.getInfocardContent().removeEventListener(\"transitionend\", this.onCollapseTransitionEnd);\n      this.removeStyles();\n      this.enablePageScroll();\n      this.cleanup();\n  }\n\n  getAnimatableElements() {\n      return this.querySelectorAll(\".js-animatable\");\n  }\n\n  getInfocardContent() {\n      return this.querySelector(\".infocard__content\");\n  }\n\n  disablePageScroll() {\n      document.body.style.overflow = \"hidden\";\n      document.body.style.padding = \"0 4px 0 0\";\n  }\n\n  enablePageScroll() {\n      document.body.style.overflow = \"\";\n      document.body.style.padding = \"0\";\n  }\n\n  removeStyles() {\n      for (const element of this.getAnimatableElements()) {\n          element.style = null;\n      }\n      this.getInfocardContent().style = null;\n  }\n\n  collectInitialProperties() {\n      this.initialProperties = [];\n      for (const element of this.getAnimatableElements()) {\n          this.initialProperties.push({\n              rect: element.getBoundingClientRect(),\n              opacity: parseFloat(window.getComputedStyle(element).opacity),\n          });\n      }\n\n      const infocardRect = this.getBoundingClientRect();\n      this.infocardClip = {\n          top: infocardRect.top,\n          right: window.innerWidth - infocardRect.right,\n          bottom: window.innerHeight - infocardRect.bottom,\n          left: infocardRect.left,\n      };\n  }\n\n  collectFinalProperties() {\n      this.finalProperties = [];\n      for (const element of this.getAnimatableElements()) {\n          this.finalProperties.push({\n              rect: element.getBoundingClientRect(),\n              opacity: parseFloat(window.getComputedStyle(element).opacity),\n          });\n      }\n  }\n\n  setInvertedTransformAndOpacity() {\n      const elements = this.getAnimatableElements();\n      elements.forEach((element, i) => {\n          element.style.transform = `translate(${\n              this.initialProperties[i].rect.left - this.finalProperties[i].rect.left\n          }px, ${\n              this.initialProperties[i].rect.top - this.finalProperties[i].rect.top\n          }px) scale(${\n              this.initialProperties[i].rect.width / this.finalProperties[i].rect.width\n          })`;\n\n          element.style.opacity = `${this.initialProperties[i].opacity}`;\n      });\n  }\n\n  clipInfocardContent() {\n      this.getInfocardContent().style.clipPath = `inset(${this.infocardClip.top}px ${this.infocardClip.right}px ${this.infocardClip.bottom}px ${this.infocardClip.left}px round 5px)`;\n  }\n\n  startExpanding() {\n      const elements = this.getAnimatableElements();\n      elements.forEach((element, i) => {\n          element.style.transform = \"translate(0, 0) scale(1)\";\n          element.style.opacity = `${this.finalProperties[i].opacity}`;\n      });\n\n      this.getInfocardContent().style.clipPath = \"inset(0)\";\n  }\n\n  setCollapsingInitialStyles() {\n      for (const element of this.getAnimatableElements()) {\n          element.style.transform = \"translate(0, 0) scale(1)\";\n      }\n      this.getInfocardContent().style.clipPath = \"inset(0)\";\n  }\n\n  startCollapsing() {\n      this.setInvertedTransformAndOpacity();\n      this.clipInfocardContent();\n  }\n\n  cleanup() {\n      this.expandedinfocard = null;\n      this.infocardClip = null;\n      this.initialProperties = [];\n      this.finalProperties = [];\n  }\n}\n\ncustomElements.define(\"infocard-element\", InfocardElement);\n\n\n// Add additional div for the cart page (cart-items and cart-footer)\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  updateCartLayout()\n});\nfunction updateCartLayout() {\n  const cartItems = document.querySelector(\".cart__items-wrapper\");\n  const cartFooter = document.querySelector(\".cart__footer-wrapper\");\n\n  if (cartItems && cartFooter) {\n      const isEmpty = document.querySelector(\".cart__items-wrapper .is-empty\");\n  \n      if (isEmpty) {\n          cartItems.classList.add(\"empty-cart\");\n      }   \n  \n      // Check if a parent with the class \"page-width\" already exists\n      let wrapper = cartItems.closest(\".page-width\");\n  \n      if (!wrapper) {\n          // If not found, create and insert the wrapper\n          wrapper = document.createElement(\"div\");\n          wrapper.classList.add(\"page-width\");\n  \n          const parent = cartItems.parentNode;\n          parent.insertBefore(wrapper, cartItems);\n  \n          wrapper.appendChild(cartItems);\n          wrapper.appendChild(cartFooter);\n      }\n  }\n}\n\n// Nutritional info\n\nclass IngredientDetails extends HTMLElement {\n  constructor() {\n      super();\n  }\n  connectedCallback() {\n      let content = this.innerHTML;\n\n      content = content.replace(/<\\/?p>/g, '');\n      content = content.replace(/<br\\s*\\/?>/g, '|||BR|||');\n\n      let rows = content.split(\"|||BR|||\").map(row => row.trim()).filter(row => row.length > 0);\n\n      this.innerHTML = '';\n\n      rows.forEach((row, index) => {\n          setTimeout(() => { \n              let isIndented = false;\n\n              if (row.startsWith('-')) {\n                  row = row.substring(1).trim();\n                  isIndented = true;\n              }\n\n              let columns = row.split(\",\").map(col => col.trim());\n\n              let rowElement = document.createElement(\"span\");\n              rowElement.classList.add(\"ingredient-details-content\");\n\n              if (isIndented) {\n                  rowElement.classList.add(\"indented\");\n              }\n\n              columns.forEach(col => {\n                  let colElement = document.createElement(\"span\");\n                  colElement.innerHTML = col;\n                  rowElement.appendChild(colElement);\n              });\n\n              this.appendChild(rowElement);\n          }, index * 10); \n      });\n  }\n}\n\ncustomElements.define(\"ingredient-details\", IngredientDetails);\n\n// AOS Init\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  // revealAOSFallbackV1\n  const revealAOSFallback = () => {\n    if (typeof AOS !== \"undefined\" && typeof AOS.init === \"function\") return;\n\n    document.querySelectorAll(\"[data-aos]\").forEach((element) => {\n      element.classList.add(\"aos-init\", \"aos-animate\");\n    });\n  };\n\n  const initializeAOS = () => {\n    if (typeof AOS !== \"undefined\" && typeof AOS.init === \"function\") {\n      const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n      const options = {\n        offset: isSafari ? -200 : 100,\n        debounceDelay: isSafari ? 0 : 50,\n        duration: 700,\n        once: true\n      };\n      AOS.init(options);\n    }\n  };\n\n  // v1.1.0: AOS reads the position of every [data-aos] node, so it starts right after the browser's layout.\n  runAfterLayout(initializeAOS);\n  window.addEventListener(\"load\", revealAOSFallback);\n  setTimeout(revealAOSFallback, 1500);\n\n  document.addEventListener(\"shopify:section:load\", initializeAOS);\n\n  document.addEventListener(\"shopify:section:deselect\", function () {\n    if (typeof AOS !== \"undefined\") {\n      AOS.init({ offset: -700 });\n    }\n  });\n\n  const removeAOSClass = (selector) => {\n    const drawer = document.getElementById(selector);\n    if (drawer) {\n      const animatedElements = drawer.querySelectorAll('.aos-animate');\n      animatedElements.forEach((element) => {\n        element.classList.remove('aos-animate');\n      });\n    }\n  };\n  removeAOSClass('CartDrawer');\n  removeAOSClass('FilterDrawer');\n});\n\n\n// Heading Underline\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n  const animatedTextElements = document.querySelectorAll(\".animated-highlight em\");\n\n  const observer = new IntersectionObserver((entries) => {\n    entries.forEach(entry => {\n      if (entry.isIntersecting) {\n        entry.target.classList.add(\"in-view\");\n      } else {\n        entry.target.classList.remove(\"in-view\"); \n      }\n    });\n  }, { threshold: 0.5 }); \n\n  animatedTextElements.forEach(element => observer.observe(element));\n});\n"],
  "mappings": "AAAA,SAAS,qBAAqB,UAAW,CACvC,OAAO,MAAM,KACX,UAAU,iBACR,0KACF,CACF,CACF,CAEA,SAAS,iBAAiB,0BAA0B,EAAE,QAAS,SAAY,CACzE,QAAQ,aAAa,OAAQ,QAAQ,EACrC,QAAQ,aACN,gBACA,QAAQ,WAAW,aAAa,MAAM,CACxC,EAEI,QAAQ,mBAAmB,aAAa,IAAI,GAC9C,QAAQ,aAAa,gBAAiB,QAAQ,mBAAmB,EAAE,EAGrE,QAAQ,iBAAiB,QAAU,OAAU,CAC3C,MAAM,cAAc,aAClB,gBACA,CAAC,MAAM,cAAc,QAAQ,SAAS,EAAE,aAAa,MAAM,CAC7D,CACF,CAAC,EAEG,SAAQ,QAAQ,eAAe,GACnC,QAAQ,cAAc,iBAAiB,QAAS,aAAa,CAC/D,CAAC,EAED,MAAM,kBAAoB,CAAC,EAE3B,SAAS,UAAU,UAAW,eAAiB,UAAW,CACxD,IAAI,SAAW,qBAAqB,SAAS,EACzC,MAAQ,SAAS,CAAC,EAClB,KAAO,SAAS,SAAS,OAAS,CAAC,EAEvC,gBAAgB,EAEhB,kBAAkB,QAAW,OAAU,CAEnC,MAAM,SAAW,WACjB,MAAM,SAAW,MACjB,MAAM,SAAW,OAInB,SAAS,iBAAiB,UAAW,kBAAkB,OAAO,CAChE,EAEA,kBAAkB,SAAW,UAAY,CACvC,SAAS,oBAAoB,UAAW,kBAAkB,OAAO,CACnE,EAEA,kBAAkB,QAAU,SAAU,MAAO,CACvC,MAAM,KAAK,YAAY,IAAM,QAE7B,MAAM,SAAW,MAAQ,CAAC,MAAM,WAClC,MAAM,eAAe,EACrB,MAAM,MAAM,IAKX,MAAM,SAAW,WAAa,MAAM,SAAW,QAChD,MAAM,WAEN,MAAM,eAAe,EACrB,KAAK,MAAM,GAEf,EAEA,SAAS,iBAAiB,WAAY,kBAAkB,QAAQ,EAChE,SAAS,iBAAiB,UAAW,kBAAkB,OAAO,EAE9D,eAAe,MAAM,EAGnB,eAAe,UAAY,SAC3B,CAAC,SAAU,OAAQ,QAAS,KAAK,EAAE,SAAS,eAAe,IAAI,GAC/D,eAAe,OAEf,eAAe,kBAAkB,EAAG,eAAe,MAAM,MAAM,CAEnE,CAGA,GAAI,CACF,SAAS,cAAc,gBAAgB,CACzC,MAAY,CACV,qBAAqB,CACvB,CAEA,SAAS,sBAAuB,CAC9B,MAAM,QAAU,CACd,UACA,YACA,YACA,aACA,MACA,QACA,QACA,SACA,OACA,MACA,SACA,UACF,EACA,IAAI,sBAAwB,KACxB,WAAa,KAEjB,OAAO,iBAAiB,UAAY,OAAU,CACxC,QAAQ,SAAS,MAAM,KAAK,YAAY,CAAC,IAC3C,WAAa,GAEjB,CAAC,EAED,OAAO,iBAAiB,YAAc,OAAU,CAC9C,WAAa,EACf,CAAC,EAED,OAAO,iBACL,QACA,IAAM,CACA,uBACF,sBAAsB,UAAU,OAAO,SAAS,EAE9C,cAEJ,sBAAwB,SAAS,cACjC,sBAAsB,UAAU,IAAI,SAAS,EAC/C,EACA,EACF,CACF,CAEA,SAAS,eAAgB,CACvB,SAAS,iBAAiB,aAAa,EAAE,QAAS,OAAU,CAC1D,MAAM,cAAc,YAClB,oDACA,GACF,CACF,CAAC,EACD,SAAS,iBAAiB,WAAW,EAAE,QAAS,OAAU,CACxD,MAAM,cAAc,YAAY,qBAAsB,GAAG,CAC3D,CAAC,EACD,SAAS,iBAAiB,OAAO,EAAE,QAAS,OAAU,MAAM,MAAM,CAAC,EACnE,SAAS,iBAAiB,eAAe,EAAE,QAAS,OAAU,CACxD,MAAM,eAAe,MAAM,cAAc,MAAM,CACrD,CAAC,CACH,CAEA,SAAS,gBAAgB,eAAiB,KAAM,CAC9C,SAAS,oBAAoB,UAAW,kBAAkB,OAAO,EACjE,SAAS,oBAAoB,WAAY,kBAAkB,QAAQ,EACnE,SAAS,oBAAoB,UAAW,kBAAkB,OAAO,EAE7D,gBAAgB,eAAe,MAAM,CAC3C,CAEA,SAAS,cAAc,MAAO,CAC5B,GAAI,MAAM,KAAK,YAAY,IAAM,SAAU,OAE3C,MAAM,mBAAqB,MAAM,OAAO,QAAQ,eAAe,EAC/D,GAAI,CAAC,mBAAoB,OAEzB,MAAM,eAAiB,mBAAmB,cAAc,SAAS,EACjE,mBAAmB,gBAAgB,MAAM,EACzC,eAAe,aAAa,gBAAiB,EAAK,EAClD,eAAe,MAAM,CACvB,CAEA,MAAM,sBAAsB,WAAY,CACtC,aAAc,CACZ,MAAM,EACN,KAAK,MAAQ,KAAK,cAAc,OAAO,EACvC,KAAK,YAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,EAExD,KAAK,MAAM,iBAAiB,SAAU,KAAK,cAAc,KAAK,IAAI,CAAC,EACnE,KAAK,iBAAiB,QAAQ,EAAE,QAAS,QACvC,OAAO,iBAAiB,QAAS,KAAK,cAAc,KAAK,IAAI,CAAC,CAChE,CACF,CAEA,2BAA6B,OAE7B,mBAAoB,CAClB,KAAK,iBAAiB,EACtB,KAAK,2BAA6B,UAChC,eAAe,eACf,KAAK,iBAAiB,KAAK,IAAI,CACjC,CACF,CAEA,sBAAuB,CACjB,KAAK,4BACP,KAAK,2BAA2B,CAEpC,CAEA,cAAc,MAAO,CACnB,KAAK,iBAAiB,CACxB,CAEA,cAAc,MAAO,CACnB,MAAM,eAAe,EACrB,MAAM,cAAgB,KAAK,MAAM,MAEjC,MAAM,OAAO,OAAS,OAAS,KAAK,MAAM,OAAO,EAAI,KAAK,MAAM,SAAS,EACrE,gBAAkB,KAAK,MAAM,OAC/B,KAAK,MAAM,cAAc,KAAK,WAAW,CAC7C,CAEA,kBAAmB,CACjB,MAAM,MAAQ,SAAS,KAAK,MAAM,KAAK,EACvC,GAAI,KAAK,MAAM,IAAK,CAClB,MAAM,IAAM,SAAS,KAAK,MAAM,GAAG,EACf,KAAK,cAAc,gCAAgC,EAC3D,UAAU,OAAO,WAAY,OAAS,GAAG,CACvD,CACA,GAAI,KAAK,MAAM,IAAK,CAClB,MAAM,IAAM,SAAS,KAAK,MAAM,GAAG,EAChB,KAAK,cAAc,+BAA+B,EAC1D,UAAU,OAAO,WAAY,OAAS,GAAG,CACtD,CACF,CACF,CAEA,eAAe,OAAO,iBAAkB,aAAa,EAErD,SAAS,SAAS,GAAI,KAAM,CAC1B,IAAI,EACJ,MAAO,IAAI,OAAS,CAClB,aAAa,CAAC,EACd,EAAI,WAAW,IAAM,GAAG,MAAM,KAAM,IAAI,EAAG,IAAI,CACjD,CACF,CAEA,SAAS,YAAY,KAAO,OAAQ,CAClC,MAAO,CACL,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,OAAQ,eAAe,IAAI,EAC7B,CACF,CACF,CAMI,OAAO,OAAO,QAAW,MAC3B,OAAO,QAAU,CAAC,GAGpB,QAAQ,KAAO,SAAU,GAAI,MAAO,CAClC,OAAO,UAAY,CACjB,OAAO,GAAG,MAAM,MAAO,SAAS,CAClC,CACF,EAEA,QAAQ,mBAAqB,SAAU,SAAU,MAAO,CACtD,QAAS,EAAI,EAAG,MAAQ,SAAS,QAAQ,OAAQ,EAAI,MAAO,IAAK,CAC/D,IAAI,OAAS,SAAS,QAAQ,CAAC,EAC/B,GAAI,OAAS,OAAO,OAAS,OAAS,OAAO,UAC3C,gBAAS,cAAgB,EAClB,CAEX,CACF,EAEA,QAAQ,YAAc,SAAU,OAAQ,UAAW,SAAU,CAC3D,OAAO,iBACH,OAAO,iBAAiB,UAAW,SAAU,EAAK,EAClD,OAAO,YAAY,KAAO,UAAW,QAAQ,CACnD,EAEA,QAAQ,SAAW,SAAU,KAAM,QAAS,CAC1C,QAAU,SAAW,CAAC,EACtB,IAAI,OAAS,QAAQ,QAAa,OAC9B,OAAS,QAAQ,YAAiB,CAAC,EAEnC,KAAO,SAAS,cAAc,MAAM,EACxC,KAAK,aAAa,SAAU,MAAM,EAClC,KAAK,aAAa,SAAU,IAAI,EAEhC,QAAS,OAAO,OAAQ,CACtB,IAAI,YAAc,SAAS,cAAc,OAAO,EAChD,YAAY,aAAa,OAAQ,QAAQ,EACzC,YAAY,aAAa,OAAQ,GAAG,EACpC,YAAY,aAAa,QAAS,OAAO,GAAG,CAAC,EAC7C,KAAK,YAAY,WAAW,CAC9B,CACA,SAAS,KAAK,YAAY,IAAI,EAC9B,KAAK,OAAO,EACZ,SAAS,KAAK,YAAY,IAAI,CAChC,EAEA,QAAQ,wBAA0B,SAChC,cACA,eACA,QACA,CACA,KAAK,UAAY,SAAS,eAAe,aAAa,EACtD,KAAK,WAAa,SAAS,eAAe,cAAc,EACxD,KAAK,kBAAoB,SAAS,eAChC,QAAQ,aAAkB,cAC5B,EAEA,QAAQ,YACN,KAAK,UACL,SACA,QAAQ,KAAK,KAAK,eAAgB,IAAI,CACxC,EAEA,KAAK,YAAY,EACjB,KAAK,aAAa,CACpB,EAEA,QAAQ,wBAAwB,UAAY,CAC1C,YAAa,UAAY,CACvB,IAAI,MAAQ,KAAK,UAAU,aAAa,cAAc,EACtD,QAAQ,mBAAmB,KAAK,UAAW,KAAK,EAChD,KAAK,eAAe,CACtB,EAEA,aAAc,UAAY,CACxB,IAAI,MAAQ,KAAK,WAAW,aAAa,cAAc,EACnD,OAAS,KAAK,WAAW,QAAQ,OAAS,GAC5C,QAAQ,mBAAmB,KAAK,WAAY,KAAK,CAErD,EAEA,eAAgB,SAAU,EAAG,CAC3B,IAAI,IAAM,KAAK,UAAU,QAAQ,KAAK,UAAU,aAAa,EACzD,IAAM,IAAI,aAAa,gBAAgB,EACvC,UAAY,KAAK,MAAM,GAAG,EAG9B,GADA,KAAK,aAAa,KAAK,UAAU,EAC7B,WAAa,UAAU,QAAU,EACnC,KAAK,kBAAkB,MAAM,QAAU,WAClC,CACL,QAAS,EAAI,EAAG,EAAI,UAAU,OAAQ,IAAK,CACzC,IAAI,IAAM,SAAS,cAAc,QAAQ,EACzC,IAAI,MAAQ,UAAU,CAAC,EAAE,CAAC,EAC1B,IAAI,UAAY,UAAU,CAAC,EAAE,CAAC,EAC9B,KAAK,WAAW,YAAY,GAAG,CACjC,CAEA,KAAK,kBAAkB,MAAM,QAAU,EACzC,CACF,EAEA,aAAc,SAAU,SAAU,CAChC,KAAO,SAAS,YACd,SAAS,YAAY,SAAS,UAAU,CAE5C,EAEA,WAAY,SAAU,SAAU,OAAQ,CACtC,QAAS,EAAI,EAAG,MAAQ,OAAO,OAAQ,EAAI,OAAO,OAAQ,IAAK,CAC7D,IAAI,IAAM,SAAS,cAAc,QAAQ,EACzC,IAAI,MAAQ,OAAO,CAAC,EACpB,IAAI,UAAY,OAAO,CAAC,EACxB,SAAS,YAAY,GAAG,CAC1B,CACF,CACF,EAGA,MAAM,mBAAmB,WAAY,CACnC,aAAc,CACZ,MAAM,EAEN,KAAK,kBAAoB,KAAK,cAAc,SAAS,EAErD,KAAK,iBAAiB,QAAS,KAAK,QAAQ,KAAK,IAAI,CAAC,EACtD,KAAK,iBAAiB,WAAY,KAAK,WAAW,KAAK,IAAI,CAAC,EAC5D,KAAK,WAAW,CAClB,CAEA,YAAa,CACX,KAAK,iBAAiB,SAAS,EAAE,QAAS,SACxC,QAAQ,iBAAiB,QAAS,KAAK,eAAe,KAAK,IAAI,CAAC,CAClE,EACA,KAAK,iBAAiB,2BAA2B,EAAE,QAAS,QAC1D,OAAO,iBAAiB,QAAS,KAAK,mBAAmB,KAAK,IAAI,CAAC,CACrE,CACF,CAEA,QAAQ,MAAO,CACb,GAAI,MAAM,KAAK,YAAY,IAAM,SAAU,OAE3C,MAAM,mBAAqB,MAAM,OAAO,QAAQ,eAAe,EAC1D,qBAEL,qBAAuB,KAAK,kBACxB,KAAK,gBACH,MACA,KAAK,kBAAkB,cAAc,SAAS,CAChD,EACA,KAAK,aAAa,kBAAkB,EAC1C,CAEA,eAAe,MAAO,CACpB,MAAM,eAAiB,MAAM,cACvB,eAAiB,eAAe,WAChC,kBAAoB,eAAe,QAAQ,cAAc,EACzD,OAAS,eAAe,aAAa,MAAM,EAC3C,cAAgB,OAAO,WAAW,kCAAkC,EAE1E,GAAI,eAAe,UAAU,SAAS,qCAAqC,EAAG,CAC5E,OAAO,sBAAsB,IAAM,CACjC,eAAe,aACb,gBACA,eAAe,aAAa,MAAM,CACpC,CACF,CAAC,EACD,MACF,CAEA,SAAS,cAAe,CACtB,UACE,eAAe,mBACf,eAAe,cAAc,QAAQ,CACvC,EACA,eAAe,mBAAmB,oBAChC,gBACA,YACF,CACF,CAEI,iBAAmB,KAAK,mBACtB,QAAQ,MAAM,eAAe,EACjC,OACI,KAAK,gBAAgB,MAAO,cAAc,EAC1C,KAAK,eAAe,cAAc,EAElC,OAAO,WAAW,oBAAoB,GACxC,SAAS,gBAAgB,MAAM,YAC7B,oBACA,GAAG,OAAO,WAAW,IACvB,GAGF,WAAW,IAAM,CACf,eAAe,UAAU,IAAI,cAAc,EAC3C,eAAe,aAAa,gBAAiB,EAAI,EACjD,mBAAqB,kBAAkB,UAAU,IAAI,cAAc,EACnE,CAAC,eAAiB,cAAc,QAC5B,aAAa,EACb,eAAe,mBAAmB,iBAChC,gBACA,YACF,CACN,EAAG,GAAG,CAEV,CAEA,eAAe,eAAgB,CAC7B,WAAW,IAAM,CACf,KAAK,kBAAkB,UAAU,IAAI,cAAc,CACrD,CAAC,EACD,eAAe,aAAa,gBAAiB,EAAI,EACjD,UAAU,KAAK,kBAAmB,cAAc,EAChD,SAAS,KAAK,UAAU,IAAI,mBAAmB,KAAK,QAAQ,UAAU,EAAE,EAEpE,OAAO,WAAW,oBAAoB,EAAE,UAC5C,SAAS,KAAK,MAAM,SAAW,SAC/B,SAAS,KAAK,MAAM,QAAU,aAGL,KAAK,iBAAiB,YAAY,EAC1C,QAAS,SAAY,CACpC,QAAQ,UAAU,IAAI,aAAa,CACrC,CAAC,CACH,CAEA,gBAAgB,MAAO,eAAiB,GAAO,CAC7C,GAAI,QAAU,OAAW,OAEzB,KAAK,kBAAkB,UAAU,OAAO,cAAc,EACtD,KAAK,kBAAkB,iBAAiB,SAAS,EAAE,QAAS,SAAY,CACtE,QAAQ,gBAAgB,MAAM,EAC9B,QAAQ,UAAU,OAAO,cAAc,CACzC,CAAC,EACD,KAAK,kBACF,iBAAiB,eAAe,EAChC,QAAS,SAAY,CACpB,QAAQ,UAAU,OAAO,cAAc,CACzC,CAAC,EACH,SAAS,KAAK,UAAU,OACtB,mBAAmB,KAAK,QAAQ,UAAU,EAC5C,EACA,gBAAgB,cAAc,EAC9B,KAAK,eAAe,KAAK,iBAAiB,EAE1C,OAAO,WAAW,oBAAoB,EAAE,SACxC,WAAW,IAAM,CACb,SAAS,KAAK,MAAM,SAAW,SAC/B,SAAS,KAAK,MAAM,QAAU,IAChC,SAAS,KAAK,MAAM,UAAY,QAClC,EAAG,GAAG,EAGoB,KAAK,iBAAiB,cAAc,EAC7C,QAAS,SAAY,CACpC,QAAQ,UAAU,OAAO,aAAa,CACxC,CAAC,CACH,CAEA,WAAW,MAAO,CAChB,WAAW,IAAM,CAEb,KAAK,kBAAkB,aAAa,MAAM,GAC1C,CAAC,KAAK,kBAAkB,SAAS,SAAS,aAAa,GAEvD,KAAK,gBAAgB,CACzB,CAAC,CACH,CAEA,mBAAmB,MAAO,CACxB,MAAM,eAAiB,MAAM,cAAc,QAAQ,SAAS,EAC5D,KAAK,aAAa,cAAc,CAClC,CAEA,aAAa,eAAgB,CAC3B,MAAM,kBAAoB,eAAe,QAAQ,eAAe,EAChE,mBAAqB,kBAAkB,UAAU,OAAO,cAAc,EACtE,eAAe,UAAU,OAAO,cAAc,EAC9C,eACG,cAAc,SAAS,EACvB,aAAa,gBAAiB,EAAK,EACtC,gBAAgB,eAAe,cAAc,SAAS,CAAC,EACvD,KAAK,eAAe,cAAc,CACpC,CAEA,eAAe,eAAgB,CAC7B,IAAI,eAEJ,MAAM,gBAAmB,MAAS,CAC5B,iBAAmB,SACrB,eAAiB,MAGC,KAAO,eAET,IAChB,OAAO,sBAAsB,eAAe,GAE5C,eAAe,gBAAgB,MAAM,EACjC,eAAe,QAAQ,eAAe,GACxC,UACE,eAAe,QAAQ,eAAe,EACtC,eAAe,cAAc,SAAS,CACxC,EAGN,EAEA,OAAO,sBAAsB,eAAe,CAC9C,CACF,CAEA,eAAe,OAAO,cAAe,UAAU,EAE/C,MAAM,qBAAqB,UAAW,CACpC,aAAc,CACZ,MAAM,CACR,CAEA,eAAe,eAAgB,CAC7B,KAAK,OAAS,KAAK,QAAU,SAAS,cAAc,iBAAiB,EACrE,KAAK,aACH,KAAK,cACL,KAAK,QAAQ,iBAAiB,EAAE,UAAU,SACxC,+BACF,EACI,EACA,EACN,SAAS,gBAAgB,MAAM,YAC7B,2BACA,GAAG,SACD,KAAK,OAAO,sBAAsB,EAAE,OAAS,KAAK,YACpD,CAAC,IACH,EACA,KAAK,OAAO,UAAU,IAAI,WAAW,EAErC,WAAW,IAAM,CACf,KAAK,kBAAkB,UAAU,IAAI,cAAc,CACrD,CAAC,EAED,eAAe,aAAa,gBAAiB,EAAI,EACjD,UAAU,KAAK,kBAAmB,cAAc,EAChD,SAAS,KAAK,UAAU,IAAI,mBAAmB,KAAK,QAAQ,UAAU,EAAE,CAC1E,CAEA,gBAAgB,MAAO,eAAgB,CACrC,MAAM,gBAAgB,MAAO,cAAc,EAC3C,KAAK,OAAO,UAAU,OAAO,WAAW,CAC1C,CACF,CAEA,eAAe,OAAO,gBAAiB,YAAY,EAEnD,MAAM,oBAAoB,WAAY,CACpC,aAAc,CACZ,MAAM,EACN,KAAK,cAAc,qBAAqB,EAAE,iBACxC,QACA,KAAK,KAAK,KAAK,KAAM,EAAK,CAC5B,EACA,KAAK,iBAAiB,QAAU,OAAU,CACpC,MAAM,KAAK,YAAY,IAAM,UAAU,KAAK,KAAK,CACvD,CAAC,EACG,KAAK,UAAU,SAAS,aAAa,EACvC,KAAK,iBAAiB,YAAc,OAAU,CAE1C,MAAM,cAAgB,SACtB,CAAC,MAAM,OAAO,QAAQ,+BAA+B,GAErD,KAAK,KAAK,CACd,CAAC,EAED,KAAK,iBAAiB,QAAU,OAAU,CACpC,MAAM,SAAW,MAAM,KAAK,KAAK,CACvC,CAAC,CAEL,CAEA,mBAAoB,CACd,KAAK,QACT,KAAK,MAAQ,GACb,SAAS,KAAK,YAAY,IAAI,EAChC,CAEA,KAAK,OAAQ,CACX,KAAK,SAAW,OAChB,MAAM,MAAQ,KAAK,cAAc,iBAAiB,EAClD,SAAS,KAAK,UAAU,IAAI,iBAAiB,EAC7C,KAAK,aAAa,OAAQ,EAAE,EACxB,OAAO,MAAM,YAAY,EAC7B,UAAU,KAAM,KAAK,cAAc,iBAAiB,CAAC,EACrD,OAAO,cAAc,CACvB,CAEA,MAAO,CACL,SAAS,KAAK,UAAU,OAAO,iBAAiB,EAChD,SAAS,KAAK,cAAc,IAAI,YAAY,aAAa,CAAC,EAC1D,KAAK,gBAAgB,MAAM,EAC3B,gBAAgB,KAAK,QAAQ,EAC7B,OAAO,cAAc,CACvB,CACF,CACA,eAAe,OAAO,eAAgB,WAAW,EAEjD,MAAM,oBAAoB,WAAY,CACpC,aAAc,CACZ,MAAM,EAEN,MAAM,OAAS,KAAK,cAAc,QAAQ,EAErC,QACL,OAAO,iBAAiB,QAAS,IAAM,CACrC,MAAM,MAAQ,SAAS,cAAc,KAAK,aAAa,YAAY,CAAC,EAChE,OAAO,MAAM,KAAK,MAAM,CAC9B,CAAC,CACH,CACF,CACA,eAAe,OAAO,eAAgB,WAAW,EAEjD,MAAM,sBAAsB,WAAY,CACtC,aAAc,CACZ,MAAM,EACN,MAAM,OAAS,KAAK,cAAc,0BAA0B,EACvD,QACL,OAAO,iBAAiB,QAAS,KAAK,YAAY,KAAK,IAAI,CAAC,CAC9D,CAEA,YAAY,MAAQ,GAAM,CAExB,GADA,OAAO,cAAc,EACjB,CAAC,KAAK,aAAa,QAAQ,EAAG,CAChC,MAAM,QAAU,SAAS,cAAc,KAAK,EAC5C,QAAQ,YACN,KAAK,cAAc,UAAU,EAAE,QAAQ,kBAAkB,UAAU,EAAI,CACzE,EAEA,KAAK,aAAa,SAAU,EAAI,EAChC,MAAM,gBAAkB,KAAK,YAC3B,QAAQ,cAAc,6BAA6B,CACrD,EACI,OAAO,gBAAgB,MAAM,CACnC,CACF,CACF,CAEA,eAAe,OAAO,iBAAkB,aAAa,EAGrD,SAAS,eAAe,SAAU,CAChC,MAAM,SAAW,IAAI,eAAe,IAAM,CACxC,SAAS,WAAW,EACpB,SAAS,CACX,CAAC,EACD,SAAS,QAAQ,SAAS,eAAe,CAC3C,CAEA,MAAM,wBAAwB,WAAY,CACxC,aAAc,CACZ,MAAM,EAEN,KAAK,OAAS,KAAK,cAAc,iBAAiB,EAClD,KAAK,YAAc,KAAK,iBAAiB,gBAAgB,EACzD,KAAK,oBAAsB,GAC3B,KAAK,mBAAqB,KAAK,cAAc,0BAA0B,EACvE,KAAK,iBAAmB,KAAK,cAAc,wBAAwB,EACnE,KAAK,WAAa,KAAK,cAAc,yBAAyB,EAC9D,KAAK,WAAa,KAAK,cAAc,qBAAqB,EAEtD,GAAC,KAAK,QAAU,CAAC,KAAK,cAG1B,KAAK,kBAAoB,MAAM,KAAK,KAAK,WAAW,EACpD,KAAK,YAAc,EACnB,KAAK,aAAe,GACpB,KAAK,eAAiB,IAAI,eAAe,IAAM,KAAK,UAAU,CAAC,EAC/D,KAAK,eAAe,QAAQ,KAAK,MAAM,EAEvC,KAAK,OAAO,iBAAiB,SAAU,KAAK,OAAO,KAAK,IAAI,CAAC,EAC7D,KAAK,WAAW,iBAAiB,QAAS,KAAK,cAAc,KAAK,IAAI,CAAC,EACvE,KAAK,WAAW,iBAAiB,QAAS,KAAK,cAAc,KAAK,IAAI,CAAC,EACzE,CAEA,WAAY,CACV,KAAK,aAAe,GACpB,KAAK,kBAAoB,MAAM,KAAK,KAAK,WAAW,EAAE,OACnD,SAAY,QAAQ,YAAc,CACrC,EAEI,OAAK,kBAAkB,OAAS,KAEpC,KAAK,iBACH,KAAK,kBAAkB,CAAC,EAAE,WAC1B,KAAK,kBAAkB,CAAC,EAAE,WAC5B,KAAK,cAAgB,KAAK,OACvB,KAAK,OAAO,YAAc,KAAK,kBAAkB,CAAC,EAAE,YACnD,KAAK,gBACT,EACA,KAAK,WAAa,KAAK,kBAAkB,OAAS,KAAK,cAAgB,EAEvE,KAAK,OAAO,EACd,CAEA,YAAa,CAEX,GADA,KAAK,YAAc,KAAK,iBAAiB,gBAAgB,EACrD,CAAC,KAAK,eAAgB,CACxB,KAAK,UAAU,EACf,MACF,CAEA,KAAK,aAAe,GACpB,KAAK,eAAe,UAAU,KAAK,MAAM,EACzC,KAAK,eAAe,QAAQ,KAAK,MAAM,CACzC,CAEA,QAAS,CACP,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,YAAc,KAAK,aAAc,OAG3D,MAAM,WAAa,KAAK,OAAO,WACzB,WAAa,KAAK,kBAAkB,CAAC,EACrC,UAAY,KAAK,kBAAkB,KAAK,kBAAkB,OAAS,CAAC,EACpE,aAAe,CAAC,KAAK,qBAAuB,EAAQ,YAAe,KAAK,eAAe,UAAU,EACjG,YAAc,CAAC,KAAK,qBAAuB,EAAQ,WAAc,KAAK,eAAe,SAAS,EAC9F,aAAe,KAAK,YAC1B,KAAK,YAAc,KAAK,MAAM,WAAa,KAAK,gBAAgB,EAAI,EAEhE,KAAK,oBAAsB,KAAK,mBAClC,KAAK,mBAAmB,YAAc,KAAK,YAC3C,KAAK,iBAAiB,YAAc,KAAK,YAGvC,KAAK,aAAe,cACtB,KAAK,cACH,IAAI,YAAY,eAAgB,CAC9B,OAAQ,CACN,YAAa,KAAK,YAClB,eAAgB,KAAK,kBAAkB,KAAK,YAAc,CAAC,CAC7D,CACF,CAAC,CACH,EAGE,MAAK,sBAEL,cAAgB,aAAe,EACjC,KAAK,WAAW,aAAa,WAAY,UAAU,EAEnD,KAAK,WAAW,gBAAgB,UAAU,EAGxC,YACF,KAAK,WAAW,aAAa,WAAY,UAAU,EAEnD,KAAK,WAAW,gBAAgB,UAAU,EAE9C,CAEA,eAAe,QAAS,OAAS,EAAG,CAClC,MAAM,iBACJ,KAAK,OAAO,YAAc,KAAK,OAAO,WAAa,OACrD,OACE,QAAQ,WAAa,QAAQ,aAAe,kBAC5C,QAAQ,YAAc,KAAK,OAAO,UAEtC,CAEA,cAAc,MAAO,CACnB,MAAM,eAAe,EACrB,MAAM,KAAO,MAAM,cAAc,QAAQ,MAAQ,EACjD,KAAK,oBACH,MAAM,cAAc,OAAS,OACzB,KAAK,OAAO,WAAa,KAAO,KAAK,iBACrC,KAAK,OAAO,WAAa,KAAO,KAAK,iBAC3C,KAAK,OAAO,SAAS,CACnB,KAAM,KAAK,mBACb,CAAC,CACH,CACF,CAEA,eAAe,OAAO,mBAAoB,eAAe,EAEzD,MAAM,2BAA2B,eAAgB,CAC/C,aAAc,CACZ,MAAM,EACN,KAAK,qBAAuB,KAAK,cAAc,iBAAiB,EAChE,KAAK,oBAAsB,GAEtB,KAAK,uBAEV,KAAK,oBAAsB,KAAK,OAAO,cAAc,kBAAkB,EACnE,KAAK,kBAAkB,OAAS,IAAG,KAAK,YAAc,GAE1D,KAAK,wBAA0B,MAAM,KACnC,KAAK,qBAAqB,iBAAiB,sBAAsB,CACnE,EACA,KAAK,wBAAwB,QAAS,MACpC,KAAK,iBAAiB,QAAS,KAAK,YAAY,KAAK,IAAI,CAAC,CAC5D,EACA,KAAK,OAAO,iBAAiB,SAAU,KAAK,mBAAmB,KAAK,IAAI,CAAC,EACzE,KAAK,mBAAmB,EAEpB,KAAK,OAAO,aAAa,eAAe,IAAM,QAChD,KAAK,YAAY,EACrB,CAEA,aAAc,CACZ,KAAK,qBAAuB,KAAK,cAAc,qBAAqB,EACpE,KAAK,cAAgB,KAAK,OAAO,QAAQ,MAAQ,IAEjD,KAAK,qBAAqB,iBACxB,QACA,KAAK,eAAe,KAAK,IAAI,CAC/B,EACA,KAAK,iBAAiB,YAAa,KAAK,gBAAgB,KAAK,IAAI,CAAC,EAClE,KAAK,iBAAiB,aAAc,KAAK,iBAAiB,KAAK,IAAI,CAAC,EACpE,KAAK,iBAAiB,UAAW,KAAK,gBAAgB,KAAK,IAAI,CAAC,EAChE,KAAK,iBAAiB,WAAY,KAAK,iBAAiB,KAAK,IAAI,CAAC,EAElE,KAAK,KAAK,EACV,KAAK,0BAA4B,EACnC,CAEA,cAAc,MAAO,CACnB,MAAM,cAAc,KAAK,EACzB,MAAM,aAAe,KAAK,cAAgB,EACpC,YAAc,KAAK,cAAgB,KAAK,kBAAkB,OAE5D,CAAC,cAAgB,CAAC,cAElB,cAAgB,MAAM,cAAc,OAAS,WAC/C,KAAK,oBACH,KAAK,OAAO,WACZ,KAAK,oBAAoB,YAAc,KAAK,kBAAkB,OACvD,aAAe,MAAM,cAAc,OAAS,SACrD,KAAK,oBAAsB,GAE7B,KAAK,OAAO,SAAS,CACnB,KAAM,KAAK,mBACb,CAAC,EACH,CAEA,QAAS,CACP,MAAM,OAAO,EACb,KAAK,qBAAuB,KAAK,iBAAiB,sBAAsB,EACxE,KAAK,WAAW,gBAAgB,UAAU,EAErC,KAAK,qBAAqB,SAE/B,KAAK,qBAAqB,QAAS,MAAS,CAC1C,KAAK,UAAU,OAAO,6BAA6B,EACnD,KAAK,gBAAgB,cAAc,CACrC,CAAC,EACD,KAAK,qBAAqB,KAAK,YAAc,CAAC,EAAE,UAAU,IACxD,6BACF,EACA,KAAK,qBAAqB,KAAK,YAAc,CAAC,EAAE,aAC9C,eACA,EACF,EACF,CAEA,gBAAiB,CACf,KAAK,sBAAsB,KAAK,yBAAyB,EACzD,KAAK,0BAA4B,KAAK,MAAM,EAAI,KAAK,KAAK,EAC1D,KAAK,0BAA4B,CAAC,KAAK,yBACzC,CAEA,iBAAiB,MAAO,CACtB,MAAM,wBACJ,MAAM,SAAW,KAAK,sBACtB,KAAK,qBAAqB,SAAS,MAAM,MAAM,EAC7C,CAAC,KAAK,2BAA6B,yBACvC,KAAK,KAAK,CACZ,CAEA,gBAAgB,MAAO,EAEnB,MAAM,SAAW,KAAK,sBACtB,KAAK,qBAAqB,SAAS,MAAM,MAAM,IAClB,KAAK,0BAClC,KAAK,KAAK,EACD,KAAK,2BACd,KAAK,MAAM,CAEf,CAEA,MAAO,CACL,KAAK,OAAO,aAAa,YAAa,KAAK,EAC3C,cAAc,KAAK,QAAQ,EAC3B,KAAK,SAAW,YACd,KAAK,iBAAiB,KAAK,IAAI,EAC/B,KAAK,aACP,CACF,CAEA,OAAQ,CACN,KAAK,OAAO,aAAa,YAAa,QAAQ,EAC9C,cAAc,KAAK,QAAQ,CAC7B,CAEA,sBAAsB,cAAe,CAC/B,eACF,KAAK,qBAAqB,UAAU,IAAI,4BAA4B,EACpE,KAAK,qBAAqB,aACxB,aACA,OAAO,qBAAqB,aAC9B,IAEA,KAAK,qBAAqB,UAAU,OAAO,4BAA4B,EACvE,KAAK,qBAAqB,aACxB,aACA,OAAO,qBAAqB,cAC9B,EAEJ,CAEA,kBAAmB,CACjB,MAAM,oBACJ,KAAK,cAAgB,KAAK,YAAY,OAClC,EACA,KAAK,OAAO,WACZ,KAAK,OAAO,cAAc,kBAAkB,EAAE,YACpD,KAAK,OAAO,SAAS,CACnB,KAAM,oBACN,SAAU,QACZ,CAAC,CACH,CAEA,oBAAqB,CACnB,KAAK,kBAAkB,QAAQ,CAAC,KAAM,QAAU,CAC9C,MAAM,aAAe,KAAK,iBAAiB,GAAG,EAC1C,QAAU,KAAK,YAAc,GAC3B,aAAa,QACf,aAAa,QAAS,QAAW,CAC/B,OAAO,gBAAgB,UAAU,CACnC,CAAC,EACH,KAAK,aAAa,cAAe,OAAO,EACxC,KAAK,gBAAgB,UAAU,EAC/B,KAAK,UAAU,IAAI,QAAQ,IAEvB,aAAa,QACf,aAAa,QAAS,QAAW,CAC/B,OAAO,aAAa,WAAY,IAAI,CACtC,CAAC,EACH,KAAK,aAAa,cAAe,MAAM,EACvC,KAAK,aAAa,WAAY,IAAI,EAClC,KAAK,UAAU,OAAO,QAAQ,EAElC,CAAC,CACH,CAEA,YAAY,MAAO,CACjB,MAAM,eAAe,EACrB,MAAM,oBACJ,KAAK,OAAO,WACZ,KAAK,oBAAoB,aACtB,KAAK,wBAAwB,QAAQ,MAAM,aAAa,EACvD,EACA,KAAK,aACX,KAAK,OAAO,SAAS,CACnB,KAAM,oBACN,SAAU,QACZ,CAAC,CACH,CACF,CAEA,eAAe,OAAO,sBAAuB,kBAAkB,EAE/D,MAAM,uBAAuB,WAAY,CACvC,aAAc,CACZ,MAAM,EACN,KAAK,iBAAiB,SAAU,KAAK,eAAe,CACtD,CAEA,gBAAgB,MAAO,CACrB,MAAM,kBAAoB,KAAK,gBAAgB,GAC/C,KAAK,cAAc,EACnB,KAAK,eAAe,EAEhB,qBAAqB,KAAK,gBAAgB,KAAO,qBACrD,KAAK,gBAAgB,GAAM,GAAI,EAAK,EACpC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,KAAK,EACpC,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAEtB,KAAK,gBAIR,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,eAAe,IAPpB,KAAK,gBAAgB,GAAM,GAAI,EAAI,EACnC,KAAK,eAAe,GAQxB,CAEA,eAAgB,CACd,KAAK,QAAU,MAAM,KACnB,KAAK,iBAAiB,QAAQ,EAC7B,QAAW,OAAO,KACrB,CACF,CAEA,gBAAiB,CACf,KAAK,eAAiB,KAAK,eAAe,EAAE,KAAM,SACzC,CAAC,QAAQ,QACb,IAAI,CAAC,OAAQ,QACL,KAAK,QAAQ,KAAK,IAAM,MAChC,EACA,SAAS,EAAK,CAClB,CACH,CAEA,0BAA0B,CAAE,MAAO,EAAG,CACpC,KAAM,CAAE,KAAM,MAAO,OAAQ,EAAI,OAEjC,GAAI,UAAY,UAAY,OAAO,gBAAgB,OAAQ,CACzD,MAAM,YAAc,OAAO,gBAAgB,CAAC,EAAE,QAAQ,kBAChD,4BAA8B,KAAK,cAAc,mCAAmC,IAAI,cAAc,EAC5G,GAAI,CAAC,4BAA6B,OAC9B,aACF,4BAA4B,MAAM,YAAY,uBAAwB,WAAW,EACjF,4BAA4B,UAAU,OAAO,qBAAqB,IAElE,4BAA4B,MAAM,YAAY,uBAAwB,OAAO,EAC7E,4BAA4B,UAAU,IAAI,qBAAqB,EAEnE,SAAW,UAAY,SAAW,OAAO,OAAS,QAAS,CACzD,MAAM,oBAAsB,KAAK,cAAc,gCAAgC,IAAI,IAAI,EACnF,sBAAqB,oBAAoB,UAAY,MAC3D,CACF,CAEA,aAAc,CACZ,GAAI,CAAC,KAAK,eAAgB,OAE1B,MAAM,eAAiB,SAAS,iBAC9B,sBAAsB,KAAK,QAAQ,OAAO,IAC5C,EAGA,GAFA,eAAe,QAAS,cAAiB,aAAa,mBAAmB,KAAK,eAAe,EAAE,CAAC,EAE5F,CAAC,KAAK,eAAe,eAAgB,OAEzC,eAAe,QAAS,cAAiB,CACvC,aAAa,eACX,GAAG,KAAK,QAAQ,OAAO,IAAI,KAAK,eAAe,eAAe,EAAE,GAChE,EACF,CACF,CAAC,EAED,MAAM,aAAe,SAAS,cAC5B,iBAAiB,KAAK,QAAQ,OAAO,gCACvC,EACA,GAAI,CAAC,aAAc,OACnB,MAAM,cAAgB,aAAa,cACjC,mBAAmB,KAAK,eAAe,eAAe,EAAE,IAC1D,EACA,aAAa,QAAQ,aAAa,CACpC,CAEA,WAAY,CACN,CAAC,KAAK,gBAAkB,KAAK,QAAQ,YAAc,SACvD,OAAO,QAAQ,aACb,CAAC,EACD,GACA,GAAG,KAAK,QAAQ,GAAG,YAAY,KAAK,eAAe,EAAE,EACvD,CACF,CAEA,gBAAiB,CACf,MAAM,YAAc,SAAS,eAC3B,SAAS,KAAK,QAAQ,OAAO,EAC/B,EACI,CAAC,aAAe,CAAC,YAAY,WACjC,YAAY,UACV,GAAG,OAAO,OAAO,GAAG,KAAK,QAAQ,GAAG,YAAY,KAAK,eAAe,EAAE,EACxE,CACF,CAEA,oBAAqB,CACE,SAAS,iBAC5B,iBAAiB,KAAK,QAAQ,OAAO,+BAA+B,KAAK,QAAQ,OAAO,EAC1F,EACa,QAAS,aAAgB,CACpC,MAAM,MAAQ,YAAY,cAAc,kBAAkB,EAC1D,MAAM,MAAQ,KAAK,eAAe,GAClC,MAAM,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,CAC5D,CAAC,CACH,CAEA,uBAAwB,CACtB,MAAM,0BAA4B,KAAK,YAAY,OAChD,SAAY,KAAK,cAAc,UAAU,EAAE,QAAU,QAAQ,OAChE,EACM,cAAgB,CAAC,GAAG,KAAK,iBAAiB,qBAAqB,CAAC,EACtE,cAAc,QAAQ,CAAC,OAAQ,QAAU,CACvC,GAAI,QAAU,EAAG,OACjB,MAAM,aAAe,CACnB,GAAG,OAAO,iBAAiB,6BAA6B,CAC1D,EACM,uBACJ,cAAc,MAAQ,CAAC,EAAE,cAAc,UAAU,EAAE,MAC/C,2BAA6B,0BAChC,OACE,SACC,QAAQ,WACR,QAAQ,SAAS,KAAK,EAAE,IAAM,sBAClC,EACC,IAAK,eAAkB,cAAc,SAAS,MAAQ,CAAC,EAAE,CAAC,EAC7D,KAAK,qBAAqB,aAAc,0BAA0B,CACpE,CAAC,CACH,CAEA,qBAAqB,cAAe,uBAAwB,CAC1D,MAAM,aAAe,SAAS,cAAc,6BAA6B,IAAM,KAC/E,cAAc,QAAS,OAAU,CAC3B,uBAAuB,SAAS,MAAM,aAAa,OAAO,CAAC,GAC7D,MAAM,UAAY,MAAM,aAAa,OAAO,EAC5C,MAAM,UAAU,OAAO,iBAAiB,EACxC,MAAM,MAAM,QAAU,IAElB,aACJ,MAAM,MAAM,QAAU,OAEtB,MAAM,UAAY,OAAO,eAAe,wBAAwB,QAC9D,UACA,MAAM,aAAa,OAAO,CAC5B,CAGJ,CAAC,CACH,CAEA,0BAA2B,CACzB,MAAM,mBAAqB,SAAS,cAAc,qBAAqB,EAClE,oBACD,OAAO,mBAAmB,mBAAsB,aAEhD,KAAK,gBAAkB,KAAK,eAAe,UAC7C,mBAAmB,kBAAkB,KAAK,eAAe,EAAE,GAE3D,mBAAmB,gBAAgB,WAAW,EAC9C,mBAAmB,UAAY,IAEnC,CAEA,oBAAqB,CACnB,MAAM,QAAU,KAAK,QAAQ,SAAS,EACtC,GAAI,CAAC,QAAS,OAEd,MAAM,YAAc,QAAQ,cAAc,cAAc,EACpD,aAAa,YAAY,mBAAmB,CAClD,CAEA,mBAAoB,CAClB,MAAM,mBAAqB,KAAK,eAAe,GACzC,UAAY,KAAK,QAAQ,gBAC3B,KAAK,QAAQ,gBACb,KAAK,QAAQ,QAEjB,MACE,GAAG,KAAK,QAAQ,GAAG,YAAY,kBAAkB,eAC/C,KAAK,QAAQ,gBACT,KAAK,QAAQ,gBACb,KAAK,QAAQ,OACnB,EACF,EACG,KAAM,UAAa,SAAS,KAAK,CAAC,EAClC,KAAM,cAAiB,CAEtB,GAAI,KAAK,eAAe,KAAO,mBAAoB,OAEnD,MAAM,KAAO,IAAI,UAAU,EAAE,gBAAgB,aAAc,WAAW,EAChE,YAAc,SAAS,eAC3B,SAAS,KAAK,QAAQ,OAAO,EAC/B,EACM,OAAS,KAAK,eAClB,SACE,KAAK,QAAQ,gBACT,KAAK,QAAQ,gBACb,KAAK,QAAQ,OACnB,EACF,EACM,UAAY,KAAK,eACrB,OACE,KAAK,QAAQ,gBACT,KAAK,QAAQ,gBACb,KAAK,QAAQ,OACnB,EACF,EACM,eAAiB,SAAS,eAC9B,OAAO,KAAK,QAAQ,OAAO,EAC7B,EACM,gBAAkB,KAAK,eAC3B,aACE,KAAK,QAAQ,gBACT,KAAK,QAAQ,gBACb,KAAK,QAAQ,OACnB,EACF,EACM,qBAAuB,SAAS,eACpC,aAAa,KAAK,QAAQ,OAAO,EACnC,EAEI,QAAU,cAAa,YAAY,UAAY,OAAO,WACtD,iBAAmB,uBACrB,qBAAqB,UAAY,gBAAgB,WAC/C,WAAa,iBACf,eAAe,UAAY,UAAU,UACrC,eAAe,UAAU,OACvB,oBACA,UAAU,UAAU,SAAS,mBAAmB,CAClD,GAGF,MAAM,MAAQ,SAAS,eAAe,SAAS,KAAK,QAAQ,OAAO,EAAE,EAEjE,OAAO,MAAM,UAAU,OAAO,mBAAmB,EAEjD,sBACF,qBAAqB,UAAU,OAC7B,oBACA,gBAAgB,YAAc,EAChC,EAEF,MAAM,iBAAmB,KAAK,eAC5B,uBAAuB,SAAS,EAClC,EACA,KAAK,gBACH,iBAAmB,iBAAiB,aAAa,UAAU,EAAI,GAC/D,OAAO,eAAe,OACxB,EAEA,QAAQ,eAAe,cAAe,CACpC,KAAM,CACJ,UACA,KACA,QAAS,KAAK,cAChB,CACF,CAAC,CACH,CAAC,CACL,CAEA,gBAAgB,QAAU,GAAM,KAAM,YAAc,GAAM,CACxD,MAAM,YAAc,SAAS,eAC3B,gBAAgB,KAAK,QAAQ,OAAO,EACtC,EACA,GAAI,CAAC,YAAa,OAClB,MAAM,UAAY,YAAY,cAAc,cAAc,EACpD,cAAgB,YAAY,cAAc,qBAAqB,EAChE,YAED,SACF,UAAU,aAAa,WAAY,UAAU,EACzC,OAAM,cAAc,YAAc,QAEtC,UAAU,gBAAgB,UAAU,EACpC,cAAc,YAAc,OAAO,eAAe,WAItD,CAEA,gBAAiB,CACf,MAAM,OAAS,SAAS,eACtB,gBAAgB,KAAK,QAAQ,OAAO,EACtC,EACM,UAAY,OAAO,cAAc,cAAc,EAC/C,cAAgB,OAAO,cAAc,qBAAqB,EAC1D,MAAQ,SAAS,eAAe,SAAS,KAAK,QAAQ,OAAO,EAAE,EAC/D,UAAY,SAAS,eACzB,aAAa,KAAK,QAAQ,OAAO,EACnC,EACM,IAAM,SAAS,eAAe,OAAO,KAAK,QAAQ,OAAO,EAAE,EAE5D,YACL,cAAc,YAAc,OAAO,eAAe,YAC9C,OAAO,MAAM,UAAU,IAAI,mBAAmB,EAC9C,WAAW,UAAU,UAAU,IAAI,mBAAmB,EACtD,KAAK,IAAI,UAAU,IAAI,mBAAmB,EAChD,CAEA,gBAAiB,CACf,YAAK,YACH,KAAK,aACL,KAAK,MAAM,KAAK,cAAc,2BAA2B,EAAE,WAAW,EACjE,KAAK,WACd,CACF,CAEA,eAAe,OAAO,kBAAmB,cAAc,EAEvD,MAAM,sBAAsB,cAAe,CACzC,aAAc,CACZ,MAAM,CACR,CAEA,qBAAqB,cAAe,uBAAwB,CAC1D,cAAc,QAAS,OAAU,CAC3B,uBAAuB,SAAS,MAAM,aAAa,OAAO,CAAC,EAC7D,MAAM,UAAU,OAAO,UAAU,EAEjC,MAAM,UAAU,IAAI,UAAU,CAElC,CAAC,CACH,CAEA,eAAgB,CACd,MAAM,UAAY,MAAM,KAAK,KAAK,iBAAiB,UAAU,CAAC,EAC9D,KAAK,QAAU,UAAU,IAAK,UACrB,MAAM,KAAK,SAAS,iBAAiB,OAAO,CAAC,EAAE,KACnD,OAAU,MAAM,OACnB,EAAE,KACH,CACH,CACF,CAEA,eAAe,OAAO,iBAAkB,aAAa,EAGhD,eAAe,IAAI,yBAAyB,GAC/C,eAAe,OAAO,0BAA2B,cAAmC,WAAY,CAC9F,aAAc,CACZ,MAAM,EACN,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,CACnE,CAEA,mBAAoB,CACd,KAAK,cAET,KAAK,YAAc,KAAK,QAAQ,iCAAiC,EACjE,KAAK,gBAAkB,KAAK,aAAa,cAAc,iCAAiC,EACxF,KAAK,QAAU,MAAM,KAAK,KAAK,iBAAiB,6BAA6B,CAAC,EAC1E,GAAC,KAAK,iBAAmB,CAAC,KAAK,QAAQ,UAE3C,KAAK,YAAc,GACnB,KAAK,iBAAiB,QAAS,KAAK,WAAW,EAC/C,KAAK,iBAAiB,UAAW,KAAK,aAAa,EACnD,KAAK,gBAAgB,iBAAiB,SAAU,KAAK,qBAAqB,EAEtE,OAAO,WAAc,YAAc,OAAO,eAAmB,MAC/D,KAAK,yBAA2B,UAAU,eAAe,cAAe,CAAC,CAAE,IAAK,IAAM,CAChF,OAAO,MAAM,SAAS,IAAM,OAAO,KAAK,QAAQ,OAAO,GACzD,KAAK,cAAc,KAAK,SAAS,EAAE,CAEvC,CAAC,GAGH,KAAK,cAAc,KAAK,sBAAsB,CAAC,GACjD,CAEA,sBAAuB,CAChB,KAAK,cAEV,KAAK,oBAAoB,QAAS,KAAK,WAAW,EAClD,KAAK,oBAAoB,UAAW,KAAK,aAAa,EACtD,KAAK,iBAAiB,oBAAoB,SAAU,KAAK,qBAAqB,EAC9E,KAAK,2BAA2B,EAChC,KAAK,yBAA2B,KAChC,KAAK,YAAc,GACrB,CAEA,YAAY,MAAO,CACjB,MAAM,OAAS,MAAM,OAAO,QAAQ,6BAA6B,EAC7D,CAAC,QAAU,OAAO,UAEtB,KAAK,aAAa,OAAO,QAAQ,oBAAqB,OAAO,QAAQ,iBAAiB,CACxF,CAEA,cAAc,MAAO,CACnB,GAAI,CAAC,CAAC,YAAa,aAAc,UAAW,YAAa,OAAQ,KAAK,EAAE,SAAS,MAAM,GAAG,EAAG,OAE7F,MAAM,eAAiB,KAAK,QAAQ,OAAQ,QAAW,CAAC,OAAO,QAAQ,EACvE,GAAI,CAAC,eAAe,OAAQ,OAE5B,MAAM,eAAe,EACrB,MAAM,cAAgB,MAAM,OAAO,QAAQ,6BAA6B,EAClE,aAAe,KAAK,IAAI,EAAG,eAAe,QAAQ,aAAa,CAAC,EACtE,IAAI,YAAc,aAEd,MAAM,MAAQ,SAAQ,YAAc,GACpC,MAAM,MAAQ,QAAO,YAAc,eAAe,OAAS,IAC3D,MAAM,MAAQ,aAAe,MAAM,MAAQ,aAC7C,aAAe,aAAe,EAAI,eAAe,QAAU,eAAe,SAExE,MAAM,MAAQ,cAAgB,MAAM,MAAQ,eAC9C,aAAe,aAAe,GAAK,eAAe,QAGpD,eAAe,WAAW,EAAE,MAAM,EAClC,eAAe,WAAW,EAAE,MAAM,CACpC,CAEA,uBAAwB,CACtB,KAAK,cAAc,KAAK,sBAAsB,CAAC,CACjD,CAEA,aAAa,YAAa,UAAW,CACnC,KAAK,sBAAsB,WAAW,EACtC,KAAK,mBAAmB,WAAW,EACnC,OAAO,WAAW,IAAM,CACtB,MAAM,WAAa,KAAK,mBAAmB,WAAW,EACtD,KAAK,QAAQ,cAAc,GACvB,cAAc,eAAe,GAC7B,iBAAiB,SAAS,EAG9B,YAAY,cAAc,IAAI,MAAM,QAAQ,CAAC,CAC/C,CAAC,CACH,CAEA,sBAAsB,YAAa,CACjC,MAAM,OAAS,KAAK,gBAAgB,cAAc,QAAQ,EAC1D,GAAI,OAAQ,CACV,OAAO,MAAQ,YACX,OAAO,QAAU,aACnB,OAAO,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,EAE7D,MACF,CAEA,MAAM,MAAQ,MAAM,KAAK,KAAK,gBAAgB,iBAAiB,qBAAqB,CAAC,EAClF,KAAM,OAAU,MAAM,QAAU,WAAW,EACzC,QAEL,MAAM,QAAU,GAChB,MAAM,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,EAC5D,CAEA,mBAAmB,YAAa,CAC9B,MAAM,YAAc,MAAM,KACxB,KAAK,YAAY,iBAAiB,kDAAkD,CACtF,EACM,cAAgB,YAAY,KAAM,OAAU,MAAM,QAAU,WAAW,EAC7E,GAAI,CAAC,cAAe,OAEpB,YAAY,QAAS,OAAU,CAAE,MAAM,QAAU,QAAU,aAAe,CAAC,EAC3E,MAAM,cAAgB,cAAc,QAAQ,aAAa,GAAG,cAAc,eAAe,EACzF,GAAI,cAAe,CACjB,MAAM,OAAS,SAAS,cAAc,MAAM,EAC5C,OAAO,YAAc,KACrB,cAAc,gBAAgB,OAAQ,SAAS,eAAe,WAAW,CAAC,CAC5E,CACA,OAAO,aACT,CAEA,uBAAwB,CACtB,OAAI,KAAK,gBAAgB,gBAAgB,GAAW,KAAK,gBAAgB,eAAe,GAEpE,KAAK,QAAQ,cAAc,GAC3B,cAAc,qBAAqB,GAAG,OAAS,KAAK,QAAQ,iBAClF,CAEA,cAAc,UAAW,CACvB,GAAI,CAAC,UAAW,OAEhB,MAAM,eAAiB,KAAK,QAAQ,KACjC,QAAW,OAAO,OAAO,QAAQ,iBAAiB,IAAM,OAAO,SAAS,CAC3E,EACA,GAAI,CAAC,eAAgB,OAErB,KAAK,QAAQ,kBAAoB,UACjC,KAAK,QAAQ,QAAS,QAAW,CAC/B,MAAM,WAAa,SAAW,eAC9B,OAAO,UAAU,OAAO,cAAe,UAAU,EACjD,OAAO,aAAa,eAAgB,OAAO,UAAU,CAAC,EACtD,OAAO,SAAW,WAAa,EAAI,EACrC,CAAC,EAED,MAAM,cAAgB,KAAK,cAAc,iCAAiC,EACtE,gBAAe,cAAc,YAAc,eAAe,QAAQ,oBACxE,CACF,CAAC,EAGH,MAAM,+BAA+B,WAAY,CAC/C,aAAc,CACZ,MAAM,CACR,CAEA,mBAAoB,CAClB,MAAM,mBAAqB,CAAC,QAAS,WAAa,CAC3C,QAAQ,CAAC,EAAE,iBAChB,SAAS,UAAU,IAAI,EAEvB,MAAM,KAAK,QAAQ,GAAG,EACnB,KAAM,UAAa,SAAS,KAAK,CAAC,EAClC,KAAM,MAAS,CACd,MAAM,KAAO,SAAS,cAAc,KAAK,EACzC,KAAK,UAAY,KACjB,MAAM,gBAAkB,KAAK,cAAc,yBAAyB,EAEhE,iBAAmB,gBAAgB,UAAU,KAAK,EAAE,SACtD,KAAK,UAAY,gBAAgB,WAIjC,CAAC,KAAK,cAAc,qBAAqB,GACzC,KAAK,UAAU,SAAS,wBAAwB,GAEhD,KAAK,OAAO,EAGV,KAAK,cAAc,YAAY,GACjC,KAAK,UAAU,IAAI,iCAAiC,CAExD,CAAC,EACA,MAAO,GAAM,CACZ,QAAQ,MAAM,CAAC,CACjB,CAAC,EACL,EAEA,IAAI,qBAAqB,mBAAmB,KAAK,IAAI,EAAG,CACtD,WAAY,mBACd,CAAC,EAAE,QAAQ,IAAI,CACjB,CACF,CAEA,eAAe,OAAO,0BAA2B,sBAAsB,EAEvE,MAAM,yBAAyB,WAAY,CACzC,aAAc,CACZ,MAAM,EAEN,KAAK,OAAS,GACd,KAAK,OAAS,KAAK,cAAc,QAAQ,EACzC,KAAK,WAAa,KAAK,QAAQ,SAAW,aAC1C,KAAK,mBAAqB,SAAS,KAAK,MAAM,UAC9C,KAAK,KAAK,EAGV,KAAK,SAAW,IAAI,qBAAsB,SAAY,CACpD,QAAQ,QAAQ,OAAS,CACnB,MAAM,iBACR,KAAK,cAAc,EACnB,KAAK,SAAS,WAAW,EAE7B,CAAC,CACH,CAAC,EACD,KAAK,SAAS,QAAQ,IAAI,CAC5B,CAEA,MAAO,CACL,KAAK,OAAO,iBAAiB,aAAc,KAAK,aAAa,KAAK,IAAI,CAAC,EACvE,SAAS,KAAK,iBAAiB,WAAY,KAAK,WAAW,KAAK,IAAI,CAAC,EACrE,SAAS,KAAK,iBAAiB,YAAa,KAAK,UAAU,KAAK,IAAI,CAAC,EAErE,KAAK,OAAO,iBAAiB,YAAa,KAAK,aAAa,KAAK,IAAI,CAAC,EACtE,SAAS,KAAK,iBAAiB,UAAW,KAAK,WAAW,KAAK,IAAI,CAAC,EACpE,SAAS,KAAK,iBAAiB,YAAa,KAAK,UAAU,KAAK,IAAI,CAAC,CACvE,CAEA,eAAgB,CACd,IAAI,QAAU,EACd,MAAM,cAAgB,GAChB,MAAQ,EAER,QAAU,IAAM,CACpB,SAAW,MACX,KAAK,MAAM,YAAY,YAAa,QAAU,GAAG,EAE7C,QAAU,cACZ,sBAAsB,OAAO,EAE7B,KAAK,MAAM,YAAY,YAAa,cAAgB,GAAG,CAE3D,EACA,sBAAsB,OAAO,CAC/B,CAEA,cAAe,CACT,OAAO,YAAc,MACvB,SAAS,KAAK,MAAM,UAAY,UAGlC,KAAK,OAAS,GACd,KAAK,UAAU,IAAI,WAAW,CAChC,CAEA,YAAa,CACX,KAAK,OAAS,GACd,KAAK,UAAU,OAAO,WAAW,EACjC,SAAS,KAAK,MAAM,UAAY,KAAK,kBACvC,CAEA,UAAU,EAAG,CACX,GAAI,CAAC,KAAK,OAAQ,OAElB,MAAM,MAAS,EAAE,SAAW,EAAE,QAAQ,CAAC,GAAM,EACvC,EAAI,KAAK,WACX,MAAM,MAAQ,KAAK,WACnB,MAAM,MAAQ,KAAK,UAEvB,KAAK,SAAS,CAAC,CACjB,CAEA,SAAS,EAAG,CACV,MAAM,SAAW,KAAK,WAAa,KAAK,YAAc,KAAK,aAErD,IAAM,SAAW,GAGjB,aADS,KAAK,IADR,GACiB,KAAK,IAAI,EAAG,GAAG,CAAC,EACd,IAAO,SACtC,KAAK,MAAM,YAAY,YAAa,aAAe,GAAG,CACxD,CACF,CAEA,eAAe,OAAO,oBAAqB,gBAAgB,EAG3D,MAAM,uBAAuB,WAAY,CACvC,aAAc,CACZ,MAAM,EAEN,KAAK,QAAU,KAAK,cAAc,SAAS,EAC3C,KAAK,QAAU,KAAK,cAAc,SAAS,EAC3C,KAAK,QAAU,KAAK,cAAc,uBAAuB,EAEzD,KAAK,UAAY,KACjB,KAAK,UAAY,GACjB,KAAK,YAAc,EACrB,CAEA,mBAAoB,CAClB,KAAK,aAAa,CACpB,CAEA,cAAe,CACV,KAAK,gBACR,KAAK,cAAc,SAAS,EAAE,iBAAiB,QAAU,GAAM,KAAK,QAAQ,CAAC,CAAC,EAC9E,KAAK,cAAgB,GAEzB,CAEC,QAAQ,EAAG,CACV,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAElB,KAAK,QAAQ,MAAM,SAAW,SAE1B,OAAK,WAAa,KAAK,eAItB,KAAK,QAAQ,KAGhB,KAAK,OAAO,EAFZ,KAAK,KAAK,EAId,CAEA,QAAS,CAEP,KAAK,UAAY,GAEjB,MAAM,YAAc,GAAG,KAAK,QAAQ,YAAY,KAC1C,UAAY,GAAG,KAAK,QAAQ,YAAY,KAE1C,KAAK,WACP,KAAK,UAAU,OAAO,EAGxB,KAAK,UAAY,KAAK,QAAQ,QAC5B,CACE,OAAQ,CAAC,YAAa,SAAS,CACjC,EACA,CACE,SAAU,IACV,OAAQ,MACV,CACF,EAEA,KAAK,UAAU,SAAW,IAAM,CAC9B,KAAK,kBAAkB,EAAK,CAC9B,EACA,KAAK,UAAU,SAAW,IAAM,CAC9B,KAAK,UAAY,EACnB,CACF,CAEE,MAAO,CACL,KAAK,QAAQ,MAAM,OAAS,GAAG,KAAK,QAAQ,YAAY,KACxD,KAAK,QAAQ,KAAO,GACpB,OAAO,sBAAsB,IAAM,KAAK,OAAO,CAAC,CAClD,CAEA,QAAS,CAEP,KAAK,YAAc,GAEnB,MAAM,YAAc,GAAG,KAAK,QAAQ,YAAY,KAC1C,UAAY,GAAG,KAAK,QAAQ,aAAe,KAAK,QAAQ,YAAY,KAEtE,KAAK,WACP,KAAK,UAAU,OAAO,EAGxB,KAAK,UAAY,KAAK,QAAQ,QAC5B,CACE,OAAQ,CAAC,YAAa,SAAS,CACjC,EACA,CACE,SAAU,IACV,OAAQ,UACV,CACF,EAEA,KAAK,UAAU,SAAW,IAAM,KAAK,kBAAkB,EAAI,EAC3D,KAAK,UAAU,SAAW,IAAM,CAC9B,KAAK,YAAc,EACrB,CACF,CAEF,kBAAkB,KAAM,CACtB,KAAK,QAAQ,KAAO,KACpB,KAAK,UAAY,KACjB,KAAK,UAAY,GACjB,KAAK,YAAc,GACnB,KAAK,QAAQ,MAAM,OAAS,KAAK,QAAQ,MAAM,SAAW,EAC5D,CACA,CAEA,eAAe,OAAO,kBAAmB,cAAc,EAEvD,MAAM,uBAAuB,WAAY,CACvC,mBAAoB,CAElB,MAAM,cAAgB,KAAK,aAAa,UAAU,EAC5C,QAAU,IAAI,KAAK,cAAgB,MAAM,EACzC,WAAa,IAAI,KACrB,KAAK,IACH,QAAQ,eAAe,EACvB,QAAQ,YAAY,EACpB,QAAQ,WAAW,EACnB,EACA,EACA,CACF,CACF,EACM,QAAU,KAAK,aAAa,UAAU,EACtC,yBAA2B,KAAK,aACpC,4BACF,EAGM,OAAS,IACT,OAAS,OAAS,GAClB,KAAO,OAAS,GAChB,IAAM,KAAO,GACb,qBAAuB,IAAI,KAC/B,KAAK,IACH,QAAQ,eAAe,EACvB,QAAQ,YAAY,EACpB,QAAQ,WAAW,EACnB,SAAS,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,EAC9B,SAAS,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,EAC9B,CACF,CACF,EAAE,QAAQ,EAoCJ,SAAW,YAjCG,IAAM,CACxB,MAAM,IAAM,IAAI,KAAK,EAAE,QAAQ,EACzB,SAAW,qBAAuB,IAGxC,GAAI,UAAY,EAAG,CACjB,cAAc,QAAQ,EAElB,yBACF,KAAK,UAAY,yBAGjB,KAAK,QAAQ,QAAQ,EAAE,MAAM,QAAU,OAEzC,MACF,CACA,MAAM,KAAO,KAAK,MAAM,SAAW,GAAG,EAChC,MAAQ,KAAK,MAAO,SAAW,IAAO,IAAI,EAC1C,QAAU,KAAK,MAAO,SAAW,KAAQ,MAAM,EAC/C,QAAU,KAAK,MAAO,SAAW,OAAU,MAAM,EACjD,UAAY,OAAO,aAAa,WAChC,WAAa,OAAO,aAAa,YACjC,aAAe,OAAO,aAAa,cACnC,aAAe,OAAO,aAAa,cACzC,KAAK,UAAY;AAAA,kEAC2C,IAAI,oCAAoC,SAAS;AAAA,mEAChD,KAAK,oCAAoC,UAAU;AAAA,qEACjD,OAAO,oCAAoC,YAAY;AAAA,qEACvD,OAAO,qCAAqC,YAAY;AAAA,SAGzH,EAE0C,MAAM,CAClD,CACF,CAEA,eAAe,OAAO,kBAAmB,cAAc,EAEvD,MAAM,oBAAoB,WAAY,CACpC,aAAc,CACZ,MAAM,EACN,KAAK,OAAS,KAAK,aAAa,SAAS,EACzC,KAAK,QAAU,KAAK,aAAa,SAAS,EAC1C,KAAK,UAAY,SAAS,KAAK,aAAa,YAAY,CAAC,EACzD,KAAK,cAAgB,KAAK,aAAa,gBAAgB,EAGvD,KAAK,OAAS,KACd,KAAK,IAAM,KAGX,KAAK,WAAa,EACpB,CAEA,mBAAoB,CAEd,KAAK,QACP,KAAK,eAAe,CAExB,CAEA,gBAAiB,CACV,OAAO,mBACV,OAAO,iBAAmB,IAAI,QAAS,SAAY,CACjD,MAAM,OAAS,SAAS,cAAc,QAAQ,EAC9C,OAAO,IAAM,+CAA+C,KAAK,MAAM,GACvE,OAAO,OAAS,QAChB,SAAS,KAAK,YAAY,MAAM,CAClC,CAAC,GAGH,OAAO,iBAAiB,KAAK,IAAM,KAAK,QAAQ,CAAC,CACnD,CAEA,SAAU,CACH,KAAK,YACS,IAAI,OAAO,KAAK,SAAS,EACjC,QAAQ,CAAE,QAAS,KAAK,OAAQ,EAAG,CAAC,QAAS,SAAW,CAC/D,GAAI,SAAW,OAAO,KAAK,eAAe,GAAI,CAC5C,MAAM,SAAW,QAAQ,CAAC,EAAE,SAAS,SAAS,IAAI,EAC5C,UAAY,QAAQ,CAAC,EAAE,SAAS,SAAS,IAAI,EAG7C,WAAa,CACjB,OAAQ,CAAE,IAAK,SAAU,IAAK,SAAU,EACxC,KAAM,KAAK,SACb,EACM,WAAa,SAAS,cAAc,KAAK,EAC/C,WAAW,MAAM,OAAS,QAC1B,KAAK,YAAY,UAAU,EAC3B,KAAK,IAAM,IAAI,OAAO,KAAK,IAAI,WAAY,UAAU,EAGrD,KAAK,OAAS,IAAI,OAAO,KAAK,OAAO,CACnC,SAAU,CAAE,IAAK,SAAU,IAAK,SAAU,EAC1C,IAAK,KAAK,IACV,MAAO,KAAK,OACd,CAAC,EAGD,MAAM,WAAa,IAAI,OAAO,KAAK,WAAW,CAC5C,QAAS,KAAK,aAChB,CAAC,EAGD,KAAK,OAAO,YAAY,QAAS,IAAM,CACrC,KAAK,iBAAiB,UAAU,CAClC,CAAC,EAGD,OAAO,KAAK,MAAM,YAAY,KAAK,IAAK,QAAS,IAAM,CACrD,WAAW,MAAM,CACnB,CAAC,EAGD,KAAK,WAAa,EACpB,MACE,QAAQ,MACN,wDAA0D,MAC5D,CAEJ,CAAC,CAEL,CAEA,iBAAiB,WAAY,CAE3B,WAAW,WAAW,CAAE,QAAS,CAAE,CAAC,EAGpC,WAAW,KAAK,KAAK,IAAK,KAAK,MAAM,EAGrC,WAAW,IAAM,CAEf,WAAW,WAAW,CAAE,QAAS,CAAE,CAAC,CACtC,EAAG,EAAE,CACP,CACF,CAEA,eAAe,OAAO,eAAgB,WAAW,EAEjD,MAAM,mBAAmB,WAAY,CACnC,mBAAoB,CAClB,MAAM,SAAW,KAAK,iBAAiB,aAAa,EAC9C,YAAc,KAAK,iBAAiB,cAAc,EAGxD,YAAY,CAAC,EAAE,MAAM,QAAU,QAC/B,SAAS,CAAC,EAAE,UAAU,IAAI,QAAQ,EAGlC,SAAS,QAAQ,CAAC,KAAM,QAAU,CAChC,KAAK,iBAAiB,QAAU,GAAM,CACpC,EAAE,eAAe,EAGjB,YAAY,QAAS,SAAY,CAC/B,QAAQ,MAAM,QAAU,MAC1B,CAAC,EAGD,MAAM,OAAS,KAAK,aAAa,MAAM,EACvC,KAAK,cAAc,MAAM,EAAE,MAAM,QAAU,QAG3C,SAAS,QAAS,SAAY,CAC5B,QAAQ,UAAU,OAAO,QAAQ,CACnC,CAAC,EAGD,KAAK,UAAU,IAAI,QAAQ,CAC7B,CAAC,CACH,CAAC,CACH,CACF,CACA,eAAe,OAAO,cAAe,UAAU,EAE/C,MAAM,wBAAwB,WAAY,CACxC,mBAAoB,CAClB,MAAM,SAAW,KAAK,iBAAiB,aAAa,EAC9C,YAAc,KAAK,iBAAiB,cAAc,EAEpD,SAAS,SAAW,GAAK,YAAY,SAAW,IAGpD,YAAY,QAAQ,CAAC,QAAS,QAAU,CACtC,QAAQ,MAAM,QAAU,QAAU,EAAI,QAAU,MAClD,CAAC,EAED,SAAS,CAAC,EAAE,UAAU,IAAI,QAAQ,EAElC,SAAS,QAAS,MAAS,CACzB,KAAK,iBAAiB,QAAU,GAAM,CACpC,EAAE,eAAe,EAGjB,MAAM,OAAS,KAAK,aAAa,MAAM,EAGvC,YAAY,QAAS,SAAY,CAC/B,QAAQ,MAAM,QAAU,MAC1B,CAAC,EAGD,MAAM,UAAY,KAAK,cAAc,MAAM,EACvC,YACF,UAAU,MAAM,QAAU,SAI5B,SAAS,QAAS,SAAY,CAC5B,QAAQ,UAAU,OAAO,QAAQ,CACnC,CAAC,EAGD,KAAK,UAAU,IAAI,QAAQ,CAC7B,CAAC,CACH,CAAC,EACH,CACF,CACA,eAAe,OAAO,oBAAqB,eAAe,EAI1D,MAAM,mBAAmB,WAAY,CACnC,aAAc,CACZ,MAAM,EACN,KAAK,cAAgB,KACrB,KAAK,SAAW,EAChB,KAAK,MAAQ,EACb,KAAK,UAAY,EACjB,KAAK,oBAAsB,EAC3B,KAAK,IAAM,KACX,KAAK,SAAW,GAEhB,MAAM,SAAY,SAAY,CAC5B,GAAI,CAAC,QAAS,MAAO,GACrB,MAAM,KAAO,QAAQ,sBAAsB,EAC3C,OAAO,KAAK,MAAQ,KAAK,IAC3B,EAEM,gBAAkB,IACR,KAAK,iBAAiB,2BAA2B,EAClD,OAAS,EAGlB,eAAiB,IAAM,CAC3B,GAAI,CAAC,KAAK,eAAiB,CAAC,KAAK,IAAK,OACtC,MAAM,IAAM,KAAK,KAAK,KAAK,UAAY,KAAK,mBAAmB,EAAI,EACnE,KAAO,KAAK,IAAI,SAAS,OAAS,KAChC,KAAK,IAAI,YAAY,KAAK,cAAc,UAAU,EAAI,CAAC,EAEzD,KAAO,KAAK,IAAI,SAAS,OAAS,KAChC,KAAK,IAAI,YAAY,KAAK,IAAI,SAAS,CAE3C,EAEM,cAAgB,IAAM,CACtB,CAAC,KAAK,KAAO,CAAC,KAAK,gBACvB,KAAK,UAAY,SAAS,KAAK,GAAG,EAClC,KAAK,oBAAsB,SAAS,KAAK,aAAa,EACxD,EAEM,UAAY,CAAC,MAAOA,aAAc,CAClC,CAAC,KAAK,eAAiB,CAAC,KAAK,KAAO,CAAC,gBAAgB,IACzD,cAAc,EACd,eAAe,EAEf,MAAM,KAAK,KAAK,IAAI,QAAQ,EAAE,QAAS,IAAO,CAC5C,MAAM,WAAaA,aAAc,MAAQ,KAAK,SAAW,CAAC,KAAK,SAC/D,GAAG,MAAM,UAAY,cAAc,UAAU,KAC/C,CAAC,EAED,KAAK,UAAa,KAAK,MAAQ,MAAS,IACpC,KAAK,UAAY,KAAK,sBACxB,KAAK,UAAY,KAAK,qBAE1B,EAEA,KAAK,MAASA,YAAc,CAC1B,GAAI,CAAC,KAAK,eAAiB,CAAC,KAAK,KAAO,CAAC,gBAAgB,EAAG,OAC5D,KAAK,SAAW,GAChB,IAAI,UAAY,KAChB,MAAM,UAAY,IAAM,CACtB,GAAI,CAAC,KAAK,UAAY,CAAC,gBAAgB,EAAG,OAC1C,MAAM,IAAM,KAAK,IAAI,EACf,MAAQ,YAAc,KAAO,EAAI,IAAM,UAC7C,UAAU,MAAOA,UAAS,EAC1B,UAAY,IACZ,OAAO,sBAAsB,SAAS,CACxC,EACA,OAAO,sBAAsB,SAAS,CACxC,EAEA,KAAK,KAAO,IAAM,CAChB,KAAK,SAAW,EAClB,EAEA,KAAK,oBAAuB,SAAY,CAClC,QAAQ,CAAC,EAAE,gBAAkB,gBAAgB,EAC/C,KAAK,MAAM,KAAK,QAAQ,eAAe,EAEvC,KAAK,KAAK,CAEd,EAEA,KAAK,KAAQA,YAAc,CAIzB,GAHA,KAAK,cAAgB,KAAK,SAAS,CAAC,EACpC,KAAK,IAAM,KAEP,CAAC,KAAK,eAAiB,CAAC,KAAK,KAAO,CAAC,gBAAgB,EAAG,OAE5D,KAAK,UAAY,SAAS,KAAK,GAAG,EAClC,KAAK,oBAAsB,SAAS,KAAK,aAAa,EACtD,eAAe,EAEc,IAAI,qBAAqB,KAAK,mBAAmB,EACzD,QAAQ,IAAI,EAE7B,KAAK,QAAQ,cAAgB,SAC/B,KAAK,iBAAiB,aAAc,IAAM,KAAK,KAAK,CAAC,EACrD,KAAK,iBAAiB,aAAc,IAAM,KAAK,MAAMA,UAAS,CAAC,EAEnE,EAEA,MAAM,MACJ,OAAO,WAAa,IAChB,SAAS,KAAK,QAAQ,WAAW,EACjC,SAAS,KAAK,QAAQ,WAAW,EAAI,IACrC,UAAY,KAAK,QAAQ,gBAC/B,KAAK,MAAQ,MAEb,KAAK,KAAK,SAAS,CACrB,CACF,CAEK,eAAe,IAAI,aAAa,GACnC,eAAe,OAAO,cAAe,UAAU,EAIjD,MAAM,sBAAsB,WAAY,CACtC,aAAc,CACZ,MAAM,EACN,KAAK,UAAY,KAAK,aAAa,eAAe,EAClD,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,CACzD,CAEA,mBAAoB,CAClB,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,CACnC,CAEA,cAAc,QAAS,QAAS,CAC9B,MAAM,cAAgB,KAAK,cACzB,+CACF,EACI,gBAEF,cAAc,MAAM,WAClB,iDACF,cAAc,MAAM,QAAU,IAC9B,cAAc,MAAM,UAAY,mBAGhC,WAAW,IAAM,CAEf,cAAc,UAAY,QAG1B,cAAc,MAAM,QAAU,IAC9B,cAAc,MAAM,UAAY,eAClC,EAAG,GAAG,EAEV,CAEA,kBAAmB,CACjB,MAAM,mBAAqB,KAAK,cAC9B,2CACF,EACA,GAAI,mBAAoB,CACtB,MAAM,QAAU,mBAAmB,MAC7B,eAAiB,KAAK,cAC1B,oBAAoB,OAAO,EAC7B,EAAE,UACF,KAAK,cAAc,QAAS,cAAc,CAC5C,CACF,CAEA,sBAAuB,CACrB,KAAK,iBAAiB,wBAAwB,EAAE,QAAS,QAAW,CAClE,OAAO,iBAAiB,QAAS,IAAM,CACrC,MAAM,QAAU,OAAO,MACjB,eAAiB,KAAK,cAC1B,oBAAoB,OAAO,EAC7B,EAAE,UACF,KAAK,cAAc,QAAS,cAAc,CAC5C,CAAC,CACH,CAAC,CACH,CAEA,mBAAoB,CAClB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,CACxB,CAEA,6BAA8B,CACxB,OAAO,SAAW,QAAQ,aAC5B,SAAS,iBAAiB,uBAAyB,OAAU,CACvD,MAAM,OAAO,YAAc,KAAK,WAClC,KAAK,kBAAkB,CAE3B,CAAC,EAED,SAAS,iBAAiB,yBAA2B,OAAU,CACzD,MAAM,OAAO,YAAc,KAAK,WAClC,KAAK,kBAAkB,CAE3B,CAAC,EAED,SAAS,iBAAiB,0BAA4B,OAAU,CAC1D,MAAM,OAAO,YAAc,KAAK,WAClC,KAAK,kBAAkB,CAE3B,CAAC,EAEL,CACF,CAGA,eAAe,OAAO,iBAAkB,aAAa,EAGrD,SAAS,iBAAiB,mBAAoB,UAAY,CACxD,SAAS,iBAAiB,gBAAgB,EAAE,QAAS,SAAY,CAC/D,QAAQ,kBAAkB,CAC5B,CAAC,CACH,CAAC,EAID,MAAM,oBAAoB,WAAY,CACpC,aAAc,CACZ,MAAM,CACR,CAEA,mBAAoB,CAClB,KAAK,iBAAiB,qBAAqB,EAAE,QAAS,OAAU,CAC9D,MAAM,iBAAiB,SAAU,IAAM,KAAK,gBAAgB,KAAK,CAAC,CACpE,CAAC,EAED,SAAS,iBAAiB,yBAA0B,IAAM,CACxD,MAAM,MAAQ,KAAK,cAAc,6BAA6B,EAC9D,KAAK,gBAAgB,KAAK,CAC5B,CAAC,EAED,MAAM,aAAe,KAAK,cAAc,6BAA6B,EACrE,GAAI,aACF,KAAK,gBAAgB,YAAY,MAC5B,CACL,MAAM,WAAa,KAAK,cAAc,qBAAqB,EACvD,aACF,WAAW,QAAU,GACrB,KAAK,gBAAgB,UAAU,EAEnC,CAEA,OAAO,iBAAiB,SAAU,IAAM,CACtC,MAAM,MAAQ,KAAK,cAAc,6BAA6B,EAC1D,OACF,KAAK,qBAAqB,KAAK,CAEnC,CAAC,CACH,CAEF,gBAAgB,MAAO,CACnB,MAAM,MAAQ,MAAM,GAAG,MAAM,GAAG,EAC1B,UAAY,MAAM,CAAC,EAEzB,GAAI,MAAM,OAAS,EACf,OAGJ,MAAM,iBAAmB,SAAS,MAAM,MAAM,OAAS,CAAC,EAAG,EAAE,EAAI,EAEjE,KAAK,iBAAiB,oBAAoB,EAAE,QAAQ,CAAC,QAAS,QAAU,CAChE,QAAU,kBACV,QAAQ,MAAM,QAAU,QACxB,QAAQ,aAAa,WAAY,SAAS,IAE1C,QAAQ,MAAM,QAAU,OACxB,QAAQ,gBAAgB,UAAU,EAClC,QAAQ,UAAU,OAAO,aAAa,EAE9C,CAAC,EAED,KAAK,qBAAqB,KAAK,EAE3B,OAAO,IAAQ,KACnB,IAAI,KAAK,CAGb,CAEE,qBAAqB,MAAO,CAC1B,MAAM,OAAS,KAAK,cAAc,SAAS,EACrC,cAAgB,MAAM,mBAEtB,SAAW,cAAc,YACzB,QAAU,cAAc,WAE9B,OAAO,MAAM,MAAQ,GAAG,QAAQ,KAChC,OAAO,MAAM,UAAY,cAAc,OAAO,KAChD,CACF,CAEA,eAAe,OAAO,eAAgB,WAAW,EAGjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuBA,MAAM,oBAAoB,WAAY,CACpC,aAAc,CACZ,MAAM,EACN,KAAK,QAAU,EACf,KAAK,WAAa,GAClB,KAAK,UAAY,IACjB,KAAK,OAAS,IAChB,CAEA,mBAAoB,CAClB,KAAK,WAAW,CAClB,CAEA,YAAa,CACX,MAAM,UAAY,KAAK,QAAQ,aAAa,EAC5C,GAAI,UAAW,CACb,MAAM,eAAiB,UAAU,aAAa,sBAAsB,EAC9D,cAAgB,UAAU,aAAa,qBAAqB,EAClE,KAAK,WAAa,iBAAmB,OACrC,KAAK,UAAY,cAAgB,SAAS,aAAa,EAAI,IAAO,GACpE,CACA,KAAK,OAAS,KAAK,iBAAiB,IAAI,EAEpC,KAAK,oBACP,cAAc,KAAK,kBAAkB,EAGvC,MAAM,YAAc,KAAK,cAAc,aAAa,EAMpD,GALI,aACF,YAAY,OAAO,EAIjB,KAAK,OAAO,OAAS,EAAG,CAC1B,MAAM,IAAM,SAAS,cAAc,WAAW,EAC9C,IAAI,UAAY,aAEhB,MAAM,QAAU,SAAS,cAAc,QAAQ,EAC/C,QAAQ,UAAY,OACpB,QAAQ,aAAa,aAAc,MAAM,EAEzC,MAAM,QAAU,SAAS,cAAc,QAAQ,EAC/C,QAAQ,UAAY,OACpB,QAAQ,aAAa,aAAc,MAAM,EAEzC,MAAM,QAAU,SAAS,cAAc,KAAK,EAC5C,QAAQ,UAAY,gBACpB,QAAQ,UAAY,uBAAuB,KAAK,OAAO,MAAM,UAE7D,IAAI,YAAY,OAAO,EACvB,IAAI,YAAY,OAAO,EACvB,IAAI,YAAY,OAAO,EACvB,KAAK,YAAY,GAAG,EAEpB,KAAK,OAAO,KAAK,OAAO,EAAE,UAAU,IAAI,SAAS,EACjD,KAAK,OAAO,KAAK,OAAO,OAAS,CAAC,EAAE,UAAU,IAAI,YAAY,EAE9D,QAAQ,iBAAiB,QAAS,IAAM,KAAK,SAAS,MAAM,CAAC,EAC7D,QAAQ,iBAAiB,QAAS,IAAM,KAAK,SAAS,OAAO,CAAC,EAE9D,YAAY,IAAM,CACZ,KAAK,YAAY,KAAK,SAAS,OAAO,CAC5C,EAAG,KAAK,SAAS,EAEjB,KAAK,iBAAiB,aAAc,IAAO,KAAK,WAAa,EAAM,EACnE,KAAK,iBAAiB,aAAc,IAAO,KAAK,WAAa,EAAK,EAElE,SAAS,iBAAiB,UAAY,IAAO,CACvC,GAAG,MAAQ,aAAa,KAAK,SAAS,MAAM,EAC5C,GAAG,MAAQ,cAAc,KAAK,SAAS,OAAO,CACpD,CAAC,EAED,KAAK,iBACH,aACC,IAAO,KAAK,iBAAiB,EAAE,EAChC,EACF,EACA,KAAK,iBACH,YACC,IAAO,KAAK,gBAAgB,EAAE,EAC/B,EACF,CACF,CACF,CAEA,SAAS,UAAW,CAClB,KAAK,OAAO,QAAS,OAAU,CAC7B,MAAM,UAAU,OAAO,UAAW,YAAY,CAChD,CAAC,EAEG,YAAc,QAChB,KAAK,QACH,KAAK,QAAU,KAAK,OAAO,OAAS,EAAI,KAAK,QAAU,EAAI,EAE7D,KAAK,QACH,KAAK,QAAU,EAAI,KAAK,QAAU,EAAI,KAAK,OAAO,OAAS,EAG/D,MAAM,YACJ,KAAK,QAAU,KAAK,OAAO,OAAS,EAAI,KAAK,QAAU,EAAI,EACvD,YACJ,KAAK,QAAU,EAAI,KAAK,QAAU,EAAI,KAAK,OAAO,OAAS,EAE7D,KAAK,OAAO,KAAK,OAAO,EAAE,UAAU,IAAI,SAAS,EACjD,KAAK,OAAO,WAAW,EAAE,UAAU,IAAI,YAAY,EAEnD,KAAK,cAAc,iCAAiC,EAAE,YACpD,KAAK,QAAU,CACnB,CACA,iBAAiB,IAAK,CACpB,KAAK,MAAQ,IAAI,QAAQ,CAAC,EAAE,QAC5B,KAAK,MAAQ,IAAI,QAAQ,CAAC,EAAE,OAC9B,CAEA,gBAAgB,IAAK,CACnB,GAAI,CAAC,KAAK,OAAS,CAAC,KAAK,MAAO,OAEhC,MAAM,IAAM,IAAI,QAAQ,CAAC,EAAE,QACrB,IAAM,IAAI,QAAQ,CAAC,EAAE,QAErB,MAAQ,KAAK,MAAQ,IACrB,MAAQ,KAAK,MAAQ,IAEvB,KAAK,IAAI,KAAK,EAAI,KAAK,IAAI,KAAK,IAC9B,MAAQ,EAAG,KAAK,SAAS,OAAO,EAC/B,KAAK,SAAS,MAAM,GAG3B,KAAK,MAAQ,KACb,KAAK,MAAQ,IACf,CACA,sBAAuB,CACnB,KAAK,oBACP,cAAc,KAAK,kBAAkB,CAExC,CACD,CAEA,eAAe,OAAO,eAAgB,WAAW,EAIjD,SAAS,kBAAkB,MAAO,CAChC,IAAI,eAAiB,MAAM,OAEvB,gBAAkB,eAAe,QACnC,uCACF,EAEA,GAAI,iBACE,eAAe,QAAQ,SAAS,EAAG,CACrC,IAAI,KAAO,eAAe,aAAa,MAAM,EAE7C,GAAI,MAAQ,KAAK,WAAW,GAAG,EAAG,CAChC,MAAM,eAAe,EAErB,IAAI,SAAW,KAAK,UAAU,CAAC,EAC3B,cAAgB,SAAS,eAAe,QAAQ,EAEpD,GAAI,eAAiB,cAAc,UAAU,SAAS,QAAQ,EAAG,CAC/D,IAAI,OAAS,gBAAgB,cAC3B,+DACF,EACA,GAAI,OAAQ,CACV,IAAI,eAAiB,OAAO,MAAM,eAClC,OAAO,MAAM,eAAiB,OAE9B,cAAc,eAAe,CAAE,SAAU,QAAS,CAAC,EAEnD,WAAW,UAAY,CACrB,OAAO,MAAM,eAAiB,cAChC,EAAG,GAAG,CACR,MACE,OAAO,SAAS,KAAO,IAE3B,MACE,OAAO,SAAS,KAAO,IAE3B,CACF,CAEJ,CAEA,SAAS,iBAAiB,QAAS,iBAAiB,EAGpD,SAAS,0BAA2B,CAClC,IAAI,YAAc,SAAS,eAAe,cAAc,EACpD,8BAAgC,SAAS,cAAc,iBAAiB,EACxE,6BAA+B,SAAS,cAC1C,wBACF,EAGA,GAAI,CAAC,+BAAiC,CAAC,6BACrC,OAGF,IAAI,qBAAuB,SAAS,iBAAiB,oBAAoB,EACrE,oBAAsB,SAAS,iBACjC,2BACF,EAIA,SAAS,yBAA0B,CACjC,MAAO,GAAQ,OAAO,WAAa,OAAO,UAAU,IAAI,EAAE,YAC5D,CAEA,SAAS,gBAAgB,IAAK,SAAU,CACtC,OAAK,wBAAwB,GAItB,aAAa,QAAQ,GAAG,GAAK,QACtC,CAEA,SAAS,iBAAiB,IAAK,MAAO,CAChC,CAAC,wBAAwB,GAAK,CAAC,OAInC,aAAa,QAAQ,IAAK,KAAK,CACjC,CAGA,IAAI,kBAAmB,iBAEnB,OAAO,QAAY,KAAe,CAAC,QAAQ,YAE7C,kBAAoB,gBAClB,oBACA,aAAa,aAAa,sBAAsB,CAClD,EACA,iBAAmB,gBACjB,mBACA,aAAa,aAAa,qBAAqB,CACjD,IAGA,kBAAoB,aAAa,aAAa,sBAAsB,EACpE,iBAAmB,aAAa,aAAa,qBAAqB,GAGpE,SAAS,aAAa,eAAgB,WAAY,CAC5C,aAAe,WACjB,YAAY,UAAY,YAAY,UAAU,QAC5C,wBACA,EACF,EACA,YAAY,UAAU,IAAI,SAAW,eAAiB,cAAc,EACpE,iBAAiB,oBAAqB,cAAc,GAC3C,aAAe,WACxB,YAAY,UAAY,YAAY,UAAU,QAC5C,4BACA,EACF,EACA,YAAY,UAAU,IAAI,SAAW,eAAiB,kBAAkB,EACxE,iBAAiB,mBAAoB,cAAc,EAEvD,CAEA,SAAS,kBAAkB,OAAQ,WAAY,CAC7C,IAAI,QACF,aAAe,UAAY,qBAAuB,oBACpD,QAAQ,QAAQ,SAAU,IAAK,CAC7B,IAAI,UAAU,OAAO,QAAQ,CAC/B,CAAC,EACD,OAAO,UAAU,IAAI,QAAQ,CAC/B,CAEA,SAAS,mBAAmB,MAAO,WAAY,CAC7C,IAAI,OAAS,MAAM,OAAO,QAAQ,IAAI,EACtC,GAAI,OAAQ,CACV,IAAI,eAAiB,OAAO,aAAa,cAAc,EACvD,aAAa,eAAgB,UAAU,EACvC,kBAAkB,OAAQ,UAAU,CACtC,CACF,CAGI,+BACF,8BAA8B,iBAAiB,QAAS,SAAU,MAAO,CACvE,mBAAmB,MAAO,SAAS,CACrC,CAAC,EAEC,8BACF,6BAA6B,iBAAiB,QAAS,SAAU,MAAO,CACtE,mBAAmB,MAAO,QAAQ,CACpC,CAAC,EAGH,aAAa,kBAAmB,SAAS,EACzC,aAAa,iBAAkB,QAAQ,EAGvC,IAAI,qBAAuB,SAAS,cAClC,oCAAsC,kBAAoB,IAC5D,EACI,sBAAsB,qBAAqB,UAAU,IAAI,QAAQ,EAErE,IAAI,oBAAsB,SAAS,cACjC,2CAA6C,iBAAmB,IAClE,EACI,qBAAqB,oBAAoB,UAAU,IAAI,QAAQ,CACrE,CAGA,OAAO,iBAAiB,OAAQ,UAAY,CAC1C,yBAAyB,EAGzB,IAAI,qBAAuB,SAAS,iBAAiB,gBAAgB,EAErE,qBAAqB,QAAQ,SAAU,QAAS,CAC9C,IAAI,SAAW,IAAI,iBAAiB,SAAU,UAAW,CACvD,UAAU,QAAQ,SAAU,SAAU,CACpC,yBAAyB,CAC3B,CAAC,CACH,CAAC,EAED,SAAS,QAAQ,QAAS,CACxB,UAAW,GACX,WAAY,GACZ,QAAS,EACX,CAAC,CACH,CAAC,EACD,SAAS,iBAAiB,uBAAwB,wBAAwB,CAC5E,CAAC,EAUD,MAAM,mBAAmB,WAAY,CACnC,aAAc,CACZ,MAAM,EACN,KAAK,aAAe,EACpB,KAAK,aAAe,MAAM,KAAK,KAAK,iBAAiB,KAAK,CAAC,EAC3D,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAEvC,KAAK,aAAa,OAAS,GAC7B,KAAK,aAAa,KAAK,YAAY,EAAE,UAAU,IAAI,QAAQ,CAE/D,CAEA,mBAAoB,CACd,KAAK,aAAa,OAAS,IAC7B,KAAK,SAAW,YAAY,KAAK,WAAY,GAAI,EAErD,CAEA,sBAAuB,CACrB,cAAc,KAAK,QAAQ,CAC7B,CAEA,YAAa,CACP,KAAK,aAAa,OAAS,IAC7B,KAAK,aAAa,KAAK,YAAY,EAAE,UAAU,OAAO,QAAQ,EAE9D,KAAK,cAAgB,KAAK,aAAe,GAAK,KAAK,aAAa,OAEhE,KAAK,aAAa,KAAK,YAAY,EAAE,UAAU,IAAI,QAAQ,EAE/D,CACF,CAEA,eAAe,OAAO,cAAe,UAAU,EAI/C,MAAM,wBAAwB,WAAY,CACxC,aAAc,CACV,MAAM,EACN,KAAK,iBAAmB,KACxB,KAAK,kBAAoB,CAAC,EAC1B,KAAK,gBAAkB,CAAC,EACxB,KAAK,aAAe,KAEpB,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EACnC,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,EACvC,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,wBAA0B,KAAK,wBAAwB,KAAK,IAAI,CACzE,CAEA,mBAAoB,CAEhB,KAAK,iBAAiB,QAAU,GAAM,CAClC,GAAI,KAAK,iBAAkB,OAC3B,KAAK,iBAAmB,KAExB,MAAM,YAAc,KAAK,cAAc,kBAAkB,EACrD,cACA,YAAY,oBAAoB,QAAS,KAAK,QAAQ,EACtD,YAAY,iBAAiB,QAAS,KAAK,QAAQ,GAGvD,KAAK,OAAO,CAChB,CAAC,EAGD,KAAK,iBAAiB,UAAY,GAAM,CACpC,GAAI,MAAK,mBAEL,EAAE,MAAQ,SAAW,EAAE,MAAQ,KAAK,CACpC,EAAE,eAAe,EACjB,KAAK,iBAAmB,KAExB,MAAM,YAAc,KAAK,cAAc,kBAAkB,EACrD,cACA,YAAY,oBAAoB,QAAS,KAAK,QAAQ,EACtD,YAAY,iBAAiB,QAAS,KAAK,QAAQ,GAGvD,KAAK,OAAO,CAChB,CACJ,CAAC,EAGD,KAAK,aAAa,OAAQ,QAAQ,EAClC,KAAK,aAAa,WAAY,GAAG,EACjC,KAAK,aAAa,gBAAiB,OAAO,CAC9C,CAEA,sBAAuB,CACnB,MAAM,YAAc,KAAK,cAAc,kBAAkB,EACrD,aAAa,YAAY,oBAAoB,QAAS,KAAK,QAAQ,CAC3E,CAEA,QAAS,CACL,KAAK,aAAa,gBAAiB,MAAM,EACzC,KAAK,gBAAgB,UAAU,EAE/B,MAAM,gBAAkB,KAAK,mBAAmB,EAChD,gBAAgB,oBAAoB,gBAAiB,KAAK,uBAAuB,EACjF,gBAAgB,iBAAiB,gBAAiB,KAAK,qBAAqB,EAE5E,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAE9B,KAAK,UAAU,IAAI,oBAAoB,EAEvC,KAAK,uBAAuB,EAC5B,KAAK,+BAA+B,EACpC,KAAK,oBAAoB,EAEzB,sBAAsB,IAAM,CACxB,KAAK,UAAU,IAAI,sBAAsB,EACzC,KAAK,eAAe,CACxB,CAAC,CACL,CAEA,SAAS,MAAO,CACR,OAAO,MAAM,gBAAgB,EACjC,KAAK,aAAa,gBAAiB,OAAO,EAE1C,MAAM,gBAAkB,KAAK,mBAAmB,EAChD,gBAAgB,oBAAoB,gBAAiB,KAAK,qBAAqB,EAC/E,gBAAgB,iBAAiB,gBAAiB,KAAK,uBAAuB,EAE9E,KAAK,2BAA2B,EAEhC,sBAAsB,IAAM,CACxB,KAAK,UAAU,IAAI,sBAAsB,EACzC,KAAK,gBAAgB,CACzB,CAAC,CACL,CAEA,sBAAsB,EAAG,CACrB,GAAI,EAAE,SAAW,KAAK,mBAAmB,EAAG,OAC5C,KAAK,UAAU,OAAO,sBAAsB,EAC5C,KAAK,mBAAmB,EAAE,oBAAoB,gBAAiB,KAAK,qBAAqB,EACzF,KAAK,aAAa,EAGlB,MAAM,YAAc,KAAK,cAAc,kBAAkB,EACrD,aAAa,YAAY,MAAM,CACvC,CAEA,wBAAwB,EAAG,CACnB,EAAE,SAAW,KAAK,mBAAmB,IACzC,KAAK,UAAU,OAAO,sBAAsB,EAC5C,KAAK,UAAU,OAAO,oBAAoB,EAE1C,KAAK,mBAAmB,EAAE,oBAAoB,gBAAiB,KAAK,uBAAuB,EAC3F,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACjB,CAEA,uBAAwB,CACpB,OAAO,KAAK,iBAAiB,gBAAgB,CACjD,CAEA,oBAAqB,CACjB,OAAO,KAAK,cAAc,oBAAoB,CAClD,CAEA,mBAAoB,CAChB,SAAS,KAAK,MAAM,SAAW,SAC/B,SAAS,KAAK,MAAM,QAAU,WAClC,CAEA,kBAAmB,CACf,SAAS,KAAK,MAAM,SAAW,GAC/B,SAAS,KAAK,MAAM,QAAU,GAClC,CAEA,cAAe,CACX,UAAW,WAAW,KAAK,sBAAsB,EAC7C,QAAQ,MAAQ,KAEpB,KAAK,mBAAmB,EAAE,MAAQ,IACtC,CAEA,0BAA2B,CACvB,KAAK,kBAAoB,CAAC,EAC1B,UAAW,WAAW,KAAK,sBAAsB,EAC7C,KAAK,kBAAkB,KAAK,CACxB,KAAM,QAAQ,sBAAsB,EACpC,QAAS,WAAW,OAAO,iBAAiB,OAAO,EAAE,OAAO,CAChE,CAAC,EAGL,MAAM,aAAe,KAAK,sBAAsB,EAChD,KAAK,aAAe,CAChB,IAAK,aAAa,IAClB,MAAO,OAAO,WAAa,aAAa,MACxC,OAAQ,OAAO,YAAc,aAAa,OAC1C,KAAM,aAAa,IACvB,CACJ,CAEA,wBAAyB,CACrB,KAAK,gBAAkB,CAAC,EACxB,UAAW,WAAW,KAAK,sBAAsB,EAC7C,KAAK,gBAAgB,KAAK,CACtB,KAAM,QAAQ,sBAAsB,EACpC,QAAS,WAAW,OAAO,iBAAiB,OAAO,EAAE,OAAO,CAChE,CAAC,CAET,CAEA,gCAAiC,CACZ,KAAK,sBAAsB,EACnC,QAAQ,CAAC,QAAS,IAAM,CAC7B,QAAQ,MAAM,UAAY,aACtB,KAAK,kBAAkB,CAAC,EAAE,KAAK,KAAO,KAAK,gBAAgB,CAAC,EAAE,KAAK,IACvE,OACI,KAAK,kBAAkB,CAAC,EAAE,KAAK,IAAM,KAAK,gBAAgB,CAAC,EAAE,KAAK,GACtE,aACI,KAAK,kBAAkB,CAAC,EAAE,KAAK,MAAQ,KAAK,gBAAgB,CAAC,EAAE,KAAK,KACxE,IAEA,QAAQ,MAAM,QAAU,GAAG,KAAK,kBAAkB,CAAC,EAAE,OAAO,EAChE,CAAC,CACL,CAEA,qBAAsB,CAClB,KAAK,mBAAmB,EAAE,MAAM,SAAW,SAAS,KAAK,aAAa,GAAG,MAAM,KAAK,aAAa,KAAK,MAAM,KAAK,aAAa,MAAM,MAAM,KAAK,aAAa,IAAI,eACpK,CAEA,gBAAiB,CACI,KAAK,sBAAsB,EACnC,QAAQ,CAAC,QAAS,IAAM,CAC7B,QAAQ,MAAM,UAAY,2BAC1B,QAAQ,MAAM,QAAU,GAAG,KAAK,gBAAgB,CAAC,EAAE,OAAO,EAC9D,CAAC,EAED,KAAK,mBAAmB,EAAE,MAAM,SAAW,UAC/C,CAEA,4BAA6B,CACzB,UAAW,WAAW,KAAK,sBAAsB,EAC7C,QAAQ,MAAM,UAAY,2BAE9B,KAAK,mBAAmB,EAAE,MAAM,SAAW,UAC/C,CAEA,iBAAkB,CACd,KAAK,+BAA+B,EACpC,KAAK,oBAAoB,CAC7B,CAEA,SAAU,CACN,KAAK,iBAAmB,KACxB,KAAK,aAAe,KACpB,KAAK,kBAAoB,CAAC,EAC1B,KAAK,gBAAkB,CAAC,CAC5B,CACF,CAEA,eAAe,OAAO,mBAAoB,eAAe,EAKzD,SAAS,iBAAiB,mBAAoB,UAAY,CACxD,iBAAiB,CACnB,CAAC,EACD,SAAS,kBAAmB,CAC1B,MAAM,UAAY,SAAS,cAAc,sBAAsB,EACzD,WAAa,SAAS,cAAc,uBAAuB,EAEjE,GAAI,WAAa,WAAY,CACT,SAAS,cAAc,gCAAgC,GAGnE,UAAU,UAAU,IAAI,YAAY,EAIxC,IAAI,QAAU,UAAU,QAAQ,aAAa,EAExC,UAED,QAAU,SAAS,cAAc,KAAK,EACtC,QAAQ,UAAU,IAAI,YAAY,EAEnB,UAAU,WAClB,aAAa,QAAS,SAAS,EAEtC,QAAQ,YAAY,SAAS,EAC7B,QAAQ,YAAY,UAAU,EAEtC,CACF,CAIA,MAAM,0BAA0B,WAAY,CAC1C,aAAc,CACV,MAAM,CACV,CACA,mBAAoB,CAChB,IAAI,QAAU,KAAK,UAEnB,QAAU,QAAQ,QAAQ,UAAW,EAAE,EACvC,QAAU,QAAQ,QAAQ,cAAe,UAAU,EAEnD,IAAI,KAAO,QAAQ,MAAM,UAAU,EAAE,IAAI,KAAO,IAAI,KAAK,CAAC,EAAE,OAAO,KAAO,IAAI,OAAS,CAAC,EAExF,KAAK,UAAY,GAEjB,KAAK,QAAQ,CAAC,IAAK,QAAU,CACzB,WAAW,IAAM,CACb,IAAI,WAAa,GAEb,IAAI,WAAW,GAAG,IAClB,IAAM,IAAI,UAAU,CAAC,EAAE,KAAK,EAC5B,WAAa,IAGjB,IAAI,QAAU,IAAI,MAAM,GAAG,EAAE,IAAI,KAAO,IAAI,KAAK,CAAC,EAE9C,WAAa,SAAS,cAAc,MAAM,EAC9C,WAAW,UAAU,IAAI,4BAA4B,EAEjD,YACA,WAAW,UAAU,IAAI,UAAU,EAGvC,QAAQ,QAAQ,KAAO,CACnB,IAAI,WAAa,SAAS,cAAc,MAAM,EAC9C,WAAW,UAAY,IACvB,WAAW,YAAY,UAAU,CACrC,CAAC,EAED,KAAK,YAAY,UAAU,CAC/B,EAAG,MAAQ,EAAE,CACjB,CAAC,CACL,CACF,CAEA,eAAe,OAAO,qBAAsB,iBAAiB,EAI7D,SAAS,iBAAiB,mBAAoB,UAAY,CAExD,MAAM,kBAAoB,IAAM,CAC1B,OAAO,IAAQ,KAAe,OAAO,IAAI,MAAS,YAEtD,SAAS,iBAAiB,YAAY,EAAE,QAAS,SAAY,CAC3D,QAAQ,UAAU,IAAI,WAAY,aAAa,CACjD,CAAC,CACH,EAEM,cAAgB,IAAM,CAC1B,GAAI,OAAO,IAAQ,KAAe,OAAO,IAAI,MAAS,WAAY,CAChE,MAAM,SAAW,iCAAiC,KAAK,UAAU,SAAS,EACpE,QAAU,CACd,OAAQ,SAAW,KAAO,IAC1B,cAAe,SAAW,EAAI,GAC9B,SAAU,IACV,KAAM,EACR,EACA,IAAI,KAAK,OAAO,CAClB,CACF,EAGA,eAAe,aAAa,EAC5B,OAAO,iBAAiB,OAAQ,iBAAiB,EACjD,WAAW,kBAAmB,IAAI,EAElC,SAAS,iBAAiB,uBAAwB,aAAa,EAE/D,SAAS,iBAAiB,2BAA4B,UAAY,CAC5D,OAAO,IAAQ,KACjB,IAAI,KAAK,CAAE,OAAQ,IAAK,CAAC,CAE7B,CAAC,EAED,MAAM,eAAkB,UAAa,CACnC,MAAM,OAAS,SAAS,eAAe,QAAQ,EAC3C,QACuB,OAAO,iBAAiB,cAAc,EAC9C,QAAS,SAAY,CACpC,QAAQ,UAAU,OAAO,aAAa,CACxC,CAAC,CAEL,EACA,eAAe,YAAY,EAC3B,eAAe,cAAc,CAC/B,CAAC,EAID,SAAS,iBAAiB,mBAAoB,UAAW,CACvD,MAAM,qBAAuB,SAAS,iBAAiB,wBAAwB,EAEzE,SAAW,IAAI,qBAAsB,SAAY,CACrD,QAAQ,QAAQ,OAAS,CACnB,MAAM,eACR,MAAM,OAAO,UAAU,IAAI,SAAS,EAEpC,MAAM,OAAO,UAAU,OAAO,SAAS,CAE3C,CAAC,CACH,EAAG,CAAE,UAAW,EAAI,CAAC,EAErB,qBAAqB,QAAQ,SAAW,SAAS,QAAQ,OAAO,CAAC,CACnE,CAAC",
  "names": ["direction"]
}
