{
  "version": 3,
  "sources": ["/cdn/shop/t/1519/assets/custom.js?enable_js_minification=1"],
  "sourcesContent": ["\"use strict\";\n\n/**\n * Include your custom JavaScript here.\n *\n * We also offer some hooks so you can plug your own logic. For instance, if you want to be notified when the variant\n * changes on product page, you can attach a listener to the document:\n *\n * document.addEventListener('variant:changed', function(event) {\n *   var variant = event.detail.variant; // Gives you access to the whole variant details\n * });\n *\n * You can also add a listener whenever a product is added to the cart:\n *\n * document.addEventListener('product:added', function(event) {\n *   var variant = event.detail.variant; // Get the variant that was added\n *   var quantity = event.detail.quantity; // Get the quantity that was added\n * });\n *\n * If you just want to force refresh the mini-cart without adding a specific product, you can trigger the event\n * \"cart:refresh\" in a similar way (in that case, passing the quantity is not necessary):\n *\n * document.documentElement.dispatchEvent(new CustomEvent('cart:refresh', {\n *   bubbles: true\n * }));\n *\n *\n * Custom logics to hide and show theme section (TBD)\n *\n * if (window.location.pathname == \"/pages/fine-jewelry\") {\n *   const urlParams = new URLSearchParams(window.location.search);\n *   const value = urlParams.get(\"utm_campaign\");\n *   const slideshowNodes = document.querySelectorAll(\".Slideshow\");\n *   if(value && value.includes(\"Divine Grace\")) {\n *     // hide Phoenix Hero section\n *     slideshowNodes[1].style.display = \"none\";\n *   } else {\n *     // hide Divine Grace Hero section\n *     slideshowNodes[0].style.display = \"none\";\n *     // hide Divine Grace Copy\n *     document.querySelector(\".divine-grace-section--copy\").style.display = \"none\";\n *     // hide Divine Grace Mosaic images\n *     document.querySelector(\".mosaic-images-section\").style.display = \"none\";\n *   }\n * }\n */\n\n/*\n *  Global Variables\n */\n\nvar rewardData = {};\n\nfunction onTidioChatApiReady() {\n  // Code after chat loaded\n  // check the url parameter\n  var queryString = window.location.search;\n  var urlParams = new URLSearchParams(queryString);\n  var action = urlParams.get(\"action\");\n  // open tidio chat when action = livechat\n  if (action === \"livechat\") tidioChatApi.open();\n  // hide tidio if Cart drawer is opened\n  var drawer = document.getElementById(\"sidebar-cart\");\n  if (drawer && drawer.getAttribute(\"aria-hidden\") === \"false\") {\n    tidioChatApi.hide();\n  }\n}\n\nif (window.tidioChatApi) {\n  window.tidioChatApi.on(\"ready\", onTidioChatApiReady);\n} else {\n  document.addEventListener(\"tidioChat-ready\", onTidioChatApiReady);\n}\n\nfunction showProductItemLabel() {\n  var labelNodes = document.querySelectorAll(\".ProductItem__Label\");\n  labelNodes.forEach(function (node) {\n    if (node) {\n      node.style.setProperty(\"display\", \"block\");\n    }\n  });\n}\n\nfunction setupResizeObserverForProductItemLabel() {\n  if (window.ResizeObserver) {\n    var resizeObserver = new ResizeObserver(function () {\n      var element = document.querySelector(\".ProductListWrapper .ProductItem\");\n      var positionInfo = element ? element.getBoundingClientRect() : null;\n      var quickViewWrapperElements = document.querySelectorAll(\".QuickView__Wrapper\");\n      var quickAddWrapperElements = document.querySelectorAll(\".QuickView__MobileWrapper\");\n      var quickModalElement = document.querySelector(\".Modal__Quickview\");\n      var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n      if (positionInfo && positionInfo.width) {\n        // update product-item width\n        document.documentElement.style.setProperty(\"--product-item-width\", positionInfo.width + \"px\");\n        // show product label\n        showProductItemLabel();\n\n        if (isMobile) {\n          showQuickAddOnMobile(quickViewWrapperElements, quickAddWrapperElements, isMobile);\n        } else {\n          if (window.innerWidth <= 768) {\n            quickModalElement.classList.remove(\"Modal\");\n            quickModalElement.classList.add(\"QuickAdd__Popup\");\n            showQuickAddOnMobile(quickViewWrapperElements, quickAddWrapperElements, isMobile);\n          } else {\n            quickModalElement.classList.add(\"Modal\");\n            quickModalElement.classList.remove(\"QuickAdd__Popup\");\n          }\n        }\n      }\n    });\n    var observeElement = document.querySelector(\".ProductListWrapper\")\n      ? document.querySelector(\".ProductListWrapper\")\n      : document.querySelector(\".ProductRecommendations\");\n    if (observeElement) {\n      resizeObserver.observe(observeElement);\n    }\n  } else {\n    console.log(\"Resize observer not supported!\");\n  }\n}\n\nfunction showQuickAddOnMobile(quickViewWrapperElements, quickAddWrapperElements, isMobile) {\n  quickViewWrapperElements.forEach(function (element) {\n    element.classList.add(\"hidden\");\n  });\n\n  quickAddWrapperElements.forEach(function (element) {\n    element.classList.remove(\"hidden\");\n    if (!isMobile) {\n      element.classList.add(\"mobile\");\n    }\n  });\n}\n\nfunction updateCartIndicator(cart) {\n  var cartFreeShippingThreshold = parseInt(document.getElementById(\"cart-free-shipping-threshold\").value);\n  var cartFreeGiftThreshold = parseInt(document.getElementById(\"cart-free-gift-threshold\").value);\n  var cart_total_price = cart.total_price / 100;\n  var shipping_percentage = 0;\n  if (cartFreeShippingThreshold && cart_total_price > cartFreeShippingThreshold) {\n    shipping_percentage = 100;\n  } else {\n    shipping_percentage = (cart_total_price * 100) / cartFreeShippingThreshold;\n  }\n  document.documentElement.style.setProperty(\"--shipping-progress-bar-width\", shipping_percentage + \"%\");\n\n  var free_gift_percentage = 0;\n  if (cartFreeGiftThreshold && cart_total_price > cartFreeGiftThreshold) {\n    free_gift_percentage = 100;\n  } else {\n    free_gift_percentage = (cart_total_price * 100) / cartFreeGiftThreshold;\n  }\n  document.documentElement.style.setProperty(\"--free-gift-progress-bar-width\", free_gift_percentage + \"%\");\n}\n\nfunction geoLocationStoreCheck() {\n  var geoLocationCountryStoreGroups = [\n    {\n      countryCodes: [\"CA\"],\n      storeName: \"Canada\",\n      forceRedirect: false,\n      redirectUrl: \"https://www.shenyuncollections.ca\",\n    },\n    {\n      countryCodes: [\n        \"AT\",\n        \"BE\",\n        \"BG\",\n        \"CY\",\n        \"CZ\",\n        \"DE\",\n        \"DK\",\n        \"EE\",\n        \"ES\",\n        \"FI\",\n        \"FR\",\n        \"GR\",\n        \"HR\",\n        \"HU\",\n        \"IE\",\n        \"IT\",\n        \"LT\",\n        \"LU\",\n        \"LV\",\n        \"MT\",\n        \"NL\",\n        \"PL\",\n        \"PT\",\n        \"RO\",\n        \"SE\",\n        \"SI\",\n        \"SK\",\n      ],\n      storeName: \"Europe\",\n      forceRedirect: false,\n      redirectUrl: \"https://www.shenyuncollections.de\",\n    },\n    {\n      countryCodes: [\n        \"IN\",\n        // \"CN\",\n        \"ID\",\n        \"PK\",\n        \"BD\",\n        \"JP\",\n        \"PH\",\n        \"VN\",\n        \"TH\",\n        \"MM\",\n        \"KR\",\n        \"MY\",\n        \"NP\",\n        \"AU\",\n        // \"KP\",\n        \"LK\",\n        \"KH\",\n        \"PG\",\n        \"LA\",\n        \"SG\",\n        \"NZ\",\n        \"MN\",\n        \"TL\",\n        \"FJ\",\n        \"SB\",\n        \"MV\",\n        \"BN\",\n        \"NC\",\n        \"KI\",\n        \"FM\",\n        \"TO\",\n        \"MH\",\n        \"PW\",\n        \"CK\",\n        \"TV\",\n        \"NU\"\n      ],\n      storeName: \"Taiwan\",\n      forceRedirect: false,\n      redirectUrl: \"https://www.shenyuncollections.tw\",\n    },\n  ];\n  if (sessionStorage.getItem(\"geo-popup\") !== \"true\") {\n    var apiUrl = \"https://\".concat(window.theme.syshopApiBase, \"/ip\");\n    var geoSelect = document.querySelector(\".GeoLocation__CountryList select\");\n    var AnouBar = document.querySelector(\".AnnouncementBar\");\n    var geoPopup = document.querySelector(\".GeoLocationPopup\");\n    if (!geoSelect || !geoPopup) return;\n    fetch(apiUrl)\n      .then(function (res) {\n        return res.json();\n      })\n      .then(function (response) {\n        var detectedStoreName = void 0;\n        var isForceRedirect = false;\n        var redirectUrl = void 0\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (\n            var _iterator = geoLocationCountryStoreGroups[Symbol.iterator](), _step;\n            !(_iteratorNormalCompletion = (_step = _iterator.next()).done);\n            _iteratorNormalCompletion = true\n          ) {\n            var countryStoreGroup = _step.value;\n\n            if (countryStoreGroup.countryCodes.includes(response.country_code)) {\n              detectedStoreName = countryStoreGroup.storeName;\n              isForceRedirect = countryStoreGroup.forceRedirect;\n              redirectUrl = countryStoreGroup.redirectUrl;\n              break;\n            }\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n\n        if ((detectedStoreName && isForceRedirect == false ) || \n          (detectedStoreName && isForceRedirect == true && sessionStorage.getItem(\"force-redirected\") === \"true\")) {\n          // AnouBar.style.display = \"none\";\n          geoSelect.value = detectedStoreName;\n          var changeEvent = new Event(\"change\");\n          geoSelect.dispatchEvent(changeEvent);\n          geoPopup.setAttribute(\"aria-hidden\", \"false\");\n        } else if (detectedStoreName && isForceRedirect == true && sessionStorage.getItem(\"force-redirected\") !== \"true\") {\n          // force redirect only once if user hasn't been redirected in the same session\n          sessionStorage.setItem(\"force-redirected\", \"true\");\n          window.location.href = redirectUrl;\n        }\n      })\n      [\"catch\"](function (error) {\n        //handle error\n        console.error(\"Error:\", error);\n      });\n  }\n\n  geoSelect.addEventListener(\"change\", function (e) {\n    var optionSelected = geoSelect.options[geoSelect.selectedIndex];\n    document\n      .querySelector(\".GeoLocation__CountryButton a\")\n      .setAttribute(\"href\", optionSelected.getAttribute(\"data-target\"));\n  });\n\n  document.querySelector(\".GeoLocationPopup__Close\").onclick = function () {\n    // AnouBar.style.display = \"\";\n    geoPopup.setAttribute(\"aria-hidden\", \"true\");\n    sessionStorage.setItem(\"geo-popup\", \"true\");\n  };\n}\n\nfunction productStickyCTAObserver() {\n  var elementIntersectMap = {};\n  var productGallaryElem = document.querySelector(\".Product__Gallery\");\n  var productMetaElem = document.querySelector(\".ProductMeta\");\n  var productFormElem = document.querySelector(\".ProductForm__BuyButtons\");\n\n  if (productGallaryElem && productMetaElem && productFormElem) {\n    elementIntersectMap[productGallaryElem.className] = false;\n    elementIntersectMap[productMetaElem.className] = false;\n    elementIntersectMap[productFormElem.className] = false;\n\n    var stickyProductObserver = new IntersectionObserver(function (entries) {\n      entries.forEach(function (entry) {\n        elementIntersectMap[entry.target.className] = entry.isIntersecting;\n      });\n\n      var HeaderF = document.querySelector(\".Header__FlexProductBox\");\n      if (\n        Object.values(elementIntersectMap).reduce(function (accumulator, currentValue) {\n          return accumulator || currentValue;\n        })\n      ) {\n        HeaderF.style.opacity = \"0\";\n        HeaderF.style.zIndex = \"-5\";\n      } else {\n        HeaderF.style.zIndex = \"4\";\n        HeaderF.style.opacity = \"1\";\n      }\n    });\n    stickyProductObserver.observe(productGallaryElem);\n    stickyProductObserver.observe(productMetaElem);\n    stickyProductObserver.observe(productFormElem);\n  }\n}\n\nfunction signupFormObserver() {\n  // Observer for Omnisend's form container\n  // Select the nodetree that will be observed for mutations\n  var nodetree = document.getElementsByTagName(\"body\")[0];\n  // Select the target node atributes (CSS selector)\n  var targetNode = \".soundest-form-without-image-overlay\";\n  // Options for the observer (which mutations to observe)\n  var config = { attributes: false, childList: true, subtree: true };\n  // Callback function to execute when mutations of DOM tree are observed\n  var callback = function callback(mutations_on_DOMtree) {\n    var _iteratorNormalCompletion2 = true;\n    var _didIteratorError2 = false;\n    var _iteratorError2 = undefined;\n\n    try {\n      for (\n        var _iterator2 = mutations_on_DOMtree[Symbol.iterator](), _step2;\n        !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done);\n        _iteratorNormalCompletion2 = true\n      ) {\n        var mutation = _step2.value;\n\n        if (mutation.type == \"childList\") {\n          if (document.querySelector(targetNode) != null) {\n            // register a click handlder for the overlay\n            document.querySelector(targetNode).addEventListener(\"click\", function () {\n              console.log(\"clicked callback\");\n              document.querySelector(\"a.soundest-form-without-image-close\").click();\n            });\n            //after action is done, disconnect the observer from the nodetree\n            observerOfSignupForm.disconnect();\n          }\n        }\n      }\n    } catch (err) {\n      _didIteratorError2 = true;\n      _iteratorError2 = err;\n    } finally {\n      try {\n        if (!_iteratorNormalCompletion2 && _iterator2.return) {\n          _iterator2.return();\n        }\n      } finally {\n        if (_didIteratorError2) {\n          throw _iteratorError2;\n        }\n      }\n    }\n  };\n  // Create an observer instance linked to the callback function\n  var observerOfSignupForm = new MutationObserver(callback);\n  // Start observing the target node for configured mutations\n  observerOfSignupForm.observe(nodetree, config);\n}\n\nfunction initRewardsData() {\n  let customer_data = document.querySelector(\"#rewards-init\");\n  if (customer_data && customer_data.dataset && customer_data.dataset.customerId) {\n    let retry = 0;\n    const params = new URLSearchParams(window.location.search);\n    const currentPage = window.location.pathname;\n    const previousPage = document.referrer;\n    if (params && params.get(\"initial-login\") && params.get(\"initial-login\")=='true') {\n      retry = 3;\n    } else if (currentPage && currentPage == '/account' && previousPage && previousPage.includes('/challenge')) {\n      retry = 3;\n    }\n    fetchRewardData(customer_data.dataset.customerId, retry);\n  }\n}\n\nfunction fetchRewardData(id, retries) {\n  const apiUrl = \"https://\".concat(window.theme.skycmsApiBase, \"/reward/api/get-rewards\");\n  fetch(apiUrl + \"?id=\" + id)\n    .then(function (res) {\n      return res.json();\n    })\n    .then(function (reward) {\n      rewardData = reward;\n      \n      if (reward && reward.status == 1) {\n        //continue\n      } else if (reward && reward.status == 0 && retries > 0) {\n        return setTimeout(function () {\n          console.log(\"[loyalty] retry\");\n          fetchRewardData(id, retries-1);\n        }, 1000);\n      } else {\n        let rewardSummaryBkgdMobile = document.querySelector(\".syshop-reward-summary-bkgd-mobile\");\n        if (rewardSummaryBkgdMobile) {\n          rewardSummaryBkgdMobile.classList.remove('block');\n          rewardSummaryBkgdMobile.classList.add('hidden');\n        }\n        return;\n      }\n\n      console.log(\"[loyalty] loaded\");\n\n      let summaryNode = document.querySelector(\"#syshop-reward-summary\");\n      if (summaryNode) summaryNode.classList.remove(\"hidden\");\n\n      var current_points = reward.points.points;\n      if (document.getElementById(\"stamped-rewards-points-placeholder\")) document.getElementById(\"stamped-rewards-points-placeholder\").innerHTML = current_points;\n      if (document.querySelector(\".rewards-points-container\")) document.querySelector(\".rewards-points-container\").classList.remove(\"hidden\");\n\n      var html = '<div class=\"font-sans rounded-md text-black cursor-pointer\" style=\"background-color: #FFD3C1; min-width: 70px;\">';\n      html += '<span class=\"text-center text-xs\">' + current_points + ' pts</span></div>';\n      var account_node = document.querySelector(\"#loyalty-points\");\n      account_node.innerHTML = html;\n\n      if (document.querySelector(\"#syshop-current-tier-skeleton\")) {\n        document.querySelector(\"#syshop-current-tier-skeleton\").classList.add(\"hidden\");\n        html = '<h3 class=\"font-serif text-md font-semibold mt-1\" style=\"color: #675745;\">';\n        html += '<span id=\"vip-tier\" class=\"\">' + reward.customer.vipTierTitle + ' Member</span></h3>';\n        var tiername_node = document.createElement(\"div\");\n        tiername_node.innerHTML = html;\n        document.querySelector(\"#syshop-current-tier-skeleton\").append(tiername_node);\n        document.querySelector(\"#syshop-current-tier-skeleton + h3 #vip-tier\").innerHTML = reward.customer.vipTierTitle + \" Member\";\n        document.querySelector(\"#syshop-current-tier-skeleton + h3 #vip-tier\").classList.remove(\"hidden\");  \n      }\n\n      // update reward info\n      const rewardElement = document.getElementById('syshop-reward');\n      if (!rewardElement) {\n        return;\n      }\n      const currentPointsNode = document.querySelector('#syshop-reward #current-points');\n      const requirePointsNode = document.querySelector('#syshop-reward #require-points');\n      const nextTierNode = document.querySelector('#syshop-reward #next-tier');\n      const skeleton = document.getElementById('syshop-reward-skeleton');\n      // const skeletonMemberDiscount = document.getElementById('syshop-member-discount-skeleton');\n      const skeletonCurrentTier = document.getElementById('syshop-current-tier-skeleton');\n      // const memberDiscountNode = document.getElementById('member-discount');\n      const vipTierNode = document.getElementById('vip-tier');\n      const vipAnnouncementMobileNode = document.getElementById('vip-announcement-mobile');\n      const vipAnnouncementDesktopNode = document.getElementById('vip-announcement-desktop');\n      const rewardsActivitiesNode = document.getElementById('stamped-rewards-widget');\n      currentPointsNode.innerText = current_points;\n\n      // static texts based on locale\n      let congratsTitle = \"Congratulations!\";\n      let congratsSubtitle = \"You are in our highest VIP tier\";\n      let member = \"member\";\n      if (window.theme.shop_locale.toLowerCase() == 'zh-tw') {\n        congratsTitle = \"\u606D\u559C\";\n        congratsSubtitle = \"\u60A8\u5DF2\u9054\u5230\u6700\u9AD8\u7684\u6703\u54E1\u7D1A\u5225\";\n        member = \"\u6703\u54E1\";\n      }\n\n      // calcualte the required points to the next tier\n      const currentTier = reward.customer.vipTierTitle;\n      const eligiblePoints = reward.customer.vipTierEligibleValue;\n      const { nextTierTitle, requiredPoint } = calculateRequiredPoints(reward.customer.vipTierId, eligiblePoints, reward.vip_tiers);\n      if (requiredPoint === 0) {\n        requirePointsNode.innerText = `${congratsTitle}`;\n        nextTierNode.innerText = `${congratsSubtitle}`;\n      } else {\n        requirePointsNode.innerText = requirePointsNode.innerText.replace(\"0\", requiredPoint.toString());\n        nextTierNode.innerText = `${nextTierTitle} ${member}`;\n      }\n\n      let currentTierStr = translateTierTitle(currentTier);\n      vipTierNode.innerText = vipTierNode.innerText.replace(\"tier\", currentTierStr.toString());\n      if(currentTier) {\n        vipAnnouncementMobileNode.style.display = \"block\";\n        vipAnnouncementDesktopNode.style.display = \"block\";\n      }\n\n      var memberDiscount = 0;\n      switch(currentTier) {\n        case \"Bronze\": {\n            memberDiscount = 10;\n            break;\n        }\n        case \"Silver\": {\n            memberDiscount = 15;\n            break;\n        }\n        case \"Gold\": {\n            memberDiscount = 20;\n            break;\n        }\n        case \"Platinum\": {\n            memberDiscount = 25;\n            break;\n        }\n        default: {\n            memberDiscount = 10;\n            break;\n        }\n      }\n      // memberDiscountNode.innerText = memberDiscountNode.innerText.replace(\"0\", memberDiscount.toString()).replace(\"tier\", currentTierStr.toString());\n\n      skeleton.classList.add('hidden');\n      // skeletonMemberDiscount.classList.add('hidden');\n      skeletonCurrentTier.classList.add('hidden');\n      rewardElement.classList.remove('hidden');\n      // memberDiscountNode.classList.remove('hidden');\n      vipTierNode.classList.remove('hidden');\n  \n      if (rewardsActivitiesNode) {\n        var activitiesHtml = '<h3 class=\"stamped-rewards-widget-heading-main\">Reward Activities</h3>';\n        activitiesHtml += '<div class=\"table-wrapper\" style=\"overflow-x:auto;\"><table><tbody><tr class=\"activity-headers\"><td><div class=\"activity-description\">Activity</div></td><td><div class=\"activity-description\">Date</div></td></tr>';\n        var activityList = reward.activityList;\n        if (activityList != null) {\n          for (var i = 0; i < activityList.length; i++) {\n            var activity = activityList[i];\n            var name = \"\";\n            if (activity.voided > 0) {\n              name += \"(Void) \";\n            }\n            if (activity.ruleId) {                  \n              name += reward.earnRuleMap[activity.ruleId];\n            } else if (activity.benefitId) {\n              name += reward.benefitMap[activity.benefitId];\n            }\n            if (activity.voided > 0) {\n              name += '<br>Void reason: ' + reward.voidReasonMap[activity.voided];\n            }\n            var points = \"\";\n            if (activity.ruleId) {\n              points += \"+ \";\n            } else if (activity.benefitId) {\n              points += \"- \";\n            }\n            points += activity.pointsAmt;\n            activitiesHtml += '<tr><td><div class=\"activity-description\">' + name + '<div class=\"activity-points\">' + points + ' Points</div></div></td>';\n            activitiesHtml += '<td><div class=\"activity-description\">' + activity.timeCreatedDisplay + '</div></td></tr>';\n          }\n        }\n        activitiesHtml += '</tbody></table></div>';\n        rewardsActivitiesNode.innerHTML = activitiesHtml;\n        rewardsActivitiesNode.classList.remove('hidden');\n      }\n    })\n    [\"catch\"](function (error) {\n      console.error(\"Error:\", error);\n  });\n}\n\nfunction calculateRequiredPoints(currentTier, eligiblePoints, vipTiers) {\n  let nextTierTitle = \"\";\n  let nextTierGoalValue = 0;\n  for (let i = 0; i < vipTiers.length; i++) {\n    if (vipTiers[i].Id === currentTier) {\n      // found the current Tier define,\n      if (i == vipTiers.length - 1) {\n        // hightest tier\n        nextTierTitle = translateTierTitle(vipTiers[i].Title);\n        nextTierGoalValue = 0;\n      } else {\n        nextTierTitle = translateTierTitle(vipTiers[i + 1].Title);\n        nextTierGoalValue = vipTiers[i + 1].GoalValue;\n      }\n    }\n  }\n\n  if (nextTierGoalValue === 0) {\n    // highest level\n    return { nextTierTitle, requiredPoint: 0 }\n  }\n\n  return { nextTierTitle, requiredPoint: nextTierGoalValue - eligiblePoints }\n}\n\nfunction translateTierTitle(tier) {\n  if (window.theme.shop_locale.toLowerCase() == 'zh-tw') {\n    switch(tier) {\n      case \"Silver\": {\n        return \"\u9280\";\n      }\n      case \"Gold\": {\n        return \"\u91D1\";\n      }\n      case \"Platinum\": {\n        return \"\u767D\u91D1\";\n      }\n      default: {\n        return \"\u9285\";\n      }\n    }\n  } else {\n    return tier;\n  }\n}\n\n/*\n * Extend the jQuery serializeArray function to return a JSON format\n */\nfunction serializeFormJSON(form) {\n  var o = {};\n  var ar = serializeArray(form);\n  ar.forEach(function (a) {\n    if (o[a.name]) {\n      if (!o[a.name].push) {\n        o[a.name] = [o[a.name]];\n      }\n\n      o[a.name].push(a.value || \"\");\n    } else {\n      o[a.name] = a.value || \"\";\n    }\n  });\n  return o;\n}\n\n// custom serializeArray()\nfunction serializeArray(form) {\n  var arr = [];\n  Array.prototype.slice.call(form.elements).forEach(function (field) {\n    if (!field.name || field.disabled || [\"file\", \"reset\", \"submit\", \"button\"].indexOf(field.type) > -1) return;\n\n    if (field.type === \"select-multiple\") {\n      Array.prototype.slice.call(field.options).forEach(function (option) {\n        if (!option.selected) return;\n        arr.push({\n          name: field.name,\n          value: option.value,\n        });\n      });\n      return;\n    }\n\n    if ([\"checkbox\", \"radio\"].indexOf(field.type) > -1 && !field.checked) return;\n    arr.push({\n      name: field.name,\n      value: field.value,\n    });\n  });\n  return arr;\n}\n\n/*\n * VIP Rewards Redeem points customization code\n */\nfunction _skyVipDiscountInitialize() {\n  // check if customer is logged in first\n  var customer_data = document.querySelector(\"#rewards-init\");\n  if (!customer_data) return;\n  // check if customer is loyalty member\n  if (rewardData && rewardData.customer) {\n    // display redeem points link in cart page\n    var loyaltyNode = document.getElementById(\"loyalty-node\");\n    var redeemComp = document.getElementById(\"loyalty-redeem-component\");\n    if (loyaltyNode && redeemComp && redeemComp.classList.contains(\"hidden\")) {\n      loyaltyNode.classList.remove(\"hidden\");\n    }\n  }\n}\n\nfunction showLoyaltyValue(sliderValue) {\n  var redeemPreviewNode = document.getElementById(\"redeem-value-preview\");\n  var dollar = sliderValue / 50;\n  redeemPreviewNode.innerText = sliderValue + \" points = $\" + dollar;\n}\n\n/**\n * deprecated, replaced with refreshing cart\n */\n/*\nfunction _resetLoyaltyElements() {\n  var node = void 0;\n  node = document.getElementById(\"loyalty-coupon-selector\");\n  if (node && node.classList.contains(\"hidden\")) {\n    node.classList.remove(\"hidden\");\n  }\n\n  node = document.getElementById(\"loyalty-redeem-component\");\n  if (node && !node.classList.contains(\"hidden\")) {\n    node.classList.add(\"hidden\");\n  }\n\n  node = document.getElementById(\"loyalty-redeem-point-disclaimer\");\n  if (node && !node.classList.contains(\"hidden\")) {\n    node.classList.add(\"hidden\");\n  }\n\n  node = document.getElementById(\"loyalty-redeem-point-error\");\n  if (node && !node.classList.contains(\"hidden\")) {\n    node.classList.add(\"hidden\");\n  }\n}\n*/\n\nfunction redeemLoyaltyPoints(event) {\n  // pevent form submit\n  event.preventDefault();\n\n  var buttonNode = document.querySelector(\"#loyalty-redeem-component #redeem-button\");\n  var loadingSVG = buttonNode.querySelector(\"svg\");\n  var buttonText = buttonNode.querySelector(\"span\");\n  var discountError = document.querySelector(\"#loyalty-redeem-point-error\");\n  discountError && discountError.classList.add(\"hidden\");\n\n  var sliderInputNode = document.querySelector(\"#loyalty-redeem-component input\");\n  var redeemPoints = sliderInputNode.value; // current slider value\n\n  // show loading indicator\n  buttonText.classList.toggle(\"hidden\");\n  loadingSVG.classList.toggle(\"hidden\");\n\n  var customer_data = document.querySelector(\"#rewards-init\");\n  var apiUrl = \"https://\".concat(window.theme.skycmsApiBase, \"/reward/api-redeem/redeem\");\n  return fetch(apiUrl+ \"?points=\" +\n      redeemPoints,\n    {\n      method: \"POST\",\n      body: JSON.stringify({\n        customerId: customer_data.dataset.customerId,\n        customerEmail: customer_data.dataset.customerEmail,\n        customerAuth: rewardData.customer.authToken,\n      }),\n    }\n  )\n    .then(function (res) {\n      return res.json();\n    })\n    .then(function (response) {\n      // restore button state\n      buttonText.classList.toggle(\"hidden\");\n      loadingSVG.classList.toggle(\"hidden\");\n\n      // redeem successfully\n      var couponCode = response.couponCode;\n      applyDiscountInCart(couponCode);\n\n      rewardData.points.points -= redeemPoints;\n\n      // reset the redeem points layout\n      // _resetLoyaltyElements();\n    })\n    [\"catch\"](function (error) {\n      console.error(\"Error:\", error);\n    });\n}\n\nfunction redeemPointsOnClick(cart_total_price) {\n  // hide the selector\n  var selector = document.getElementById(\"loyalty-coupon-selector\");\n  selector.classList.add(\"hidden\");\n  var discountError = document.getElementById(\"loyalty-redeem-point-error\");\n  discountError && discountError.classList.add(\"hidden\");\n\n  // setup and show redeem point slider\n  var sliderContainerNode = document.getElementById(\"loyalty-redeem-component\");\n  sliderContainerNode && sliderContainerNode.classList.remove(\"hidden\");\n\n  // get the customer available points\n  var availablePoints = rewardData.points.points;\n  var cartTotalEquivalentPoints = cart_total_price / 100 * 50;\n  var maxRedeemablePoints = Math.min(availablePoints, cartTotalEquivalentPoints);\n\n  // get max redeemable points\n  var max = maxRedeemablePoints - (maxRedeemablePoints % 50);\n  if (sliderContainerNode) {\n    var sliderInputNode = sliderContainerNode.querySelector(\"input\");\n    sliderInputNode.max = max;\n    sliderInputNode.value = max;\n  }\n\n  // update redeem preview label\n  var dollar = max / 50;\n  var redeemPreviewNode = document.getElementById(\"redeem-value-preview\");\n  if (redeemPreviewNode) {\n    redeemPreviewNode.innerText = max + \" points = $\" + dollar;\n  }\n\n  // error handling, when point is not available\n  if (max == 0) {\n    // disable redeem button\n    var buttonNode = document.querySelector(\"#loyalty-redeem-component #redeem-button\");\n    buttonNode.setAttribute(\"disabled\", true);\n    buttonNode.classList.add(\"Button--secondary\");\n  }\n\n  // unhide elements\n  var disclaimer = document.getElementById(\"loyalty-redeem-point-disclaimer\");\n  disclaimer && disclaimer.classList.remove(\"hidden\");\n}\n\n/*\n*  Special customization for free gift (DEPRECATED)\n*  Rules: Order value needs to be over a certain amount to eligible for the free gift item.\n*         If overall cart value is lower then the defined minimum, remove the gift automatically.\n*  id: variant id\n*/ \n/*\nfunction freeGiftCampaign(cart) {\n\n  if (window.theme.enableAutoFreeGift && Number(window.theme.freeGiftThreshold) > 0 && window.theme.freeGiftId) {\n    var FREE_GIFT_OFFER_VALUE = Number(window.theme.freeGiftThreshold);\n    var FREE_GIFT = {id: Number(window.theme.freeGiftId)};\n    var { items, total_price } = cart;\n    if (!items || !cart) return;\n    var total = total_price / 100;\n\n    // limit the eligible products to certain group(s)\n    var eligible_total = 0;\n    for (let i = 0; i < items.length; i++) {\n      var line_item = items[i];\n      if (items[i].vendor && items[i].vendor.toLowerCase().includes(\"shen yun collections\")) {\n        eligible_total += line_item.final_line_price;\n      }\n    }\n    total = eligible_total / 100;\n\n    if (total >= FREE_GIFT_OFFER_VALUE && !ifCartHasItem(items, FREE_GIFT.id)) {\n      // add free gift\n      addToCart({\n        items: [\n          {\n            id: FREE_GIFT.id,\n            quantity: 1\n          }\n        ]\n      })\n      .then(() => {\n        // trigger the cart refresh\n        refreshCartHandler();\n      })\n      .catch((error) => {\n        console.log(error)\n      })\n    } else if (total < FREE_GIFT_OFFER_VALUE && ifCartHasItem(items, FREE_GIFT.id)) {\n      // remove free gift from cart\n      changeCart({\n        id: String(FREE_GIFT.id),\n        quantity: 0\n      })\n      .then(() => {\n        // trigger the cart refresh\n        refreshCartHandler();\n      })\n      .catch((error) => {\n        console.log(error)\n      })\n    }\n  }\n  return;\n}\n*/\n\n/*\n*  Special customization for loyalty free gift (DEPRECATED)\n*  Rules: remove free gift if order total is below or at threshold\n*  id: variant id\n*/ \n/*\nfunction freeGiftLoyalty(cart) {\n  if (window.theme.enableLoyaltyFreeGift && Number(window.theme.loyaltyFreeGiftThreshold) >= 0 && window.theme.loyaltyFreeGiftId) {\n    var { items, total_price } = cart;\n    var total = total_price / 100;\n    if (total <= Number(window.theme.loyaltyFreeGiftThreshold) && ifCartHasItem(items, Number(window.theme.loyaltyFreeGiftId))) {\n      // remove free gift from cart\n      changeCart({\n        id: String(window.theme.loyaltyFreeGiftId),\n        quantity: 0\n      })\n      .then(() => {\n        // trigger the cart refresh\n        refreshCartHandler();\n      })\n      .catch((error) => {\n        console.log(error)\n      })\n    }\n  }\n  return;\n}\n*/\n\nfunction freeGiftHandler(cart) {\n  var { items, total_price } = cart;\n  if (!items || !cart) return;\n  var total = total_price / 100;\n\n  var itemsToAdd = [];\n  var itemsToRemove = {};\n\n  if (window.theme.enableAutoFreeGift && Number(window.theme.freeGiftThreshold) > 0 && window.theme.freeGiftId) {\n    var FREE_GIFT_OFFER_VALUE = Number(window.theme.freeGiftThreshold);\n    var FREE_GIFT_ID = Number(window.theme.freeGiftId);\n    if (total >= FREE_GIFT_OFFER_VALUE && !ifCartHasItem(items, FREE_GIFT_ID)) {\n      itemsToAdd.push({\n        id: FREE_GIFT_ID,\n        quantity: 1\n      });\n    } else if (total < FREE_GIFT_OFFER_VALUE && ifCartHasItem(items, FREE_GIFT_ID)) {\n      itemsToRemove[`${FREE_GIFT_ID}`] = 0;\n    }\n  }\n\n  if (window.theme.enableLoyaltyFreeGift && Number(window.theme.loyaltyFreeGiftThreshold) >= 0 && window.theme.loyaltyFreeGiftId) {\n    if (total <= Number(window.theme.loyaltyFreeGiftThreshold) && ifCartHasItem(items, Number(window.theme.loyaltyFreeGiftId))) {\n      itemsToRemove[`${Number(window.theme.loyaltyFreeGiftId)}`] = 0;\n    }\n  }\n\n  //TO DO: Bug: need to remove old free gift from cart if no active campaign\n\n  if (itemsToAdd && itemsToAdd.length) {\n    addToCart({\n      items: itemsToAdd\n    }, refreshCartHandler);\n  }\n\n  if (!isObjEmpty(itemsToRemove)) {\n    updateCart(itemsToRemove);\n  }\n}\n\nfunction isObjEmpty (obj) {\n  return Object.keys(obj).length === 0;\n}\n\n/*\n*  Special customization for loyalty free holiday gift\n*  Rules: limit 1 per customer\n*/ \nfunction freeHolidayGiftLoyalty(cart) {\n  var { items } = cart;\n  if (!items || !cart) return;\n  var giftCount = 0;\n  var giftUpdates = {};\n  for (let i = 0; i < items.length; i++) {\n    if (items[i].vendor && items[i].vendor.toLowerCase().includes(\"holiday gift for loyalty members\")) {\n      giftCount += 1;\n      if (giftCount == 1) {\n        giftUpdates[`${items[i].id}`] = 1\n      } else {\n        giftUpdates[`${items[i].id}`] = 0\n      }\n    }\n  }\n  if (giftCount > 0) updateCart(giftUpdates);\n}\n\nfunction applyDiscountInCart(discountCode) {\n  const existingDiscounts = getExistingDiscounts();\n  if (existingDiscounts.includes(discountCode)) return;\n\n  fetch(\"/cart/update.js\", {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n    },\n    body: JSON.stringify(\n      { \n        discount: [...existingDiscounts, discountCode].join(','),\n        // sections: [\"mini-cart\"]\n      }\n    ),\n  })\n  .then(res => res.json())\n  .then((data) => {\n    if (\n      data.discount_codes.find((/** @type {{ code: string; applicable: boolean; }} */ discount) => {\n        return discount.code === discountCode && discount.applicable === false;\n      })\n    ) {\n      handleDiscountErrorInCart();\n      return;\n    }\n    // trigger the cart refresh\n    refreshCartHandler();\n  })\n  .catch(err => console.log(err));\n}\n\n/**\n * Returns an array of existing discount codes.\n * @returns {string[]}\n */\nfunction getExistingDiscounts() {\n  const discountCodes = [];\n  const discountPills = document.querySelectorAll('.Cart__Discount');\n  for (const pill of discountPills) {\n    if (pill instanceof HTMLElement && typeof pill.dataset.discountCode === 'string') {\n      discountCodes.push(pill.dataset.discountCode);\n    }\n  }\n  return discountCodes;\n}\n\nfunction handleDiscountErrorInCart() {\n  var discountError = document.getElementById(\"loyalty-redeem-point-error\");\n  discountError && discountError.classList.remove(\"hidden\");\n}\n\n// change cart item quantity\nfunction changeCart(itemInfo) {\n  return fetch(\"/cart/change.js\", {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n    },\n    body: JSON.stringify(itemInfo),\n  });\n}\n\n// update cart item quantity\nfunction updateCart(updates) {\n  fetch(\"/cart/update.js\", {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n    },\n    body: JSON.stringify({ updates }),\n  }).then(() => {\n    // trigger the cart refresh\n    refreshCartHandler();\n  })\n  .catch((error) => {\n    console.log(error)\n  });\n}\n\n// add item to cart\nfunction addToCart(data, success_cb, error_cb) {\n  let dataJson = {\n    items: data.items,\n  };\n\n  document.dispatchEvent(new CustomEvent(\"theme:loading:start\", { bubbles: true }));\n\n  return fetch(\"/cart/add.js\", {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n    },\n    body: JSON.stringify(dataJson),\n  })\n    .then(function (response) {\n      if (response.ok) {\n        success_cb && success_cb();\n        document.dispatchEvent(new CustomEvent(\"theme:loading:end\", { bubbles: true }));\n        document.documentElement.dispatchEvent(\n          new CustomEvent(\"product:added\", {\n            bubbles: true,\n            detail: {\n              variant: response.variant_id,\n              quantity: response.quantity,\n            },\n          })\n        );\n      } else {\n        console.error(\"Error:\", response.status);\n      }\n    })\n    [\"catch\"](function (error) {\n      error_cb && error_cb();\n      console.error(\"Error:\", error);\n    });\n}\n\nfunction ifCartHasItem(items, id) {\n  for (var i = 0; i < items.length; i++) {\n    if (items[i].id === id) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction refreshCartHandler() {\n  setTimeout(function () {\n    if (window.location.pathname.includes(\"/cart\")) {\n      window.location.reload();\n    } else {\n      document.documentElement.dispatchEvent(\n        new CustomEvent(\"cart:refresh\", {\n          bubbles: true,\n        })\n      );\n    }\n  }, 500);\n}\n\n//\nfunction initThemeEventListeners() {\n  document.addEventListener(\"product:updated\", function (event) {\n    var cart = event.detail.cart;\n    // update shippingCartIndicator\n    // updateCartIndicator(cart);\n    freeGiftHandler(cart);\n    // freeGiftCampaign(cart); //deprecated\n    // freeGiftLoyalty(cart); //deprecated\n    // freeHolidayGiftLoyalty(cart);\n  });\n\n  document.addEventListener(\"product:added\", function (event) {\n    // convert $.getJSON() to fetch()\n    fetch(\"/cart.js\")\n      .then(function (res) {\n        return res.json();\n      })\n      .then(function (cart) {\n        // update shippingCartIndicator\n        // updateCartIndicator(cart);\n        freeGiftHandler(cart);\n        // freeGiftCampaign(cart); //deprecated\n        // freeHolidayGiftLoyalty(cart);\n      })\n      [\"catch\"](function (error) {\n        //handle error\n        console.error(\"Error:\", error);\n      });\n  });\n\n  document.addEventListener(\"theme:loading:end\", function (event) {\n    // show product label after theme loaded\n    showProductItemLabel();\n  });\n\n  document.addEventListener('discount_kit:cart_changed', () => {\n    // Update/re-render your theme's ajax cart here\n    refreshCartHandler();\n  });\n}\n\n// Create userAgentIsReady events\nfunction userAgentIsReady() {\n  document.dispatchEvent(\n    new CustomEvent(\"userAgentIsReady\", {\n      detail: {\n        isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\n      },\n    })\n  );\n}\n\n// Handling Choose variations on Cross-sell ProductItem\nfunction changeSelectCrossellVariant() {\n  document.addEventListener(\"change\", function (event) {\n    // listen to the change event of the document, if not the change even of the Select input elements named 'cr-listen' of CrosssellProductItem, return\n    if (event.target.name != \"cr-listen\") return;\n    // convert the target Select element's id string into an array to get the variant type, variant id, product id\n    var splitIdTarget = event.target.id.split(\"-\");\n    // assign variables to check if CrosssellProductItem has 2nd variant type and Select element of 2nd variant type\n    var moreTypeSelect = splitIdTarget[1] == \"colors\" ? \"sizes\" : \"colors\";\n    var moreTypeSelectE = document.getElementById(\n      \"cr-\" + moreTypeSelect + \"-\" + splitIdTarget[2] + \"-\" + splitIdTarget[3]\n    );\n    // compare in turn over options containing the values of the variants of the Select element which stores the values of all product variants\n    document.getElementById(\"cr-variants-value-\" + splitIdTarget[2]).options.forEach(function (option) {\n      // convert the string of option value storing variant title into an array to get the values of the variant type to compare\n      var splitVariantTitle = option.getAttribute(\"value\").split(\"/\");\n      if (moreTypeSelectE == null) {\n        // the case that the 2nd Select element does not exist\n        // if the first child value of the splitVariantTitle array is equal to the value of the Select element target or in the case where the value type of the Select element target is 'sizes' and the 2nd child value is equal to the value of the Select element target (in case of variable there can be one hidden color value and multiple size values)\n        if (\n          splitVariantTitle[0].trim() == event.target.value ||\n          (splitIdTarget[1] == \"sizes\" && splitVariantTitle[1].trim() == event.target.value)\n        ) {\n          handleCrossellSelectChange(splitIdTarget, moreTypeSelect, moreTypeSelectE, option, event); // handleCrossellSelectChange function is called\n        }\n      } else {\n        // case exists 2nd Select element\n        if (splitIdTarget[1] == \"colors\") {\n          // case the value type of Select element target is 'colors'\n          if (\n            splitVariantTitle[0].trim() == moreTypeSelectE.value &&\n            splitVariantTitle[1].trim() == event.target.value\n          ) {\n            handleCrossellSelectChange(splitIdTarget, moreTypeSelect, moreTypeSelectE, option, event);\n          }\n        } else {\n          // case the value type of Select element target is 'sizes'\n          if (\n            splitVariantTitle[0].trim() == event.target.value &&\n            splitVariantTitle[1].trim() == moreTypeSelectE.value\n          ) {\n            handleCrossellSelectChange(splitIdTarget, moreTypeSelect, moreTypeSelectE, option, event);\n          }\n        }\n      }\n    });\n  });\n\n  function handleCrossellSelectChange(splitIdTarget, moreType, moreTypeE, op, e) {\n    // function that handles when the value of Select element target is changed\n    // get a Select element whose value is set to display consistent with the variant title of CrosssellProductItem displayed\n    var setsE1 = document.getElementById(\n      \"cr-\" + splitIdTarget[1] + \"-\" + splitIdTarget[2] + \"-\" + op.getAttribute(\"variant-id\")\n    );\n    var hideE = document.getElementById(\"cr-variant-id-\" + splitIdTarget[3]); // CrosssellProductItem hide\n    var showE = document.getElementById(\"cr-variant-id-\" + op.getAttribute(\"variant-id\")); // CrosssellProductItem show\n    // hide CrosssellProductItem containing target Select element\n    hideE.classList.remove(\"flex\");\n    hideE.classList.add(\"hidden\");\n    // show CrosssellProductItem is called corresponding to the value of Select element target has changed\n    showE.classList.remove(\"hidden\");\n    showE.classList.add(\"flex\");\n\n    // display the value of the Select element consistent with the variant title of that CrosssellProductItem when it is displayed\n    setsE1.options.forEach(function (op2) {\n      op2.removeAttribute(\"selected\");\n    });\n\n    setsE1.options.forEach(function (op2) {\n      if (op2.getAttribute(\"value\") == e.target.value) {\n        op2.setAttribute(\"selected\", \"true\");\n      }\n    });\n\n    if (moreTypeE != null) {\n      // case exists 2nd Select element\n      // get a Select element whose value is set to display consistent with the variant title of CrosssellProductItem displayed\n      var setsE2 = document.getElementById(\n        \"cr-\" + moreType + \"-\" + splitIdTarget[2] + \"-\" + op.getAttribute(\"variant-id\")\n      );\n\n      // display the value of the Select element consistent with the variant title of that CrosssellProductItem when it is displayed\n      setsE2.options.forEach(function (op3) {\n        op3.removeAttribute(\"selected\");\n      });\n\n      setsE2.options.forEach(function (op3) {\n        if (op3.getAttribute(\"value\") == moreTypeE.value) {\n          op3.setAttribute(\"selected\", \"true\");\n        }\n      });\n    }\n  }\n}\n\nfunction handleBundleColorSwatchClick(event) {\n  if (event.target.classList.contains(\"ColorSwatch__Radio\")) {\n    var productBundleItem = event.target.closest(\".product-bundle-item\");\n    var selectedValue = productBundleItem.querySelector(\".ProductForm__SelectedValue\");\n    var currentVariant = productBundleItem.querySelector(\".bundle-variants\");\n    var imageWrapperElements = productBundleItem.querySelectorAll(\".image-item\");\n\n    currentVariant.value = event.target.getAttribute(\"variant-id\");\n\n    [].forEach.call(imageWrapperElements, function (image) {\n      if (image.getAttribute(\"data-image-id\") === event.target.getAttribute(\"data-image-id\")) {\n        image.classList.add(\"flex\");\n        image.classList.remove(\"hidden\");\n      } else {\n        image.classList.add(\"hidden\");\n        image.classList.remove(\"flex\");\n      }\n    });\n    selectedValue.innerHTML = event.target.value;\n  }\n}\n\nfunction handleBundleSizeSwatchClick(event) {\n  if (event.target.classList.contains(\"SizeSwatch__Radio\")) {\n    var productBundleItem = event.target.closest(\".product-bundle-item\");\n    var selectedValue = productBundleItem.querySelector(\".ProductForm__SelectedValue\");\n    var currentVariant = productBundleItem.querySelector(\".bundle-variants\");\n    var productBundleOptionElement = event.target.closest(\".product-bundle-option\");\n    var bundleTabContentElement = event.target.closest(\".bundle-tab-content\");\n    var bundlePriceElement = bundleTabContentElement.querySelector(\".bundle-price\");\n    var bundleListItemElement = event.target.closest(\".bundle-list-item\");\n    var sizeSwatchRadioList = bundleListItemElement.querySelectorAll(\".SizeSwatch__Radio\");\n\n    productBundleOptionElement.querySelectorAll(\".SizeSwatch__Radio\").forEach(function (item) {\n      item.removeAttribute(\"checked\");\n    });\n\n    currentVariant.value = event.target.getAttribute(\"variant-id\");\n    selectedValue.innerHTML = event.target.value;\n    event.target.setAttribute(\"checked\", \"checked\");\n    var finalPrice = 0;\n    sizeSwatchRadioList.forEach(function (item) {\n      if (item.getAttribute(\"checked\")) {\n        finalPrice += parseInt(item.getAttribute(\"variant-price\"));\n      }\n    });\n    bundlePriceElement.innerText = formatMoney(finalPrice, window.theme.moneyFormat);\n  }\n}\n\nfunction showModalGift(event, gift_product_handle, giftVariantId, bundleSku) {\n  var productBundleItem = event.target.closest(\".bundle-tab-content\");\n  var bundleVariantElements = productBundleItem.querySelectorAll(\".bundle-variants\");\n  var giftTitleElement = document.querySelector(\".gift-title\");\n  var giftImageElement = document.querySelector(\".gift-image\");\n  var giftVariantElement = document.querySelector(\".gift-variant\");\n  var bundleProductIdsElement = document.querySelector(\".bundle-product-ids\");\n  var bundleSkuElement = document.querySelector(\".bundle-sku\");\n  var giftInfoSkeletonElement = document.querySelector(\".gift-info-skeleton\");\n  var giftWrapperElement = document.querySelector(\".gift-wrapper\");\n  var productFormOptionElements = document\n    .querySelector(\".gift-info\")\n    .querySelectorAll(\".ProductForm__Option--labelled\");\n\n  giftInfoSkeletonElement.style.display = \"block\";\n  giftWrapperElement.style.display = \"none\";\n  var items = [];\n  [].forEach.call(bundleVariantElements, function (variant) {\n    if (variant.value) {\n      if (!gift_product_handle) {\n        items.push({\n          quantity: 1,\n          id: variant.value,\n          properties: {\n            _Bundle: bundleSku,\n          },\n        });\n      } else {\n        items.push(variant.value);\n      }\n    }\n  });\n\n  if (gift_product_handle) {\n    giftTitleElement.innerText = \"\";\n    giftVariantElement.innerText = \"\";\n    bundleProductIdsElement.innerText = \"\";\n    bundleSkuElement.innerText = \"\";\n    giftImageElement.innerText = \"\";\n\n    productFormOptionElements.forEach(function (optionItemElement) {\n      if (optionItemElement) {\n        optionItemElement.remove();\n      }\n    });\n\n    fetch(\"\".concat(window.routes.rootUrlWithoutSlash, \"/products/\").concat(gift_product_handle, \".js\"), {\n      credentials: \"same-origin\",\n      method: \"GET\",\n    }).then(function (response) {\n      response.json().then(function (content) {\n        var product = content;\n        var selectedOrFirstAvailableVariant = false;\n        var variants = product.variants;\n        if (giftTitleElement) {\n          giftTitleElement.innerText = content.title;\n        }\n\n        if (giftImageElement) {\n          variants.forEach(function (variant, index) {\n            if (variant.featured_image) {\n              var giftImageItemElement = document.createElement(\"img\");\n              if (variant.available && !selectedOrFirstAvailableVariant) {\n                selectedOrFirstAvailableVariant = true;\n                giftImageItemElement.className = \"gift-image-item flex\";\n              } else {\n                giftImageItemElement.className = \"gift-image-item hidden\";\n              }\n              var image_variant_url = variant.featured_image.src;\n              giftImageItemElement.setAttribute(\"src\", image_variant_url);\n              giftImageItemElement.setAttribute(\"data-image-id\", variant.featured_image.id);\n              giftImageElement.appendChild(giftImageItemElement);\n            } else {\n              var giftImageItemElement = document.createElement(\"img\");\n              var image_variant_url = content.featured_image;\n              giftImageItemElement.setAttribute(\"src\", image_variant_url);\n              if (!selectedOrFirstAvailableVariant) {\n                selectedOrFirstAvailableVariant = true;\n                giftImageItemElement.className = \"gift-image-item flex\";\n              } else {\n                giftImageItemElement.className = \"gift-image-item hidden\";\n              }\n              giftImageElement.appendChild(giftImageItemElement);\n            }\n          });\n        }\n\n        if (giftVariantElement && content.available) {\n          giftVariantElement.value = giftVariantId;\n        }\n\n        if (bundleProductIdsElement && items.length > 0) {\n          bundleProductIdsElement.value = items.join();\n        }\n\n        if (bundleSkuElement && bundleSku) {\n          bundleSkuElement.value = bundleSku;\n        }\n\n        fetchProductOption(product);\n\n        giftInfoSkeletonElement.style.display = \"none\";\n        giftWrapperElement.style.display = \"block\";\n      });\n    });\n  } else {\n    if (items.length > 0) {\n      addToCart({\n        items: items,\n      });\n    }\n  }\n}\n\nfunction fetchProductOption(product) {\n  var variants = product.variants;\n  if (variants.length > 1) {\n    var selectedVariantOptions = variants[0].options;\n    var variantOption = document.querySelector(\".gift-wrapper .ProductForm__Variants\");\n    var productOptions = product.options;\n\n    if (productOptions.length > 0) {\n      productOptions.forEach(function (optionItem, i) {\n        if (optionItem.name && optionItem.name.toLowerCase() === \"quality\") {\n          return true;\n        } else if (optionItem.name && optionItem.name.toLowerCase() === \"color\") {\n          variantOption.appendChild(createColorSwatch(product, optionItem, i, selectedVariantOptions));\n        } else {\n          variantOption.appendChild(createSizeSwatch(product, optionItem, i, selectedVariantOptions));\n        }\n      });\n    }\n  }\n}\n\nfunction handleGiftOptionChanged(event) {\n  if (event.target.classList.contains(\"SizeSwatch__Radio\")) {\n    var giftVariantElement = document.getElementById(\"gift-variant\");\n    giftVariantElement.value = event.target.getAttribute(\"variant-id\");\n  }\n}\n\nfunction handleGiftColorOptionChanged(event) {\n  if (event.target.classList.contains(\"ColorSwatch__Radio\")) {\n    var giftVariantElement = document.getElementById(\"gift-variant\");\n    giftVariantElement.value = event.target.getAttribute(\"variant-id\");\n    var giftWrapperItem = event.target.closest(\".gift-wrapper\");\n    var imageWrapperElements = giftWrapperItem.querySelectorAll(\".gift-image-item\");\n\n    [].forEach.call(imageWrapperElements, function (image) {\n      if (image.getAttribute(\"data-image-id\") === event.target.getAttribute(\"data-image-id\")) {\n        image.classList.add(\"flex\");\n        image.classList.remove(\"hidden\");\n      } else {\n        image.classList.add(\"hidden\");\n        image.classList.remove(\"flex\");\n      }\n    });\n  }\n}\n\nfunction createColorSwatch(product, optionItem, optionIndex, selectedVariantOptions) {\n  var position = optionIndex + 1;\n  var modalProductGift = document.getElementById(\"modal-product-gift\");\n  var giftSettings = JSON.parse(modalProductGift.getAttribute(\"data-section-settings\"));\n  var variant_option = \"option\" + (optionIndex + 1);\n\n  var imagePathStr = document.querySelector(\".gift-images-path\").getAttribute(\"data-images-path\");\n  imagePathStr = imagePathStr.substr(0, imagePathStr.lastIndexOf(\"/\") + 1);\n  var colorSwatchConfig = giftSettings[\"colorSwatchConfig\"];\n  var colorSwatchUl = document.createElement(\"ul\");\n  colorSwatchUl.setAttribute(\"class\", \"ColorSwatchList HorizontalList HorizontalList--spacingExtraTight\");\n  var optionItemValues = optionItem.values;\n\n  if (optionItemValues.length > 1) {\n    optionItemValues.forEach(function (optionValue, i) {\n      var whiteColorStyle = optionValue.toLowerCase() === \"white\" ? \"ColorSwatch--white\" : \"\";\n      var colorValue = optionValue.replace(/\\s/g, \"\").toLowerCase();\n      var backgroundColorName = \"\";\n      var backgroundImageStyle = \"\";\n      colorSwatchConfig.forEach(function (colorItem) {\n        var colorSwatchParts = colorItem.split(\":\");\n        var colorSwatchName = colorSwatchParts[0].replace(/\\s/g, \"\").toLowerCase();\n        var colorSwatchValue = colorSwatchParts[1];\n\n        if (colorSwatchName == colorValue) {\n          if (colorSwatchValue.includes(\"#\")) {\n            backgroundColorName = colorSwatchValue.substring(0, colorSwatchValue.length - 1);\n          } else {\n            backgroundImageStyle =\n              \"url(\" + imagePathStr + colorSwatchValue.replace(/\\s/g, \"\").toLowerCase().split(\".\")[0] + \"_64x64.png)\";\n          }\n        }\n      });\n      var variant_for_value = null;\n      product.variants.forEach(function (variant, index) {\n        if (variant[variant_option] == optionValue) {\n          variant_for_value = variant;\n        }\n      });\n      var isChecked = \"\";\n\n      if (!selectedVariantOptions) {\n        isChecked = i === 0 ? 'checked=\"checked\"' : \"\";\n      } else if (selectedVariantOptions.includes(optionValue)) {\n        isChecked = 'checked=\"checked\"';\n      }\n\n      var span = document.createElement(\"span\");\n      span.setAttribute(\"class\", \"u-visually-hidden\");\n      span.innerHTML = optionValue;\n      var label = document.createElement(\"label\");\n      label.setAttribute(\"for\", \"option-product-template-\" + optionIndex + \"-\" + i);\n      label.setAttribute(\"class\", \"ColorSwatch ColorSwatch--large \" + whiteColorStyle);\n      label.setAttribute(\"data-tooltip\", optionValue);\n      label.style.backgroundColor = backgroundColorName;\n      label.style.backgroundImage = backgroundImageStyle;\n      label.appendChild(span);\n      var input = document.createElement(\"input\");\n      input.setAttribute(\"id\", \"option-product-template-\" + optionIndex + \"-\" + i);\n      input.setAttribute(\"class\", \"ColorSwatch__Radio\");\n      input.type = \"radio\";\n      input.name = \"option-\" + optionIndex;\n      input.value = optionValue;\n      if (variant_for_value) {\n        input.setAttribute(\"variant-id\", variant_for_value.id);\n        input.setAttribute(\"data-image-id\", variant_for_value.featured_image.id);\n        input.setAttribute(\"onclick\", \"handleGiftColorOptionChanged(event)\");\n      }\n\n      if (isChecked) {\n        input.setAttribute(\"checked\", isChecked);\n      }\n\n      input.setAttribute(\"data-option-position\", position);\n      var horizontalListItem = document.createElement(\"li\");\n      horizontalListItem.setAttribute(\"class\", \"HorizontalList__Item\");\n      horizontalListItem.appendChild(input);\n      horizontalListItem.appendChild(label);\n      colorSwatchUl.appendChild(horizontalListItem);\n    });\n  }\n\n  var labelSpan = document.createElement(\"span\");\n  labelSpan.setAttribute(\"class\", \"ProductForm__Label\");\n  labelSpan.innerHTML = optionItem.name + \": \";\n  var optionDiv = document.createElement(\"div\");\n  optionDiv.setAttribute(\"class\", \"ProductForm__Option ProductForm__Option--labelled flex\");\n\n  if (optionItemValues.length > 1) {\n    optionDiv.appendChild(labelSpan);\n    optionDiv.appendChild(colorSwatchUl);\n  }\n\n  return optionDiv;\n}\n\nfunction createSizeSwatch(product, optionItem, optionIndex, selectedVariantOptions) {\n  var position = optionIndex + 1;\n  var sizeSwatchUl = document.createElement(\"ul\");\n  sizeSwatchUl.setAttribute(\"class\", \"SizeSwatchList HorizontalList HorizontalList--spacingTight\");\n  var optionItemValues = optionItem.values;\n  if (optionItemValues.length > 0) {\n    optionItemValues.forEach(function (optionValue, i) {\n      var isChecked = \"\";\n\n      if (!selectedVariantOptions) {\n        isChecked = i === 0 ? 'checked=\"checked\"' : \"\";\n      } else if (selectedVariantOptions.includes(optionValue)) {\n        isChecked = 'checked=\"checked\"';\n      }\n\n      var label = document.createElement(\"label\");\n      label.setAttribute(\"for\", \"option-product-template-\" + optionIndex + \"-\" + i);\n      label.setAttribute(\"class\", \"SizeSwatch\");\n      label.innerHTML = optionValue;\n      var input = document.createElement(\"input\");\n      input.setAttribute(\"id\", \"option-product-template-\" + optionIndex + \"-\" + i);\n      input.setAttribute(\"class\", \"SizeSwatch__Radio\");\n      input.type = \"radio\";\n      input.name = \"option-\" + optionIndex;\n      input.value = optionValue;\n      var currentVariant = getCurrentVariant(product, optionIndex, optionValue);\n      if (currentVariant) {\n        input.setAttribute(\"variant-id\", currentVariant.id);\n        input.setAttribute(\"onclick\", \"handleGiftOptionChanged(event)\");\n      }\n\n      if (isChecked) {\n        input.setAttribute(\"checked\", isChecked);\n      }\n\n      input.setAttribute(\"data-option-position\", position);\n      var horizontalListItem = document.createElement(\"li\");\n      horizontalListItem.setAttribute(\"class\", \"HorizontalList__Item\");\n      horizontalListItem.appendChild(input);\n      horizontalListItem.appendChild(label);\n      sizeSwatchUl.appendChild(horizontalListItem);\n    });\n  }\n\n  var labelSpan = document.createElement(\"span\");\n  labelSpan.setAttribute(\"class\", \"ProductForm__Label\");\n  labelSpan.innerHTML = optionItem.name + \":\";\n  var optionDiv = document.createElement(\"div\");\n  optionDiv.setAttribute(\"class\", \"ProductForm__Option ProductForm__Option--labelled flex\");\n  optionDiv.appendChild(labelSpan);\n  optionDiv.appendChild(sizeSwatchUl);\n  return optionDiv;\n}\n\nfunction getCurrentVariant(product, optionIndex, optionValue) {\n  var found = null;\n  product.variants.forEach(function (variant) {\n    var selectedOptions = variant.options || [];\n    if (selectedOptions.length > 0) {\n      if (selectedOptions[optionIndex] == optionValue) {\n        found = variant;\n      }\n    }\n  });\n  return found || null;\n}\n\nfunction addBundleToCart(event, isFreeGift) {\n  var bundleProductIdsElement = document.querySelector(\".bundle-product-ids\");\n  var giftVariantElement = document.querySelector(\".gift-variant\");\n  var bundleSkuElement = document.querySelector(\".bundle-sku\");\n\n  var variantId = \"\";\n  if (isFreeGift) {\n    var variantId = giftVariantElement.value;\n    var productIds = bundleProductIdsElement.value.concat(\",\", variantId).split(\",\");\n  } else {\n    var productIds = bundleProductIdsElement.value.split(\",\");\n  }\n\n  var items = [];\n  productIds.forEach((id) => {\n    if (id == variantId) {\n      var properties = {\n        _bundle_related: bundleSkuElement.value,\n      };\n    } else {\n      var properties = {\n        _Bundle: bundleSkuElement.value,\n      };\n    }\n    items.push({\n      quantity: 1,\n      id: id,\n      properties: properties,\n    });\n  });\n\n  if (items.length > 0) {\n    addToCart({\n      items: items,\n    });\n    document.getElementById(\"modal-product-gift\").querySelector(\".Modal__Close\").click();\n  }\n}\n\nfunction openBundleTab(event, tabName) {\n  var tabContent = document.getElementsByClassName(\"product-bundle-list\");\n  for (var i = 0; i < tabContent.length; i++) {\n    tabContent[i].style.display = \"none\";\n  }\n  var bundleTabLinks = document.getElementsByClassName(\"bundle-tab-links\");\n  for (var i = 0; i < bundleTabLinks.length; i++) {\n    bundleTabLinks[i].querySelector(\"p\").className = bundleTabLinks[i]\n      .querySelector(\"p\")\n      .className.replace(\" active\", \"\");\n  }\n  if (document.getElementById(tabName)) {\n    document.getElementById(tabName).style.display = \"block\";\n  }\n\n  event.currentTarget.querySelector(\"p\").className += \" active\";\n}\n\nfunction formatMoney(cents, format) {\n  if (typeof cents === \"string\") {\n    cents = cents.replace(\".\", \"\");\n  }\n\n  var placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/,\n    formatString = format || \"${{amount}}\";\n\n  var value = \"\";\n\n  switch (formatString.match(placeholderRegex)[1]) {\n    case \"amount\":\n      value = formatWithDelimiters(cents, 2);\n      break;\n\n    case \"amount_no_decimals\":\n      value = formatWithDelimiters(cents, 0);\n      break;\n\n    case \"amount_with_space_separator\":\n      value = formatWithDelimiters(cents, 2, \" \", \".\");\n      break;\n\n    case \"amount_no_decimals_with_comma_separator\":\n      value = formatWithDelimiters(cents, 0, \",\", \".\");\n      break;\n\n    case \"amount_no_decimals_with_space_separator\":\n      value = formatWithDelimiters(cents, 0, \" \");\n      break;\n\n    case \"amount_with_comma_separator\":\n      value = formatWithDelimiters(cents, 2, \".\", \",\");\n      break;\n  }\n\n  if (formatString.indexOf(\"with_comma_separator\") !== -1) {\n    return formatString.replace(placeholderRegex, value).replace(\",00\", \"\");\n  } else {\n    return formatString.replace(placeholderRegex, value).replace(\".00\", \"\");\n  }\n}\n\nfunction defaultTo(value, defaultValue) {\n  return value == null || value !== value ? defaultValue : value;\n}\n\nfunction formatWithDelimiters(number, precision, thousands, decimal) {\n  precision = defaultTo(precision, 2);\n  thousands = defaultTo(thousands, \",\");\n  decimal = defaultTo(decimal, \".\");\n\n  if (isNaN(number) || number == null) {\n    return 0;\n  }\n\n  number = (number / 100.0).toFixed(precision);\n  var parts = number.split(\".\"),\n    dollarsAmount = parts[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1\" + thousands),\n    centsAmount = parts[1] ? decimal + parts[1] : \"\";\n  return dollarsAmount + centsAmount;\n}\n\n// Handling function when the scroll up and down event hides and shows the Navigation\nfunction scrollUpDown() {\n  var header = document.getElementById('section-header');\n  if(!header.classList.contains('Header--center')) return;\n\n  var doc = document.documentElement,\n      w = window;\n  var curScroll = w.scrollY || doc.scrollTop,\n      prevScroll = w.scrollY || doc.scrollTop;\n  var curDirection = 0,\n      prevDirection = 0,\n      threshold = 40,\n      toggled;\n\n  var navHeaderUl = document.querySelector('.Header__MainNav ul'),\n      hamSidebar = document.getElementById('sidebar-menu-icon-btn');\n\n  var checkScroll = function () {\n    curScroll = w.scrollY || doc.scrollTop;\n    if (Math.abs(curScroll - prevScroll) > threshold) {\n      if(curScroll > prevScroll) {\n        // scrolled down\n        curDirection = 2;\n      } else {\n        // scrolled up\n        curDirection = 1;\n      }\n\n      if(curDirection !== prevDirection) {\n        toggled = toggleHeader();\n      }\n\n      if(toggled) {\n        prevDirection = curDirection;\n      }\n\n      prevScroll = curScroll;\n    }\n  };\n\n  var toggleHeader = function () {\n    toggled = true;\n    if(curDirection === 2) {\n      if (navHeaderUl) navHeaderUl.style.opacity = \"0\";\n      header.classList.add(\"Header--scroll\");\n      document.documentElement.style.setProperty('--header-height', '76px');\n      hamSidebar.classList.remove('hidden-desk');\n    }\n    else if(curDirection === 1) {\n      if (navHeaderUl) navHeaderUl.style.opacity = \"1\";\n      header.classList.remove(\"Header--scroll\");\n      document.documentElement.style.setProperty('--header-height', '115px');\n      hamSidebar.classList.add('hidden-desk');\n    }\n    else {\n      toggled = false;\n    }\n    return toggled;\n  };\n\n  window.addEventListener(\"scroll\", checkScroll);\n}\n\n// Open external links in a new tab\nvar links = document.links;\nfor (let i = 0, linksLength = links.length ; i < linksLength ; i++) {\n  if (links[i].hostname !== window.location.hostname) {\n    links[i].target = '_blank';\n    links[i].rel = 'noreferrer noopener';\n  }\n}\n\n/**\n * Retrieve UTM params from cookie\n * Cookie name is '_shopify_sa_p'\n */\nfunction getCookie(cookieName) {\n  let cookie = {};\n  document.cookie.split(';').forEach(function(el) {\n    let [key,value] = el.split('=');\n    cookie[key.trim()] = value;\n  })\n  return cookie[cookieName];\n}\n\n// Get decoded utm parameter from encoded url string\nfunction getUtmParam(utmString, paramName) {\n  let utmParam = \"\";\n  decodeURIComponent(utmString).split('&').forEach(el => {\n      let [key,value] = el.split('=');\n      if (key == paramName) utmParam = value;\n  })\n  return decodeURI(utmParam);\n}\n\n// Display a campaign msg in cart\nfunction displayUtmCampaignMsg() {\n  const campaignDiscountCode = String(window.theme.targeted_campaign_discount_code);\n  if (window.theme.enable_targeted_campaign_discount && campaignDiscountCode) {\n\n    let campaignMsgElement = document.querySelector(\".click-to-apply-campaign-discount\");\n    const campaignName = String(window.theme.targeted_campaign_content);\n    const campaignMsg = \"Click to apply the TANG15 offer\";\n    \n    if (campaignMsgElement && campaignName && matchUtmParam(\"utm_content\", campaignName) && !isDiscountApplied(campaignDiscountCode)) {\n      //exclusive to the campaign\n      campaignMsgElement.innerText = campaignMsg;\n      campaignMsgElement.classList.remove(\"hidden\");\n    } else if (campaignMsgElement && campaignName == \"\" && !isDiscountApplied(campaignDiscountCode)) {\n      //inclusive\n      campaignMsgElement.innerText = campaignMsg;\n      campaignMsgElement.classList.remove(\"hidden\");\n    }\n  }\n}\n\nfunction applyCampaignDiscount() {\n  const campaignDiscountCode = String(window.theme.targeted_campaign_discount_code);\n  let campaignMsgElement = document.querySelector(\".click-to-apply-campaign-discount\");\n\n  if (!isDiscountApplied(campaignDiscountCode)) {\n    // apply discount code to Stackable App\n    let discountCodeInput = document.querySelector(\".stkbl-text-field\");\n    let applyDiscountBtn = document.querySelector(\".stkbl-input-form button\");\n    if (discountCodeInput && applyDiscountBtn) {\n      discountCodeInput.value = campaignDiscountCode;\n      discountCodeInput.dispatchEvent(new Event(\"input\"));\n      applyDiscountBtn.click();\n      campaignMsgElement && campaignMsgElement.classList.add(\"hidden\");\n    }\n  } else {\n    campaignMsgElement && (campaignMsgElement.innerText = `${campaignDiscountCode} is already applied`);\n  }\n}\n\n//check if a UTM param value is matched in the UTMs from the url query or stored from cookie\nfunction matchUtmParam(paramName, paramValue) {\n  // check the url query string\n  let params = new URLSearchParams(window.location.search);\n  let utm_value = \"\";\n  if (params) utm_value = params.get(paramName);\n\n  if (!utm_value) {\n    // check cookie\n    let cookieValue = getCookie(\"_shopify_sa_p\");\n    if (cookieValue) utm_value = getUtmParam(cookieValue, paramName);\n  }\n\n  if (utm_value && utm_value.toUpperCase() == paramValue.toUpperCase()) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\n//check if a manual discount code has been already applied in the cart\nfunction isDiscountApplied(searchDiscountCode) {\n  let dicountCodesApplied = document.getElementsByClassName(\"stkbl-code-tag-promo-name\");\n  if (dicountCodesApplied) {\n    for (let i = 0; i < dicountCodesApplied.length; i++) {\n      if (dicountCodesApplied[i].textContent.toUpperCase() == searchDiscountCode.toUpperCase()) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\nfunction getTrackingCookie() {\n  var cookies = document.cookie.split(\";\");\n  var skycookieName = \"__sky_id\";\n  var skycookieVal = \"\";\n  for (var i = 0; i < cookies.length; i++) {\n      var cookieName = cookies[i].substring(0, cookies[i].indexOf(\"=\"));\n      cookieName = cookieName.trim();\n      if (cookieName == skycookieName) {\n        skycookieVal = cookies[i].substring(cookies[i].indexOf(\"=\") + 1);;\n        break;\n      }\n  }\n\n  if ( skycookieVal.length == 0 ) {// get email to track parameter\n    var queryString = window.location.search;\n    var emailToTrackParam = \"\";\n    if (queryString) {\n      var urlParams = new URLSearchParams(queryString);\n      emailToTrackParam = urlParams.get(\"_st\");\n    }\n\n    if (emailToTrackParam && emailToTrackParam.length > 0) {\n      var expDate = new Date();\n      expDate.setDate(expDate.getDate() + 2 * 365);\n      document.cookie = skycookieName + \"=\" + (emailToTrackParam + \"; expires=\" + expDate.toUTCString()) + \"; path=/; domain=\" + document.location.host;\n      skycookieVal = emailToTrackParam;\n    }\n  }\n  return skycookieVal;\n}\n\nfunction activeOnSite() {\n  var skycookieVal = getTrackingCookie();\n  if ( skycookieVal && skycookieVal.length > 0 ) {\n    var apiUrl = \"https://\".concat(window.theme.skycmsApiBase, \"/email/api-visit\");\n    fetch(apiUrl,\n      {\n        method: \"POST\",\n        body: JSON.stringify({\n          id: skycookieVal,\n          userAgent: navigator.userAgent,\n          userAgentData: navigator.userAgentData,\n          webdriver: navigator.webdriver, // Indicates whether the user agent is controlled by automation\n          language: navigator.language,\n          cookieEnabled: navigator.cookieEnabled,\n          referrer: document.referrer,\n          page: document.location.href,\n          isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\n        }),\n      }\n    )\n    .then(function (res) {\n      return res.json();\n    })\n    .then(function (response) {\n    })\n    [\"catch\"](function (error) {\n        console.error(\"active on site record error:\", error);\n    });\n  }\n}\n\n// Custom video control\nconst sound = `<svg width=\"36\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 15 11.88\"><path style=\"fill: #FFFFFF; fill-rule: evenodd; fill-opacity: .3;\" d=\"m11,5.96c0,1.09-.45,2.09-1.17,2.83l-.67-.67c.55-.56.89-1.31.89-2.16s-.34-1.61-.89-2.16l.67-.67c.75.75,1.17,1.77,1.17,2.83ZM6.72.22l-3.72,3.72H1c-.55,0-1,.45-1,1v2c0,.55.45,1,1,1h2l3.72,3.72c.47.47,1.28.14,1.28-.53V.75c0-.67-.81-1-1.28-.53Zm5.94.08l-.67.67c1.32,1.32,2.07,3.11,2.06,4.98,0,1.94-.78,3.7-2.06,4.98l.67.67c1.5-1.5,2.34-3.54,2.34-5.66,0-2.22-.89-4.22-2.34-5.66,0,0,0,.02,0,.02Zm-1.41,1.41l-.69.67c.95.95,1.48,2.24,1.48,3.58,0,1.39-.56,2.66-1.48,3.56l.69.67c1.12-1.12,1.75-2.64,1.75-4.23,0-1.65-.67-3.16-1.75-4.25Z\"/></svg>`;\nconst mute = `<svg width=\"36\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 15.53 11.88\"><path style=\"fill: #FFFFFF; fill-rule: evenodd; fill-opacity: .3;\" d=\"m8,.75v10.38c0,.67-.81,1-1.28.53l-3.72-3.72H1c-.55,0-1-.45-1-1v-2c0-.55.45-1,1-1h2L6.72.22c.47-.47,1.28-.14,1.28.53Zm7.53,3.22l-1.06-1.06-1.97,1.97-1.97-1.97-1.06,1.06,1.97,1.97-1.97,1.97,1.06,1.06,1.97-1.97,1.97,1.97,1.06-1.06-1.97-1.97,1.97-1.97Z\"/></svg>`;\n\nfunction toggleSound(soundBtn, videoId) {\n  let soundButton = soundBtn;\n  let video = document.getElementById(videoId);\n  if (video && soundBtn) {\n    video.muted = !video.muted;\n    soundButton.classList.add(\"activated\");\n    soundButton.innerHTML = video.muted ? mute : sound;\n  }\n}\n\nfunction togglePlay(videoId) {\n  let video = document.getElementById(videoId);\n  if (video) {\n    video.paused? video.play() : video.pause();\n  }\n}\n\nfunction customerSignupTagging() {\n  // check the url parameter\n  let params = new URLSearchParams(window.location.search);\n  // check utm in cookie\n  let cookieValue = getCookie(\"_shopify_sa_p\");\n\n  let utm_source = \"\";\n  let utm_campaign = \"\";\n  let tags = \"\";\n\n  if (params) {\n    utm_source = params.get(\"utm_source\");\n    utm_campaign = params.get(\"utm_campaign\");\n  }\n\n  if (!utm_source && cookieValue) {\n    utm_source = getUtmParam(cookieValue, \"utm_source\");\n  }\n  if (!utm_campaign && cookieValue) {\n    utm_campaign = getUtmParam(cookieValue, \"utm_campaign\");\n  }\n\n  utm_source && (tags += \"Signup-\".concat(utm_source));\n  utm_campaign && (tags += \", Signup-campaign-\".concat(utm_campaign));\n  if (tags) {\n    const tagNodeList = document.querySelectorAll(\".signup_customer_tags\");\n    if (tagNodeList) {\n      for (let i = 0; i < tagNodeList.length; i++) {\n        tagNodeList[i].value = tagNodeList[i].value + \", \" + tags;\n      }\n    }\n  }\n}\n\nfunction spinner() {\n  var buttons = document.querySelectorAll('[name=\"checkout_form\"] .Button--spinner');\n  for (var buttonNode of buttons) {\n    buttonNode.addEventListener('click', () => {\n      buttonNode.classList.add('spinningState');\n    });\n  }\n}\n\nconst isValidEmail = (value) => {\n  if (!value) {\n    return false;\n  } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(value)) {\n    return false;\n  } else {\n    return true;\n  }\n}\n\n// Handler for documentReady() called.\nfunction customRun() {\n  var _window$theme = window.theme,\n    syshopGeolocationService = _window$theme.syshopGeolocationService;\n    // omnisendIntegration = _window$theme.omnisendIntegration;\n\n  // skycms loyalty program init\n  initRewardsData();\n  // theme product tag resize observer\n  setupResizeObserverForProductItemLabel();\n  // shop Geolocation server\n  syshopGeolocationService && geoLocationStoreCheck();\n  // sticky CTA on mobile\n  productStickyCTAObserver();\n  // omnisend signup form observer\n  // omnisendIntegration && signupFormObserver();\n  // prepare event listenrs\n  initThemeEventListeners();\n  // Run - Handling Choose variations on Cross-sell ProductItem\n  changeSelectCrossellVariant();\n  // Handling function when the scroll up and down event hides and shows the Navigation\n  scrollUpDown();\n  // create userAgentIsReady events\n  userAgentIsReady();\n\n  activeOnSite();\n  // tagging signups source\n  customerSignupTagging();\n  spinner();\n}\n\nfunction documentReady(callback) {\n  // in case the document is already rendered\n  if (document.readyState != \"loading\") callback();\n  // modern browsers\n  else if (document.addEventListener) document.addEventListener(\"DOMContentLoaded\", callback);\n  // IE <= 8\n  else\n    document.attachEvent(\"onreadystatechange\", function () {\n      if (document.readyState == \"complete\") callback();\n    });\n}\n\n// Run\ndocumentReady(customRun);\n"],
  "mappings": "aAmDA,IAAI,WAAa,CAAC,EAElB,SAAS,qBAAsB,CAG7B,IAAI,YAAc,OAAO,SAAS,OAC9B,UAAY,IAAI,gBAAgB,WAAW,EAC3C,OAAS,UAAU,IAAI,QAAQ,EAE/B,SAAW,YAAY,aAAa,KAAK,EAE7C,IAAI,OAAS,SAAS,eAAe,cAAc,EAC/C,QAAU,OAAO,aAAa,aAAa,IAAM,SACnD,aAAa,KAAK,CAEtB,CAEI,OAAO,aACT,OAAO,aAAa,GAAG,QAAS,mBAAmB,EAEnD,SAAS,iBAAiB,kBAAmB,mBAAmB,EAGlE,SAAS,sBAAuB,CAC9B,IAAI,WAAa,SAAS,iBAAiB,qBAAqB,EAChE,WAAW,QAAQ,SAAU,KAAM,CAC7B,MACF,KAAK,MAAM,YAAY,UAAW,OAAO,CAE7C,CAAC,CACH,CAEA,SAAS,wCAAyC,CAChD,GAAI,OAAO,eAAgB,CACzB,IAAI,eAAiB,IAAI,eAAe,UAAY,CAClD,IAAI,QAAU,SAAS,cAAc,kCAAkC,EACnE,aAAe,QAAU,QAAQ,sBAAsB,EAAI,KAC3D,yBAA2B,SAAS,iBAAiB,qBAAqB,EAC1E,wBAA0B,SAAS,iBAAiB,2BAA2B,EAC/E,kBAAoB,SAAS,cAAc,mBAAmB,EAC9D,SAAW,iEAAiE,KAAK,UAAU,SAAS,EAEpG,cAAgB,aAAa,QAE/B,SAAS,gBAAgB,MAAM,YAAY,uBAAwB,aAAa,MAAQ,IAAI,EAE5F,qBAAqB,EAEjB,SACF,qBAAqB,yBAA0B,wBAAyB,QAAQ,EAE5E,OAAO,YAAc,KACvB,kBAAkB,UAAU,OAAO,OAAO,EAC1C,kBAAkB,UAAU,IAAI,iBAAiB,EACjD,qBAAqB,yBAA0B,wBAAyB,QAAQ,IAEhF,kBAAkB,UAAU,IAAI,OAAO,EACvC,kBAAkB,UAAU,OAAO,iBAAiB,GAI5D,CAAC,EACG,eAAiB,SAAS,cAAc,qBAAqB,EAC7D,SAAS,cAAc,qBAAqB,EAC5C,SAAS,cAAc,yBAAyB,EAChD,gBACF,eAAe,QAAQ,cAAc,CAEzC,MACE,QAAQ,IAAI,gCAAgC,CAEhD,CAEA,SAAS,qBAAqB,yBAA0B,wBAAyB,SAAU,CACzF,yBAAyB,QAAQ,SAAU,QAAS,CAClD,QAAQ,UAAU,IAAI,QAAQ,CAChC,CAAC,EAED,wBAAwB,QAAQ,SAAU,QAAS,CACjD,QAAQ,UAAU,OAAO,QAAQ,EAC5B,UACH,QAAQ,UAAU,IAAI,QAAQ,CAElC,CAAC,CACH,CAEA,SAAS,oBAAoB,KAAM,CACjC,IAAI,0BAA4B,SAAS,SAAS,eAAe,8BAA8B,EAAE,KAAK,EAClG,sBAAwB,SAAS,SAAS,eAAe,0BAA0B,EAAE,KAAK,EAC1F,iBAAmB,KAAK,YAAc,IACtC,oBAAsB,EACtB,2BAA6B,iBAAmB,0BAClD,oBAAsB,IAEtB,oBAAuB,iBAAmB,IAAO,0BAEnD,SAAS,gBAAgB,MAAM,YAAY,gCAAiC,oBAAsB,GAAG,EAErG,IAAI,qBAAuB,EACvB,uBAAyB,iBAAmB,sBAC9C,qBAAuB,IAEvB,qBAAwB,iBAAmB,IAAO,sBAEpD,SAAS,gBAAgB,MAAM,YAAY,iCAAkC,qBAAuB,GAAG,CACzG,CAEA,SAAS,uBAAwB,CAC/B,IAAI,8BAAgC,CAClC,CACE,aAAc,CAAC,IAAI,EACnB,UAAW,SACX,cAAe,GACf,YAAa,mCACf,EACA,CACE,aAAc,CACZ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACF,EACA,UAAW,SACX,cAAe,GACf,YAAa,mCACf,EACA,CACE,aAAc,CACZ,KAEA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KAEA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACF,EACA,UAAW,SACX,cAAe,GACf,YAAa,mCACf,CACF,EACA,GAAI,eAAe,QAAQ,WAAW,IAAM,OAAQ,CAClD,IAAI,OAAS,WAAW,OAAO,OAAO,MAAM,cAAe,KAAK,EAC5D,UAAY,SAAS,cAAc,kCAAkC,EACrE,QAAU,SAAS,cAAc,kBAAkB,EACnD,SAAW,SAAS,cAAc,mBAAmB,EACzD,GAAI,CAAC,WAAa,CAAC,SAAU,OAC7B,MAAM,MAAM,EACT,KAAK,SAAU,IAAK,CACnB,OAAO,IAAI,KAAK,CAClB,CAAC,EACA,KAAK,SAAU,SAAU,CACxB,IAAI,kBAAoB,OACpB,gBAAkB,GAClB,YAAc,OACd,0BAA4B,GAC5B,kBAAoB,GACpB,eAAiB,OAErB,GAAI,CACF,QACM,UAAY,8BAA8B,OAAO,QAAQ,EAAE,EAAG,MAClE,EAAE,2BAA6B,MAAQ,UAAU,KAAK,GAAG,MACzD,0BAA4B,GAC5B,CACA,IAAI,kBAAoB,MAAM,MAE9B,GAAI,kBAAkB,aAAa,SAAS,SAAS,YAAY,EAAG,CAClE,kBAAoB,kBAAkB,UACtC,gBAAkB,kBAAkB,cACpC,YAAc,kBAAkB,YAChC,KACF,CACF,CACF,OAAS,IAAK,CACZ,kBAAoB,GACpB,eAAiB,GACnB,QAAE,CACA,GAAI,CACE,CAAC,2BAA6B,UAAU,QAC1C,UAAU,OAAO,CAErB,QAAE,CACA,GAAI,kBACF,MAAM,cAEV,CACF,CAEA,GAAK,mBAAqB,iBAAmB,IAC1C,mBAAqB,iBAAmB,IAAQ,eAAe,QAAQ,kBAAkB,IAAM,OAAS,CAEzG,UAAU,MAAQ,kBAClB,IAAI,YAAc,IAAI,MAAM,QAAQ,EACpC,UAAU,cAAc,WAAW,EACnC,SAAS,aAAa,cAAe,OAAO,CAC9C,MAAW,mBAAqB,iBAAmB,IAAQ,eAAe,QAAQ,kBAAkB,IAAM,SAExG,eAAe,QAAQ,mBAAoB,MAAM,EACjD,OAAO,SAAS,KAAO,YAE3B,CAAC,EACA,MAAS,SAAU,MAAO,CAEzB,QAAQ,MAAM,SAAU,KAAK,CAC/B,CAAC,CACL,CAEA,UAAU,iBAAiB,SAAU,SAAU,EAAG,CAChD,IAAI,eAAiB,UAAU,QAAQ,UAAU,aAAa,EAC9D,SACG,cAAc,+BAA+B,EAC7C,aAAa,OAAQ,eAAe,aAAa,aAAa,CAAC,CACpE,CAAC,EAED,SAAS,cAAc,0BAA0B,EAAE,QAAU,UAAY,CAEvE,SAAS,aAAa,cAAe,MAAM,EAC3C,eAAe,QAAQ,YAAa,MAAM,CAC5C,CACF,CAEA,SAAS,0BAA2B,CAClC,IAAI,oBAAsB,CAAC,EACvB,mBAAqB,SAAS,cAAc,mBAAmB,EAC/D,gBAAkB,SAAS,cAAc,cAAc,EACvD,gBAAkB,SAAS,cAAc,0BAA0B,EAEvE,GAAI,oBAAsB,iBAAmB,gBAAiB,CAC5D,oBAAoB,mBAAmB,SAAS,EAAI,GACpD,oBAAoB,gBAAgB,SAAS,EAAI,GACjD,oBAAoB,gBAAgB,SAAS,EAAI,GAEjD,IAAI,sBAAwB,IAAI,qBAAqB,SAAU,QAAS,CACtE,QAAQ,QAAQ,SAAU,MAAO,CAC/B,oBAAoB,MAAM,OAAO,SAAS,EAAI,MAAM,cACtD,CAAC,EAED,IAAI,QAAU,SAAS,cAAc,yBAAyB,EAE5D,OAAO,OAAO,mBAAmB,EAAE,OAAO,SAAU,YAAa,aAAc,CAC7E,OAAO,aAAe,YACxB,CAAC,GAED,QAAQ,MAAM,QAAU,IACxB,QAAQ,MAAM,OAAS,OAEvB,QAAQ,MAAM,OAAS,IACvB,QAAQ,MAAM,QAAU,IAE5B,CAAC,EACD,sBAAsB,QAAQ,kBAAkB,EAChD,sBAAsB,QAAQ,eAAe,EAC7C,sBAAsB,QAAQ,eAAe,CAC/C,CACF,CAEA,SAAS,oBAAqB,CAG5B,IAAI,SAAW,SAAS,qBAAqB,MAAM,EAAE,CAAC,EAElD,WAAa,uCAEb,OAAS,CAAE,WAAY,GAAO,UAAW,GAAM,QAAS,EAAK,EAE7D,SAAW,SAAkB,qBAAsB,CACrD,IAAI,2BAA6B,GAC7B,mBAAqB,GACrB,gBAAkB,OAEtB,GAAI,CACF,QACM,WAAa,qBAAqB,OAAO,QAAQ,EAAE,EAAG,OAC1D,EAAE,4BAA8B,OAAS,WAAW,KAAK,GAAG,MAC5D,2BAA6B,GAC7B,CACA,IAAI,SAAW,OAAO,MAElB,SAAS,MAAQ,aACf,SAAS,cAAc,UAAU,GAAK,OAExC,SAAS,cAAc,UAAU,EAAE,iBAAiB,QAAS,UAAY,CACvE,QAAQ,IAAI,kBAAkB,EAC9B,SAAS,cAAc,qCAAqC,EAAE,MAAM,CACtE,CAAC,EAED,qBAAqB,WAAW,EAGtC,CACF,OAAS,IAAK,CACZ,mBAAqB,GACrB,gBAAkB,GACpB,QAAE,CACA,GAAI,CACE,CAAC,4BAA8B,WAAW,QAC5C,WAAW,OAAO,CAEtB,QAAE,CACA,GAAI,mBACF,MAAM,eAEV,CACF,CACF,EAEI,qBAAuB,IAAI,iBAAiB,QAAQ,EAExD,qBAAqB,QAAQ,SAAU,MAAM,CAC/C,CAEA,SAAS,iBAAkB,CACzB,IAAI,cAAgB,SAAS,cAAc,eAAe,EAC1D,GAAI,eAAiB,cAAc,SAAW,cAAc,QAAQ,WAAY,CAC9E,IAAI,MAAQ,EACZ,MAAM,OAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM,EACnD,YAAc,OAAO,SAAS,SAC9B,aAAe,SAAS,UAC1B,QAAU,OAAO,IAAI,eAAe,GAAK,OAAO,IAAI,eAAe,GAAG,QAE/D,aAAe,aAAe,YAAc,cAAgB,aAAa,SAAS,YAAY,KACvG,MAAQ,GAEV,gBAAgB,cAAc,QAAQ,WAAY,KAAK,CACzD,CACF,CAEA,SAAS,gBAAgB,GAAI,QAAS,CACpC,MAAM,OAAS,WAAW,OAAO,OAAO,MAAM,cAAe,yBAAyB,EACtF,MAAM,OAAS,OAAS,EAAE,EACvB,KAAK,SAAU,IAAK,CACnB,OAAO,IAAI,KAAK,CAClB,CAAC,EACA,KAAK,SAAU,OAAQ,CAGtB,GAFA,WAAa,OAET,UAAU,OAAO,QAAU,GAExB,IAAI,QAAU,OAAO,QAAU,GAAK,QAAU,EACnD,OAAO,WAAW,UAAY,CAC5B,QAAQ,IAAI,iBAAiB,EAC7B,gBAAgB,GAAI,QAAQ,CAAC,CAC/B,EAAG,GAAI,EACF,CACL,IAAI,wBAA0B,SAAS,cAAc,oCAAoC,EACrF,0BACF,wBAAwB,UAAU,OAAO,OAAO,EAChD,wBAAwB,UAAU,IAAI,QAAQ,GAEhD,MACF,EAEA,QAAQ,IAAI,kBAAkB,EAE9B,IAAI,YAAc,SAAS,cAAc,wBAAwB,EAC7D,aAAa,YAAY,UAAU,OAAO,QAAQ,EAEtD,IAAI,eAAiB,OAAO,OAAO,OAC/B,SAAS,eAAe,oCAAoC,IAAG,SAAS,eAAe,oCAAoC,EAAE,UAAY,gBACzI,SAAS,cAAc,2BAA2B,GAAG,SAAS,cAAc,2BAA2B,EAAE,UAAU,OAAO,QAAQ,EAEtI,IAAI,KAAO,mHACX,MAAQ,qCAAuC,eAAiB,oBAChE,IAAI,aAAe,SAAS,cAAc,iBAAiB,EAG3D,GAFA,aAAa,UAAY,KAErB,SAAS,cAAc,+BAA+B,EAAG,CAC3D,SAAS,cAAc,+BAA+B,EAAE,UAAU,IAAI,QAAQ,EAC9E,KAAO,6EACP,MAAQ,gCAAkC,OAAO,SAAS,aAAe,sBACzE,IAAI,cAAgB,SAAS,cAAc,KAAK,EAChD,cAAc,UAAY,KAC1B,SAAS,cAAc,+BAA+B,EAAE,OAAO,aAAa,EAC5E,SAAS,cAAc,8CAA8C,EAAE,UAAY,OAAO,SAAS,aAAe,UAClH,SAAS,cAAc,8CAA8C,EAAE,UAAU,OAAO,QAAQ,CAClG,CAGA,MAAM,cAAgB,SAAS,eAAe,eAAe,EAC7D,GAAI,CAAC,cACH,OAEF,MAAM,kBAAoB,SAAS,cAAc,gCAAgC,EAC3E,kBAAoB,SAAS,cAAc,gCAAgC,EAC3E,aAAe,SAAS,cAAc,2BAA2B,EACjE,SAAW,SAAS,eAAe,wBAAwB,EAE3D,oBAAsB,SAAS,eAAe,8BAA8B,EAE5E,YAAc,SAAS,eAAe,UAAU,EAChD,0BAA4B,SAAS,eAAe,yBAAyB,EAC7E,2BAA6B,SAAS,eAAe,0BAA0B,EAC/E,sBAAwB,SAAS,eAAe,wBAAwB,EAC9E,kBAAkB,UAAY,eAG9B,IAAI,cAAgB,mBAChB,iBAAmB,kCACnB,OAAS,SACT,OAAO,MAAM,YAAY,YAAY,GAAK,UAC5C,cAAgB,eAChB,iBAAmB,qEACnB,OAAS,gBAIX,MAAM,YAAc,OAAO,SAAS,aAC9B,eAAiB,OAAO,SAAS,qBACjC,CAAE,cAAe,aAAc,EAAI,wBAAwB,OAAO,SAAS,UAAW,eAAgB,OAAO,SAAS,EACxH,gBAAkB,GACpB,kBAAkB,UAAY,GAAG,aAAa,GAC9C,aAAa,UAAY,GAAG,gBAAgB,KAE5C,kBAAkB,UAAY,kBAAkB,UAAU,QAAQ,IAAK,cAAc,SAAS,CAAC,EAC/F,aAAa,UAAY,GAAG,aAAa,IAAI,MAAM,IAGrD,IAAI,eAAiB,mBAAmB,WAAW,EACnD,YAAY,UAAY,YAAY,UAAU,QAAQ,OAAQ,eAAe,SAAS,CAAC,EACpF,cACD,0BAA0B,MAAM,QAAU,QAC1C,2BAA2B,MAAM,QAAU,SAG7C,IAAI,eAAiB,EACrB,OAAO,YAAa,CAClB,IAAK,SAAU,CACX,eAAiB,GACjB,KACJ,CACA,IAAK,SAAU,CACX,eAAiB,GACjB,KACJ,CACA,IAAK,OAAQ,CACT,eAAiB,GACjB,KACJ,CACA,IAAK,WAAY,CACb,eAAiB,GACjB,KACJ,CACA,QAAS,CACL,eAAiB,GACjB,KACJ,CACF,CAUA,GAPA,SAAS,UAAU,IAAI,QAAQ,EAE/B,oBAAoB,UAAU,IAAI,QAAQ,EAC1C,cAAc,UAAU,OAAO,QAAQ,EAEvC,YAAY,UAAU,OAAO,QAAQ,EAEjC,sBAAuB,CACzB,IAAI,eAAiB,yEACrB,gBAAkB,qNAClB,IAAI,aAAe,OAAO,aAC1B,GAAI,cAAgB,KAClB,QAAS,EAAI,EAAG,EAAI,aAAa,OAAQ,IAAK,CAC5C,IAAI,SAAW,aAAa,CAAC,EACzB,KAAO,GACP,SAAS,OAAS,IACpB,MAAQ,WAEN,SAAS,OACX,MAAQ,OAAO,YAAY,SAAS,MAAM,EACjC,SAAS,YAClB,MAAQ,OAAO,WAAW,SAAS,SAAS,GAE1C,SAAS,OAAS,IACpB,MAAQ,oBAAsB,OAAO,cAAc,SAAS,MAAM,GAEpE,IAAI,OAAS,GACT,SAAS,OACX,QAAU,KACD,SAAS,YAClB,QAAU,MAEZ,QAAU,SAAS,UACnB,gBAAkB,6CAA+C,KAAO,gCAAkC,OAAS,2BACnH,gBAAkB,yCAA2C,SAAS,mBAAqB,kBAC7F,CAEF,gBAAkB,yBAClB,sBAAsB,UAAY,eAClC,sBAAsB,UAAU,OAAO,QAAQ,CACjD,CACF,CAAC,EACA,MAAS,SAAU,MAAO,CACzB,QAAQ,MAAM,SAAU,KAAK,CACjC,CAAC,CACH,CAEA,SAAS,wBAAwB,YAAa,eAAgB,SAAU,CACtE,IAAI,cAAgB,GAChB,kBAAoB,EACxB,QAAS,EAAI,EAAG,EAAI,SAAS,OAAQ,IAC/B,SAAS,CAAC,EAAE,KAAO,cAEjB,GAAK,SAAS,OAAS,GAEzB,cAAgB,mBAAmB,SAAS,CAAC,EAAE,KAAK,EACpD,kBAAoB,IAEpB,cAAgB,mBAAmB,SAAS,EAAI,CAAC,EAAE,KAAK,EACxD,kBAAoB,SAAS,EAAI,CAAC,EAAE,YAK1C,OAAI,oBAAsB,EAEjB,CAAE,cAAe,cAAe,CAAE,EAGpC,CAAE,cAAe,cAAe,kBAAoB,cAAe,CAC5E,CAEA,SAAS,mBAAmB,KAAM,CAChC,GAAI,OAAO,MAAM,YAAY,YAAY,GAAK,QAC5C,OAAO,KAAM,CACX,IAAK,SACH,MAAO,SAET,IAAK,OACH,MAAO,SAET,IAAK,WACH,MAAO,eAET,QACE,MAAO,QAEX,KAEA,QAAO,IAEX,CAKA,SAAS,kBAAkB,KAAM,CAC/B,IAAI,EAAI,CAAC,EACL,GAAK,eAAe,IAAI,EAC5B,UAAG,QAAQ,SAAU,EAAG,CAClB,EAAE,EAAE,IAAI,GACL,EAAE,EAAE,IAAI,EAAE,OACb,EAAE,EAAE,IAAI,EAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAGxB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAS,EAAE,GAE5B,EAAE,EAAE,IAAI,EAAI,EAAE,OAAS,EAE3B,CAAC,EACM,CACT,CAGA,SAAS,eAAe,KAAM,CAC5B,IAAI,IAAM,CAAC,EACX,aAAM,UAAU,MAAM,KAAK,KAAK,QAAQ,EAAE,QAAQ,SAAU,MAAO,CACjE,GAAI,GAAC,MAAM,MAAQ,MAAM,UAAY,CAAC,OAAQ,QAAS,SAAU,QAAQ,EAAE,QAAQ,MAAM,IAAI,EAAI,IAEjG,IAAI,MAAM,OAAS,kBAAmB,CACpC,MAAM,UAAU,MAAM,KAAK,MAAM,OAAO,EAAE,QAAQ,SAAU,OAAQ,CAC7D,OAAO,UACZ,IAAI,KAAK,CACP,KAAM,MAAM,KACZ,MAAO,OAAO,KAChB,CAAC,CACH,CAAC,EACD,MACF,CAEI,CAAC,WAAY,OAAO,EAAE,QAAQ,MAAM,IAAI,EAAI,IAAM,CAAC,MAAM,SAC7D,IAAI,KAAK,CACP,KAAM,MAAM,KACZ,MAAO,MAAM,KACf,CAAC,EACH,CAAC,EACM,GACT,CAKA,SAAS,2BAA4B,CAEnC,IAAI,cAAgB,SAAS,cAAc,eAAe,EAC1D,GAAK,eAED,YAAc,WAAW,SAAU,CAErC,IAAI,YAAc,SAAS,eAAe,cAAc,EACpD,WAAa,SAAS,eAAe,0BAA0B,EAC/D,aAAe,YAAc,WAAW,UAAU,SAAS,QAAQ,GACrE,YAAY,UAAU,OAAO,QAAQ,CAEzC,CACF,CAEA,SAAS,iBAAiB,YAAa,CACrC,IAAI,kBAAoB,SAAS,eAAe,sBAAsB,EAClE,OAAS,YAAc,GAC3B,kBAAkB,UAAY,YAAc,cAAgB,MAC9D,CA8BA,SAAS,oBAAoB,MAAO,CAElC,MAAM,eAAe,EAErB,IAAI,WAAa,SAAS,cAAc,0CAA0C,EAC9E,WAAa,WAAW,cAAc,KAAK,EAC3C,WAAa,WAAW,cAAc,MAAM,EAC5C,cAAgB,SAAS,cAAc,6BAA6B,EACxE,eAAiB,cAAc,UAAU,IAAI,QAAQ,EAErD,IAAI,gBAAkB,SAAS,cAAc,iCAAiC,EAC1E,aAAe,gBAAgB,MAGnC,WAAW,UAAU,OAAO,QAAQ,EACpC,WAAW,UAAU,OAAO,QAAQ,EAEpC,IAAI,cAAgB,SAAS,cAAc,eAAe,EACtD,OAAS,WAAW,OAAO,OAAO,MAAM,cAAe,2BAA2B,EACtF,OAAO,MAAM,OAAQ,WACjB,aACF,CACE,OAAQ,OACR,KAAM,KAAK,UAAU,CACnB,WAAY,cAAc,QAAQ,WAClC,cAAe,cAAc,QAAQ,cACrC,aAAc,WAAW,SAAS,SACpC,CAAC,CACH,CACF,EACG,KAAK,SAAU,IAAK,CACnB,OAAO,IAAI,KAAK,CAClB,CAAC,EACA,KAAK,SAAU,SAAU,CAExB,WAAW,UAAU,OAAO,QAAQ,EACpC,WAAW,UAAU,OAAO,QAAQ,EAGpC,IAAI,WAAa,SAAS,WAC1B,oBAAoB,UAAU,EAE9B,WAAW,OAAO,QAAU,YAI9B,CAAC,EACA,MAAS,SAAU,MAAO,CACzB,QAAQ,MAAM,SAAU,KAAK,CAC/B,CAAC,CACL,CAEA,SAAS,oBAAoB,iBAAkB,CAE7C,IAAI,SAAW,SAAS,eAAe,yBAAyB,EAChE,SAAS,UAAU,IAAI,QAAQ,EAC/B,IAAI,cAAgB,SAAS,eAAe,4BAA4B,EACxE,eAAiB,cAAc,UAAU,IAAI,QAAQ,EAGrD,IAAI,oBAAsB,SAAS,eAAe,0BAA0B,EAC5E,qBAAuB,oBAAoB,UAAU,OAAO,QAAQ,EAGpE,IAAI,gBAAkB,WAAW,OAAO,OACpC,0BAA4B,iBAAmB,IAAM,GACrD,oBAAsB,KAAK,IAAI,gBAAiB,yBAAyB,EAGzE,IAAM,oBAAuB,oBAAsB,GACvD,GAAI,oBAAqB,CACvB,IAAI,gBAAkB,oBAAoB,cAAc,OAAO,EAC/D,gBAAgB,IAAM,IACtB,gBAAgB,MAAQ,GAC1B,CAGA,IAAI,OAAS,IAAM,GACf,kBAAoB,SAAS,eAAe,sBAAsB,EAMtE,GALI,oBACF,kBAAkB,UAAY,IAAM,cAAgB,QAIlD,KAAO,EAAG,CAEZ,IAAI,WAAa,SAAS,cAAc,0CAA0C,EAClF,WAAW,aAAa,WAAY,EAAI,EACxC,WAAW,UAAU,IAAI,mBAAmB,CAC9C,CAGA,IAAI,WAAa,SAAS,eAAe,iCAAiC,EAC1E,YAAc,WAAW,UAAU,OAAO,QAAQ,CACpD,CA6FA,SAAS,gBAAgB,KAAM,CAC7B,GAAI,CAAE,MAAO,WAAY,EAAI,KAC7B,GAAI,GAAC,OAAS,CAAC,MACf,KAAI,MAAQ,YAAc,IAEtB,WAAa,CAAC,EACd,cAAgB,CAAC,EAErB,GAAI,OAAO,MAAM,oBAAsB,OAAO,OAAO,MAAM,iBAAiB,EAAI,GAAK,OAAO,MAAM,WAAY,CAC5G,IAAI,sBAAwB,OAAO,OAAO,MAAM,iBAAiB,EAC7D,aAAe,OAAO,OAAO,MAAM,UAAU,EAC7C,OAAS,uBAAyB,CAAC,cAAc,MAAO,YAAY,EACtE,WAAW,KAAK,CACd,GAAI,aACJ,SAAU,CACZ,CAAC,EACQ,MAAQ,uBAAyB,cAAc,MAAO,YAAY,IAC3E,cAAc,GAAG,YAAY,EAAE,EAAI,EAEvC,CAEI,OAAO,MAAM,uBAAyB,OAAO,OAAO,MAAM,wBAAwB,GAAK,GAAK,OAAO,MAAM,mBACvG,OAAS,OAAO,OAAO,MAAM,wBAAwB,GAAK,cAAc,MAAO,OAAO,OAAO,MAAM,iBAAiB,CAAC,IACvH,cAAc,GAAG,OAAO,OAAO,MAAM,iBAAiB,CAAC,EAAE,EAAI,GAM7D,YAAc,WAAW,QAC3B,UAAU,CACR,MAAO,UACT,EAAG,kBAAkB,EAGlB,WAAW,aAAa,GAC3B,WAAW,aAAa,EAE5B,CAEA,SAAS,WAAY,IAAK,CACxB,OAAO,OAAO,KAAK,GAAG,EAAE,SAAW,CACrC,CAMA,SAAS,uBAAuB,KAAM,CACpC,GAAI,CAAE,KAAM,EAAI,KAChB,GAAI,GAAC,OAAS,CAAC,MACf,KAAI,UAAY,EACZ,YAAc,CAAC,EACnB,QAAS,EAAI,EAAG,EAAI,MAAM,OAAQ,IAC5B,MAAM,CAAC,EAAE,QAAU,MAAM,CAAC,EAAE,OAAO,YAAY,EAAE,SAAS,kCAAkC,IAC9F,WAAa,EACT,WAAa,EACf,YAAY,GAAG,MAAM,CAAC,EAAE,EAAE,EAAE,EAAI,EAEhC,YAAY,GAAG,MAAM,CAAC,EAAE,EAAE,EAAE,EAAI,GAIlC,UAAY,GAAG,WAAW,WAAW,EAC3C,CAEA,SAAS,oBAAoB,aAAc,CACzC,MAAM,kBAAoB,qBAAqB,EAC3C,kBAAkB,SAAS,YAAY,GAE3C,MAAM,kBAAmB,CACvB,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UACT,CACE,SAAU,CAAC,GAAG,kBAAmB,YAAY,EAAE,KAAK,GAAG,CAEzD,CACF,CACF,CAAC,EACA,KAAK,KAAO,IAAI,KAAK,CAAC,EACtB,KAAM,MAAS,CACd,GACE,KAAK,eAAe,KAA4D,UACvE,SAAS,OAAS,cAAgB,SAAS,aAAe,EAClE,EACD,CACA,0BAA0B,EAC1B,MACF,CAEA,mBAAmB,CACrB,CAAC,EACA,MAAM,KAAO,QAAQ,IAAI,GAAG,CAAC,CAChC,CAMA,SAAS,sBAAuB,CAC9B,MAAM,cAAgB,CAAC,EACjB,cAAgB,SAAS,iBAAiB,iBAAiB,EACjE,UAAW,QAAQ,cACb,gBAAgB,aAAe,OAAO,KAAK,QAAQ,cAAiB,UACtE,cAAc,KAAK,KAAK,QAAQ,YAAY,EAGhD,OAAO,aACT,CAEA,SAAS,2BAA4B,CACnC,IAAI,cAAgB,SAAS,eAAe,4BAA4B,EACxE,eAAiB,cAAc,UAAU,OAAO,QAAQ,CAC1D,CAGA,SAAS,WAAW,SAAU,CAC5B,OAAO,MAAM,kBAAmB,CAC9B,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,QAAQ,CAC/B,CAAC,CACH,CAGA,SAAS,WAAW,QAAS,CAC3B,MAAM,kBAAmB,CACvB,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,CAAE,OAAQ,CAAC,CAClC,CAAC,EAAE,KAAK,IAAM,CAEZ,mBAAmB,CACrB,CAAC,EACA,MAAO,OAAU,CAChB,QAAQ,IAAI,KAAK,CACnB,CAAC,CACH,CAGA,SAAS,UAAU,KAAM,WAAY,SAAU,CAC7C,IAAI,SAAW,CACb,MAAO,KAAK,KACd,EAEA,gBAAS,cAAc,IAAI,YAAY,sBAAuB,CAAE,QAAS,EAAK,CAAC,CAAC,EAEzE,MAAM,eAAgB,CAC3B,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,QAAQ,CAC/B,CAAC,EACE,KAAK,SAAU,SAAU,CACpB,SAAS,IACX,YAAc,WAAW,EACzB,SAAS,cAAc,IAAI,YAAY,oBAAqB,CAAE,QAAS,EAAK,CAAC,CAAC,EAC9E,SAAS,gBAAgB,cACvB,IAAI,YAAY,gBAAiB,CAC/B,QAAS,GACT,OAAQ,CACN,QAAS,SAAS,WAClB,SAAU,SAAS,QACrB,CACF,CAAC,CACH,GAEA,QAAQ,MAAM,SAAU,SAAS,MAAM,CAE3C,CAAC,EACA,MAAS,SAAU,MAAO,CACzB,UAAY,SAAS,EACrB,QAAQ,MAAM,SAAU,KAAK,CAC/B,CAAC,CACL,CAEA,SAAS,cAAc,MAAO,GAAI,CAChC,QAAS,EAAI,EAAG,EAAI,MAAM,OAAQ,IAChC,GAAI,MAAM,CAAC,EAAE,KAAO,GAClB,MAAO,GAGX,MAAO,EACT,CAEA,SAAS,oBAAqB,CAC5B,WAAW,UAAY,CACjB,OAAO,SAAS,SAAS,SAAS,OAAO,EAC3C,OAAO,SAAS,OAAO,EAEvB,SAAS,gBAAgB,cACvB,IAAI,YAAY,eAAgB,CAC9B,QAAS,EACX,CAAC,CACH,CAEJ,EAAG,GAAG,CACR,CAGA,SAAS,yBAA0B,CACjC,SAAS,iBAAiB,kBAAmB,SAAU,MAAO,CAC5D,IAAI,KAAO,MAAM,OAAO,KAGxB,gBAAgB,IAAI,CAItB,CAAC,EAED,SAAS,iBAAiB,gBAAiB,SAAU,MAAO,CAE1D,MAAM,UAAU,EACb,KAAK,SAAU,IAAK,CACnB,OAAO,IAAI,KAAK,CAClB,CAAC,EACA,KAAK,SAAU,KAAM,CAGpB,gBAAgB,IAAI,CAGtB,CAAC,EACA,MAAS,SAAU,MAAO,CAEzB,QAAQ,MAAM,SAAU,KAAK,CAC/B,CAAC,CACL,CAAC,EAED,SAAS,iBAAiB,oBAAqB,SAAU,MAAO,CAE9D,qBAAqB,CACvB,CAAC,EAED,SAAS,iBAAiB,4BAA6B,IAAM,CAE3D,mBAAmB,CACrB,CAAC,CACH,CAGA,SAAS,kBAAmB,CAC1B,SAAS,cACP,IAAI,YAAY,mBAAoB,CAClC,OAAQ,CACN,SAAU,iEAAiE,KAAK,UAAU,SAAS,CACrG,CACF,CAAC,CACH,CACF,CAGA,SAAS,6BAA8B,CACrC,SAAS,iBAAiB,SAAU,SAAU,MAAO,CAEnD,GAAI,MAAM,OAAO,MAAQ,YAEzB,KAAI,cAAgB,MAAM,OAAO,GAAG,MAAM,GAAG,EAEzC,eAAiB,cAAc,CAAC,GAAK,SAAW,QAAU,SAC1D,gBAAkB,SAAS,eAC7B,MAAQ,eAAiB,IAAM,cAAc,CAAC,EAAI,IAAM,cAAc,CAAC,CACzE,EAEA,SAAS,eAAe,qBAAuB,cAAc,CAAC,CAAC,EAAE,QAAQ,QAAQ,SAAU,OAAQ,CAEjG,IAAI,kBAAoB,OAAO,aAAa,OAAO,EAAE,MAAM,GAAG,EAC1D,iBAAmB,MAInB,kBAAkB,CAAC,EAAE,KAAK,GAAK,MAAM,OAAO,OAC3C,cAAc,CAAC,GAAK,SAAW,kBAAkB,CAAC,EAAE,KAAK,GAAK,MAAM,OAAO,QAE5E,2BAA2B,cAAe,eAAgB,gBAAiB,OAAQ,KAAK,EAItF,cAAc,CAAC,GAAK,SAGpB,kBAAkB,CAAC,EAAE,KAAK,GAAK,gBAAgB,OAC/C,kBAAkB,CAAC,EAAE,KAAK,GAAK,MAAM,OAAO,OAE5C,2BAA2B,cAAe,eAAgB,gBAAiB,OAAQ,KAAK,EAKxF,kBAAkB,CAAC,EAAE,KAAK,GAAK,MAAM,OAAO,OAC5C,kBAAkB,CAAC,EAAE,KAAK,GAAK,gBAAgB,OAE/C,2BAA2B,cAAe,eAAgB,gBAAiB,OAAQ,KAAK,CAIhG,CAAC,EACH,CAAC,EAED,SAAS,2BAA2B,cAAe,SAAU,UAAW,GAAI,EAAG,CAG7E,IAAI,OAAS,SAAS,eACpB,MAAQ,cAAc,CAAC,EAAI,IAAM,cAAc,CAAC,EAAI,IAAM,GAAG,aAAa,YAAY,CACxF,EACI,MAAQ,SAAS,eAAe,iBAAmB,cAAc,CAAC,CAAC,EACnE,MAAQ,SAAS,eAAe,iBAAmB,GAAG,aAAa,YAAY,CAAC,EAmBpF,GAjBA,MAAM,UAAU,OAAO,MAAM,EAC7B,MAAM,UAAU,IAAI,QAAQ,EAE5B,MAAM,UAAU,OAAO,QAAQ,EAC/B,MAAM,UAAU,IAAI,MAAM,EAG1B,OAAO,QAAQ,QAAQ,SAAU,IAAK,CACpC,IAAI,gBAAgB,UAAU,CAChC,CAAC,EAED,OAAO,QAAQ,QAAQ,SAAU,IAAK,CAChC,IAAI,aAAa,OAAO,GAAK,EAAE,OAAO,OACxC,IAAI,aAAa,WAAY,MAAM,CAEvC,CAAC,EAEG,WAAa,KAAM,CAGrB,IAAI,OAAS,SAAS,eACpB,MAAQ,SAAW,IAAM,cAAc,CAAC,EAAI,IAAM,GAAG,aAAa,YAAY,CAChF,EAGA,OAAO,QAAQ,QAAQ,SAAU,IAAK,CACpC,IAAI,gBAAgB,UAAU,CAChC,CAAC,EAED,OAAO,QAAQ,QAAQ,SAAU,IAAK,CAChC,IAAI,aAAa,OAAO,GAAK,UAAU,OACzC,IAAI,aAAa,WAAY,MAAM,CAEvC,CAAC,CACH,CACF,CACF,CAEA,SAAS,6BAA6B,MAAO,CAC3C,GAAI,MAAM,OAAO,UAAU,SAAS,oBAAoB,EAAG,CACzD,IAAI,kBAAoB,MAAM,OAAO,QAAQ,sBAAsB,EAC/D,cAAgB,kBAAkB,cAAc,6BAA6B,EAC7E,eAAiB,kBAAkB,cAAc,kBAAkB,EACnE,qBAAuB,kBAAkB,iBAAiB,aAAa,EAE3E,eAAe,MAAQ,MAAM,OAAO,aAAa,YAAY,EAE7D,CAAC,EAAE,QAAQ,KAAK,qBAAsB,SAAU,MAAO,CACjD,MAAM,aAAa,eAAe,IAAM,MAAM,OAAO,aAAa,eAAe,GACnF,MAAM,UAAU,IAAI,MAAM,EAC1B,MAAM,UAAU,OAAO,QAAQ,IAE/B,MAAM,UAAU,IAAI,QAAQ,EAC5B,MAAM,UAAU,OAAO,MAAM,EAEjC,CAAC,EACD,cAAc,UAAY,MAAM,OAAO,KACzC,CACF,CAEA,SAAS,4BAA4B,MAAO,CAC1C,GAAI,MAAM,OAAO,UAAU,SAAS,mBAAmB,EAAG,CACxD,IAAI,kBAAoB,MAAM,OAAO,QAAQ,sBAAsB,EAC/D,cAAgB,kBAAkB,cAAc,6BAA6B,EAC7E,eAAiB,kBAAkB,cAAc,kBAAkB,EACnE,2BAA6B,MAAM,OAAO,QAAQ,wBAAwB,EAC1E,wBAA0B,MAAM,OAAO,QAAQ,qBAAqB,EACpE,mBAAqB,wBAAwB,cAAc,eAAe,EAC1E,sBAAwB,MAAM,OAAO,QAAQ,mBAAmB,EAChE,oBAAsB,sBAAsB,iBAAiB,oBAAoB,EAErF,2BAA2B,iBAAiB,oBAAoB,EAAE,QAAQ,SAAU,KAAM,CACxF,KAAK,gBAAgB,SAAS,CAChC,CAAC,EAED,eAAe,MAAQ,MAAM,OAAO,aAAa,YAAY,EAC7D,cAAc,UAAY,MAAM,OAAO,MACvC,MAAM,OAAO,aAAa,UAAW,SAAS,EAC9C,IAAI,WAAa,EACjB,oBAAoB,QAAQ,SAAU,KAAM,CACtC,KAAK,aAAa,SAAS,IAC7B,YAAc,SAAS,KAAK,aAAa,eAAe,CAAC,EAE7D,CAAC,EACD,mBAAmB,UAAY,YAAY,WAAY,OAAO,MAAM,WAAW,CACjF,CACF,CAEA,SAAS,cAAc,MAAO,oBAAqB,cAAe,UAAW,CAC3E,IAAI,kBAAoB,MAAM,OAAO,QAAQ,qBAAqB,EAC9D,sBAAwB,kBAAkB,iBAAiB,kBAAkB,EAC7E,iBAAmB,SAAS,cAAc,aAAa,EACvD,iBAAmB,SAAS,cAAc,aAAa,EACvD,mBAAqB,SAAS,cAAc,eAAe,EAC3D,wBAA0B,SAAS,cAAc,qBAAqB,EACtE,iBAAmB,SAAS,cAAc,aAAa,EACvD,wBAA0B,SAAS,cAAc,qBAAqB,EACtE,mBAAqB,SAAS,cAAc,eAAe,EAC3D,0BAA4B,SAC7B,cAAc,YAAY,EAC1B,iBAAiB,gCAAgC,EAEpD,wBAAwB,MAAM,QAAU,QACxC,mBAAmB,MAAM,QAAU,OACnC,IAAI,MAAQ,CAAC,EACb,CAAC,EAAE,QAAQ,KAAK,sBAAuB,SAAU,QAAS,CACpD,QAAQ,QACL,oBASH,MAAM,KAAK,QAAQ,KAAK,EARxB,MAAM,KAAK,CACT,SAAU,EACV,GAAI,QAAQ,MACZ,WAAY,CACV,QAAS,SACX,CACF,CAAC,EAKP,CAAC,EAEG,qBACF,iBAAiB,UAAY,GAC7B,mBAAmB,UAAY,GAC/B,wBAAwB,UAAY,GACpC,iBAAiB,UAAY,GAC7B,iBAAiB,UAAY,GAE7B,0BAA0B,QAAQ,SAAU,kBAAmB,CACzD,mBACF,kBAAkB,OAAO,CAE7B,CAAC,EAED,MAAM,GAAG,OAAO,OAAO,OAAO,oBAAqB,YAAY,EAAE,OAAO,oBAAqB,KAAK,EAAG,CACnG,YAAa,cACb,OAAQ,KACV,CAAC,EAAE,KAAK,SAAU,SAAU,CAC1B,SAAS,KAAK,EAAE,KAAK,SAAU,QAAS,CACtC,IAAI,QAAU,QACV,gCAAkC,GAClC,SAAW,QAAQ,SACnB,mBACF,iBAAiB,UAAY,QAAQ,OAGnC,kBACF,SAAS,QAAQ,SAAU,QAAS,MAAO,CACzC,GAAI,QAAQ,eAAgB,CAC1B,IAAI,qBAAuB,SAAS,cAAc,KAAK,EACnD,QAAQ,WAAa,CAAC,iCACxB,gCAAkC,GAClC,qBAAqB,UAAY,wBAEjC,qBAAqB,UAAY,yBAEnC,IAAI,kBAAoB,QAAQ,eAAe,IAC/C,qBAAqB,aAAa,MAAO,iBAAiB,EAC1D,qBAAqB,aAAa,gBAAiB,QAAQ,eAAe,EAAE,EAC5E,iBAAiB,YAAY,oBAAoB,CACnD,KAAO,CACL,IAAI,qBAAuB,SAAS,cAAc,KAAK,EACnD,kBAAoB,QAAQ,eAChC,qBAAqB,aAAa,MAAO,iBAAiB,EACrD,gCAIH,qBAAqB,UAAY,0BAHjC,gCAAkC,GAClC,qBAAqB,UAAY,wBAInC,iBAAiB,YAAY,oBAAoB,CACnD,CACF,CAAC,EAGC,oBAAsB,QAAQ,YAChC,mBAAmB,MAAQ,eAGzB,yBAA2B,MAAM,OAAS,IAC5C,wBAAwB,MAAQ,MAAM,KAAK,GAGzC,kBAAoB,YACtB,iBAAiB,MAAQ,WAG3B,mBAAmB,OAAO,EAE1B,wBAAwB,MAAM,QAAU,OACxC,mBAAmB,MAAM,QAAU,OACrC,CAAC,CACH,CAAC,GAEG,MAAM,OAAS,GACjB,UAAU,CACR,KACF,CAAC,CAGP,CAEA,SAAS,mBAAmB,QAAS,CACnC,IAAI,SAAW,QAAQ,SACvB,GAAI,SAAS,OAAS,EAAG,CACvB,IAAI,uBAAyB,SAAS,CAAC,EAAE,QACrC,cAAgB,SAAS,cAAc,sCAAsC,EAC7E,eAAiB,QAAQ,QAEzB,eAAe,OAAS,GAC1B,eAAe,QAAQ,SAAU,WAAY,EAAG,CAC9C,GAAI,WAAW,MAAQ,WAAW,KAAK,YAAY,IAAM,UACvD,MAAO,GACE,WAAW,MAAQ,WAAW,KAAK,YAAY,IAAM,QAC9D,cAAc,YAAY,kBAAkB,QAAS,WAAY,EAAG,sBAAsB,CAAC,EAE3F,cAAc,YAAY,iBAAiB,QAAS,WAAY,EAAG,sBAAsB,CAAC,CAE9F,CAAC,CAEL,CACF,CAEA,SAAS,wBAAwB,MAAO,CACtC,GAAI,MAAM,OAAO,UAAU,SAAS,mBAAmB,EAAG,CACxD,IAAI,mBAAqB,SAAS,eAAe,cAAc,EAC/D,mBAAmB,MAAQ,MAAM,OAAO,aAAa,YAAY,CACnE,CACF,CAEA,SAAS,6BAA6B,MAAO,CAC3C,GAAI,MAAM,OAAO,UAAU,SAAS,oBAAoB,EAAG,CACzD,IAAI,mBAAqB,SAAS,eAAe,cAAc,EAC/D,mBAAmB,MAAQ,MAAM,OAAO,aAAa,YAAY,EACjE,IAAI,gBAAkB,MAAM,OAAO,QAAQ,eAAe,EACtD,qBAAuB,gBAAgB,iBAAiB,kBAAkB,EAE9E,CAAC,EAAE,QAAQ,KAAK,qBAAsB,SAAU,MAAO,CACjD,MAAM,aAAa,eAAe,IAAM,MAAM,OAAO,aAAa,eAAe,GACnF,MAAM,UAAU,IAAI,MAAM,EAC1B,MAAM,UAAU,OAAO,QAAQ,IAE/B,MAAM,UAAU,IAAI,QAAQ,EAC5B,MAAM,UAAU,OAAO,MAAM,EAEjC,CAAC,CACH,CACF,CAEA,SAAS,kBAAkB,QAAS,WAAY,YAAa,uBAAwB,CACnF,IAAI,SAAW,YAAc,EACzB,iBAAmB,SAAS,eAAe,oBAAoB,EAC/D,aAAe,KAAK,MAAM,iBAAiB,aAAa,uBAAuB,CAAC,EAChF,eAAiB,UAAY,YAAc,GAE3C,aAAe,SAAS,cAAc,mBAAmB,EAAE,aAAa,kBAAkB,EAC9F,aAAe,aAAa,OAAO,EAAG,aAAa,YAAY,GAAG,EAAI,CAAC,EACvE,IAAI,kBAAoB,aAAa,kBACjC,cAAgB,SAAS,cAAc,IAAI,EAC/C,cAAc,aAAa,QAAS,kEAAkE,EACtG,IAAI,iBAAmB,WAAW,OAE9B,iBAAiB,OAAS,GAC5B,iBAAiB,QAAQ,SAAU,YAAa,EAAG,CACjD,IAAI,gBAAkB,YAAY,YAAY,IAAM,QAAU,qBAAuB,GACjF,WAAa,YAAY,QAAQ,MAAO,EAAE,EAAE,YAAY,EACxD,oBAAsB,GACtB,qBAAuB,GAC3B,kBAAkB,QAAQ,SAAU,UAAW,CAC7C,IAAI,iBAAmB,UAAU,MAAM,GAAG,EACtC,gBAAkB,iBAAiB,CAAC,EAAE,QAAQ,MAAO,EAAE,EAAE,YAAY,EACrE,iBAAmB,iBAAiB,CAAC,EAErC,iBAAmB,aACjB,iBAAiB,SAAS,GAAG,EAC/B,oBAAsB,iBAAiB,UAAU,EAAG,iBAAiB,OAAS,CAAC,EAE/E,qBACE,OAAS,aAAe,iBAAiB,QAAQ,MAAO,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,EAAI,cAGlG,CAAC,EACD,IAAI,kBAAoB,KACxB,QAAQ,SAAS,QAAQ,SAAU,QAAS,MAAO,CAC7C,QAAQ,cAAc,GAAK,cAC7B,kBAAoB,QAExB,CAAC,EACD,IAAI,UAAY,GAEX,uBAEM,uBAAuB,SAAS,WAAW,IACpD,UAAY,qBAFZ,UAAY,IAAM,EAAI,oBAAsB,GAK9C,IAAI,KAAO,SAAS,cAAc,MAAM,EACxC,KAAK,aAAa,QAAS,mBAAmB,EAC9C,KAAK,UAAY,YACjB,IAAI,MAAQ,SAAS,cAAc,OAAO,EAC1C,MAAM,aAAa,MAAO,2BAA6B,YAAc,IAAM,CAAC,EAC5E,MAAM,aAAa,QAAS,kCAAoC,eAAe,EAC/E,MAAM,aAAa,eAAgB,WAAW,EAC9C,MAAM,MAAM,gBAAkB,oBAC9B,MAAM,MAAM,gBAAkB,qBAC9B,MAAM,YAAY,IAAI,EACtB,IAAI,MAAQ,SAAS,cAAc,OAAO,EAC1C,MAAM,aAAa,KAAM,2BAA6B,YAAc,IAAM,CAAC,EAC3E,MAAM,aAAa,QAAS,oBAAoB,EAChD,MAAM,KAAO,QACb,MAAM,KAAO,UAAY,YACzB,MAAM,MAAQ,YACV,oBACF,MAAM,aAAa,aAAc,kBAAkB,EAAE,EACrD,MAAM,aAAa,gBAAiB,kBAAkB,eAAe,EAAE,EACvE,MAAM,aAAa,UAAW,qCAAqC,GAGjE,WACF,MAAM,aAAa,UAAW,SAAS,EAGzC,MAAM,aAAa,uBAAwB,QAAQ,EACnD,IAAI,mBAAqB,SAAS,cAAc,IAAI,EACpD,mBAAmB,aAAa,QAAS,sBAAsB,EAC/D,mBAAmB,YAAY,KAAK,EACpC,mBAAmB,YAAY,KAAK,EACpC,cAAc,YAAY,kBAAkB,CAC9C,CAAC,EAGH,IAAI,UAAY,SAAS,cAAc,MAAM,EAC7C,UAAU,aAAa,QAAS,oBAAoB,EACpD,UAAU,UAAY,WAAW,KAAO,KACxC,IAAI,UAAY,SAAS,cAAc,KAAK,EAC5C,iBAAU,aAAa,QAAS,wDAAwD,EAEpF,iBAAiB,OAAS,IAC5B,UAAU,YAAY,SAAS,EAC/B,UAAU,YAAY,aAAa,GAG9B,SACT,CAEA,SAAS,iBAAiB,QAAS,WAAY,YAAa,uBAAwB,CAClF,IAAI,SAAW,YAAc,EACzB,aAAe,SAAS,cAAc,IAAI,EAC9C,aAAa,aAAa,QAAS,4DAA4D,EAC/F,IAAI,iBAAmB,WAAW,OAC9B,iBAAiB,OAAS,GAC5B,iBAAiB,QAAQ,SAAU,YAAa,EAAG,CACjD,IAAI,UAAY,GAEX,uBAEM,uBAAuB,SAAS,WAAW,IACpD,UAAY,qBAFZ,UAAY,IAAM,EAAI,oBAAsB,GAK9C,IAAI,MAAQ,SAAS,cAAc,OAAO,EAC1C,MAAM,aAAa,MAAO,2BAA6B,YAAc,IAAM,CAAC,EAC5E,MAAM,aAAa,QAAS,YAAY,EACxC,MAAM,UAAY,YAClB,IAAI,MAAQ,SAAS,cAAc,OAAO,EAC1C,MAAM,aAAa,KAAM,2BAA6B,YAAc,IAAM,CAAC,EAC3E,MAAM,aAAa,QAAS,mBAAmB,EAC/C,MAAM,KAAO,QACb,MAAM,KAAO,UAAY,YACzB,MAAM,MAAQ,YACd,IAAI,eAAiB,kBAAkB,QAAS,YAAa,WAAW,EACpE,iBACF,MAAM,aAAa,aAAc,eAAe,EAAE,EAClD,MAAM,aAAa,UAAW,gCAAgC,GAG5D,WACF,MAAM,aAAa,UAAW,SAAS,EAGzC,MAAM,aAAa,uBAAwB,QAAQ,EACnD,IAAI,mBAAqB,SAAS,cAAc,IAAI,EACpD,mBAAmB,aAAa,QAAS,sBAAsB,EAC/D,mBAAmB,YAAY,KAAK,EACpC,mBAAmB,YAAY,KAAK,EACpC,aAAa,YAAY,kBAAkB,CAC7C,CAAC,EAGH,IAAI,UAAY,SAAS,cAAc,MAAM,EAC7C,UAAU,aAAa,QAAS,oBAAoB,EACpD,UAAU,UAAY,WAAW,KAAO,IACxC,IAAI,UAAY,SAAS,cAAc,KAAK,EAC5C,iBAAU,aAAa,QAAS,wDAAwD,EACxF,UAAU,YAAY,SAAS,EAC/B,UAAU,YAAY,YAAY,EAC3B,SACT,CAEA,SAAS,kBAAkB,QAAS,YAAa,YAAa,CAC5D,IAAI,MAAQ,KACZ,eAAQ,SAAS,QAAQ,SAAU,QAAS,CAC1C,IAAI,gBAAkB,QAAQ,SAAW,CAAC,EACtC,gBAAgB,OAAS,GACvB,gBAAgB,WAAW,GAAK,cAClC,MAAQ,QAGd,CAAC,EACM,OAAS,IAClB,CAEA,SAAS,gBAAgB,MAAO,WAAY,CAC1C,IAAI,wBAA0B,SAAS,cAAc,qBAAqB,EACtE,mBAAqB,SAAS,cAAc,eAAe,EAC3D,iBAAmB,SAAS,cAAc,aAAa,EAEvD,UAAY,GAChB,GAAI,WACF,IAAI,UAAY,mBAAmB,MAC/B,WAAa,wBAAwB,MAAM,OAAO,IAAK,SAAS,EAAE,MAAM,GAAG,MAE/E,KAAI,WAAa,wBAAwB,MAAM,MAAM,GAAG,EAG1D,IAAI,MAAQ,CAAC,EACb,WAAW,QAAS,IAAO,CACzB,GAAI,IAAM,UACR,IAAI,WAAa,CACf,gBAAiB,iBAAiB,KACpC,MAEA,KAAI,WAAa,CACf,QAAS,iBAAiB,KAC5B,EAEF,MAAM,KAAK,CACT,SAAU,EACV,GACA,UACF,CAAC,CACH,CAAC,EAEG,MAAM,OAAS,IACjB,UAAU,CACR,KACF,CAAC,EACD,SAAS,eAAe,oBAAoB,EAAE,cAAc,eAAe,EAAE,MAAM,EAEvF,CAEA,SAAS,cAAc,MAAO,QAAS,CAErC,QADI,WAAa,SAAS,uBAAuB,qBAAqB,EAC7D,EAAI,EAAG,EAAI,WAAW,OAAQ,IACrC,WAAW,CAAC,EAAE,MAAM,QAAU,OAGhC,QADI,eAAiB,SAAS,uBAAuB,kBAAkB,EAC9D,EAAI,EAAG,EAAI,eAAe,OAAQ,IACzC,eAAe,CAAC,EAAE,cAAc,GAAG,EAAE,UAAY,eAAe,CAAC,EAC9D,cAAc,GAAG,EACjB,UAAU,QAAQ,UAAW,EAAE,EAEhC,SAAS,eAAe,OAAO,IACjC,SAAS,eAAe,OAAO,EAAE,MAAM,QAAU,SAGnD,MAAM,cAAc,cAAc,GAAG,EAAE,WAAa,SACtD,CAEA,SAAS,YAAY,MAAO,OAAQ,CAC9B,OAAO,OAAU,WACnB,MAAQ,MAAM,QAAQ,IAAK,EAAE,GAG/B,IAAI,iBAAmB,sBACrB,aAAe,QAAU,cAEvB,MAAQ,GAEZ,OAAQ,aAAa,MAAM,gBAAgB,EAAE,CAAC,EAAG,CAC/C,IAAK,SACH,MAAQ,qBAAqB,MAAO,CAAC,EACrC,MAEF,IAAK,qBACH,MAAQ,qBAAqB,MAAO,CAAC,EACrC,MAEF,IAAK,8BACH,MAAQ,qBAAqB,MAAO,EAAG,IAAK,GAAG,EAC/C,MAEF,IAAK,0CACH,MAAQ,qBAAqB,MAAO,EAAG,IAAK,GAAG,EAC/C,MAEF,IAAK,0CACH,MAAQ,qBAAqB,MAAO,EAAG,GAAG,EAC1C,MAEF,IAAK,8BACH,MAAQ,qBAAqB,MAAO,EAAG,IAAK,GAAG,EAC/C,KACJ,CAEA,OAAI,aAAa,QAAQ,sBAAsB,IAAM,GAC5C,aAAa,QAAQ,iBAAkB,KAAK,EAAE,QAAQ,MAAO,EAAE,EAE/D,aAAa,QAAQ,iBAAkB,KAAK,EAAE,QAAQ,MAAO,EAAE,CAE1E,CAEA,SAAS,UAAU,MAAO,aAAc,CACtC,OAAO,OAAS,MAAQ,QAAU,MAAQ,aAAe,KAC3D,CAEA,SAAS,qBAAqB,OAAQ,UAAW,UAAW,QAAS,CAKnE,GAJA,UAAY,UAAU,UAAW,CAAC,EAClC,UAAY,UAAU,UAAW,GAAG,EACpC,QAAU,UAAU,QAAS,GAAG,EAE5B,MAAM,MAAM,GAAK,QAAU,KAC7B,MAAO,GAGT,QAAU,OAAS,KAAO,QAAQ,SAAS,EAC3C,IAAI,MAAQ,OAAO,MAAM,GAAG,EAC1B,cAAgB,MAAM,CAAC,EAAE,QAAQ,2BAA4B,KAAO,SAAS,EAC7E,YAAc,MAAM,CAAC,EAAI,QAAU,MAAM,CAAC,EAAI,GAChD,OAAO,cAAgB,WACzB,CAGA,SAAS,cAAe,CACtB,IAAI,OAAS,SAAS,eAAe,gBAAgB,EACrD,GAAI,OAAO,UAAU,SAAS,gBAAgB,EAE9C,KAAI,IAAM,SAAS,gBACf,EAAI,OACJ,UAAY,EAAE,SAAW,IAAI,UAC7B,WAAa,EAAE,SAAW,IAAI,UAC9B,aAAe,EACf,cAAgB,EAChB,UAAY,GACZ,QAEA,YAAc,SAAS,cAAc,qBAAqB,EAC1D,WAAa,SAAS,eAAe,uBAAuB,EAE5D,YAAc,UAAY,CAC5B,UAAY,EAAE,SAAW,IAAI,UACzB,KAAK,IAAI,UAAY,UAAU,EAAI,YAClC,UAAY,WAEb,aAAe,EAGf,aAAe,EAGd,eAAiB,gBAClB,QAAU,aAAa,GAGtB,UACD,cAAgB,cAGlB,WAAa,UAEjB,EAEI,aAAe,UAAY,CAC7B,eAAU,GACP,eAAiB,GACd,cAAa,YAAY,MAAM,QAAU,KAC7C,OAAO,UAAU,IAAI,gBAAgB,EACrC,SAAS,gBAAgB,MAAM,YAAY,kBAAmB,MAAM,EACpE,WAAW,UAAU,OAAO,aAAa,GAEnC,eAAiB,GACnB,cAAa,YAAY,MAAM,QAAU,KAC7C,OAAO,UAAU,OAAO,gBAAgB,EACxC,SAAS,gBAAgB,MAAM,YAAY,kBAAmB,OAAO,EACrE,WAAW,UAAU,IAAI,aAAa,GAGtC,QAAU,GAEL,OACT,EAEA,OAAO,iBAAiB,SAAU,WAAW,EAC/C,CAGA,IAAI,MAAQ,SAAS,MACrB,QAAS,EAAI,EAAG,YAAc,MAAM,OAAS,EAAI,YAAc,IACzD,MAAM,CAAC,EAAE,WAAa,OAAO,SAAS,WACxC,MAAM,CAAC,EAAE,OAAS,SAClB,MAAM,CAAC,EAAE,IAAM,uBAQnB,SAAS,UAAU,WAAY,CAC7B,IAAI,OAAS,CAAC,EACd,gBAAS,OAAO,MAAM,GAAG,EAAE,QAAQ,SAAS,GAAI,CAC9C,GAAI,CAAC,IAAI,KAAK,EAAI,GAAG,MAAM,GAAG,EAC9B,OAAO,IAAI,KAAK,CAAC,EAAI,KACvB,CAAC,EACM,OAAO,UAAU,CAC1B,CAGA,SAAS,YAAY,UAAW,UAAW,CACzC,IAAI,SAAW,GACf,0BAAmB,SAAS,EAAE,MAAM,GAAG,EAAE,QAAQ,IAAM,CACnD,GAAI,CAAC,IAAI,KAAK,EAAI,GAAG,MAAM,GAAG,EAC1B,KAAO,YAAW,SAAW,MACrC,CAAC,EACM,UAAU,QAAQ,CAC3B,CAGA,SAAS,uBAAwB,CAC/B,MAAM,qBAAuB,OAAO,OAAO,MAAM,+BAA+B,EAChF,GAAI,OAAO,MAAM,mCAAqC,qBAAsB,CAE1E,IAAI,mBAAqB,SAAS,cAAc,mCAAmC,EACnF,MAAM,aAAe,OAAO,OAAO,MAAM,yBAAyB,EAC5D,YAAc,mCAEhB,oBAAsB,cAAgB,cAAc,cAAe,YAAY,GAAK,CAAC,kBAAkB,oBAAoB,GAIpH,oBAAsB,cAAgB,IAAM,CAAC,kBAAkB,oBAAoB,KAE5F,mBAAmB,UAAY,YAC/B,mBAAmB,UAAU,OAAO,QAAQ,EAEhD,CACF,CAEA,SAAS,uBAAwB,CAC/B,MAAM,qBAAuB,OAAO,OAAO,MAAM,+BAA+B,EAChF,IAAI,mBAAqB,SAAS,cAAc,mCAAmC,EAEnF,GAAK,kBAAkB,oBAAoB,EAWzC,qBAAuB,mBAAmB,UAAY,GAAG,oBAAoB,2BAXjC,CAE5C,IAAI,kBAAoB,SAAS,cAAc,mBAAmB,EAC9D,iBAAmB,SAAS,cAAc,0BAA0B,EACpE,mBAAqB,mBACvB,kBAAkB,MAAQ,qBAC1B,kBAAkB,cAAc,IAAI,MAAM,OAAO,CAAC,EAClD,iBAAiB,MAAM,EACvB,oBAAsB,mBAAmB,UAAU,IAAI,QAAQ,EAEnE,CAGF,CAGA,SAAS,cAAc,UAAW,WAAY,CAE5C,IAAI,OAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM,EACnD,UAAY,GAGhB,GAFI,SAAQ,UAAY,OAAO,IAAI,SAAS,GAExC,CAAC,UAAW,CAEd,IAAI,YAAc,UAAU,eAAe,EACvC,cAAa,UAAY,YAAY,YAAa,SAAS,EACjE,CAEA,MAAI,cAAa,UAAU,YAAY,GAAK,WAAW,YAAY,EAKrE,CAGA,SAAS,kBAAkB,mBAAoB,CAC7C,IAAI,oBAAsB,SAAS,uBAAuB,2BAA2B,EACrF,GAAI,qBACF,QAAS,EAAI,EAAG,EAAI,oBAAoB,OAAQ,IAC9C,GAAI,oBAAoB,CAAC,EAAE,YAAY,YAAY,GAAK,mBAAmB,YAAY,EACrF,MAAO,GAIb,MAAO,EACT,CAEA,SAAS,mBAAoB,CAI3B,QAHI,QAAU,SAAS,OAAO,MAAM,GAAG,EACnC,cAAgB,WAChB,aAAe,GACV,EAAI,EAAG,EAAI,QAAQ,OAAQ,IAAK,CACrC,IAAI,WAAa,QAAQ,CAAC,EAAE,UAAU,EAAG,QAAQ,CAAC,EAAE,QAAQ,GAAG,CAAC,EAEhE,GADA,WAAa,WAAW,KAAK,EACzB,YAAc,cAAe,CAC/B,aAAe,QAAQ,CAAC,EAAE,UAAU,QAAQ,CAAC,EAAE,QAAQ,GAAG,EAAI,CAAC,EAC/D,KACF,CACJ,CAEA,GAAK,aAAa,QAAU,EAAI,CAC9B,IAAI,YAAc,OAAO,SAAS,OAC9B,kBAAoB,GACxB,GAAI,YAAa,CACf,IAAI,UAAY,IAAI,gBAAgB,WAAW,EAC/C,kBAAoB,UAAU,IAAI,KAAK,CACzC,CAEA,GAAI,mBAAqB,kBAAkB,OAAS,EAAG,CACrD,IAAI,QAAU,IAAI,KAClB,QAAQ,QAAQ,QAAQ,QAAQ,EAAI,EAAI,GAAG,EAC3C,SAAS,OAAS,cAAgB,KAAO,kBAAoB,aAAe,QAAQ,YAAY,GAAK,oBAAsB,SAAS,SAAS,KAC7I,aAAe,iBACjB,CACF,CACA,OAAO,YACT,CAEA,SAAS,cAAe,CACtB,IAAI,aAAe,kBAAkB,EACrC,GAAK,cAAgB,aAAa,OAAS,EAAI,CAC7C,IAAI,OAAS,WAAW,OAAO,OAAO,MAAM,cAAe,kBAAkB,EAC7E,MAAM,OACJ,CACE,OAAQ,OACR,KAAM,KAAK,UAAU,CACnB,GAAI,aACJ,UAAW,UAAU,UACrB,cAAe,UAAU,cACzB,UAAW,UAAU,UACrB,SAAU,UAAU,SACpB,cAAe,UAAU,cACzB,SAAU,SAAS,SACnB,KAAM,SAAS,SAAS,KACxB,SAAU,iEAAiE,KAAK,UAAU,SAAS,CACrG,CAAC,CACH,CACF,EACC,KAAK,SAAU,IAAK,CACnB,OAAO,IAAI,KAAK,CAClB,CAAC,EACA,KAAK,SAAU,SAAU,CAC1B,CAAC,EACA,MAAS,SAAU,MAAO,CACvB,QAAQ,MAAM,+BAAgC,KAAK,CACvD,CAAC,CACH,CACF,CAGA,MAAM,MAAQ,srBACR,KAAO,qaAEb,SAAS,YAAY,SAAU,QAAS,CACtC,IAAI,YAAc,SACd,MAAQ,SAAS,eAAe,OAAO,EACvC,OAAS,WACX,MAAM,MAAQ,CAAC,MAAM,MACrB,YAAY,UAAU,IAAI,WAAW,EACrC,YAAY,UAAY,MAAM,MAAQ,KAAO,MAEjD,CAEA,SAAS,WAAW,QAAS,CAC3B,IAAI,MAAQ,SAAS,eAAe,OAAO,EACvC,QACF,MAAM,OAAQ,MAAM,KAAK,EAAI,MAAM,MAAM,EAE7C,CAEA,SAAS,uBAAwB,CAE/B,IAAI,OAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAEnD,YAAc,UAAU,eAAe,EAEvC,WAAa,GACb,aAAe,GACf,KAAO,GAgBX,GAdI,SACF,WAAa,OAAO,IAAI,YAAY,EACpC,aAAe,OAAO,IAAI,cAAc,GAGtC,CAAC,YAAc,cACjB,WAAa,YAAY,YAAa,YAAY,GAEhD,CAAC,cAAgB,cACnB,aAAe,YAAY,YAAa,cAAc,GAGxD,aAAe,MAAQ,UAAU,OAAO,UAAU,GAClD,eAAiB,MAAQ,qBAAqB,OAAO,YAAY,GAC7D,KAAM,CACR,MAAM,YAAc,SAAS,iBAAiB,uBAAuB,EACrE,GAAI,YACF,QAAS,EAAI,EAAG,EAAI,YAAY,OAAQ,IACtC,YAAY,CAAC,EAAE,MAAQ,YAAY,CAAC,EAAE,MAAQ,KAAO,IAG3D,CACF,CAEA,SAAS,SAAU,CACjB,IAAI,QAAU,SAAS,iBAAiB,yCAAyC,EACjF,QAAS,cAAc,QACrB,WAAW,iBAAiB,QAAS,IAAM,CACzC,WAAW,UAAU,IAAI,eAAe,CAC1C,CAAC,CAEL,CAEA,MAAM,aAAgB,OACf,MAEO,8CAA4C,KAAK,KAAK,EADzD,GASX,SAAS,WAAY,CACnB,IAAI,cAAgB,OAAO,MACzB,yBAA2B,cAAc,yBAI3C,gBAAgB,EAEhB,uCAAuC,EAEvC,0BAA4B,sBAAsB,EAElD,yBAAyB,EAIzB,wBAAwB,EAExB,4BAA4B,EAE5B,aAAa,EAEb,iBAAiB,EAEjB,aAAa,EAEb,sBAAsB,EACtB,QAAQ,CACV,CAEA,SAAS,cAAc,SAAU,CAE3B,SAAS,YAAc,UAAW,SAAS,EAEtC,SAAS,iBAAkB,SAAS,iBAAiB,mBAAoB,QAAQ,EAGxF,SAAS,YAAY,qBAAsB,UAAY,CACjD,SAAS,YAAc,YAAY,SAAS,CAClD,CAAC,CACL,CAGA,cAAc,SAAS",
  "names": []
}
