{
  "version": 3,
  "sources": ["/cdn/shop/t/5/assets/custom-rack-cabinet-configurator.js?rackJs=4"],
  "sourcesContent": ["/**\n * VATPAN Custom Rack Cabinet Configurator \u2014 Shopify theme asset.\n * G\u00F6r\u00FCn\u00FCr alanlar \u00FCstte; g\u00F6nderim gizli Shopify Forms blo\u011Funa senkron + requestSubmit.\n */\n(function () {\n  'use strict';\n\n  function escapeAttr(s) {\n    return String(s)\n      .replace(/&/g, '&amp;')\n      .replace(/\"/g, '&quot;')\n      .replace(/</g, '&lt;');\n  }\n\n  function setFormFieldValue(el, value) {\n    if (!el || el.disabled) return;\n    const tag = el.tagName;\n    if (tag === 'SELECT' || tag === 'TEXTAREA' || tag === 'INPUT') {\n      if (el.type === 'file' || el.type === 'button' || el.type === 'submit') return;\n      el.value = value == null ? '' : value;\n      el.dispatchEvent(new Event('input', { bubbles: true }));\n      el.dispatchEvent(new Event('change', { bubbles: true }));\n    }\n  }\n\n  /** Form + i\u00E7 i\u00E7e shadow root\u2019larda label \u2192 input (Shopify Forms telefon vb.) */\n  function forEachFormSubroot(form, fn) {\n    if (!form) return;\n    const stack = [form];\n    while (stack.length) {\n      const node = stack.pop();\n      fn(node);\n      node.querySelectorAll('*').forEach(function (el) {\n        if (el.shadowRoot) stack.push(el.shadowRoot);\n      });\n    }\n  }\n\n  function setByLabelSubstring(form, needle, value) {\n    if (!form || !needle) return false;\n    const n = needle.trim().toLowerCase();\n    if (!n) return false;\n    let matched = false;\n    forEachFormSubroot(form, function (subroot) {\n      if (matched) return;\n      const labels = subroot.querySelectorAll('label');\n      for (let i = 0; i < labels.length; i++) {\n        const label = labels[i];\n        const text = (label.textContent || '').replace(/\\s+/g, ' ').trim().toLowerCase();\n        if (!text.includes(n)) continue;\n\n        const fid = label.getAttribute('for');\n        if (fid) {\n          let byId = null;\n          forEachFormSubroot(form, function (sr) {\n            if (byId) return;\n            const hit = sr.querySelector('#' + CSS.escape(fid));\n            if (hit && hit !== label) byId = hit;\n          });\n          if (byId) {\n            setFormFieldValue(byId, value);\n            matched = true;\n            return;\n          }\n        }\n\n        let wrap = label.parentElement;\n        let attempts = 0;\n        while (wrap && wrap !== form && attempts < 12) {\n          const input = wrap.querySelector(\n            'input:not([type=\"file\"]):not([type=\"submit\"]):not([type=\"button\"]), textarea, select'\n          );\n          if (input) {\n            setFormFieldValue(input, value);\n            matched = true;\n            return;\n          }\n          wrap = wrap.parentElement;\n          attempts++;\n        }\n      }\n    });\n    return matched;\n  }\n\n  /** Shopify Forms telefon bile\u015Feni genelde E.164 bekler (\u00F6rn. +905551112233) */\n  function normalizePhoneE164(raw) {\n    const s = String(raw == null ? '' : raw).trim().replace(/\\s+/g, '');\n    if (!s) return '';\n    if (s.indexOf('+') === 0) return s;\n    const digits = s.replace(/\\D/g, '');\n    if (digits.length === 10 && digits[0] === '5') return '+90' + digits;\n    if (digits.length === 11 && digits[0] === '0' && digits[1] === '5') return '+90' + digits.slice(1);\n    if (digits.length >= 10) return '+' + digits;\n    return s;\n  }\n\n  function setFilesOnInput(input, fileList) {\n    if (!input || input.type !== 'file' || !fileList || fileList.length === 0) return false;\n    try {\n      const dt = new DataTransfer();\n      const arr = fileList instanceof FileList ? Array.from(fileList) : fileList;\n      for (let i = 0; i < arr.length; i++) dt.items.add(arr[i]);\n      input.files = dt.files;\n      if (!input.files || input.files.length === 0) return false;\n      input.dispatchEvent(new Event('input', { bubbles: true }));\n      input.dispatchEvent(new Event('change', { bubbles: true }));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function setFilesByLabelSubstring(form, needle, sourceFileInput) {\n    if (!form || !needle || !sourceFileInput || !sourceFileInput.files || !sourceFileInput.files.length)\n      return false;\n    const n = needle.trim().toLowerCase();\n    if (!n) return false;\n    let target = null;\n    forEachFormSubroot(form, function (subroot) {\n      if (target) return;\n      const labels = subroot.querySelectorAll('label');\n      for (let i = 0; i < labels.length; i++) {\n        const label = labels[i];\n        const text = (label.textContent || '').replace(/\\s+/g, ' ').trim().toLowerCase();\n        if (!text.includes(n)) continue;\n        const fid = label.getAttribute('for');\n        if (fid) {\n          forEachFormSubroot(form, function (sr) {\n            if (target) return;\n            const hit = sr.querySelector('#' + CSS.escape(fid));\n            if (hit && hit.type === 'file') target = hit;\n          });\n        }\n        if (!target) {\n          let wrap = label.parentElement;\n          let attempts = 0;\n          while (wrap && attempts < 14) {\n            const fi = wrap.querySelector('input[type=\"file\"]');\n            if (fi) {\n              target = fi;\n              break;\n            }\n            wrap = wrap.parentElement;\n            attempts++;\n          }\n        }\n        if (target) return;\n      }\n    });\n    if (!target) return false;\n    return setFilesOnInput(target, sourceFileInput.files);\n  }\n\n  function parseNeedleList(csv) {\n    if (!csv || !String(csv).trim()) return [];\n    return String(csv)\n      .split(/[,;]/)\n      .map(function (s) {\n        return s.trim().toLowerCase();\n      })\n      .filter(Boolean);\n  }\n\n  function walkLightAndShadow(node, visitor) {\n    if (!node) return;\n    visitor(node);\n    if (node.shadowRoot) walkLightAndShadow(node.shadowRoot, visitor);\n    const ch = node.children;\n    if (ch) {\n      for (let i = 0; i < ch.length; i++) walkLightAndShadow(ch[i], visitor);\n    }\n  }\n\n  function collectFileInputsInTreeOrder(form) {\n    const out = [];\n    walkLightAndShadow(form, function (n) {\n      if (n.tagName === 'INPUT' && n.type === 'file') out.push(n);\n    });\n    return out;\n  }\n\n  function isDropZoneLike(el) {\n    if (!el || !el.tagName) return false;\n    const t = el.tagName.toLowerCase();\n    if (t === 's-drop-zone' || t.indexOf('drop-zone') !== -1) return true;\n    if (t.indexOf('file-upload') !== -1 || t.indexOf('fileupload') !== -1) return true;\n    return false;\n  }\n\n  function dropZoneTextHints(el) {\n    const parts = [];\n    if (!el.getAttribute) return '';\n    const lab =\n      el.getAttribute('label') ||\n      el.getAttribute('accessibilityLabel') ||\n      el.getAttribute('accessibility-label');\n    if (lab) parts.push(lab);\n    const aria = el.getAttribute('aria-label');\n    if (aria) parts.push(aria);\n    const nm = el.getAttribute('name');\n    if (nm) parts.push(nm);\n    return parts.join(' ').toLowerCase();\n  }\n\n  function findDropZoneHostsForNeedle(form, needle) {\n    const n = needle.toLowerCase();\n    const hosts = [];\n    walkLightAndShadow(form, function (el) {\n      if (!isDropZoneLike(el)) return;\n      const blob = dropZoneTextHints(el);\n      if (blob.includes(n)) hosts.push(el);\n    });\n    return hosts;\n  }\n\n  function collectDropZonesInTreeOrder(form) {\n    const out = [];\n    walkLightAndShadow(form, function (el) {\n      if (isDropZoneLike(el)) out.push(el);\n    });\n    return out;\n  }\n\n  function hasFileInputWithFiles(host) {\n    let ok = false;\n    walkLightAndShadow(host, function (n) {\n      if (ok) return;\n      if (n.tagName === 'INPUT' && n.type === 'file' && n.files && n.files.length) ok = true;\n    });\n    return ok;\n  }\n\n  function tryInjectFilesIntoHost(host, sourceFileInput) {\n    if (!host || !sourceFileInput || !sourceFileInput.files || !sourceFileInput.files.length)\n      return false;\n    return tryInjectIntoShadowFileInputElement(host, sourceFileInput.files);\n  }\n\n  function tryInjectIntoShadowFileInputElement(host, files) {\n    let inp = null;\n    walkLightAndShadow(host, function (n) {\n      if (inp) return;\n      if (n.tagName === 'INPUT' && n.type === 'file') inp = n;\n    });\n    if (!inp) return false;\n    return setFilesOnInput(inp, files);\n  }\n\n  function trySimulateFileDropOnTarget(target, sourceFileInput) {\n    if (!target || !sourceFileInput || !sourceFileInput.files || !sourceFileInput.files.length)\n      return false;\n    try {\n      const dt = new DataTransfer();\n      const arr = Array.from(sourceFileInput.files);\n      for (let i = 0; i < arr.length; i++) dt.items.add(arr[i]);\n      ['dragenter', 'dragover', 'drop'].forEach(function (type) {\n        const ev = new DragEvent(type, { bubbles: true, cancelable: true, dataTransfer: dt });\n        if (type === 'dragover' || type === 'drop') ev.preventDefault();\n        target.dispatchEvent(ev);\n      });\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function setFilesByAriaLabelSubstring(form, needle, sourceFileInput) {\n    if (!form || !needle || !sourceFileInput || !sourceFileInput.files || !sourceFileInput.files.length)\n      return false;\n    const n = needle.trim().toLowerCase();\n    if (!n) return false;\n    let target = null;\n    walkLightAndShadow(form, function (el) {\n      if (target) return;\n      const aria = (el.getAttribute && el.getAttribute('aria-label')) || '';\n      if (!aria.toLowerCase().includes(n)) return;\n      walkLightAndShadow(el, function (inner) {\n        if (target) return;\n        if (inner.tagName === 'INPUT' && inner.type === 'file') target = inner;\n      });\n    });\n    if (!target) return false;\n    return setFilesOnInput(target, sourceFileInput.files);\n  }\n\n  /** \u00C7izim / foto: etiket \u2192 drop-zone \u2192 g\u00F6lge file input \u2192 s\u0131ra. */\n  function trySetFilesForField(form, needleCsv, sourceInput, orderedFileInputs, orderedDropZones, slotIndex) {\n    if (!sourceInput || !sourceInput.files || !sourceInput.files.length) return true;\n    let needles = parseNeedleList(needleCsv);\n    if (!needles.length) needles = ['file'];\n    let i;\n    let h;\n    for (i = 0; i < needles.length; i++) {\n      if (setFilesByLabelSubstring(form, needles[i], sourceInput)) return true;\n    }\n    for (i = 0; i < needles.length; i++) {\n      if (setFilesByAriaLabelSubstring(form, needles[i], sourceInput)) return true;\n    }\n    for (i = 0; i < needles.length; i++) {\n      const hosts = findDropZoneHostsForNeedle(form, needles[i]);\n      for (h = 0; h < hosts.length; h++) {\n        if (tryInjectFilesIntoHost(hosts[h], sourceInput)) return true;\n        trySimulateFileDropOnTarget(hosts[h], sourceInput);\n        if (hasFileInputWithFiles(hosts[h])) return true;\n      }\n    }\n    if (orderedDropZones && orderedDropZones.length > slotIndex && slotIndex >= 0) {\n      const dz = orderedDropZones[slotIndex];\n      if (tryInjectFilesIntoHost(dz, sourceInput)) return true;\n      trySimulateFileDropOnTarget(dz, sourceInput);\n      if (hasFileInputWithFiles(dz)) return true;\n    }\n    if (orderedFileInputs && orderedFileInputs.length > slotIndex && slotIndex >= 0) {\n      if (setFilesOnInput(orderedFileInputs[slotIndex], sourceInput.files)) return true;\n    }\n    return false;\n  }\n\n  /** \u0130lk <form> veya g\u00F6lge DOM i\u00E7indeki form */\n  function findFormInHost(host) {\n    if (!host) return null;\n    let f = host.querySelector('form');\n    if (f) return f;\n    const els = host.querySelectorAll('*');\n    for (let i = 0; i < els.length; i++) {\n      const el = els[i];\n      if (el.shadowRoot) {\n        f = el.shadowRoot.querySelector('form');\n        if (f) return f;\n        const inner = el.shadowRoot.querySelectorAll('*');\n        for (let j = 0; j < inner.length; j++) {\n          if (inner[j].shadowRoot) {\n            f = inner[j].shadowRoot.querySelector('form');\n            if (f) return f;\n          }\n        }\n      }\n    }\n    return null;\n  }\n\n  function findFormsAppSectionForm() {\n    const rack =\n      document.querySelector('section.shopify-section.vatpan-rack-configurator-outer') ||\n      document.querySelector('.vatpan-rack-configurator-outer.shopify-section');\n    if (!rack) return null;\n    const next = rack.nextElementSibling;\n    if (!next) return null;\n    let f = findFormInHost(next);\n    if (f) return f;\n    f = next.querySelector('form');\n    if (f) return f;\n    const blocks = next.querySelectorAll('*');\n    for (let i = 0; i < blocks.length; i++) {\n      if (blocks[i].shadowRoot) {\n        f = blocks[i].shadowRoot.querySelector('form');\n        if (f) return f;\n      }\n    }\n    return null;\n  }\n\n  /** Mobil (\u2264749px): native select yerine alt sheet \u2014 ba\u015Fparmak i\u00E7in daha uygun */\n  var MOBILE_SELECT_MQ = window.matchMedia('(max-width: 749px)');\n  var activeMobileSheet = null;\n  var mobileSelectMqTimer = null;\n\n  function syncMobileSelectTrigger(trigger, selectEl) {\n    var opt = selectEl.options[selectEl.selectedIndex];\n    var t = opt ? opt.textContent : '';\n    trigger.textContent = t.replace(/\\s+/g, ' ').trim();\n  }\n\n  function closeMobileSelectSheet() {\n    if (!activeMobileSheet) return;\n    var o = activeMobileSheet;\n    activeMobileSheet = null;\n    document.documentElement.classList.remove('vatpan-rk-sheet-lock');\n    if (o.trigger) o.trigger.setAttribute('aria-expanded', 'false');\n    if (o.onDocKey) document.removeEventListener('keydown', o.onDocKey);\n    if (o.backdrop) o.backdrop.classList.remove('is-open');\n    if (o.panel) o.panel.classList.remove('is-open');\n    window.setTimeout(function () {\n      if (o.backdrop && o.backdrop.parentNode) o.backdrop.parentNode.removeChild(o.backdrop);\n      if (o.panel && o.panel.parentNode) o.panel.parentNode.removeChild(o.panel);\n      if (o.prevFocus && typeof o.prevFocus.focus === 'function')\n        try {\n          o.prevFocus.focus({ preventScroll: true });\n        } catch (e) {}\n    }, 320);\n  }\n\n  function openMobileSelectSheet(selectEl, trigger, root) {\n    closeMobileSelectSheet();\n    if (!MOBILE_SELECT_MQ.matches) return;\n\n    var titleText = 'Choose';\n    if (selectEl.id && root.querySelector) {\n      var lb = root.querySelector('label[for=\"' + CSS.escape(selectEl.id) + '\"]');\n      if (lb && lb.textContent) titleText = lb.textContent.replace(/\\s+/g, ' ').trim();\n    }\n\n    trigger.setAttribute('aria-expanded', 'true');\n    var prevFocus = document.activeElement;\n\n    var backdrop = document.createElement('div');\n    backdrop.className = 'vatpan-rk-sheet-backdrop';\n    backdrop.setAttribute('aria-hidden', 'true');\n\n    var panel = document.createElement('div');\n    panel.className = 'vatpan-rk-sheet-panel';\n    panel.setAttribute('role', 'dialog');\n    panel.setAttribute('aria-modal', 'true');\n    panel.setAttribute('aria-label', titleText);\n\n    var grab = document.createElement('div');\n    grab.className = 'vatpan-rk-sheet-grab';\n    grab.setAttribute('aria-hidden', 'true');\n\n    var head = document.createElement('div');\n    head.className = 'vatpan-rk-sheet-head';\n\n    var closeBtn = document.createElement('button');\n    closeBtn.type = 'button';\n    closeBtn.className = 'vatpan-rk-sheet-close';\n    closeBtn.setAttribute('aria-label', 'Close');\n    closeBtn.innerHTML = '&times;';\n\n    var h2 = document.createElement('div');\n    h2.className = 'vatpan-rk-sheet-title';\n    h2.textContent = titleText;\n\n    head.appendChild(closeBtn);\n    head.appendChild(h2);\n\n    var list = document.createElement('div');\n    list.className = 'vatpan-rk-sheet-list';\n    list.setAttribute('role', 'listbox');\n\n    var i;\n    for (i = 0; i < selectEl.options.length; i++) {\n      (function (opt) {\n        if (opt.disabled) return;\n        var row = document.createElement('button');\n        row.type = 'button';\n        row.className = 'vatpan-rk-sheet-option';\n        row.setAttribute('role', 'option');\n        row.setAttribute('aria-selected', opt.selected ? 'true' : 'false');\n        row.textContent = opt.textContent.replace(/\\s+/g, ' ').trim();\n        if (opt.selected) row.classList.add('is-selected');\n        row.addEventListener('click', function () {\n          var v = opt.value;\n          if (selectEl.value !== v) {\n            selectEl.value = v;\n            selectEl.dispatchEvent(new Event('input', { bubbles: true }));\n            selectEl.dispatchEvent(new Event('change', { bubbles: true }));\n          }\n          syncMobileSelectTrigger(trigger, selectEl);\n          closeMobileSelectSheet();\n        });\n        list.appendChild(row);\n      })(selectEl.options[i]);\n    }\n\n    panel.appendChild(grab);\n    panel.appendChild(head);\n    panel.appendChild(list);\n\n    document.body.appendChild(backdrop);\n    document.body.appendChild(panel);\n\n    document.documentElement.classList.add('vatpan-rk-sheet-lock');\n\n    function onDocKey(ev) {\n      if (ev.key === 'Escape') {\n        ev.preventDefault();\n        closeMobileSelectSheet();\n      }\n    }\n    document.addEventListener('keydown', onDocKey);\n\n    activeMobileSheet = {\n      backdrop: backdrop,\n      panel: panel,\n      trigger: trigger,\n      prevFocus: prevFocus,\n      onDocKey: onDocKey,\n    };\n\n    backdrop.addEventListener('click', closeMobileSelectSheet);\n    closeBtn.addEventListener('click', closeMobileSelectSheet);\n    panel.addEventListener('click', function (ev) {\n      ev.stopPropagation();\n    });\n\n    window.requestAnimationFrame(function () {\n      backdrop.classList.add('is-open');\n      panel.classList.add('is-open');\n      var first = list.querySelector('.vatpan-rk-sheet-option');\n      if (first) first.focus({ preventScroll: true });\n    });\n  }\n\n  function teardownMobileSelectEnhancements(root) {\n    if (!root) return;\n    closeMobileSelectSheet();\n    var shells = root.querySelectorAll('.vatpan-rk-select-shell');\n    shells.forEach(function (shell) {\n      if (shell._vatpanRkLabelAbort) {\n        shell._vatpanRkLabelAbort.abort();\n        shell._vatpanRkLabelAbort = null;\n      }\n      var sel = shell.querySelector('select.vatpan-rk-select-native');\n      if (sel) {\n        sel.classList.remove('vatpan-rk-select-native');\n        sel.removeAttribute('tabindex');\n      }\n      if (sel && shell.parentNode) {\n        shell.parentNode.insertBefore(sel, shell);\n        shell.parentNode.removeChild(shell);\n      }\n    });\n  }\n\n  function enhanceMobileSelects(root) {\n    if (!root) return;\n    if (!MOBILE_SELECT_MQ.matches) {\n      teardownMobileSelectEnhancements(root);\n      return;\n    }\n\n    root.querySelectorAll('.vatpan-rack-configurator select').forEach(function (sel) {\n      if (sel.multiple) return;\n      if (sel.closest('.vatpan-rk-select-shell')) return;\n\n      var shell = document.createElement('div');\n      shell.className = 'vatpan-rk-select-shell';\n      var trigger = document.createElement('button');\n      trigger.type = 'button';\n      trigger.className = 'vatpan-rk-select-trigger';\n      trigger.setAttribute('aria-haspopup', 'listbox');\n      trigger.setAttribute('aria-expanded', 'false');\n\n      var parent = sel.parentNode;\n      parent.insertBefore(shell, sel);\n      shell.appendChild(trigger);\n      shell.appendChild(sel);\n\n      sel.classList.add('vatpan-rk-select-native');\n      sel.setAttribute('tabindex', '-1');\n\n      var ac = new AbortController();\n      shell._vatpanRkLabelAbort = ac;\n      if (sel.id) {\n        var lb = root.querySelector('label[for=\"' + CSS.escape(sel.id) + '\"]');\n        if (lb) {\n          lb.addEventListener(\n            'click',\n            function (ev) {\n              if (!MOBILE_SELECT_MQ.matches) return;\n              ev.preventDefault();\n              trigger.focus({ preventScroll: true });\n              openMobileSelectSheet(sel, trigger, root);\n            },\n            { signal: ac.signal }\n          );\n        }\n      }\n\n      syncMobileSelectTrigger(trigger, sel);\n      sel.addEventListener('change', function () {\n        syncMobileSelectTrigger(trigger, sel);\n      });\n\n      trigger.addEventListener('click', function () {\n        openMobileSelectSheet(sel, trigger, root);\n      });\n    });\n  }\n\n  function refreshAllRackMobileSelects() {\n    document.querySelectorAll('[data-vatpan-rack-configurator]').forEach(function (r) {\n      if (MOBILE_SELECT_MQ.matches) {\n        teardownMobileSelectEnhancements(r);\n        enhanceMobileSelects(r);\n      } else teardownMobileSelectEnhancements(r);\n    });\n  }\n\n  if (typeof MOBILE_SELECT_MQ.addEventListener === 'function') {\n    MOBILE_SELECT_MQ.addEventListener('change', function () {\n      window.clearTimeout(mobileSelectMqTimer);\n      mobileSelectMqTimer = window.setTimeout(refreshAllRackMobileSelects, 100);\n    });\n  }\n\n  function initConfigurator(root) {\n    const cfgId = root.dataset.cfgId || '';\n    if (!cfgId) return;\n\n    const formsRootSelector = (root.dataset.formsRoot || '').trim();\n    const jsonLabel = (root.dataset.formsJsonLabel || 'VATPAN configuration (JSON)').trim();\n    const summaryLabel = (root.dataset.formsSummaryLabel || 'VATPAN configuration (summary)').trim();\n\n    const $id = function (suffix) {\n      return root.querySelector('#' + CSS.escape(cfgId + '-' + suffix));\n    };\n\n    const S = {\n      usage: 'Indoor',\n      rack: '19\" Rack',\n      type: 'Floor Standing',\n      door: 'Glass Door',\n      view: 'Front',\n    };\n\n    const val = function (id) {\n      const el = $id(id);\n      return el ? el.value : '';\n    };\n\n    const mmToIn = function (v) {\n      return (Number(v) / 25.4).toFixed(2) + '\"';\n    };\n\n    function fillSelects() {\n      const h = $id('height');\n      if (!h) return;\n      for (let i = 1; i <= 50; i++) {\n        const o = new Option(i + 'U', i + 'U');\n        if (i === 20) o.selected = true;\n        h.add(o);\n      }\n      h.add(new Option('Custom Height', 'Custom Height'));\n\n      const addDim = function (id, arr, defaultNum) {\n        const s = $id(id);\n        if (!s) return;\n        arr.forEach(function (v) {\n          const o = new Option(v + ' mm (' + mmToIn(v) + ')', String(v));\n          if (v === defaultNum) o.selected = true;\n          s.add(o);\n        });\n        s.add(new Option('Custom ' + (id === 'width' ? 'Width' : 'Depth'), 'Custom'));\n      };\n\n      addDim('width', [450, 500, 540, 600, 800], 800);\n      addDim('depth', [300, 400, 450, 500, 600, 800, 1000, 1200], 600);\n    }\n\n    function buildPerfs() {\n      const p = root.querySelector('.perfs');\n      if (p && !p.children.length) {\n        for (let i = 0; i < 45; i++) {\n          const dot = document.createElement('i');\n          p.appendChild(dot);\n        }\n      }\n    }\n\n    function selectedCustom(id, inputId, match) {\n      const inp = $id(inputId);\n      if (!inp) return;\n      const v = val(id);\n      inp.classList.toggle('show', v.indexOf(match) !== -1 || v.indexOf('Custom / Not Sure') !== -1);\n    }\n\n    function displayValue(selectId, customId) {\n      const v = val(selectId);\n      if (v === 'Custom' || v.indexOf('Custom') !== -1) {\n        const c = val(customId);\n        return c ? c : v;\n      }\n      return v;\n    }\n\n    function getWidth() {\n      const w = val('width');\n      if (w === 'Custom') {\n        const cw = val('customWidth');\n        return cw ? cw + ' mm (' + mmToIn(cw) + ')' : 'Custom Width';\n      }\n      return w + ' mm (' + mmToIn(w) + ')';\n    }\n\n    function getDepth() {\n      const d = val('depth');\n      if (d === 'Custom') {\n        const cd = val('customDepth');\n        return cd ? cd + ' mm (' + mmToIn(cd) + ')' : 'Custom Depth';\n      }\n      return d + ' mm (' + mmToIn(d) + ')';\n    }\n\n    function config() {\n      return {\n        created: new Date().toLocaleString('en-GB', {\n          day: '2-digit',\n          month: 'short',\n          year: 'numeric',\n          hour: '2-digit',\n          minute: '2-digit',\n        }),\n        usage: S.usage,\n        rack: S.rack.indexOf('Custom') !== -1 ? val('customRack') || S.rack : S.rack,\n        type: S.type.indexOf('Custom') !== -1 ? val('customType') || S.type : S.type,\n        height: displayValue('height', 'customHeight'),\n        width: getWidth(),\n        depth: getDepth(),\n        door: S.door.indexOf('Custom') !== -1 ? val('customDoor') || S.door : S.door,\n        cooling: displayValue('cooling', 'customCooling'),\n        fan: displayValue('fan', 'customFan'),\n        ip: displayValue('ip', 'customIP'),\n        ik: displayValue('ik', 'customIK'),\n        structure: displayValue('structure', 'customStructure'),\n        thickness: displayValue('thickness', 'customThickness'),\n        material: displayValue('material', 'customMaterial'),\n        color: displayValue('color', 'customColor'),\n        pdu: displayValue('pdu', 'customPDU'),\n        cableLocation: displayValue('cableLocation', 'customCableLocation'),\n        cableDiameter: displayValue('cableDiameter', 'customCableDiameter'),\n        shelves: displayValue('shelves', 'customShelves'),\n        plinth: displayValue('plinth', 'customPlinth'),\n        castor: displayValue('castor', 'customCastor'),\n        grounding: displayValue('grounding', 'customGrounding'),\n        led: displayValue('led', 'customLED'),\n        quantity: val('quantity') || '1',\n        company: val('company'),\n        email: val('email'),\n        phone: val('phone'),\n        country: val('country'),\n        equipment: val('equipment'),\n        message: val('message'),\n      };\n    }\n\n    function configurationSummaryText(c) {\n      const lines = [\n        '--- VATPAN Rack configuration ---',\n        'Created: ' + c.created,\n        'Usage: ' + c.usage,\n        'Rack: ' + c.rack,\n        'Type: ' + c.type,\n        'H\u00D7W\u00D7D: ' + c.height + ' / ' + c.width + ' / ' + c.depth,\n        'Door: ' + c.door,\n        'Cooling: ' + c.cooling + ' | Fan: ' + c.fan,\n        'IP / IK: ' + c.ip + ' / ' + c.ik,\n        'Structure: ' + c.structure,\n        'Material: ' + c.thickness + ' ' + c.material,\n        'Color: ' + c.color,\n        'Accessories: ' +\n          [c.pdu, c.cableLocation, c.cableDiameter, c.shelves, c.plinth, c.castor, c.grounding, c.led].join('; '),\n        'Qty: ' + c.quantity,\n        'Company: ' + c.company,\n        'Email: ' + c.email,\n        'Phone: ' + c.phone,\n        'Country: ' + c.country,\n        'Equipment: ' + c.equipment,\n        'Notes: ' + c.message,\n      ];\n      return lines.join('\\n');\n    }\n\n    function rows() {\n      const c = config();\n      return [\n        ['Configuration Created', c.created],\n        ['Usage Environment', c.usage],\n        ['Rack Standard', c.rack],\n        ['Cabinet Type', c.type],\n        ['Height', c.height],\n        ['Width', c.width],\n        ['Depth', c.depth],\n        ['Door Type', c.door],\n        ['Cooling Type', c.cooling],\n        ['Fan Module', c.fan],\n        ['IP Rating', c.ip],\n        ['IK Rating', c.ik],\n        ['Structure Type', c.structure],\n        ['Material Thickness', c.thickness],\n        ['Material Type', c.material],\n        ['Color / Finish', c.color],\n        [\n          'Accessories',\n          c.pdu +\n            ', ' +\n            c.cableLocation +\n            ', ' +\n            c.cableDiameter +\n            ', ' +\n            c.shelves +\n            ', ' +\n            c.plinth +\n            ', ' +\n            c.castor +\n            ', ' +\n            c.grounding +\n            ', ' +\n            c.led,\n        ],\n        ['Requested Quantity', c.quantity + ' pcs'],\n        ['Company', c.company],\n        ['Email', c.email],\n        ['Phone / WhatsApp', c.phone],\n        ['Target Country', c.country],\n        ['Equipment / Device Details', c.equipment],\n        ['Message / Project Description', c.message],\n      ];\n    }\n\n    function showSyncBanner(kind, text) {\n      const elOk = $id('sync-banner-ok');\n      const elWarn = $id('sync-banner-warn');\n      if (elOk) elOk.classList.remove('show');\n      if (elWarn) elWarn.classList.remove('show');\n      if (kind === 'ok' && elOk) {\n        elOk.textContent = text;\n        elOk.classList.add('show');\n      } else if (kind === 'warn' && elWarn) {\n        elWarn.textContent = text;\n        elWarn.classList.add('show');\n      }\n    }\n\n    function validateTopFields() {\n      const ids = ['company', 'email', 'phone', 'country', 'quantity'];\n      for (let i = 0; i < ids.length; i++) {\n        const el = $id(ids[i]);\n        if (!el || !String(el.value || '').trim()) {\n          el && el.focus && el.focus();\n          return false;\n        }\n      }\n      return true;\n    }\n\n    function syncToShopifyForms() {\n      let form = null;\n      if (formsRootSelector) {\n        const el = document.querySelector(formsRootSelector);\n        if (el) form = el.matches('form') ? el : el.querySelector('form');\n      }\n      if (!form) form = findFormsAppSectionForm();\n      if (!form) {\n        const main = document.querySelector('main') || document.body;\n        form =\n          main.querySelector('.shopify-app-block form') ||\n          main.querySelector('[class*=\"shopify-forms\"] form') ||\n          main.querySelector('form');\n      }\n      if (!form) {\n        return { ok: false, reason: 'no-form' };\n      }\n\n      const c = config();\n      const jsonStr = JSON.stringify(c);\n      const summaryStr = configurationSummaryText(c);\n\n      const okJson = setByLabelSubstring(form, jsonLabel, jsonStr);\n      const okSum = setByLabelSubstring(form, summaryLabel, summaryStr);\n\n      const msgLabel = (root.dataset.labelMessage || 'message').trim();\n      const phoneVal = normalizePhoneE164(c.phone);\n      const optionalPairs = [\n        [root.dataset.labelEmail || 'email', c.email],\n        [root.dataset.labelPhone || 'phone', phoneVal],\n        [root.dataset.labelCompany || 'company', c.company],\n        [root.dataset.labelCountry || 'country', c.country],\n        [root.dataset.labelQuantity || 'quantity', c.quantity],\n        [msgLabel, c.message],\n        ['equipment', c.equipment],\n        ['whatsapp', phoneVal],\n      ];\n      optionalPairs.forEach(function (pair) {\n        const lab = pair[0];\n        if (lab) setByLabelSubstring(form, lab, pair[1]);\n      });\n\n      let fileSyncNote = '';\n      const drawingIn = $id('drawing-upload');\n      const photoIn = $id('photo-upload');\n      const drawingCsv =\n        (root.dataset.fileLabelDrawing || '').trim() ||\n        'technical drawing,drawing,pdf,dwg,dxf,technical';\n      const photoCsv =\n        (root.dataset.fileLabelPhoto || '').trim() ||\n        'photo,photos,reference,image,jpg,png,product,reference images';\n      const orderedFiles = collectFileInputsInTreeOrder(form);\n      const orderedDropZones = collectDropZonesInTreeOrder(form);\n\n      if (drawingIn && drawingIn.files && drawingIn.files.length) {\n        if (!trySetFilesForField(form, drawingCsv, drawingIn, orderedFiles, orderedDropZones, 0)) {\n          fileSyncNote +=\n            ' Technical file could not be attached. In the theme section settings, add comma-separated keywords from your Forms question labels; file question order should match (first drawing, then photo).';\n        }\n      }\n      if (photoIn && photoIn.files && photoIn.files.length) {\n        if (!trySetFilesForField(form, photoCsv, photoIn, orderedFiles, orderedDropZones, 1)) {\n          fileSyncNote +=\n            ' Photo could not be attached. Update the \u201Cphoto\u201D keywords in section settings or check file question order in Forms.';\n        }\n      }\n\n      return {\n        ok: okJson || okSum,\n        okJson: okJson,\n        okSum: okSum,\n        form: form,\n        fileSyncNote: fileSyncNote,\n      };\n    }\n\n    function render() {\n      ['height', 'width', 'depth'].forEach(function (id) {\n        const customId =\n          id === 'height' ? 'customHeight' : id === 'width' ? 'customWidth' : 'customDepth';\n        const inp = $id(customId);\n        const sel = $id(id);\n        if (inp && sel) {\n          inp.classList.toggle(\n            'show',\n            val(id).indexOf('Custom') === 0 || val(id) === 'Custom'\n          );\n        }\n      });\n\n      const cwi = $id('customWidthInch');\n      const cdi = $id('customDepthInch');\n      if (cwi) cwi.textContent = val('customWidth') ? 'Equivalent: ' + mmToIn(val('customWidth')) : '';\n      if (cdi) cdi.textContent = val('customDepth') ? 'Equivalent: ' + mmToIn(val('customDepth')) : '';\n\n      [\n        ['cooling', 'customCooling', 'Custom'],\n        ['fan', 'customFan', 'Custom'],\n        ['ip', 'customIP', 'Custom'],\n        ['ik', 'customIK', 'Custom'],\n        ['structure', 'customStructure', 'Custom'],\n        ['thickness', 'customThickness', 'Custom'],\n        ['material', 'customMaterial', 'Custom'],\n        ['color', 'customColor', 'Custom'],\n        ['pdu', 'customPDU', 'Custom'],\n        ['cableLocation', 'customCableLocation', 'Custom'],\n        ['cableDiameter', 'customCableDiameter', 'Custom'],\n        ['shelves', 'customShelves', 'Custom'],\n        ['plinth', 'customPlinth', 'Custom'],\n        ['castor', 'customCastor', 'Custom'],\n        ['grounding', 'customGrounding', 'Custom'],\n        ['led', 'customLED', 'Custom'],\n      ].forEach(function (a) {\n        selectedCustom(a[0], a[1], a[2]);\n      });\n\n      const cr = $id('customRack');\n      const ct = $id('customType');\n      const cd = $id('customDoor');\n      if (cr) cr.classList.toggle('show', S.rack.indexOf('Custom') !== -1);\n      if (ct) ct.classList.toggle('show', S.type.indexOf('Custom') !== -1);\n      if (cd) cd.classList.toggle('show', S.door.indexOf('Custom') !== -1);\n\n      var cab = $id('cabinet');\n      if (cab) {\n        cab.className = 'cabinet';\n        if (S.usage === 'Outdoor' || S.type === 'Outdoor') cab.classList.add('outdoor');\n        if (S.usage === 'Industrial' || S.type === 'Industrial') cab.classList.add('industrial');\n        if (S.usage === 'Data Center') cab.classList.add('datacenter');\n        if (S.type === 'Wall Mount') cab.classList.add('wallmount');\n        if (S.door.indexOf('Perforated') !== -1) {\n          cab.classList.add('perforated');\n        } else if (S.door.indexOf('Solid') !== -1) {\n          cab.classList.add('solid');\n        } else {\n          cab.classList.add('glass');\n        }\n      }\n\n      const summaryRows = $id('summaryRows');\n      if (summaryRows) {\n        summaryRows.innerHTML = rows()\n          .map(function (row) {\n            return (\n              '<div class=\"sum-row\"><span>' +\n              escapeAttr(row[0]) +\n              '</span><b>' +\n              escapeAttr(row[1] || '-') +\n              '</b></div>'\n            );\n          })\n          .join('');\n      }\n\n      const c = config();\n      const heroChips = $id('hero-chips');\n      if (heroChips) {\n        const chips = [c.usage, c.rack, c.height, c.width.split(' ')[0] + ' mm', c.ip];\n        heroChips.innerHTML = chips\n          .map(function (x) {\n            return '<span class=\"chip\">' + escapeAttr(x) + '</span>';\n          })\n          .join('');\n      }\n    }\n\n    function bindGroup(group, key) {\n      root.querySelectorAll('[data-group=\"' + group + '\"] .option, [data-group=\"' + group + '\"] .pill').forEach(\n        function (el) {\n          el.addEventListener('click', function () {\n            root.querySelectorAll('[data-group=\"' + group + '\"] .option, [data-group=\"' + group + '\"] .pill').forEach(\n              function (e) {\n                e.classList.remove('selected');\n                var chk = e.querySelector('.check');\n                if (chk) chk.remove();\n              }\n            );\n            el.classList.add('selected');\n            if (el.classList.contains('option')) {\n              el.insertAdjacentHTML('beforeend', '<em class=\"check\">\\u2713</em>');\n            }\n            if (el.dataset.value) {\n              S[key] = el.dataset.value;\n            } else {\n              S[key] = el.textContent.trim();\n            }\n            render();\n          });\n          el.addEventListener('keydown', function (ev) {\n            if (ev.key === 'Enter' || ev.key === ' ') {\n              ev.preventDefault();\n              el.click();\n            }\n          });\n        }\n      );\n    }\n\n    fillSelects();\n    buildPerfs();\n    bindGroup('usage', 'usage');\n    bindGroup('rack', 'rack');\n    bindGroup('type', 'type');\n    bindGroup('door', 'door');\n\n    function updateUploadedName(fileSuffix, nameSuffix) {\n      var inp = $id(fileSuffix);\n      var nm = $id(nameSuffix);\n      if (!inp || !nm) return;\n      var f = inp.files;\n      nm.textContent =\n        f && f.length ? (f.length === 1 ? f[0].name : f.length + ' files selected') : '';\n    }\n\n    var drawingUp = $id('drawing-upload');\n    var photoUp = $id('photo-upload');\n    if (drawingUp) {\n      drawingUp.addEventListener('change', function () {\n        updateUploadedName('drawing-upload', 'drawing-name');\n      });\n    }\n    if (photoUp) {\n      photoUp.addEventListener('change', function () {\n        updateUploadedName('photo-upload', 'photo-name');\n      });\n    }\n\n    root.querySelectorAll('input, select, textarea').forEach(function (el) {\n      el.addEventListener('input', render);\n      el.addEventListener('change', render);\n    });\n\n    enhanceMobileSelects(root);\n\n    function makePDF() {\n      var c = config();\n      var summaryRows = rows();\n      var projectRows = [\n        ['Company Name', c.company || '-'],\n        ['Email', c.email || '-'],\n        ['Phone / WhatsApp', c.phone || '-'],\n        ['Target Country', c.country || '-'],\n        ['Equipment / Device Details', c.equipment || '-'],\n        ['Message / Project Description', c.message || '-'],\n      ];\n\n      var pageW = 595;\n      var minPageH = 842;\n      var margin = 34;\n      var rowPad = 6;\n\n      function wrap(txt, maxChars) {\n        var words = String(txt).split(/\\s+/);\n        var lines = [];\n        var cur = '';\n        words.forEach(function (w) {\n          var test = cur ? cur + ' ' + w : w;\n          if (test.length > maxChars) {\n            if (cur) lines.push(cur);\n            cur = w;\n          } else cur = test;\n        });\n        if (cur) lines.push(cur);\n        return lines.length ? lines : ['-'];\n      }\n\n      function measureFooterBaseline(ph) {\n        var y = ph - 130;\n        y -= 10;\n        y -= 16;\n        summaryRows.forEach(function (row) {\n          var vLines = wrap(row[1] || '-', 48);\n          var rowH = Math.max(22, vLines.length * 13 + rowPad * 2);\n          y -= rowH;\n        });\n        y -= 14;\n        y -= 10;\n        y -= 16;\n        projectRows.forEach(function (row) {\n          var vLines = wrap(row[1] || '-', 52);\n          var rowH = Math.max(24, vLines.length * 13 + rowPad * 2);\n          y -= rowH;\n        });\n        y -= 8;\n        y -= 18;\n        return y;\n      }\n\n      var pageH = minPageH + Math.max(0, margin - measureFooterBaseline(minPageH));\n\n      var ops = [];\n      var y;\n      var colors = {\n        dark: [0.07, 0.09, 0.15],\n        yellow: [0.949, 0.718, 0.02],\n        text: [0.13, 0.15, 0.18],\n        muted: [0.42, 0.46, 0.52],\n        line: [0.9, 0.91, 0.93],\n        soft: [0.97, 0.98, 0.99],\n        white: [1, 1, 1],\n      };\n\n      function unicodeToWinAnsiByte(cp) {\n        if (cp >= 0x20 && cp <= 0x7e) return cp;\n        switch (cp) {\n          case 0x011f:\n            return 0x67;\n          case 0x011e:\n            return 0x47;\n          case 0x0131:\n            return 0x69;\n          case 0x0130:\n            return 0x49;\n          case 0x015f:\n            return 0x73;\n          case 0x015e:\n            return 0x53;\n          default:\n            break;\n        }\n        if (cp >= 0x00a0 && cp <= 0x00ff) return cp & 0xff;\n        return null;\n      }\n\n      function pdfTextLiteral(s) {\n        var str = String(s);\n        var out = '';\n        for (var i = 0; i < str.length; i++) {\n          var c = str.charCodeAt(i);\n          var cp = c;\n          if (c >= 0xd800 && c <= 0xdbff && i + 1 < str.length) {\n            var c2 = str.charCodeAt(i + 1);\n            if (c2 >= 0xdc00 && c2 <= 0xdfff) {\n              cp = 0x10000 + ((c & 0x3ff) << 10) + (c2 & 0x3ff);\n              i++;\n            }\n          }\n          var b = unicodeToWinAnsiByte(cp);\n          if (b == null) b = 0x3f;\n          if (b === 0x5c) out += '\\\\\\\\';\n          else if (b === 0x28) out += '\\\\(';\n          else if (b === 0x29) out += '\\\\)';\n          else if (b < 32 || b > 126) out += '\\\\' + ('000' + b.toString(8)).slice(-3);\n          else out += String.fromCharCode(b);\n        }\n        return out;\n      }\n\n      function fmt(n) {\n        return Number(n)\n          .toFixed(3)\n          .replace(/0+$/, '')\n          .replace(/\\.$/, '');\n      }\n\n      function setFill(rgb) {\n        ops.push(fmt(rgb[0]) + ' ' + fmt(rgb[1]) + ' ' + fmt(rgb[2]) + ' rg');\n      }\n\n      function setStroke(rgb) {\n        ops.push(fmt(rgb[0]) + ' ' + fmt(rgb[1]) + ' ' + fmt(rgb[2]) + ' RG');\n      }\n\n      function rect(x, y0, w, h, fill, stroke, lineW) {\n        if (fill) setFill(fill);\n        if (stroke) {\n          setStroke(stroke);\n          ops.push((lineW || 1) + ' w');\n        }\n        ops.push(\n          x +\n            ' ' +\n            y0 +\n            ' ' +\n            w +\n            ' ' +\n            h +\n            ' re ' +\n            (fill && stroke ? 'B' : fill ? 'f' : 'S')\n        );\n      }\n\n      function line(x1, y1, x2, y2, rgb, lineW) {\n        setStroke(rgb || colors.line);\n        ops.push((lineW || 1) + ' w ' + x1 + ' ' + y1 + ' m ' + x2 + ' ' + y2 + ' l S');\n      }\n\n      function text(x, y0, txt, size, font, rgb) {\n        setFill(rgb || colors.text);\n        ops.push(\n          'BT /' +\n            (font || 'F1') +\n            ' ' +\n            (size || 11) +\n            ' Tf 1 0 0 1 ' +\n            x +\n            ' ' +\n            y0 +\n            ' Tm (' +\n            pdfTextLiteral(txt) +\n            ') Tj ET'\n        );\n      }\n\n      rect(0, pageH - 108, pageW, 108, colors.dark, null, 1);\n      rect(0, pageH - 112, pageW, 4, colors.yellow, null, 1);\n      text(margin, pageH - 48, 'VATPANSTORE', 22, 'F2', colors.white);\n      text(margin, pageH - 72, 'Custom Rack Cabinet Configuration Summary', 13, 'F1', colors.white);\n      text(pageW - 170, pageH - 72, c.created, 10, 'F1', [0.88, 0.9, 0.93]);\n      y = pageH - 130;\n\n      text(margin, y, 'Configuration Summary', 12, 'F2', colors.dark);\n      y -= 10;\n      line(margin, y, pageW - margin, y, colors.yellow, 1.5);\n      y -= 16;\n\n      var keyX = margin + 10;\n      var valueX = 220;\n      var boxW = pageW - margin * 2;\n      summaryRows.forEach(function (row, idx) {\n        var k = row[0];\n        var v = row[1];\n        var vLines = wrap(v || '-', 48);\n        var rowH = Math.max(22, vLines.length * 13 + rowPad * 2);\n        rect(margin, y - rowH + 4, boxW, rowH, idx % 2 === 0 ? colors.soft : null, colors.line, 0.6);\n        text(keyX, y - 13, k, 10.2, 'F2', colors.muted);\n        var yy = y - 13;\n        vLines.forEach(function (ln, i) {\n          text(valueX, yy - i * 13, ln, 10.4, 'F1', colors.text);\n        });\n        y -= rowH;\n      });\n\n      y -= 14;\n      text(margin, y, 'Project Details', 12, 'F2', colors.dark);\n      y -= 10;\n      line(margin, y, pageW - margin, y, colors.yellow, 1.5);\n      y -= 16;\n      projectRows.forEach(function (row, idx) {\n        var k = row[0];\n        var v = row[1];\n        var vLines = wrap(v || '-', 52);\n        var rowH = Math.max(24, vLines.length * 13 + rowPad * 2);\n        rect(margin, y - rowH + 4, boxW, rowH, idx % 2 === 0 ? colors.soft : null, colors.line, 0.6);\n        text(keyX, y - 13, k, 10.2, 'F2', colors.muted);\n        var yy = y - 13;\n        vLines.forEach(function (ln, i) {\n          text(valueX, yy - i * 13, ln, 10.4, 'F1', colors.text);\n        });\n        y -= rowH;\n      });\n\n      y -= 8;\n      line(margin, y, pageW - margin, y, colors.line, 1);\n      y -= 18;\n      text(margin, y, 'Generated by VATPAN Custom Rack Cabinet Configurator', 9.5, 'F1', colors.muted);\n      text(pageW - 150, y, 'www.vatpanstore.com', 9.5, 'F1', colors.muted);\n\n      var content = ops.join('\\n');\n      var objs = [];\n      function obj(s) {\n        objs.push(s);\n        return objs.length;\n      }\n      var font1 = obj(\n        '<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >>'\n      );\n      var font2 = obj(\n        '<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >>'\n      );\n      var stream = obj('<< /Length ' + content.length + ' >>\\nstream\\n' + content + '\\nendstream');\n      var page = obj(\n        '<< /Type /Page /Parent 5 0 R /MediaBox [0 0 ' +\n          pageW +\n          ' ' +\n          pageH +\n          '] /Resources << /Font << /F1 ' +\n          font1 +\n          ' 0 R /F2 ' +\n          font2 +\n          ' 0 R >> >> /Contents ' +\n          stream +\n          ' 0 R >>'\n      );\n      var pages = obj('<< /Type /Pages /Kids [' + page + ' 0 R] /Count 1 >>');\n      var catalog = obj('<< /Type /Catalog /Pages ' + pages + ' 0 R >>');\n      var pdf = '%PDF-1.4\\n';\n      var offsets = [0];\n      objs.forEach(function (s, i) {\n        offsets.push(pdf.length);\n        pdf += i + 1 + ' 0 obj\\n' + s + '\\nendobj\\n';\n      });\n      var xref = pdf.length;\n      pdf += 'xref\\n0 ' + (objs.length + 1) + '\\n0000000000 65535 f \\n';\n      for (var i = 1; i < offsets.length; i++) {\n        pdf += String(offsets[i]).padStart(10, '0') + ' 00000 n \\n';\n      }\n      pdf +=\n        'trailer << /Size ' +\n        (objs.length + 1) +\n        ' /Root ' +\n        catalog +\n        ' 0 R >>\\nstartxref\\n' +\n        xref +\n        '\\n%%EOF';\n      var blob = new Blob([pdf], { type: 'application/pdf' });\n      var url = URL.createObjectURL(blob);\n      var stamp = new Date().toISOString().slice(0, 16).replace(/[:T]/g, '-');\n      var filename = 'VATPAN_Custom_Rack_Configuration_' + stamp + '.pdf';\n\n      var a = document.createElement('a');\n      a.href = url;\n      a.download = filename;\n      a.setAttribute('download', filename);\n      a.rel = 'noopener';\n      a.style.position = 'fixed';\n      a.style.left = '-9999px';\n      document.body.appendChild(a);\n      a.click();\n      document.body.removeChild(a);\n      setTimeout(function () {\n        URL.revokeObjectURL(url);\n      }, 4000);\n    }\n\n    var submitBtn = $id('submit-btn');\n    if (submitBtn) {\n      submitBtn.addEventListener('click', function () {\n        var okB = $id('sync-banner-ok');\n        var wB = $id('sync-banner-warn');\n        if (okB) okB.classList.remove('show');\n        if (wB) wB.classList.remove('show');\n        if (!validateTopFields()) {\n          showSyncBanner('warn', 'Please fill in all required fields.');\n          return;\n        }\n\n        var policyRoot = root.querySelector('[data-vatpan-custom-order-policy]');\n        if (\n          typeof window.vatpanValidateCustomOrderPolicy === 'function' &&\n          !window.vatpanValidateCustomOrderPolicy(policyRoot)\n        ) {\n          return;\n        }\n\n        function attempt(i) {\n          var r = syncToShopifyForms();\n          if (!r.form && i < 8) {\n            setTimeout(function () {\n              attempt(i + 1);\n            }, 350);\n            return;\n          }\n          if (!r.form) {\n            showSyncBanner(\n              'warn',\n              'Shopify Forms block not found. Add the Forms app block to this template in the theme editor and publish.'\n            );\n            return;\n          }\n          if (!r.ok) {\n            showSyncBanner(\n              'warn',\n              'Form fields did not match. In Forms, add long text questions like \u201CVATPAN configuration (JSON)\u201D and \u201C(summary)\u201D, or align the section label keywords with your form titles.'\n            );\n            return;\n          }\n          try {\n            r.form.requestSubmit();\n            if (r.fileSyncNote) {\n              showSyncBanner(\n                'warn',\n                'Your details and configuration were submitted.' + r.fileSyncNote\n              );\n            } else {\n              showSyncBanner('ok', 'Your request is being sent. Thank you.');\n            }\n          } catch (err) {\n            var sb = r.form.querySelector('button[type=\"submit\"], button:not([type])');\n            if (sb) sb.click();\n            else\n              showSyncBanner(\n                'warn',\n                'Could not submit automatically. Please refresh and try again, or contact support.'\n              );\n          }\n        }\n        attempt(0);\n      });\n    }\n\n    var pdfBtn =\n      root.querySelector('.summary button.pdf') ||\n      root.querySelector('button.pdf') ||\n      $id('download-pdf');\n    if (pdfBtn) {\n      pdfBtn.addEventListener(\n        'click',\n        function (ev) {\n          ev.preventDefault();\n          ev.stopPropagation();\n          makePDF();\n        },\n        true\n      );\n    }\n\n    render();\n\n    document.addEventListener('shopify:section:load', function (ev) {\n      if (ev && ev.target && ev.target.contains && ev.target.contains(root)) {\n        enhanceMobileSelects(root);\n        render();\n      }\n    });\n  }\n\n  function boot() {\n    try {\n      document.querySelectorAll('[data-vatpan-rack-configurator]').forEach(initConfigurator);\n    } catch (err) {\n      console.error('[VATPAN rack] initConfigurator hatas\u0131:', err);\n    }\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', boot);\n  } else {\n    boot();\n  }\n})();\n"],
  "mappings": "CAIC,UAAY,CACX,aAEA,SAAS,WAAW,EAAG,CACrB,OAAO,OAAO,CAAC,EACZ,QAAQ,KAAM,OAAO,EACrB,QAAQ,KAAM,QAAQ,EACtB,QAAQ,KAAM,MAAM,CACzB,CAEA,SAAS,kBAAkB,GAAI,MAAO,CACpC,GAAI,CAAC,IAAM,GAAG,SAAU,OACxB,MAAM,IAAM,GAAG,QACf,GAAI,MAAQ,UAAY,MAAQ,YAAc,MAAQ,QAAS,CAC7D,GAAI,GAAG,OAAS,QAAU,GAAG,OAAS,UAAY,GAAG,OAAS,SAAU,OACxE,GAAG,MAAQ,OAAgB,GAC3B,GAAG,cAAc,IAAI,MAAM,QAAS,CAAE,QAAS,EAAK,CAAC,CAAC,EACtD,GAAG,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,CACzD,CACF,CAGA,SAAS,mBAAmB,KAAM,GAAI,CACpC,GAAI,CAAC,KAAM,OACX,MAAM,MAAQ,CAAC,IAAI,EACnB,KAAO,MAAM,QAAQ,CACnB,MAAM,KAAO,MAAM,IAAI,EACvB,GAAG,IAAI,EACP,KAAK,iBAAiB,GAAG,EAAE,QAAQ,SAAU,GAAI,CAC3C,GAAG,YAAY,MAAM,KAAK,GAAG,UAAU,CAC7C,CAAC,CACH,CACF,CAEA,SAAS,oBAAoB,KAAM,OAAQ,MAAO,CAChD,GAAI,CAAC,MAAQ,CAAC,OAAQ,MAAO,GAC7B,MAAM,EAAI,OAAO,KAAK,EAAE,YAAY,EACpC,GAAI,CAAC,EAAG,MAAO,GACf,IAAI,QAAU,GACd,0BAAmB,KAAM,SAAU,QAAS,CAC1C,GAAI,QAAS,OACb,MAAM,OAAS,QAAQ,iBAAiB,OAAO,EAC/C,QAAS,EAAI,EAAG,EAAI,OAAO,OAAQ,IAAK,CACtC,MAAM,MAAQ,OAAO,CAAC,EAEtB,GAAI,EADU,MAAM,aAAe,IAAI,QAAQ,OAAQ,GAAG,EAAE,KAAK,EAAE,YAAY,EACrE,SAAS,CAAC,EAAG,SAEvB,MAAM,IAAM,MAAM,aAAa,KAAK,EACpC,GAAI,IAAK,CACP,IAAI,KAAO,KAMX,GALA,mBAAmB,KAAM,SAAU,GAAI,CACrC,GAAI,KAAM,OACV,MAAM,IAAM,GAAG,cAAc,IAAM,IAAI,OAAO,GAAG,CAAC,EAC9C,KAAO,MAAQ,QAAO,KAAO,IACnC,CAAC,EACG,KAAM,CACR,kBAAkB,KAAM,KAAK,EAC7B,QAAU,GACV,MACF,CACF,CAEA,IAAI,KAAO,MAAM,cACb,SAAW,EACf,KAAO,MAAQ,OAAS,MAAQ,SAAW,IAAI,CAC7C,MAAM,MAAQ,KAAK,cACjB,sFACF,EACA,GAAI,MAAO,CACT,kBAAkB,MAAO,KAAK,EAC9B,QAAU,GACV,MACF,CACA,KAAO,KAAK,cACZ,UACF,CACF,CACF,CAAC,EACM,OACT,CAGA,SAAS,mBAAmB,IAAK,CAC/B,MAAM,EAAI,OAAO,KAAc,EAAQ,EAAE,KAAK,EAAE,QAAQ,OAAQ,EAAE,EAClE,GAAI,CAAC,EAAG,MAAO,GACf,GAAI,EAAE,QAAQ,GAAG,IAAM,EAAG,OAAO,EACjC,MAAM,OAAS,EAAE,QAAQ,MAAO,EAAE,EAClC,OAAI,OAAO,SAAW,IAAM,OAAO,CAAC,IAAM,IAAY,MAAQ,OAC1D,OAAO,SAAW,IAAM,OAAO,CAAC,IAAM,KAAO,OAAO,CAAC,IAAM,IAAY,MAAQ,OAAO,MAAM,CAAC,EAC7F,OAAO,QAAU,GAAW,IAAM,OAC/B,CACT,CAEA,SAAS,gBAAgB,MAAO,SAAU,CACxC,GAAI,CAAC,OAAS,MAAM,OAAS,QAAU,CAAC,UAAY,SAAS,SAAW,EAAG,MAAO,GAClF,GAAI,CACF,MAAM,GAAK,IAAI,aACT,IAAM,oBAAoB,SAAW,MAAM,KAAK,QAAQ,EAAI,SAClE,QAAS,EAAI,EAAG,EAAI,IAAI,OAAQ,IAAK,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,EAExD,OADA,MAAM,MAAQ,GAAG,MACb,CAAC,MAAM,OAAS,MAAM,MAAM,SAAW,EAAU,IACrD,MAAM,cAAc,IAAI,MAAM,QAAS,CAAE,QAAS,EAAK,CAAC,CAAC,EACzD,MAAM,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,EACnD,GACT,MAAY,CACV,MAAO,EACT,CACF,CAEA,SAAS,yBAAyB,KAAM,OAAQ,gBAAiB,CAC/D,GAAI,CAAC,MAAQ,CAAC,QAAU,CAAC,iBAAmB,CAAC,gBAAgB,OAAS,CAAC,gBAAgB,MAAM,OAC3F,MAAO,GACT,MAAM,EAAI,OAAO,KAAK,EAAE,YAAY,EACpC,GAAI,CAAC,EAAG,MAAO,GACf,IAAI,OAAS,KAgCb,OA/BA,mBAAmB,KAAM,SAAU,QAAS,CAC1C,GAAI,OAAQ,OACZ,MAAM,OAAS,QAAQ,iBAAiB,OAAO,EAC/C,QAAS,EAAI,EAAG,EAAI,OAAO,OAAQ,IAAK,CACtC,MAAM,MAAQ,OAAO,CAAC,EAEtB,GAAI,EADU,MAAM,aAAe,IAAI,QAAQ,OAAQ,GAAG,EAAE,KAAK,EAAE,YAAY,EACrE,SAAS,CAAC,EAAG,SACvB,MAAM,IAAM,MAAM,aAAa,KAAK,EAQpC,GAPI,KACF,mBAAmB,KAAM,SAAU,GAAI,CACrC,GAAI,OAAQ,OACZ,MAAM,IAAM,GAAG,cAAc,IAAM,IAAI,OAAO,GAAG,CAAC,EAC9C,KAAO,IAAI,OAAS,SAAQ,OAAS,IAC3C,CAAC,EAEC,CAAC,OAAQ,CACX,IAAI,KAAO,MAAM,cACb,SAAW,EACf,KAAO,MAAQ,SAAW,IAAI,CAC5B,MAAM,GAAK,KAAK,cAAc,oBAAoB,EAClD,GAAI,GAAI,CACN,OAAS,GACT,KACF,CACA,KAAO,KAAK,cACZ,UACF,CACF,CACA,GAAI,OAAQ,MACd,CACF,CAAC,EACI,OACE,gBAAgB,OAAQ,gBAAgB,KAAK,EADhC,EAEtB,CAEA,SAAS,gBAAgB,IAAK,CAC5B,MAAI,CAAC,KAAO,CAAC,OAAO,GAAG,EAAE,KAAK,EAAU,CAAC,EAClC,OAAO,GAAG,EACd,MAAM,MAAM,EACZ,IAAI,SAAU,EAAG,CAChB,OAAO,EAAE,KAAK,EAAE,YAAY,CAC9B,CAAC,EACA,OAAO,OAAO,CACnB,CAEA,SAAS,mBAAmB,KAAM,QAAS,CACzC,GAAI,CAAC,KAAM,OACX,QAAQ,IAAI,EACR,KAAK,YAAY,mBAAmB,KAAK,WAAY,OAAO,EAChE,MAAM,GAAK,KAAK,SAChB,GAAI,GACF,QAAS,EAAI,EAAG,EAAI,GAAG,OAAQ,IAAK,mBAAmB,GAAG,CAAC,EAAG,OAAO,CAEzE,CAEA,SAAS,6BAA6B,KAAM,CAC1C,MAAM,IAAM,CAAC,EACb,0BAAmB,KAAM,SAAU,EAAG,CAChC,EAAE,UAAY,SAAW,EAAE,OAAS,QAAQ,IAAI,KAAK,CAAC,CAC5D,CAAC,EACM,GACT,CAEA,SAAS,eAAe,GAAI,CAC1B,GAAI,CAAC,IAAM,CAAC,GAAG,QAAS,MAAO,GAC/B,MAAM,EAAI,GAAG,QAAQ,YAAY,EAEjC,OADI,IAAM,eAAiB,EAAE,QAAQ,WAAW,IAAM,IAClD,EAAE,QAAQ,aAAa,IAAM,IAAM,EAAE,QAAQ,YAAY,IAAM,EAErE,CAEA,SAAS,kBAAkB,GAAI,CAC7B,MAAM,MAAQ,CAAC,EACf,GAAI,CAAC,GAAG,aAAc,MAAO,GAC7B,MAAM,IACJ,GAAG,aAAa,OAAO,GACvB,GAAG,aAAa,oBAAoB,GACpC,GAAG,aAAa,qBAAqB,EACnC,KAAK,MAAM,KAAK,GAAG,EACvB,MAAM,KAAO,GAAG,aAAa,YAAY,EACrC,MAAM,MAAM,KAAK,IAAI,EACzB,MAAM,GAAK,GAAG,aAAa,MAAM,EACjC,OAAI,IAAI,MAAM,KAAK,EAAE,EACd,MAAM,KAAK,GAAG,EAAE,YAAY,CACrC,CAEA,SAAS,2BAA2B,KAAM,OAAQ,CAChD,MAAM,EAAI,OAAO,YAAY,EACvB,MAAQ,CAAC,EACf,0BAAmB,KAAM,SAAU,GAAI,CACrC,GAAI,CAAC,eAAe,EAAE,EAAG,OACZ,kBAAkB,EAAE,EACxB,SAAS,CAAC,GAAG,MAAM,KAAK,EAAE,CACrC,CAAC,EACM,KACT,CAEA,SAAS,4BAA4B,KAAM,CACzC,MAAM,IAAM,CAAC,EACb,0BAAmB,KAAM,SAAU,GAAI,CACjC,eAAe,EAAE,GAAG,IAAI,KAAK,EAAE,CACrC,CAAC,EACM,GACT,CAEA,SAAS,sBAAsB,KAAM,CACnC,IAAI,GAAK,GACT,0BAAmB,KAAM,SAAU,EAAG,CAChC,IACA,EAAE,UAAY,SAAW,EAAE,OAAS,QAAU,EAAE,OAAS,EAAE,MAAM,SAAQ,GAAK,GACpF,CAAC,EACM,EACT,CAEA,SAAS,uBAAuB,KAAM,gBAAiB,CACrD,MAAI,CAAC,MAAQ,CAAC,iBAAmB,CAAC,gBAAgB,OAAS,CAAC,gBAAgB,MAAM,OACzE,GACF,oCAAoC,KAAM,gBAAgB,KAAK,CACxE,CAEA,SAAS,oCAAoC,KAAM,MAAO,CACxD,IAAI,IAAM,KAKV,OAJA,mBAAmB,KAAM,SAAU,EAAG,CAChC,KACA,EAAE,UAAY,SAAW,EAAE,OAAS,SAAQ,IAAM,EACxD,CAAC,EACI,IACE,gBAAgB,IAAK,KAAK,EADhB,EAEnB,CAEA,SAAS,4BAA4B,OAAQ,gBAAiB,CAC5D,GAAI,CAAC,QAAU,CAAC,iBAAmB,CAAC,gBAAgB,OAAS,CAAC,gBAAgB,MAAM,OAClF,MAAO,GACT,GAAI,CACF,MAAM,GAAK,IAAI,aACT,IAAM,MAAM,KAAK,gBAAgB,KAAK,EAC5C,QAAS,EAAI,EAAG,EAAI,IAAI,OAAQ,IAAK,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,EACxD,OAAC,YAAa,WAAY,MAAM,EAAE,QAAQ,SAAU,KAAM,CACxD,MAAM,GAAK,IAAI,UAAU,KAAM,CAAE,QAAS,GAAM,WAAY,GAAM,aAAc,EAAG,CAAC,GAChF,OAAS,YAAc,OAAS,SAAQ,GAAG,eAAe,EAC9D,OAAO,cAAc,EAAE,CACzB,CAAC,EACM,EACT,MAAY,CACV,MAAO,EACT,CACF,CAEA,SAAS,6BAA6B,KAAM,OAAQ,gBAAiB,CACnE,GAAI,CAAC,MAAQ,CAAC,QAAU,CAAC,iBAAmB,CAAC,gBAAgB,OAAS,CAAC,gBAAgB,MAAM,OAC3F,MAAO,GACT,MAAM,EAAI,OAAO,KAAK,EAAE,YAAY,EACpC,GAAI,CAAC,EAAG,MAAO,GACf,IAAI,OAAS,KAUb,OATA,mBAAmB,KAAM,SAAU,GAAI,CACjC,QAEA,EADU,GAAG,cAAgB,GAAG,aAAa,YAAY,GAAM,IACzD,YAAY,EAAE,SAAS,CAAC,GAClC,mBAAmB,GAAI,SAAU,MAAO,CAClC,QACA,MAAM,UAAY,SAAW,MAAM,OAAS,SAAQ,OAAS,MACnE,CAAC,CACH,CAAC,EACI,OACE,gBAAgB,OAAQ,gBAAgB,KAAK,EADhC,EAEtB,CAGA,SAAS,oBAAoB,KAAM,UAAW,YAAa,kBAAmB,iBAAkB,UAAW,CACzG,GAAI,CAAC,aAAe,CAAC,YAAY,OAAS,CAAC,YAAY,MAAM,OAAQ,MAAO,GAC5E,IAAI,QAAU,gBAAgB,SAAS,EAClC,QAAQ,SAAQ,QAAU,CAAC,MAAM,GACtC,IAAI,EACA,EACJ,IAAK,EAAI,EAAG,EAAI,QAAQ,OAAQ,IAC9B,GAAI,yBAAyB,KAAM,QAAQ,CAAC,EAAG,WAAW,EAAG,MAAO,GAEtE,IAAK,EAAI,EAAG,EAAI,QAAQ,OAAQ,IAC9B,GAAI,6BAA6B,KAAM,QAAQ,CAAC,EAAG,WAAW,EAAG,MAAO,GAE1E,IAAK,EAAI,EAAG,EAAI,QAAQ,OAAQ,IAAK,CACnC,MAAM,MAAQ,2BAA2B,KAAM,QAAQ,CAAC,CAAC,EACzD,IAAK,EAAI,EAAG,EAAI,MAAM,OAAQ,IAG5B,GAFI,uBAAuB,MAAM,CAAC,EAAG,WAAW,IAChD,4BAA4B,MAAM,CAAC,EAAG,WAAW,EAC7C,sBAAsB,MAAM,CAAC,CAAC,GAAG,MAAO,EAEhD,CACA,GAAI,kBAAoB,iBAAiB,OAAS,WAAa,WAAa,EAAG,CAC7E,MAAM,GAAK,iBAAiB,SAAS,EAGrC,GAFI,uBAAuB,GAAI,WAAW,IAC1C,4BAA4B,GAAI,WAAW,EACvC,sBAAsB,EAAE,GAAG,MAAO,EACxC,CACA,MAAI,sBAAqB,kBAAkB,OAAS,WAAa,WAAa,GACxE,gBAAgB,kBAAkB,SAAS,EAAG,YAAY,KAAK,EAGvE,CAGA,SAAS,eAAe,KAAM,CAC5B,GAAI,CAAC,KAAM,OAAO,KAClB,IAAI,EAAI,KAAK,cAAc,MAAM,EACjC,GAAI,EAAG,OAAO,EACd,MAAM,IAAM,KAAK,iBAAiB,GAAG,EACrC,QAAS,EAAI,EAAG,EAAI,IAAI,OAAQ,IAAK,CACnC,MAAM,GAAK,IAAI,CAAC,EAChB,GAAI,GAAG,WAAY,CAEjB,GADA,EAAI,GAAG,WAAW,cAAc,MAAM,EAClC,EAAG,OAAO,EACd,MAAM,MAAQ,GAAG,WAAW,iBAAiB,GAAG,EAChD,QAAS,EAAI,EAAG,EAAI,MAAM,OAAQ,IAChC,GAAI,MAAM,CAAC,EAAE,aACX,EAAI,MAAM,CAAC,EAAE,WAAW,cAAc,MAAM,EACxC,GAAG,OAAO,CAGpB,CACF,CACA,OAAO,IACT,CAEA,SAAS,yBAA0B,CACjC,MAAM,KACJ,SAAS,cAAc,wDAAwD,GAC/E,SAAS,cAAc,iDAAiD,EAC1E,GAAI,CAAC,KAAM,OAAO,KAClB,MAAM,KAAO,KAAK,mBAClB,GAAI,CAAC,KAAM,OAAO,KAClB,IAAI,EAAI,eAAe,IAAI,EAG3B,GAFI,IACJ,EAAI,KAAK,cAAc,MAAM,EACzB,GAAG,OAAO,EACd,MAAM,OAAS,KAAK,iBAAiB,GAAG,EACxC,QAAS,EAAI,EAAG,EAAI,OAAO,OAAQ,IACjC,GAAI,OAAO,CAAC,EAAE,aACZ,EAAI,OAAO,CAAC,EAAE,WAAW,cAAc,MAAM,EACzC,GAAG,OAAO,EAGlB,OAAO,IACT,CAGA,IAAI,iBAAmB,OAAO,WAAW,oBAAoB,EACzD,kBAAoB,KACpB,oBAAsB,KAE1B,SAAS,wBAAwB,QAAS,SAAU,CAClD,IAAI,IAAM,SAAS,QAAQ,SAAS,aAAa,EAC7C,EAAI,IAAM,IAAI,YAAc,GAChC,QAAQ,YAAc,EAAE,QAAQ,OAAQ,GAAG,EAAE,KAAK,CACpD,CAEA,SAAS,wBAAyB,CAChC,GAAK,kBACL,KAAI,EAAI,kBACR,kBAAoB,KACpB,SAAS,gBAAgB,UAAU,OAAO,sBAAsB,EAC5D,EAAE,SAAS,EAAE,QAAQ,aAAa,gBAAiB,OAAO,EAC1D,EAAE,UAAU,SAAS,oBAAoB,UAAW,EAAE,QAAQ,EAC9D,EAAE,UAAU,EAAE,SAAS,UAAU,OAAO,SAAS,EACjD,EAAE,OAAO,EAAE,MAAM,UAAU,OAAO,SAAS,EAC/C,OAAO,WAAW,UAAY,CAG5B,GAFI,EAAE,UAAY,EAAE,SAAS,YAAY,EAAE,SAAS,WAAW,YAAY,EAAE,QAAQ,EACjF,EAAE,OAAS,EAAE,MAAM,YAAY,EAAE,MAAM,WAAW,YAAY,EAAE,KAAK,EACrE,EAAE,WAAa,OAAO,EAAE,UAAU,OAAU,WAC9C,GAAI,CACF,EAAE,UAAU,MAAM,CAAE,cAAe,EAAK,CAAC,CAC3C,MAAY,CAAC,CACjB,EAAG,GAAG,EACR,CAEA,SAAS,sBAAsB,SAAU,QAAS,KAAM,CAEtD,GADA,uBAAuB,EACnB,CAAC,iBAAiB,QAAS,OAE/B,IAAI,UAAY,SAChB,GAAI,SAAS,IAAM,KAAK,cAAe,CACrC,IAAI,GAAK,KAAK,cAAc,cAAgB,IAAI,OAAO,SAAS,EAAE,EAAI,IAAI,EACtE,IAAM,GAAG,cAAa,UAAY,GAAG,YAAY,QAAQ,OAAQ,GAAG,EAAE,KAAK,EACjF,CAEA,QAAQ,aAAa,gBAAiB,MAAM,EAC5C,IAAI,UAAY,SAAS,cAErB,SAAW,SAAS,cAAc,KAAK,EAC3C,SAAS,UAAY,2BACrB,SAAS,aAAa,cAAe,MAAM,EAE3C,IAAI,MAAQ,SAAS,cAAc,KAAK,EACxC,MAAM,UAAY,wBAClB,MAAM,aAAa,OAAQ,QAAQ,EACnC,MAAM,aAAa,aAAc,MAAM,EACvC,MAAM,aAAa,aAAc,SAAS,EAE1C,IAAI,KAAO,SAAS,cAAc,KAAK,EACvC,KAAK,UAAY,uBACjB,KAAK,aAAa,cAAe,MAAM,EAEvC,IAAI,KAAO,SAAS,cAAc,KAAK,EACvC,KAAK,UAAY,uBAEjB,IAAI,SAAW,SAAS,cAAc,QAAQ,EAC9C,SAAS,KAAO,SAChB,SAAS,UAAY,wBACrB,SAAS,aAAa,aAAc,OAAO,EAC3C,SAAS,UAAY,UAErB,IAAI,GAAK,SAAS,cAAc,KAAK,EACrC,GAAG,UAAY,wBACf,GAAG,YAAc,UAEjB,KAAK,YAAY,QAAQ,EACzB,KAAK,YAAY,EAAE,EAEnB,IAAI,KAAO,SAAS,cAAc,KAAK,EACvC,KAAK,UAAY,uBACjB,KAAK,aAAa,OAAQ,SAAS,EAEnC,IAAI,EACJ,IAAK,EAAI,EAAG,EAAI,SAAS,QAAQ,OAAQ,KACtC,SAAU,IAAK,CACd,GAAI,KAAI,SACR,KAAI,IAAM,SAAS,cAAc,QAAQ,EACzC,IAAI,KAAO,SACX,IAAI,UAAY,yBAChB,IAAI,aAAa,OAAQ,QAAQ,EACjC,IAAI,aAAa,gBAAiB,IAAI,SAAW,OAAS,OAAO,EACjE,IAAI,YAAc,IAAI,YAAY,QAAQ,OAAQ,GAAG,EAAE,KAAK,EACxD,IAAI,UAAU,IAAI,UAAU,IAAI,aAAa,EACjD,IAAI,iBAAiB,QAAS,UAAY,CACxC,IAAI,EAAI,IAAI,MACR,SAAS,QAAU,IACrB,SAAS,MAAQ,EACjB,SAAS,cAAc,IAAI,MAAM,QAAS,CAAE,QAAS,EAAK,CAAC,CAAC,EAC5D,SAAS,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,GAE/D,wBAAwB,QAAS,QAAQ,EACzC,uBAAuB,CACzB,CAAC,EACD,KAAK,YAAY,GAAG,EACtB,GAAG,SAAS,QAAQ,CAAC,CAAC,EAGxB,MAAM,YAAY,IAAI,EACtB,MAAM,YAAY,IAAI,EACtB,MAAM,YAAY,IAAI,EAEtB,SAAS,KAAK,YAAY,QAAQ,EAClC,SAAS,KAAK,YAAY,KAAK,EAE/B,SAAS,gBAAgB,UAAU,IAAI,sBAAsB,EAE7D,SAAS,SAAS,GAAI,CAChB,GAAG,MAAQ,WACb,GAAG,eAAe,EAClB,uBAAuB,EAE3B,CACA,SAAS,iBAAiB,UAAW,QAAQ,EAE7C,kBAAoB,CAClB,SACA,MACA,QACA,UACA,QACF,EAEA,SAAS,iBAAiB,QAAS,sBAAsB,EACzD,SAAS,iBAAiB,QAAS,sBAAsB,EACzD,MAAM,iBAAiB,QAAS,SAAU,GAAI,CAC5C,GAAG,gBAAgB,CACrB,CAAC,EAED,OAAO,sBAAsB,UAAY,CACvC,SAAS,UAAU,IAAI,SAAS,EAChC,MAAM,UAAU,IAAI,SAAS,EAC7B,IAAI,MAAQ,KAAK,cAAc,yBAAyB,EACpD,OAAO,MAAM,MAAM,CAAE,cAAe,EAAK,CAAC,CAChD,CAAC,CACH,CAEA,SAAS,iCAAiC,KAAM,CAC9C,GAAK,KACL,wBAAuB,EACvB,IAAI,OAAS,KAAK,iBAAiB,yBAAyB,EAC5D,OAAO,QAAQ,SAAU,MAAO,CAC1B,MAAM,sBACR,MAAM,oBAAoB,MAAM,EAChC,MAAM,oBAAsB,MAE9B,IAAI,IAAM,MAAM,cAAc,gCAAgC,EAC1D,MACF,IAAI,UAAU,OAAO,yBAAyB,EAC9C,IAAI,gBAAgB,UAAU,GAE5B,KAAO,MAAM,aACf,MAAM,WAAW,aAAa,IAAK,KAAK,EACxC,MAAM,WAAW,YAAY,KAAK,EAEtC,CAAC,EACH,CAEA,SAAS,qBAAqB,KAAM,CAClC,GAAK,KACL,IAAI,CAAC,iBAAiB,QAAS,CAC7B,iCAAiC,IAAI,EACrC,MACF,CAEA,KAAK,iBAAiB,kCAAkC,EAAE,QAAQ,SAAU,IAAK,CAC/E,GAAI,KAAI,UACJ,KAAI,QAAQ,yBAAyB,EAEzC,KAAI,MAAQ,SAAS,cAAc,KAAK,EACxC,MAAM,UAAY,yBAClB,IAAI,QAAU,SAAS,cAAc,QAAQ,EAC7C,QAAQ,KAAO,SACf,QAAQ,UAAY,2BACpB,QAAQ,aAAa,gBAAiB,SAAS,EAC/C,QAAQ,aAAa,gBAAiB,OAAO,EAE7C,IAAI,OAAS,IAAI,WACjB,OAAO,aAAa,MAAO,GAAG,EAC9B,MAAM,YAAY,OAAO,EACzB,MAAM,YAAY,GAAG,EAErB,IAAI,UAAU,IAAI,yBAAyB,EAC3C,IAAI,aAAa,WAAY,IAAI,EAEjC,IAAI,GAAK,IAAI,gBAEb,GADA,MAAM,oBAAsB,GACxB,IAAI,GAAI,CACV,IAAI,GAAK,KAAK,cAAc,cAAgB,IAAI,OAAO,IAAI,EAAE,EAAI,IAAI,EACjE,IACF,GAAG,iBACD,QACA,SAAU,GAAI,CACP,iBAAiB,UACtB,GAAG,eAAe,EAClB,QAAQ,MAAM,CAAE,cAAe,EAAK,CAAC,EACrC,sBAAsB,IAAK,QAAS,IAAI,EAC1C,EACA,CAAE,OAAQ,GAAG,MAAO,CACtB,CAEJ,CAEA,wBAAwB,QAAS,GAAG,EACpC,IAAI,iBAAiB,SAAU,UAAY,CACzC,wBAAwB,QAAS,GAAG,CACtC,CAAC,EAED,QAAQ,iBAAiB,QAAS,UAAY,CAC5C,sBAAsB,IAAK,QAAS,IAAI,CAC1C,CAAC,EACH,CAAC,EACH,CAEA,SAAS,6BAA8B,CACrC,SAAS,iBAAiB,iCAAiC,EAAE,QAAQ,SAAU,EAAG,CAC5E,iBAAiB,SACnB,iCAAiC,CAAC,EAClC,qBAAqB,CAAC,GACjB,iCAAiC,CAAC,CAC3C,CAAC,CACH,CAEI,OAAO,iBAAiB,kBAAqB,YAC/C,iBAAiB,iBAAiB,SAAU,UAAY,CACtD,OAAO,aAAa,mBAAmB,EACvC,oBAAsB,OAAO,WAAW,4BAA6B,GAAG,CAC1E,CAAC,EAGH,SAAS,iBAAiB,KAAM,CAC9B,MAAM,MAAQ,KAAK,QAAQ,OAAS,GACpC,GAAI,CAAC,MAAO,OAEZ,MAAM,mBAAqB,KAAK,QAAQ,WAAa,IAAI,KAAK,EACxD,WAAa,KAAK,QAAQ,gBAAkB,+BAA+B,KAAK,EAChF,cAAgB,KAAK,QAAQ,mBAAqB,kCAAkC,KAAK,EAEzF,IAAM,SAAU,OAAQ,CAC5B,OAAO,KAAK,cAAc,IAAM,IAAI,OAAO,MAAQ,IAAM,MAAM,CAAC,CAClE,EAEM,EAAI,CACR,MAAO,SACP,KAAM,WACN,KAAM,iBACN,KAAM,aACN,KAAM,OACR,EAEM,IAAM,SAAU,GAAI,CACxB,MAAM,GAAK,IAAI,EAAE,EACjB,OAAO,GAAK,GAAG,MAAQ,EACzB,EAEM,OAAS,SAAU,EAAG,CAC1B,OAAQ,OAAO,CAAC,EAAI,MAAM,QAAQ,CAAC,EAAI,GACzC,EAEA,SAAS,aAAc,CACrB,MAAM,EAAI,IAAI,QAAQ,EACtB,GAAI,CAAC,EAAG,OACR,QAAS,EAAI,EAAG,GAAK,GAAI,IAAK,CAC5B,MAAM,EAAI,IAAI,OAAO,EAAI,IAAK,EAAI,GAAG,EACjC,IAAM,KAAI,EAAE,SAAW,IAC3B,EAAE,IAAI,CAAC,CACT,CACA,EAAE,IAAI,IAAI,OAAO,gBAAiB,eAAe,CAAC,EAElD,MAAM,OAAS,SAAU,GAAI,IAAK,WAAY,CAC5C,MAAM,EAAI,IAAI,EAAE,EACX,IACL,IAAI,QAAQ,SAAU,EAAG,CACvB,MAAM,EAAI,IAAI,OAAO,EAAI,QAAU,OAAO,CAAC,EAAI,IAAK,OAAO,CAAC,CAAC,EACzD,IAAM,aAAY,EAAE,SAAW,IACnC,EAAE,IAAI,CAAC,CACT,CAAC,EACD,EAAE,IAAI,IAAI,OAAO,WAAa,KAAO,QAAU,QAAU,SAAU,QAAQ,CAAC,EAC9E,EAEA,OAAO,QAAS,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,EAAG,GAAG,EAC9C,OAAO,QAAS,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAI,EAAG,GAAG,CACjE,CAEA,SAAS,YAAa,CACpB,MAAM,EAAI,KAAK,cAAc,QAAQ,EACrC,GAAI,GAAK,CAAC,EAAE,SAAS,OACnB,QAAS,EAAI,EAAG,EAAI,GAAI,IAAK,CAC3B,MAAM,IAAM,SAAS,cAAc,GAAG,EACtC,EAAE,YAAY,GAAG,CACnB,CAEJ,CAEA,SAAS,eAAe,GAAI,QAAS,MAAO,CAC1C,MAAM,IAAM,IAAI,OAAO,EACvB,GAAI,CAAC,IAAK,OACV,MAAM,EAAI,IAAI,EAAE,EAChB,IAAI,UAAU,OAAO,OAAQ,EAAE,QAAQ,KAAK,IAAM,IAAM,EAAE,QAAQ,mBAAmB,IAAM,EAAE,CAC/F,CAEA,SAAS,aAAa,SAAU,SAAU,CACxC,MAAM,EAAI,IAAI,QAAQ,EACtB,GAAI,IAAM,UAAY,EAAE,QAAQ,QAAQ,IAAM,GAAI,CAChD,MAAM,EAAI,IAAI,QAAQ,EACtB,OAAO,GAAQ,CACjB,CACA,OAAO,CACT,CAEA,SAAS,UAAW,CAClB,MAAM,EAAI,IAAI,OAAO,EACrB,GAAI,IAAM,SAAU,CAClB,MAAM,GAAK,IAAI,aAAa,EAC5B,OAAO,GAAK,GAAK,QAAU,OAAO,EAAE,EAAI,IAAM,cAChD,CACA,OAAO,EAAI,QAAU,OAAO,CAAC,EAAI,GACnC,CAEA,SAAS,UAAW,CAClB,MAAM,EAAI,IAAI,OAAO,EACrB,GAAI,IAAM,SAAU,CAClB,MAAM,GAAK,IAAI,aAAa,EAC5B,OAAO,GAAK,GAAK,QAAU,OAAO,EAAE,EAAI,IAAM,cAChD,CACA,OAAO,EAAI,QAAU,OAAO,CAAC,EAAI,GACnC,CAEA,SAAS,QAAS,CAChB,MAAO,CACL,QAAS,IAAI,KAAK,EAAE,eAAe,QAAS,CAC1C,IAAK,UACL,MAAO,QACP,KAAM,UACN,KAAM,UACN,OAAQ,SACV,CAAC,EACD,MAAO,EAAE,MACT,KAAM,EAAE,KAAK,QAAQ,QAAQ,IAAM,IAAK,IAAI,YAAY,GAAK,EAAE,KAC/D,KAAM,EAAE,KAAK,QAAQ,QAAQ,IAAM,IAAK,IAAI,YAAY,GAAK,EAAE,KAC/D,OAAQ,aAAa,SAAU,cAAc,EAC7C,MAAO,SAAS,EAChB,MAAO,SAAS,EAChB,KAAM,EAAE,KAAK,QAAQ,QAAQ,IAAM,IAAK,IAAI,YAAY,GAAK,EAAE,KAC/D,QAAS,aAAa,UAAW,eAAe,EAChD,IAAK,aAAa,MAAO,WAAW,EACpC,GAAI,aAAa,KAAM,UAAU,EACjC,GAAI,aAAa,KAAM,UAAU,EACjC,UAAW,aAAa,YAAa,iBAAiB,EACtD,UAAW,aAAa,YAAa,iBAAiB,EACtD,SAAU,aAAa,WAAY,gBAAgB,EACnD,MAAO,aAAa,QAAS,aAAa,EAC1C,IAAK,aAAa,MAAO,WAAW,EACpC,cAAe,aAAa,gBAAiB,qBAAqB,EAClE,cAAe,aAAa,gBAAiB,qBAAqB,EAClE,QAAS,aAAa,UAAW,eAAe,EAChD,OAAQ,aAAa,SAAU,cAAc,EAC7C,OAAQ,aAAa,SAAU,cAAc,EAC7C,UAAW,aAAa,YAAa,iBAAiB,EACtD,IAAK,aAAa,MAAO,WAAW,EACpC,SAAU,IAAI,UAAU,GAAK,IAC7B,QAAS,IAAI,SAAS,EACtB,MAAO,IAAI,OAAO,EAClB,MAAO,IAAI,OAAO,EAClB,QAAS,IAAI,SAAS,EACtB,UAAW,IAAI,WAAW,EAC1B,QAAS,IAAI,SAAS,CACxB,CACF,CAEA,SAAS,yBAAyB,EAAG,CAwBnC,MAvBc,CACZ,oCACA,YAAc,EAAE,QAChB,UAAY,EAAE,MACd,SAAW,EAAE,KACb,SAAW,EAAE,KACb,gBAAY,EAAE,OAAS,MAAQ,EAAE,MAAQ,MAAQ,EAAE,MACnD,SAAW,EAAE,KACb,YAAc,EAAE,QAAU,WAAa,EAAE,IACzC,YAAc,EAAE,GAAK,MAAQ,EAAE,GAC/B,cAAgB,EAAE,UAClB,aAAe,EAAE,UAAY,IAAM,EAAE,SACrC,UAAY,EAAE,MACd,gBACE,CAAC,EAAE,IAAK,EAAE,cAAe,EAAE,cAAe,EAAE,QAAS,EAAE,OAAQ,EAAE,OAAQ,EAAE,UAAW,EAAE,GAAG,EAAE,KAAK,IAAI,EACxG,QAAU,EAAE,SACZ,YAAc,EAAE,QAChB,UAAY,EAAE,MACd,UAAY,EAAE,MACd,YAAc,EAAE,QAChB,cAAgB,EAAE,UAClB,UAAY,EAAE,OAChB,EACa,KAAK;AAAA,CAAI,CACxB,CAEA,SAAS,MAAO,CACd,MAAM,EAAI,OAAO,EACjB,MAAO,CACL,CAAC,wBAAyB,EAAE,OAAO,EACnC,CAAC,oBAAqB,EAAE,KAAK,EAC7B,CAAC,gBAAiB,EAAE,IAAI,EACxB,CAAC,eAAgB,EAAE,IAAI,EACvB,CAAC,SAAU,EAAE,MAAM,EACnB,CAAC,QAAS,EAAE,KAAK,EACjB,CAAC,QAAS,EAAE,KAAK,EACjB,CAAC,YAAa,EAAE,IAAI,EACpB,CAAC,eAAgB,EAAE,OAAO,EAC1B,CAAC,aAAc,EAAE,GAAG,EACpB,CAAC,YAAa,EAAE,EAAE,EAClB,CAAC,YAAa,EAAE,EAAE,EAClB,CAAC,iBAAkB,EAAE,SAAS,EAC9B,CAAC,qBAAsB,EAAE,SAAS,EAClC,CAAC,gBAAiB,EAAE,QAAQ,EAC5B,CAAC,iBAAkB,EAAE,KAAK,EAC1B,CACE,cACA,EAAE,IACA,KACA,EAAE,cACF,KACA,EAAE,cACF,KACA,EAAE,QACF,KACA,EAAE,OACF,KACA,EAAE,OACF,KACA,EAAE,UACF,KACA,EAAE,GACN,EACA,CAAC,qBAAsB,EAAE,SAAW,MAAM,EAC1C,CAAC,UAAW,EAAE,OAAO,EACrB,CAAC,QAAS,EAAE,KAAK,EACjB,CAAC,mBAAoB,EAAE,KAAK,EAC5B,CAAC,iBAAkB,EAAE,OAAO,EAC5B,CAAC,6BAA8B,EAAE,SAAS,EAC1C,CAAC,gCAAiC,EAAE,OAAO,CAC7C,CACF,CAEA,SAAS,eAAe,KAAM,KAAM,CAClC,MAAM,KAAO,IAAI,gBAAgB,EAC3B,OAAS,IAAI,kBAAkB,EACjC,MAAM,KAAK,UAAU,OAAO,MAAM,EAClC,QAAQ,OAAO,UAAU,OAAO,MAAM,EACtC,OAAS,MAAQ,MACnB,KAAK,YAAc,KACnB,KAAK,UAAU,IAAI,MAAM,GAChB,OAAS,QAAU,SAC5B,OAAO,YAAc,KACrB,OAAO,UAAU,IAAI,MAAM,EAE/B,CAEA,SAAS,mBAAoB,CAC3B,MAAM,IAAM,CAAC,UAAW,QAAS,QAAS,UAAW,UAAU,EAC/D,QAAS,EAAI,EAAG,EAAI,IAAI,OAAQ,IAAK,CACnC,MAAM,GAAK,IAAI,IAAI,CAAC,CAAC,EACrB,GAAI,CAAC,IAAM,CAAC,OAAO,GAAG,OAAS,EAAE,EAAE,KAAK,EACtC,WAAM,GAAG,OAAS,GAAG,MAAM,EACpB,EAEX,CACA,MAAO,EACT,CAEA,SAAS,oBAAqB,CAC5B,IAAI,KAAO,KACX,GAAI,kBAAmB,CACrB,MAAM,GAAK,SAAS,cAAc,iBAAiB,EAC/C,KAAI,KAAO,GAAG,QAAQ,MAAM,EAAI,GAAK,GAAG,cAAc,MAAM,EAClE,CAEA,GADK,OAAM,KAAO,wBAAwB,GACtC,CAAC,KAAM,CACT,MAAM,KAAO,SAAS,cAAc,MAAM,GAAK,SAAS,KACxD,KACE,KAAK,cAAc,yBAAyB,GAC5C,KAAK,cAAc,+BAA+B,GAClD,KAAK,cAAc,MAAM,CAC7B,CACA,GAAI,CAAC,KACH,MAAO,CAAE,GAAI,GAAO,OAAQ,SAAU,EAGxC,MAAM,EAAI,OAAO,EACX,QAAU,KAAK,UAAU,CAAC,EAC1B,WAAa,yBAAyB,CAAC,EAEvC,OAAS,oBAAoB,KAAM,UAAW,OAAO,EACrD,MAAQ,oBAAoB,KAAM,aAAc,UAAU,EAE1D,UAAY,KAAK,QAAQ,cAAgB,WAAW,KAAK,EACzD,SAAW,mBAAmB,EAAE,KAAK,EACrB,CACpB,CAAC,KAAK,QAAQ,YAAc,QAAS,EAAE,KAAK,EAC5C,CAAC,KAAK,QAAQ,YAAc,QAAS,QAAQ,EAC7C,CAAC,KAAK,QAAQ,cAAgB,UAAW,EAAE,OAAO,EAClD,CAAC,KAAK,QAAQ,cAAgB,UAAW,EAAE,OAAO,EAClD,CAAC,KAAK,QAAQ,eAAiB,WAAY,EAAE,QAAQ,EACrD,CAAC,SAAU,EAAE,OAAO,EACpB,CAAC,YAAa,EAAE,SAAS,EACzB,CAAC,WAAY,QAAQ,CACvB,EACc,QAAQ,SAAU,KAAM,CACpC,MAAM,IAAM,KAAK,CAAC,EACd,KAAK,oBAAoB,KAAM,IAAK,KAAK,CAAC,CAAC,CACjD,CAAC,EAED,IAAI,aAAe,GACnB,MAAM,UAAY,IAAI,gBAAgB,EAChC,QAAU,IAAI,cAAc,EAC5B,YACH,KAAK,QAAQ,kBAAoB,IAAI,KAAK,GAC3C,kDACI,UACH,KAAK,QAAQ,gBAAkB,IAAI,KAAK,GACzC,gEACI,aAAe,6BAA6B,IAAI,EAChD,iBAAmB,4BAA4B,IAAI,EAEzD,OAAI,WAAa,UAAU,OAAS,UAAU,MAAM,SAC7C,oBAAoB,KAAM,WAAY,UAAW,aAAc,iBAAkB,CAAC,IACrF,cACE,sMAGF,SAAW,QAAQ,OAAS,QAAQ,MAAM,SACvC,oBAAoB,KAAM,SAAU,QAAS,aAAc,iBAAkB,CAAC,IACjF,cACE,mIAIC,CACL,GAAI,QAAU,MACd,OACA,MACA,KACA,YACF,CACF,CAEA,SAAS,QAAS,CAChB,CAAC,SAAU,QAAS,OAAO,EAAE,QAAQ,SAAU,GAAI,CAGjD,MAAM,IAAM,IADV,KAAO,SAAW,eAAiB,KAAO,QAAU,cAAgB,aAC9C,EAClB,IAAM,IAAI,EAAE,EACd,KAAO,KACT,IAAI,UAAU,OACZ,OACA,IAAI,EAAE,EAAE,QAAQ,QAAQ,IAAM,GAAK,IAAI,EAAE,IAAM,QACjD,CAEJ,CAAC,EAED,MAAM,IAAM,IAAI,iBAAiB,EAC3B,IAAM,IAAI,iBAAiB,EAC7B,MAAK,IAAI,YAAc,IAAI,aAAa,EAAI,eAAiB,OAAO,IAAI,aAAa,CAAC,EAAI,IAC1F,MAAK,IAAI,YAAc,IAAI,aAAa,EAAI,eAAiB,OAAO,IAAI,aAAa,CAAC,EAAI,IAE9F,CACE,CAAC,UAAW,gBAAiB,QAAQ,EACrC,CAAC,MAAO,YAAa,QAAQ,EAC7B,CAAC,KAAM,WAAY,QAAQ,EAC3B,CAAC,KAAM,WAAY,QAAQ,EAC3B,CAAC,YAAa,kBAAmB,QAAQ,EACzC,CAAC,YAAa,kBAAmB,QAAQ,EACzC,CAAC,WAAY,iBAAkB,QAAQ,EACvC,CAAC,QAAS,cAAe,QAAQ,EACjC,CAAC,MAAO,YAAa,QAAQ,EAC7B,CAAC,gBAAiB,sBAAuB,QAAQ,EACjD,CAAC,gBAAiB,sBAAuB,QAAQ,EACjD,CAAC,UAAW,gBAAiB,QAAQ,EACrC,CAAC,SAAU,eAAgB,QAAQ,EACnC,CAAC,SAAU,eAAgB,QAAQ,EACnC,CAAC,YAAa,kBAAmB,QAAQ,EACzC,CAAC,MAAO,YAAa,QAAQ,CAC/B,EAAE,QAAQ,SAAU,EAAG,CACrB,eAAe,EAAE,CAAC,EAAG,EAAE,CAAC,EAAG,EAAE,CAAC,CAAC,CACjC,CAAC,EAED,MAAM,GAAK,IAAI,YAAY,EACrB,GAAK,IAAI,YAAY,EACrB,GAAK,IAAI,YAAY,EACvB,IAAI,GAAG,UAAU,OAAO,OAAQ,EAAE,KAAK,QAAQ,QAAQ,IAAM,EAAE,EAC/D,IAAI,GAAG,UAAU,OAAO,OAAQ,EAAE,KAAK,QAAQ,QAAQ,IAAM,EAAE,EAC/D,IAAI,GAAG,UAAU,OAAO,OAAQ,EAAE,KAAK,QAAQ,QAAQ,IAAM,EAAE,EAEnE,IAAI,IAAM,IAAI,SAAS,EACnB,MACF,IAAI,UAAY,WACZ,EAAE,QAAU,WAAa,EAAE,OAAS,YAAW,IAAI,UAAU,IAAI,SAAS,GAC1E,EAAE,QAAU,cAAgB,EAAE,OAAS,eAAc,IAAI,UAAU,IAAI,YAAY,EACnF,EAAE,QAAU,eAAe,IAAI,UAAU,IAAI,YAAY,EACzD,EAAE,OAAS,cAAc,IAAI,UAAU,IAAI,WAAW,EACtD,EAAE,KAAK,QAAQ,YAAY,IAAM,GACnC,IAAI,UAAU,IAAI,YAAY,EACrB,EAAE,KAAK,QAAQ,OAAO,IAAM,GACrC,IAAI,UAAU,IAAI,OAAO,EAEzB,IAAI,UAAU,IAAI,OAAO,GAI7B,MAAM,YAAc,IAAI,aAAa,EACjC,cACF,YAAY,UAAY,KAAK,EAC1B,IAAI,SAAU,IAAK,CAClB,MACE,8BACA,WAAW,IAAI,CAAC,CAAC,EACjB,aACA,WAAW,IAAI,CAAC,GAAK,GAAG,EACxB,YAEJ,CAAC,EACA,KAAK,EAAE,GAGZ,MAAM,EAAI,OAAO,EACX,UAAY,IAAI,YAAY,EAClC,GAAI,UAAW,CACb,MAAM,MAAQ,CAAC,EAAE,MAAO,EAAE,KAAM,EAAE,OAAQ,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC,EAAI,MAAO,EAAE,EAAE,EAC7E,UAAU,UAAY,MACnB,IAAI,SAAU,EAAG,CAChB,MAAO,sBAAwB,WAAW,CAAC,EAAI,SACjD,CAAC,EACA,KAAK,EAAE,CACZ,CACF,CAEA,SAAS,UAAU,MAAO,IAAK,CAC7B,KAAK,iBAAiB,gBAAkB,MAAQ,4BAA8B,MAAQ,UAAU,EAAE,QAChG,SAAU,GAAI,CACZ,GAAG,iBAAiB,QAAS,UAAY,CACvC,KAAK,iBAAiB,gBAAkB,MAAQ,4BAA8B,MAAQ,UAAU,EAAE,QAChG,SAAU,EAAG,CACX,EAAE,UAAU,OAAO,UAAU,EAC7B,IAAI,IAAM,EAAE,cAAc,QAAQ,EAC9B,KAAK,IAAI,OAAO,CACtB,CACF,EACA,GAAG,UAAU,IAAI,UAAU,EACvB,GAAG,UAAU,SAAS,QAAQ,GAChC,GAAG,mBAAmB,YAAa,+BAA+B,EAEhE,GAAG,QAAQ,MACb,EAAE,GAAG,EAAI,GAAG,QAAQ,MAEpB,EAAE,GAAG,EAAI,GAAG,YAAY,KAAK,EAE/B,OAAO,CACT,CAAC,EACD,GAAG,iBAAiB,UAAW,SAAU,GAAI,EACvC,GAAG,MAAQ,SAAW,GAAG,MAAQ,OACnC,GAAG,eAAe,EAClB,GAAG,MAAM,EAEb,CAAC,CACH,CACF,CACF,CAEA,YAAY,EACZ,WAAW,EACX,UAAU,QAAS,OAAO,EAC1B,UAAU,OAAQ,MAAM,EACxB,UAAU,OAAQ,MAAM,EACxB,UAAU,OAAQ,MAAM,EAExB,SAAS,mBAAmB,WAAY,WAAY,CAClD,IAAI,IAAM,IAAI,UAAU,EACpB,GAAK,IAAI,UAAU,EACvB,GAAI,GAAC,KAAO,CAAC,IACb,KAAI,EAAI,IAAI,MACZ,GAAG,YACD,GAAK,EAAE,OAAU,EAAE,SAAW,EAAI,EAAE,CAAC,EAAE,KAAO,EAAE,OAAS,kBAAqB,GAClF,CAEA,IAAI,UAAY,IAAI,gBAAgB,EAChC,QAAU,IAAI,cAAc,EAC5B,WACF,UAAU,iBAAiB,SAAU,UAAY,CAC/C,mBAAmB,iBAAkB,cAAc,CACrD,CAAC,EAEC,SACF,QAAQ,iBAAiB,SAAU,UAAY,CAC7C,mBAAmB,eAAgB,YAAY,CACjD,CAAC,EAGH,KAAK,iBAAiB,yBAAyB,EAAE,QAAQ,SAAU,GAAI,CACrE,GAAG,iBAAiB,QAAS,MAAM,EACnC,GAAG,iBAAiB,SAAU,MAAM,CACtC,CAAC,EAED,qBAAqB,IAAI,EAEzB,SAAS,SAAU,CACjB,IAAI,EAAI,OAAO,EACX,YAAc,KAAK,EACnB,YAAc,CAChB,CAAC,eAAgB,EAAE,SAAW,GAAG,EACjC,CAAC,QAAS,EAAE,OAAS,GAAG,EACxB,CAAC,mBAAoB,EAAE,OAAS,GAAG,EACnC,CAAC,iBAAkB,EAAE,SAAW,GAAG,EACnC,CAAC,6BAA8B,EAAE,WAAa,GAAG,EACjD,CAAC,gCAAiC,EAAE,SAAW,GAAG,CACpD,EAEI,MAAQ,IACR,SAAW,IACX,OAAS,GACT,OAAS,EAEb,SAAS,KAAK,IAAK,SAAU,CAC3B,IAAI,MAAQ,OAAO,GAAG,EAAE,MAAM,KAAK,EAC/B,MAAQ,CAAC,EACT,IAAM,GACV,aAAM,QAAQ,SAAU,EAAG,CACzB,IAAI,KAAO,IAAM,IAAM,IAAM,EAAI,EAC7B,KAAK,OAAS,UACZ,KAAK,MAAM,KAAK,GAAG,EACvB,IAAM,GACD,IAAM,IACf,CAAC,EACG,KAAK,MAAM,KAAK,GAAG,EAChB,MAAM,OAAS,MAAQ,CAAC,GAAG,CACpC,CAEA,SAAS,sBAAsB,GAAI,CACjC,IAAIA,GAAI,GAAK,IACb,OAAAA,IAAK,GACLA,IAAK,GACL,YAAY,QAAQ,SAAU,IAAK,CACjC,IAAI,OAAS,KAAK,IAAI,CAAC,GAAK,IAAK,EAAE,EAC/B,KAAO,KAAK,IAAI,GAAI,OAAO,OAAS,GAAK,OAAS,CAAC,EACvDA,IAAK,IACP,CAAC,EACDA,IAAK,GACLA,IAAK,GACLA,IAAK,GACL,YAAY,QAAQ,SAAU,IAAK,CACjC,IAAI,OAAS,KAAK,IAAI,CAAC,GAAK,IAAK,EAAE,EAC/B,KAAO,KAAK,IAAI,GAAI,OAAO,OAAS,GAAK,OAAS,CAAC,EACvDA,IAAK,IACP,CAAC,EACDA,IAAK,EACLA,IAAK,GACEA,EACT,CAEA,IAAI,MAAQ,SAAW,KAAK,IAAI,EAAG,OAAS,sBAAsB,QAAQ,CAAC,EAEvE,IAAM,CAAC,EACP,EACA,OAAS,CACX,KAAM,CAAC,IAAM,IAAM,GAAI,EACvB,OAAQ,CAAC,KAAO,KAAO,GAAI,EAC3B,KAAM,CAAC,IAAM,IAAM,GAAI,EACvB,MAAO,CAAC,IAAM,IAAM,GAAI,EACxB,KAAM,CAAC,GAAK,IAAM,GAAI,EACtB,KAAM,CAAC,IAAM,IAAM,GAAI,EACvB,MAAO,CAAC,EAAG,EAAG,CAAC,CACjB,EAEA,SAAS,qBAAqB,GAAI,CAChC,GAAI,IAAM,IAAQ,IAAM,IAAM,OAAO,GACrC,OAAQ,GAAI,CACV,IAAK,KACH,MAAO,KACT,IAAK,KACH,MAAO,IACT,IAAK,KACH,MAAO,KACT,IAAK,KACH,MAAO,IACT,IAAK,KACH,MAAO,KACT,IAAK,KACH,MAAO,IACT,QACE,KACJ,CACA,OAAI,IAAM,KAAU,IAAM,IAAe,GAAK,IACvC,IACT,CAEA,SAAS,eAAe,EAAG,CAGzB,QAFI,IAAM,OAAO,CAAC,EACd,IAAM,GACDC,GAAI,EAAGA,GAAI,IAAI,OAAQA,KAAK,CACnC,IAAIC,GAAI,IAAI,WAAWD,EAAC,EACpB,GAAKC,GACT,GAAIA,IAAK,OAAUA,IAAK,OAAUD,GAAI,EAAI,IAAI,OAAQ,CACpD,IAAIE,IAAK,IAAI,WAAWF,GAAI,CAAC,EACzBE,KAAM,OAAUA,KAAM,QACxB,GAAK,QAAYD,GAAI,OAAU,KAAOC,IAAK,MAC3CF,KAEJ,CACA,IAAI,EAAI,qBAAqB,EAAE,EAC3B,GAAK,OAAM,EAAI,IACf,IAAM,GAAM,KAAO,OACd,IAAM,GAAM,KAAO,MACnB,IAAM,GAAM,KAAO,MACnB,EAAI,IAAM,EAAI,IAAK,KAAO,MAAQ,MAAQ,EAAE,SAAS,CAAC,GAAG,MAAM,EAAE,EACrE,KAAO,OAAO,aAAa,CAAC,CACnC,CACA,OAAO,GACT,CAEA,SAAS,IAAI,EAAG,CACd,OAAO,OAAO,CAAC,EACZ,QAAQ,CAAC,EACT,QAAQ,MAAO,EAAE,EACjB,QAAQ,MAAO,EAAE,CACtB,CAEA,SAAS,QAAQ,IAAK,CACpB,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,EAAI,IAAM,IAAI,IAAI,CAAC,CAAC,EAAI,IAAM,IAAI,IAAI,CAAC,CAAC,EAAI,KAAK,CACtE,CAEA,SAAS,UAAU,IAAK,CACtB,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,EAAI,IAAM,IAAI,IAAI,CAAC,CAAC,EAAI,IAAM,IAAI,IAAI,CAAC,CAAC,EAAI,KAAK,CACtE,CAEA,SAAS,KAAK,EAAG,GAAI,EAAG,EAAG,KAAM,OAAQ,MAAO,CAC1C,MAAM,QAAQ,IAAI,EAClB,SACF,UAAU,MAAM,EAChB,IAAI,MAAM,OAAS,GAAK,IAAI,GAE9B,IAAI,KACF,EACE,IACA,GACA,IACA,EACA,IACA,EACA,QACC,MAAQ,OAAS,IAAM,KAAO,IAAM,IACzC,CACF,CAEA,SAAS,KAAK,GAAI,GAAI,GAAI,GAAI,IAAK,MAAO,CACxC,UAAU,KAAO,OAAO,IAAI,EAC5B,IAAI,MAAM,OAAS,GAAK,MAAQ,GAAK,IAAM,GAAK,MAAQ,GAAK,IAAM,GAAK,MAAM,CAChF,CAEA,SAAS,KAAK,EAAG,GAAI,IAAK,KAAM,KAAM,IAAK,CACzC,QAAQ,KAAO,OAAO,IAAI,EAC1B,IAAI,KACF,QACG,MAAQ,MACT,KACC,MAAQ,IACT,eACA,EACA,IACA,GACA,QACA,eAAe,GAAG,EAClB,SACJ,CACF,CAEA,KAAK,EAAG,MAAQ,IAAK,MAAO,IAAK,OAAO,KAAM,KAAM,CAAC,EACrD,KAAK,EAAG,MAAQ,IAAK,MAAO,EAAG,OAAO,OAAQ,KAAM,CAAC,EACrD,KAAK,OAAQ,MAAQ,GAAI,cAAe,GAAI,KAAM,OAAO,KAAK,EAC9D,KAAK,OAAQ,MAAQ,GAAI,4CAA6C,GAAI,KAAM,OAAO,KAAK,EAC5F,KAAK,MAAQ,IAAK,MAAQ,GAAI,EAAE,QAAS,GAAI,KAAM,CAAC,IAAM,GAAK,GAAI,CAAC,EACpE,EAAI,MAAQ,IAEZ,KAAK,OAAQ,EAAG,wBAAyB,GAAI,KAAM,OAAO,IAAI,EAC9D,GAAK,GACL,KAAK,OAAQ,EAAG,MAAQ,OAAQ,EAAG,OAAO,OAAQ,GAAG,EACrD,GAAK,GAEL,IAAI,KAAO,OAAS,GAChB,OAAS,IACT,KAAO,MAAQ,OAAS,EAC5B,YAAY,QAAQ,SAAU,IAAK,IAAK,CACtC,IAAI,EAAI,IAAI,CAAC,EACT,EAAI,IAAI,CAAC,EACT,OAAS,KAAK,GAAK,IAAK,EAAE,EAC1B,KAAO,KAAK,IAAI,GAAI,OAAO,OAAS,GAAK,OAAS,CAAC,EACvD,KAAK,OAAQ,EAAI,KAAO,EAAG,KAAM,KAAM,IAAM,IAAM,EAAI,OAAO,KAAO,KAAM,OAAO,KAAM,EAAG,EAC3F,KAAK,KAAM,EAAI,GAAI,EAAG,KAAM,KAAM,OAAO,KAAK,EAC9C,IAAI,GAAK,EAAI,GACb,OAAO,QAAQ,SAAU,GAAIA,GAAG,CAC9B,KAAK,OAAQ,GAAKA,GAAI,GAAI,GAAI,KAAM,KAAM,OAAO,IAAI,CACvD,CAAC,EACD,GAAK,IACP,CAAC,EAED,GAAK,GACL,KAAK,OAAQ,EAAG,kBAAmB,GAAI,KAAM,OAAO,IAAI,EACxD,GAAK,GACL,KAAK,OAAQ,EAAG,MAAQ,OAAQ,EAAG,OAAO,OAAQ,GAAG,EACrD,GAAK,GACL,YAAY,QAAQ,SAAU,IAAK,IAAK,CACtC,IAAI,EAAI,IAAI,CAAC,EACT,EAAI,IAAI,CAAC,EACT,OAAS,KAAK,GAAK,IAAK,EAAE,EAC1B,KAAO,KAAK,IAAI,GAAI,OAAO,OAAS,GAAK,OAAS,CAAC,EACvD,KAAK,OAAQ,EAAI,KAAO,EAAG,KAAM,KAAM,IAAM,IAAM,EAAI,OAAO,KAAO,KAAM,OAAO,KAAM,EAAG,EAC3F,KAAK,KAAM,EAAI,GAAI,EAAG,KAAM,KAAM,OAAO,KAAK,EAC9C,IAAI,GAAK,EAAI,GACb,OAAO,QAAQ,SAAU,GAAIA,GAAG,CAC9B,KAAK,OAAQ,GAAKA,GAAI,GAAI,GAAI,KAAM,KAAM,OAAO,IAAI,CACvD,CAAC,EACD,GAAK,IACP,CAAC,EAED,GAAK,EACL,KAAK,OAAQ,EAAG,MAAQ,OAAQ,EAAG,OAAO,KAAM,CAAC,EACjD,GAAK,GACL,KAAK,OAAQ,EAAG,uDAAwD,IAAK,KAAM,OAAO,KAAK,EAC/F,KAAK,MAAQ,IAAK,EAAG,sBAAuB,IAAK,KAAM,OAAO,KAAK,EAEnE,IAAI,QAAU,IAAI,KAAK;AAAA,CAAI,EACvB,KAAO,CAAC,EACZ,SAAS,IAAI,EAAG,CACd,YAAK,KAAK,CAAC,EACJ,KAAK,MACd,CACA,IAAI,MAAQ,IACV,mFACF,EACI,MAAQ,IACV,wFACF,EACI,OAAS,IAAI,cAAgB,QAAQ,OAAS;AAAA;AAAA,EAAkB,QAAU;AAAA,UAAa,EACvF,KAAO,IACT,+CACE,MACA,IACA,MACA,gCACA,MACA,YACA,MACA,wBACA,OACA,SACJ,EACI,MAAQ,IAAI,0BAA4B,KAAO,mBAAmB,EAClE,QAAU,IAAI,4BAA8B,MAAQ,SAAS,EAC7D,IAAM;AAAA,EACN,QAAU,CAAC,CAAC,EAChB,KAAK,QAAQ,SAAU,EAAGA,GAAG,CAC3B,QAAQ,KAAK,IAAI,MAAM,EACvB,KAAOA,GAAI,EAAI;AAAA,EAAa,EAAI;AAAA;AAAA,CAClC,CAAC,EACD,IAAI,KAAO,IAAI,OACf,KAAO;AAAA,KAAc,KAAK,OAAS,GAAK;AAAA;AAAA,EACxC,QAAS,EAAI,EAAG,EAAI,QAAQ,OAAQ,IAClC,KAAO,OAAO,QAAQ,CAAC,CAAC,EAAE,SAAS,GAAI,GAAG,EAAI;AAAA,EAEhD,KACE,qBACC,KAAK,OAAS,GACf,UACA,QACA;AAAA;AAAA,EACA,KACA;AAAA,OACF,IAAI,KAAO,IAAI,KAAK,CAAC,GAAG,EAAG,CAAE,KAAM,iBAAkB,CAAC,EAClD,IAAM,IAAI,gBAAgB,IAAI,EAC9B,MAAQ,IAAI,KAAK,EAAE,YAAY,EAAE,MAAM,EAAG,EAAE,EAAE,QAAQ,QAAS,GAAG,EAClE,SAAW,oCAAsC,MAAQ,OAEzD,EAAI,SAAS,cAAc,GAAG,EAClC,EAAE,KAAO,IACT,EAAE,SAAW,SACb,EAAE,aAAa,WAAY,QAAQ,EACnC,EAAE,IAAM,WACR,EAAE,MAAM,SAAW,QACnB,EAAE,MAAM,KAAO,UACf,SAAS,KAAK,YAAY,CAAC,EAC3B,EAAE,MAAM,EACR,SAAS,KAAK,YAAY,CAAC,EAC3B,WAAW,UAAY,CACrB,IAAI,gBAAgB,GAAG,CACzB,EAAG,GAAI,CACT,CAEA,IAAI,UAAY,IAAI,YAAY,EAC5B,WACF,UAAU,iBAAiB,QAAS,UAAY,CAC9C,IAAI,IAAM,IAAI,gBAAgB,EAC1B,GAAK,IAAI,kBAAkB,EAG/B,GAFI,KAAK,IAAI,UAAU,OAAO,MAAM,EAChC,IAAI,GAAG,UAAU,OAAO,MAAM,EAC9B,CAAC,kBAAkB,EAAG,CACxB,eAAe,OAAQ,qCAAqC,EAC5D,MACF,CAEA,IAAI,WAAa,KAAK,cAAc,mCAAmC,EACvE,GACE,OAAO,OAAO,iCAAoC,YAClD,CAAC,OAAO,gCAAgC,UAAU,EAElD,OAGF,SAAS,QAAQ,EAAG,CAClB,IAAI,EAAI,mBAAmB,EAC3B,GAAI,CAAC,EAAE,MAAQ,EAAI,EAAG,CACpB,WAAW,UAAY,CACrB,QAAQ,EAAI,CAAC,CACf,EAAG,GAAG,EACN,MACF,CACA,GAAI,CAAC,EAAE,KAAM,CACX,eACE,OACA,0GACF,EACA,MACF,CACA,GAAI,CAAC,EAAE,GAAI,CACT,eACE,OACA,iMACF,EACA,MACF,CACA,GAAI,CACF,EAAE,KAAK,cAAc,EACjB,EAAE,aACJ,eACE,OACA,iDAAmD,EAAE,YACvD,EAEA,eAAe,KAAM,wCAAwC,CAEjE,MAAc,CACZ,IAAI,GAAK,EAAE,KAAK,cAAc,2CAA2C,EACrE,GAAI,GAAG,MAAM,EAEf,eACE,OACA,mFACF,CACJ,CACF,CACA,QAAQ,CAAC,CACX,CAAC,EAGH,IAAI,OACF,KAAK,cAAc,qBAAqB,GACxC,KAAK,cAAc,YAAY,GAC/B,IAAI,cAAc,EAChB,QACF,OAAO,iBACL,QACA,SAAU,GAAI,CACZ,GAAG,eAAe,EAClB,GAAG,gBAAgB,EACnB,QAAQ,CACV,EACA,EACF,EAGF,OAAO,EAEP,SAAS,iBAAiB,uBAAwB,SAAU,GAAI,CAC1D,IAAM,GAAG,QAAU,GAAG,OAAO,UAAY,GAAG,OAAO,SAAS,IAAI,IAClE,qBAAqB,IAAI,EACzB,OAAO,EAEX,CAAC,CACH,CAEA,SAAS,MAAO,CACd,GAAI,CACF,SAAS,iBAAiB,iCAAiC,EAAE,QAAQ,gBAAgB,CACvF,OAAS,IAAK,CACZ,QAAQ,MAAM,8CAA0C,GAAG,CAC7D,CACF,CAEI,SAAS,aAAe,UAC1B,SAAS,iBAAiB,mBAAoB,IAAI,EAElD,KAAK,CAET,GAAG",
  "names": ["y", "i", "c", "c2"]
}
