@contember/echo 0.0.27 → 0.0.28

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. package/dist/components/Echo.d.ts +3 -0
  2. package/dist/components/atoms/Button.d.ts +7 -0
  3. package/dist/components/atoms/Shape.d.ts +8 -0
  4. package/dist/components/atoms/index.d.ts +1 -0
  5. package/dist/components/icons/CheckCircleIcon.d.ts +3 -0
  6. package/dist/components/icons/ChevronRightIcon.d.ts +3 -0
  7. package/dist/components/icons/ContemberIcon.d.ts +3 -0
  8. package/dist/components/icons/ExternalLinkIcon.d.ts +3 -0
  9. package/dist/components/icons/HighlightIcon.d.ts +3 -0
  10. package/dist/components/icons/PenIcon.d.ts +3 -0
  11. package/dist/components/icons/TrashIcon.d.ts +3 -0
  12. package/dist/components/icons/XCircleIcon.d.ts +3 -0
  13. package/dist/components/icons/XIcon.d.ts +3 -0
  14. package/dist/components/icons/index.d.ts +8 -0
  15. package/dist/components/molecules/ColorSelector.d.ts +2 -0
  16. package/dist/components/molecules/DrawingToolbar.d.ts +2 -0
  17. package/dist/components/molecules/DrawingTooltip.d.ts +2 -0
  18. package/dist/components/molecules/LauncherButton.d.ts +2 -0
  19. package/dist/components/molecules/Notification.d.ts +2 -0
  20. package/dist/components/molecules/ShapeActions.d.ts +2 -0
  21. package/dist/components/molecules/StoredFeedback.d.ts +2 -0
  22. package/dist/components/molecules/WelcomeMessage.d.ts +2 -0
  23. package/dist/components/organisms/DrawingLayer.d.ts +2 -0
  24. package/dist/components/organisms/FeedbackForm.d.ts +2 -0
  25. package/dist/config/defaultText.d.ts +2 -0
  26. package/dist/config/drawingConfig.d.ts +13 -0
  27. package/dist/contexts/EchoContext.d.ts +9 -0
  28. package/dist/contexts/index.d.ts +1 -0
  29. package/dist/echo.es.js +0 -1
  30. package/dist/echo.umd.js +0 -1
  31. package/dist/stores/drawingStore.d.ts +39 -0
  32. package/dist/stores/echoStore.d.ts +14 -0
  33. package/dist/stores/feedbackStore.d.ts +12 -0
  34. package/dist/stores/index.d.ts +4 -0
  35. package/dist/stores/widgetStore.d.ts +19 -0
  36. package/dist/types.d.ts +87 -0
  37. package/dist/utils/color.d.ts +2 -0
  38. package/dist/utils/common.d.ts +1 -0
  39. package/dist/utils/console.d.ts +4 -0
  40. package/dist/utils/debounce.d.ts +1 -0
  41. package/dist/utils/device.d.ts +1 -0
  42. package/dist/utils/events.d.ts +5 -0
  43. package/dist/utils/format.d.ts +1 -0
  44. package/dist/utils/geometry.d.ts +8 -0
  45. package/dist/utils/index.d.ts +13 -0
  46. package/dist/utils/listeners.d.ts +22 -0
  47. package/dist/utils/screenshot.d.ts +2 -0
  48. package/dist/utils/storage.d.ts +28 -0
  49. package/dist/utils/svg.d.ts +13 -0
  50. package/dist/utils/validators.d.ts +2 -0
  51. package/package.json +1 -1
  52. package/dist/echo.es.js.map +0 -1
  53. package/dist/echo.umd.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"echo.es.js","sources":["../../node_modules/solid-js/web/dist/web.js","../src/utils/debounce.ts","../src/utils/listeners.ts","../src/utils/storage.ts","../../node_modules/solid-js/store/dist/store.js","../src/config/drawingConfig.ts","../src/utils/color.ts","../src/utils/common.ts","../src/utils/console.ts","../src/utils/device.ts","../src/utils/events.ts","../src/utils/geometry.ts","../src/utils/screenshot.ts","../src/utils/svg.ts","../src/utils/validators.ts","../src/stores/drawingStore.ts","../src/stores/feedbackStore.ts","../src/stores/widgetStore.ts","../src/stores/echoStore.ts","../src/contexts/EchoContext.tsx","../src/components/icons/ChevronRightIcon.tsx","../src/components/icons/ContemberIcon.tsx","../src/components/icons/HighlightIcon.tsx","../src/components/icons/PenIcon.tsx","../src/components/icons/TrashIcon.tsx","../src/components/icons/CheckCircleIcon.tsx","../src/components/icons/XCircleIcon.tsx","../src/components/icons/XIcon.tsx","../src/components/molecules/ColorSelector.tsx","../src/components/molecules/DrawingToolbar.tsx","../src/components/atoms/Button.tsx","../src/components/icons/ExternalLinkIcon.tsx","../src/components/molecules/StoredFeedback.tsx","../src/components/molecules/LauncherButton.tsx","../src/components/molecules/Notification.tsx","../src/components/molecules/WelcomeMessage.tsx","../src/components/atoms/Shape.tsx","../src/components/molecules/DrawingTooltip.tsx","../src/components/molecules/ShapeActions.tsx","../src/components/organisms/DrawingLayer.tsx","../src/components/organisms/FeedbackForm.tsx","../src/components/Echo.tsx","../src/config/defaultText.ts","../src/index.tsx"],"sourcesContent":["import {\n createRoot,\n createRenderEffect,\n untrack,\n sharedConfig,\n enableHydration,\n getOwner,\n createEffect,\n runWithOwner,\n createMemo,\n createSignal,\n onCleanup,\n splitProps\n} from \"solid-js\";\nexport {\n ErrorBoundary,\n For,\n Index,\n Match,\n Show,\n Suspense,\n SuspenseList,\n Switch,\n createComponent,\n createRenderEffect as effect,\n getOwner,\n createMemo as memo,\n mergeProps,\n untrack\n} from \"solid-js\";\n\nconst booleans = [\n \"allowfullscreen\",\n \"async\",\n \"autofocus\",\n \"autoplay\",\n \"checked\",\n \"controls\",\n \"default\",\n \"disabled\",\n \"formnovalidate\",\n \"hidden\",\n \"indeterminate\",\n \"inert\",\n \"ismap\",\n \"loop\",\n \"multiple\",\n \"muted\",\n \"nomodule\",\n \"novalidate\",\n \"open\",\n \"playsinline\",\n \"readonly\",\n \"required\",\n \"reversed\",\n \"seamless\",\n \"selected\"\n];\nconst Properties = /*#__PURE__*/ new Set([\n \"className\",\n \"value\",\n \"readOnly\",\n \"formNoValidate\",\n \"isMap\",\n \"noModule\",\n \"playsInline\",\n ...booleans\n]);\nconst ChildProperties = /*#__PURE__*/ new Set([\n \"innerHTML\",\n \"textContent\",\n \"innerText\",\n \"children\"\n]);\nconst Aliases = /*#__PURE__*/ Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/ Object.assign(Object.create(null), {\n class: \"className\",\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? (a[tagName] ? a[\"$\"] : undefined) : a;\n}\nconst DelegatedEvents = /*#__PURE__*/ new Set([\n \"beforeinput\",\n \"click\",\n \"dblclick\",\n \"contextmenu\",\n \"focusin\",\n \"focusout\",\n \"input\",\n \"keydown\",\n \"keyup\",\n \"mousedown\",\n \"mousemove\",\n \"mouseout\",\n \"mouseover\",\n \"mouseup\",\n \"pointerdown\",\n \"pointermove\",\n \"pointerout\",\n \"pointerover\",\n \"pointerup\",\n \"touchend\",\n \"touchmove\",\n \"touchstart\"\n]);\nconst SVGElements = /*#__PURE__*/ new Set([\n \"altGlyph\",\n \"altGlyphDef\",\n \"altGlyphItem\",\n \"animate\",\n \"animateColor\",\n \"animateMotion\",\n \"animateTransform\",\n \"circle\",\n \"clipPath\",\n \"color-profile\",\n \"cursor\",\n \"defs\",\n \"desc\",\n \"ellipse\",\n \"feBlend\",\n \"feColorMatrix\",\n \"feComponentTransfer\",\n \"feComposite\",\n \"feConvolveMatrix\",\n \"feDiffuseLighting\",\n \"feDisplacementMap\",\n \"feDistantLight\",\n \"feDropShadow\",\n \"feFlood\",\n \"feFuncA\",\n \"feFuncB\",\n \"feFuncG\",\n \"feFuncR\",\n \"feGaussianBlur\",\n \"feImage\",\n \"feMerge\",\n \"feMergeNode\",\n \"feMorphology\",\n \"feOffset\",\n \"fePointLight\",\n \"feSpecularLighting\",\n \"feSpotLight\",\n \"feTile\",\n \"feTurbulence\",\n \"filter\",\n \"font\",\n \"font-face\",\n \"font-face-format\",\n \"font-face-name\",\n \"font-face-src\",\n \"font-face-uri\",\n \"foreignObject\",\n \"g\",\n \"glyph\",\n \"glyphRef\",\n \"hkern\",\n \"image\",\n \"line\",\n \"linearGradient\",\n \"marker\",\n \"mask\",\n \"metadata\",\n \"missing-glyph\",\n \"mpath\",\n \"path\",\n \"pattern\",\n \"polygon\",\n \"polyline\",\n \"radialGradient\",\n \"rect\",\n \"set\",\n \"stop\",\n \"svg\",\n \"switch\",\n \"symbol\",\n \"text\",\n \"textPath\",\n \"tref\",\n \"tspan\",\n \"use\",\n \"view\",\n \"vkern\"\n]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/ new Set([\n \"html\",\n \"base\",\n \"head\",\n \"link\",\n \"meta\",\n \"style\",\n \"title\",\n \"body\",\n \"address\",\n \"article\",\n \"aside\",\n \"footer\",\n \"header\",\n \"main\",\n \"nav\",\n \"section\",\n \"body\",\n \"blockquote\",\n \"dd\",\n \"div\",\n \"dl\",\n \"dt\",\n \"figcaption\",\n \"figure\",\n \"hr\",\n \"li\",\n \"ol\",\n \"p\",\n \"pre\",\n \"ul\",\n \"a\",\n \"abbr\",\n \"b\",\n \"bdi\",\n \"bdo\",\n \"br\",\n \"cite\",\n \"code\",\n \"data\",\n \"dfn\",\n \"em\",\n \"i\",\n \"kbd\",\n \"mark\",\n \"q\",\n \"rp\",\n \"rt\",\n \"ruby\",\n \"s\",\n \"samp\",\n \"small\",\n \"span\",\n \"strong\",\n \"sub\",\n \"sup\",\n \"time\",\n \"u\",\n \"var\",\n \"wbr\",\n \"area\",\n \"audio\",\n \"img\",\n \"map\",\n \"track\",\n \"video\",\n \"embed\",\n \"iframe\",\n \"object\",\n \"param\",\n \"picture\",\n \"portal\",\n \"source\",\n \"svg\",\n \"math\",\n \"canvas\",\n \"noscript\",\n \"script\",\n \"del\",\n \"ins\",\n \"caption\",\n \"col\",\n \"colgroup\",\n \"table\",\n \"tbody\",\n \"td\",\n \"tfoot\",\n \"th\",\n \"thead\",\n \"tr\",\n \"button\",\n \"datalist\",\n \"fieldset\",\n \"form\",\n \"input\",\n \"label\",\n \"legend\",\n \"meter\",\n \"optgroup\",\n \"option\",\n \"output\",\n \"progress\",\n \"select\",\n \"textarea\",\n \"details\",\n \"dialog\",\n \"menu\",\n \"summary\",\n \"details\",\n \"slot\",\n \"template\",\n \"acronym\",\n \"applet\",\n \"basefont\",\n \"bgsound\",\n \"big\",\n \"blink\",\n \"center\",\n \"content\",\n \"dir\",\n \"font\",\n \"frame\",\n \"frameset\",\n \"hgroup\",\n \"image\",\n \"keygen\",\n \"marquee\",\n \"menuitem\",\n \"nobr\",\n \"noembed\",\n \"noframes\",\n \"plaintext\",\n \"rb\",\n \"rtc\",\n \"shadow\",\n \"spacer\",\n \"strike\",\n \"tt\",\n \"xmp\",\n \"a\",\n \"abbr\",\n \"acronym\",\n \"address\",\n \"applet\",\n \"area\",\n \"article\",\n \"aside\",\n \"audio\",\n \"b\",\n \"base\",\n \"basefont\",\n \"bdi\",\n \"bdo\",\n \"bgsound\",\n \"big\",\n \"blink\",\n \"blockquote\",\n \"body\",\n \"br\",\n \"button\",\n \"canvas\",\n \"caption\",\n \"center\",\n \"cite\",\n \"code\",\n \"col\",\n \"colgroup\",\n \"content\",\n \"data\",\n \"datalist\",\n \"dd\",\n \"del\",\n \"details\",\n \"dfn\",\n \"dialog\",\n \"dir\",\n \"div\",\n \"dl\",\n \"dt\",\n \"em\",\n \"embed\",\n \"fieldset\",\n \"figcaption\",\n \"figure\",\n \"font\",\n \"footer\",\n \"form\",\n \"frame\",\n \"frameset\",\n \"head\",\n \"header\",\n \"hgroup\",\n \"hr\",\n \"html\",\n \"i\",\n \"iframe\",\n \"image\",\n \"img\",\n \"input\",\n \"ins\",\n \"kbd\",\n \"keygen\",\n \"label\",\n \"legend\",\n \"li\",\n \"link\",\n \"main\",\n \"map\",\n \"mark\",\n \"marquee\",\n \"menu\",\n \"menuitem\",\n \"meta\",\n \"meter\",\n \"nav\",\n \"nobr\",\n \"noembed\",\n \"noframes\",\n \"noscript\",\n \"object\",\n \"ol\",\n \"optgroup\",\n \"option\",\n \"output\",\n \"p\",\n \"param\",\n \"picture\",\n \"plaintext\",\n \"portal\",\n \"pre\",\n \"progress\",\n \"q\",\n \"rb\",\n \"rp\",\n \"rt\",\n \"rtc\",\n \"ruby\",\n \"s\",\n \"samp\",\n \"script\",\n \"section\",\n \"select\",\n \"shadow\",\n \"slot\",\n \"small\",\n \"source\",\n \"spacer\",\n \"span\",\n \"strike\",\n \"strong\",\n \"style\",\n \"sub\",\n \"summary\",\n \"sup\",\n \"table\",\n \"tbody\",\n \"td\",\n \"template\",\n \"textarea\",\n \"tfoot\",\n \"th\",\n \"thead\",\n \"time\",\n \"title\",\n \"tr\",\n \"track\",\n \"tt\",\n \"u\",\n \"ul\",\n \"var\",\n \"video\",\n \"wbr\",\n \"xmp\",\n \"input\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\"\n]);\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? (bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart]) : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document\n ? code()\n : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG) {\n let node;\n const create = () => {\n const t = document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : t.content.firstChild;\n };\n const fn = isImportNode\n ? () => untrack(() => document.importNode(node || (node = create()), true))\n : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setProperty(node, name, value) {\n if (isHydrating(node)) return;\n node[name] = value;\n}\nfunction setAttribute(node, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(name);\n else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttributeNS(namespace, name);\n else node.setAttributeNS(namespace, name, value);\n}\nfunction setBoolAttribute(node, name, value) {\n if (isHydrating(node)) return;\n value ? node.setAttribute(name, \"\") : node.removeAttribute(name);\n}\nfunction className(node, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(\"class\");\n else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, (handler[0] = e => handlerFn.call(node, handler[1], e)));\n } else node.addEventListener(name, handler, typeof handler !== \"function\" && handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return (nodeStyle.cssText = value);\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(\n () => (prevProps.children = insertExpression(node, props.children, prevProps.children))\n );\n }\n createRenderEffect(() => typeof props.ref === \"function\" && use(props.ref, node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = id => globalThis._$HY.r[id];\n sharedConfig.has = id => id in globalThis._$HY.r;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n try {\n gatherHydratable(element, options.renderId);\n return render(code, element, [...element.childNodes], options);\n } finally {\n sharedConfig.context = null;\n }\n}\nfunction getNextElement(template) {\n let node,\n key,\n hydrating = isHydrating();\n if (!hydrating || !(node = sharedConfig.registry.get((key = getHydrationKey())))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (isHydrating(start)) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"$\") count++;\n else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const { completed, events } = sharedConfig;\n if (!events) return;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n events.shift();\n eventHandler(e);\n }\n if (sharedConfig.done) {\n sharedConfig.events = _$HY.events = null;\n sharedConfig.completed = _$HY.completed = null;\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction isHydrating(node) {\n return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++)\n node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef, props) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev, typeof prev !== \"function\" && prev);\n value && node.addEventListener(e, value, typeof value !== \"function\" && value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if (prop.slice(0, 5) === \"bool:\") {\n setBoolAttribute(node, prop.slice(5), value);\n } else if (\n (forceProp = prop.slice(0, 5) === \"prop:\") ||\n (isChildProp = ChildProperties.has(prop)) ||\n (!isSVG &&\n ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop)))) ||\n (isCE = node.nodeName.includes(\"-\") || \"is\" in props)\n ) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n } else if (isHydrating(node)) return value;\n if (prop === \"class\" || prop === \"className\") className(node, value);\n else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;\n else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);\n else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n if (sharedConfig.registry && sharedConfig.events) {\n if (sharedConfig.events.find(([el, ev]) => ev === e)) return;\n }\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value =>\n Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host &&\n typeof node.host !== \"string\" &&\n !node.host._$host &&\n node.contains(e.target) &&\n retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n } else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n const hydrating = isHydrating(parent);\n if (hydrating) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();\n else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = (multi && current[0] && current[0].parentNode) || parent;\n if (t === \"string\" || t === \"number\") {\n if (hydrating) return current;\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (hydrating) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => (current = insertExpression(parent, array, current, marker, true)));\n return () => current;\n }\n if (hydrating) {\n if (!array.length) return current;\n if (marker === undefined) return (current = [...parent.childNodes]);\n let node = array[0];\n if (node.parentNode !== parent) return current;\n const nodes = [node];\n while ((node = node.nextSibling) !== marker) nodes.push(node);\n return (current = nodes);\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (hydrating && value.parentNode) return (current = multi ? [value] : value);\n if (Array.isArray(current)) {\n if (multi) return (current = cleanChildren(parent, current, marker, value));\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false);\n else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic =\n normalizeIncomingArray(\n normalized,\n Array.isArray(item) ? item : [item],\n Array.isArray(prev) ? prev : [prev]\n ) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);\n else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return (parent.textContent = \"\");\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i)\n isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);\n else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key))\n sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n return sharedConfig.getNextContextId();\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nconst voidFn = () => undefined;\nconst RequestContext = Symbol();\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName);\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const { useShadow } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(\n () => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => (!clean() ? content() : dispose()), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot =\n useShadow && container.attachShadow\n ? container.attachShadow({\n mode: \"open\"\n })\n : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.removeChild(container));\n }\n },\n undefined,\n {\n render: !hydrating\n }\n );\n return marker;\n}\nfunction Dynamic(props) {\n const [p, others] = splitProps(props, [\"component\"]);\n const cached = createMemo(() => p.component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(others));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg);\n spread(el, others, isSvg);\n return el;\n }\n });\n}\n\nexport {\n Aliases,\n voidFn as Assets,\n ChildProperties,\n DOMElements,\n DelegatedEvents,\n Dynamic,\n Hydration,\n voidFn as HydrationScript,\n NoHydration,\n Portal,\n Properties,\n RequestContext,\n SVGElements,\n SVGNamespace,\n addEventListener,\n assign,\n classList,\n className,\n clearDelegatedEvents,\n delegateEvents,\n dynamicProperty,\n escape,\n voidFn as generateHydrationScript,\n voidFn as getAssets,\n getHydrationKey,\n getNextElement,\n getNextMarker,\n getNextMatch,\n getPropAlias,\n voidFn as getRequestEvent,\n hydrate,\n innerHTML,\n insert,\n isDev,\n isServer,\n render,\n renderToStream,\n renderToString,\n renderToStringAsync,\n resolveSSRNode,\n runHydrationEvents,\n setAttribute,\n setAttributeNS,\n setBoolAttribute,\n setProperty,\n spread,\n ssr,\n ssrAttribute,\n ssrClassList,\n ssrElement,\n ssrHydrationKey,\n ssrSpread,\n ssrStyle,\n style,\n template,\n use,\n voidFn as useAssets\n};\n","export const debounce = <T extends (...args: any[]) => void>(func: T, wait: number) => {\n\tlet timeout: number | undefined\n\n\treturn (...args: Parameters<T>) => {\n\t\tclearTimeout(timeout)\n\t\ttimeout = window.setTimeout(() => func(...args), wait)\n\t}\n}\n","import { onCleanup } from 'solid-js'\nimport { onMount } from 'solid-js'\n\nexport const registerKeyListener = (key: string, callback: (e: KeyboardEvent) => void) => {\n\tregisterWindowEventListener({\n\t\tevent: 'keydown',\n\t\tcallback: e => {\n\t\t\tif (e.key === key) {\n\t\t\t\tcallback(e)\n\t\t\t}\n\t\t},\n\t})\n}\n\nexport const registerWindowEventListener: {\n\t<K extends keyof WindowEventMap>(props: {\n\t\tevent: K\n\t\tcallback: (e: WindowEventMap[K]) => void\n\t\tonMount?: () => void\n\t\tonCleanup?: () => void\n\t}): void\n\t(props: {\n\t\tevent: string\n\t\tcallback: (e: Event) => void\n\t\tonMount?: () => void\n\t\tonCleanup?: () => void\n\t}): void\n} = (props: any) => {\n\tconst { event, callback, onMount: mountCallback, onCleanup: cleanupCallback } = props\n\tconst handleEvent = (e: Event) => {\n\t\tcallback(e)\n\t}\n\n\tonMount(() => {\n\t\tmountCallback?.()\n\t\twindow.addEventListener(event, handleEvent)\n\t})\n\n\tonCleanup(() => {\n\t\tcleanupCallback?.()\n\t\twindow.removeEventListener(event, handleEvent)\n\t})\n}\nexport const registerMutationObserver = (props: {\n\ttarget: Node\n\toptions?: MutationObserverInit\n\tcallback: (mutations: MutationRecord[]) => void\n\tonMount?: () => void\n\tonCleanup?: () => void\n}) => {\n\tconst { target, options, callback, onMount: mountCallback, onCleanup: cleanupCallback } = props\n\tconst observer = new MutationObserver(callback)\n\n\tonMount(() => {\n\t\tmountCallback?.()\n\t\tobserver.observe(target, options)\n\t})\n\n\tonCleanup(() => {\n\t\tcleanupCallback?.()\n\t\tobserver.disconnect()\n\t})\n}\n","import { DrawingState, FeedbackState } from '~/stores'\nimport type { Shape } from '~/types'\n\ntype StoredPageState = {\n\tfeedback: {\n\t\tcomment: string\n\t}\n\tdrawing: {\n\t\tshapes: Shape[]\n\t}\n\tlatestQuery?: string\n}\n\nconst STORAGE_PREFIX = 'echo_'\nconst STORAGE_KEY = 'echo_page_state'\n\nexport const dispatchStorageChange = () => {\n\twindow.dispatchEvent(new CustomEvent('echo-storage-change'))\n}\n\nexport const getStorageKey = (key: string): string => `${STORAGE_PREFIX}${key}`\n\nexport const getFromStorage = <T>(key: string, defaultValue: T): T => {\n\ttry {\n\t\tconst item = localStorage.getItem(getStorageKey(key))\n\t\treturn item ? JSON.parse(item) : defaultValue\n\t} catch {\n\t\treturn defaultValue\n\t}\n}\n\nexport const setToStorage = <T>(key: string, value: T): void => {\n\ttry {\n\t\tlocalStorage.setItem(getStorageKey(key), JSON.stringify(value))\n\t} catch (error) {\n\t\tconsole.warn('Failed to save to localStorage:', error)\n\t}\n}\n\nexport const getPageKey = () => {\n\treturn window.location.pathname\n}\n\nexport const savePageState = (pageKey: string, state: { feedback: FeedbackState; drawing: DrawingState }) => {\n\ttry {\n\t\tconst existingData = localStorage.getItem(STORAGE_KEY)\n\t\tconst allPagesData = existingData ? JSON.parse(existingData) : {}\n\n\t\tif (!state.feedback.comment && (!state.drawing.shapes || state.drawing.shapes.length === 0)) {\n\t\t\tdelete allPagesData[pageKey]\n\t\t} else {\n\t\t\tconst currentQuery = window.location.search || undefined\n\t\t\tconst essentialState: StoredPageState = {\n\t\t\t\tfeedback: {\n\t\t\t\t\tcomment: state.feedback.comment,\n\t\t\t\t},\n\t\t\t\tdrawing: {\n\t\t\t\t\tshapes: state.drawing.shapes,\n\t\t\t\t},\n\t\t\t\tlatestQuery: currentQuery,\n\t\t\t}\n\t\t\tallPagesData[pageKey] = essentialState\n\t\t}\n\n\t\tlocalStorage.setItem(STORAGE_KEY, JSON.stringify(allPagesData))\n\t\tdispatchStorageChange()\n\t} catch (error) {\n\t\tconsole.error('Failed to save page state:', error)\n\t}\n}\n\nexport const loadPageState = (pageKey: string): StoredPageState | null => {\n\ttry {\n\t\tconst existingData = localStorage.getItem(STORAGE_KEY)\n\t\tif (!existingData) return null\n\n\t\tconst allPagesData = JSON.parse(existingData)\n\t\treturn allPagesData[pageKey] || null\n\t} catch (error) {\n\t\tconsole.error('Failed to load page state:', error)\n\t\treturn null\n\t}\n}\n\nexport const clearPageState = (pageKey: string) => {\n\ttry {\n\t\tconst existingData = localStorage.getItem(STORAGE_KEY)\n\t\tif (!existingData) return\n\n\t\tconst allPagesData = JSON.parse(existingData)\n\t\tdelete allPagesData[pageKey]\n\t\tlocalStorage.setItem(STORAGE_KEY, JSON.stringify(allPagesData))\n\t\tdispatchStorageChange()\n\t} catch (error) {\n\t\tconsole.error('Failed to clear page state:', error)\n\t}\n}\n\nexport const getStoredPagesCount = (): number => {\n\ttry {\n\t\tconst existingData = localStorage.getItem(STORAGE_KEY)\n\t\tif (!existingData) return 0\n\n\t\tconst allPagesData = JSON.parse(existingData)\n\t\treturn Object.keys(allPagesData).length\n\t} catch (error) {\n\t\tconsole.error('Failed to get stored pages count:', error)\n\t\treturn 0\n\t}\n}\n\nexport const getStoredPages = (): { path: string; state: StoredPageState }[] => {\n\ttry {\n\t\tconst existingData = localStorage.getItem(STORAGE_KEY)\n\t\tif (!existingData) return []\n\n\t\tconst allPagesData = JSON.parse(existingData)\n\t\treturn Object.entries(allPagesData).map(([path, state]) => ({\n\t\t\tpath,\n\t\t\tstate: state as StoredPageState,\n\t\t}))\n\t} catch (error) {\n\t\tconsole.error('Failed to get stored pages:', error)\n\t\treturn []\n\t}\n}\n","import { $PROXY, $TRACK, getListener, batch, createSignal } from \"solid-js\";\n\nconst $RAW = Symbol(\"store-raw\"),\n $NODE = Symbol(\"store-node\"),\n $HAS = Symbol(\"store-has\"),\n $SELF = Symbol(\"store-self\");\nfunction wrap$1(value) {\n let p = value[$PROXY];\n if (!p) {\n Object.defineProperty(value, $PROXY, {\n value: (p = new Proxy(value, proxyTraps$1))\n });\n if (!Array.isArray(value)) {\n const keys = Object.keys(value),\n desc = Object.getOwnPropertyDescriptors(value);\n for (let i = 0, l = keys.length; i < l; i++) {\n const prop = keys[i];\n if (desc[prop].get) {\n Object.defineProperty(value, prop, {\n enumerable: desc[prop].enumerable,\n get: desc[prop].get.bind(p)\n });\n }\n }\n }\n }\n return p;\n}\nfunction isWrappable(obj) {\n let proto;\n return (\n obj != null &&\n typeof obj === \"object\" &&\n (obj[$PROXY] ||\n !(proto = Object.getPrototypeOf(obj)) ||\n proto === Object.prototype ||\n Array.isArray(obj))\n );\n}\nfunction unwrap(item, set = new Set()) {\n let result, unwrapped, v, prop;\n if ((result = item != null && item[$RAW])) return result;\n if (!isWrappable(item) || set.has(item)) return item;\n if (Array.isArray(item)) {\n if (Object.isFrozen(item)) item = item.slice(0);\n else set.add(item);\n for (let i = 0, l = item.length; i < l; i++) {\n v = item[i];\n if ((unwrapped = unwrap(v, set)) !== v) item[i] = unwrapped;\n }\n } else {\n if (Object.isFrozen(item)) item = Object.assign({}, item);\n else set.add(item);\n const keys = Object.keys(item),\n desc = Object.getOwnPropertyDescriptors(item);\n for (let i = 0, l = keys.length; i < l; i++) {\n prop = keys[i];\n if (desc[prop].get) continue;\n v = item[prop];\n if ((unwrapped = unwrap(v, set)) !== v) item[prop] = unwrapped;\n }\n }\n return item;\n}\nfunction getNodes(target, symbol) {\n let nodes = target[symbol];\n if (!nodes)\n Object.defineProperty(target, symbol, {\n value: (nodes = Object.create(null))\n });\n return nodes;\n}\nfunction getNode(nodes, property, value) {\n if (nodes[property]) return nodes[property];\n const [s, set] = createSignal(value, {\n equals: false,\n internal: true\n });\n s.$ = set;\n return (nodes[property] = s);\n}\nfunction proxyDescriptor$1(target, property) {\n const desc = Reflect.getOwnPropertyDescriptor(target, property);\n if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE)\n return desc;\n delete desc.value;\n delete desc.writable;\n desc.get = () => target[$PROXY][property];\n return desc;\n}\nfunction trackSelf(target) {\n getListener() && getNode(getNodes(target, $NODE), $SELF)();\n}\nfunction ownKeys(target) {\n trackSelf(target);\n return Reflect.ownKeys(target);\n}\nconst proxyTraps$1 = {\n get(target, property, receiver) {\n if (property === $RAW) return target;\n if (property === $PROXY) return receiver;\n if (property === $TRACK) {\n trackSelf(target);\n return receiver;\n }\n const nodes = getNodes(target, $NODE);\n const tracked = nodes[property];\n let value = tracked ? tracked() : target[property];\n if (property === $NODE || property === $HAS || property === \"__proto__\") return value;\n if (!tracked) {\n const desc = Object.getOwnPropertyDescriptor(target, property);\n if (\n getListener() &&\n (typeof value !== \"function\" || target.hasOwnProperty(property)) &&\n !(desc && desc.get)\n )\n value = getNode(nodes, property, value)();\n }\n return isWrappable(value) ? wrap$1(value) : value;\n },\n has(target, property) {\n if (\n property === $RAW ||\n property === $PROXY ||\n property === $TRACK ||\n property === $NODE ||\n property === $HAS ||\n property === \"__proto__\"\n )\n return true;\n getListener() && getNode(getNodes(target, $HAS), property)();\n return property in target;\n },\n set() {\n return true;\n },\n deleteProperty() {\n return true;\n },\n ownKeys: ownKeys,\n getOwnPropertyDescriptor: proxyDescriptor$1\n};\nfunction setProperty(state, property, value, deleting = false) {\n if (!deleting && state[property] === value) return;\n const prev = state[property],\n len = state.length;\n if (value === undefined) {\n delete state[property];\n if (state[$HAS] && state[$HAS][property] && prev !== undefined) state[$HAS][property].$();\n } else {\n state[property] = value;\n if (state[$HAS] && state[$HAS][property] && prev === undefined) state[$HAS][property].$();\n }\n let nodes = getNodes(state, $NODE),\n node;\n if ((node = getNode(nodes, property, prev))) node.$(() => value);\n if (Array.isArray(state) && state.length !== len) {\n for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();\n (node = getNode(nodes, \"length\", len)) && node.$(state.length);\n }\n (node = nodes[$SELF]) && node.$();\n}\nfunction mergeStoreNode(state, value) {\n const keys = Object.keys(value);\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n setProperty(state, key, value[key]);\n }\n}\nfunction updateArray(current, next) {\n if (typeof next === \"function\") next = next(current);\n next = unwrap(next);\n if (Array.isArray(next)) {\n if (current === next) return;\n let i = 0,\n len = next.length;\n for (; i < len; i++) {\n const value = next[i];\n if (current[i] !== value) setProperty(current, i, value);\n }\n setProperty(current, \"length\", len);\n } else mergeStoreNode(current, next);\n}\nfunction updatePath(current, path, traversed = []) {\n let part,\n prev = current;\n if (path.length > 1) {\n part = path.shift();\n const partType = typeof part,\n isArray = Array.isArray(current);\n if (Array.isArray(part)) {\n for (let i = 0; i < part.length; i++) {\n updatePath(current, [part[i]].concat(path), traversed);\n }\n return;\n } else if (isArray && partType === \"function\") {\n for (let i = 0; i < current.length; i++) {\n if (part(current[i], i)) updatePath(current, [i].concat(path), traversed);\n }\n return;\n } else if (isArray && partType === \"object\") {\n const { from = 0, to = current.length - 1, by = 1 } = part;\n for (let i = from; i <= to; i += by) {\n updatePath(current, [i].concat(path), traversed);\n }\n return;\n } else if (path.length > 1) {\n updatePath(current[part], path, [part].concat(traversed));\n return;\n }\n prev = current[part];\n traversed = [part].concat(traversed);\n }\n let value = path[0];\n if (typeof value === \"function\") {\n value = value(prev, traversed);\n if (value === prev) return;\n }\n if (part === undefined && value == undefined) return;\n value = unwrap(value);\n if (part === undefined || (isWrappable(prev) && isWrappable(value) && !Array.isArray(value))) {\n mergeStoreNode(prev, value);\n } else setProperty(current, part, value);\n}\nfunction createStore(...[store, options]) {\n const unwrappedStore = unwrap(store || {});\n const isArray = Array.isArray(unwrappedStore);\n const wrappedStore = wrap$1(unwrappedStore);\n function setStore(...args) {\n batch(() => {\n isArray && args.length === 1\n ? updateArray(unwrappedStore, args[0])\n : updatePath(unwrappedStore, args);\n });\n }\n return [wrappedStore, setStore];\n}\n\nfunction proxyDescriptor(target, property) {\n const desc = Reflect.getOwnPropertyDescriptor(target, property);\n if (\n !desc ||\n desc.get ||\n desc.set ||\n !desc.configurable ||\n property === $PROXY ||\n property === $NODE\n )\n return desc;\n delete desc.value;\n delete desc.writable;\n desc.get = () => target[$PROXY][property];\n desc.set = v => (target[$PROXY][property] = v);\n return desc;\n}\nconst proxyTraps = {\n get(target, property, receiver) {\n if (property === $RAW) return target;\n if (property === $PROXY) return receiver;\n if (property === $TRACK) {\n trackSelf(target);\n return receiver;\n }\n const nodes = getNodes(target, $NODE);\n const tracked = nodes[property];\n let value = tracked ? tracked() : target[property];\n if (property === $NODE || property === $HAS || property === \"__proto__\") return value;\n if (!tracked) {\n const desc = Object.getOwnPropertyDescriptor(target, property);\n const isFunction = typeof value === \"function\";\n if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get))\n value = getNode(nodes, property, value)();\n else if (value != null && isFunction && value === Array.prototype[property]) {\n return (...args) => batch(() => Array.prototype[property].apply(receiver, args));\n }\n }\n return isWrappable(value) ? wrap(value) : value;\n },\n has(target, property) {\n if (\n property === $RAW ||\n property === $PROXY ||\n property === $TRACK ||\n property === $NODE ||\n property === $HAS ||\n property === \"__proto__\"\n )\n return true;\n getListener() && getNode(getNodes(target, $HAS), property)();\n return property in target;\n },\n set(target, property, value) {\n batch(() => setProperty(target, property, unwrap(value)));\n return true;\n },\n deleteProperty(target, property) {\n batch(() => setProperty(target, property, undefined, true));\n return true;\n },\n ownKeys: ownKeys,\n getOwnPropertyDescriptor: proxyDescriptor\n};\nfunction wrap(value) {\n let p = value[$PROXY];\n if (!p) {\n Object.defineProperty(value, $PROXY, {\n value: (p = new Proxy(value, proxyTraps))\n });\n const keys = Object.keys(value),\n desc = Object.getOwnPropertyDescriptors(value);\n const proto = Object.getPrototypeOf(value);\n const isClass =\n proto !== null &&\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n proto !== Object.prototype;\n if (isClass) {\n const descriptors = Object.getOwnPropertyDescriptors(proto);\n keys.push(...Object.keys(descriptors));\n Object.assign(desc, descriptors);\n }\n for (let i = 0, l = keys.length; i < l; i++) {\n const prop = keys[i];\n if (isClass && prop === \"constructor\") continue;\n if (desc[prop].get) {\n const get = desc[prop].get.bind(p);\n Object.defineProperty(value, prop, {\n get,\n configurable: true\n });\n }\n if (desc[prop].set) {\n const og = desc[prop].set,\n set = v => batch(() => og.call(p, v));\n Object.defineProperty(value, prop, {\n set,\n configurable: true\n });\n }\n }\n }\n return p;\n}\nfunction createMutable(state, options) {\n const unwrappedStore = unwrap(state || {});\n const wrappedStore = wrap(unwrappedStore);\n return wrappedStore;\n}\nfunction modifyMutable(state, modifier) {\n batch(() => modifier(unwrap(state)));\n}\n\nconst $ROOT = Symbol(\"store-root\");\nfunction applyState(target, parent, property, merge, key) {\n const previous = parent[property];\n if (target === previous) return;\n const isArray = Array.isArray(target);\n if (\n property !== $ROOT &&\n (!isWrappable(target) ||\n !isWrappable(previous) ||\n isArray !== Array.isArray(previous) ||\n (key && target[key] !== previous[key]))\n ) {\n setProperty(parent, property, target);\n return;\n }\n if (isArray) {\n if (\n target.length &&\n previous.length &&\n (!merge || (key && target[0] && target[0][key] != null))\n ) {\n let i, j, start, end, newEnd, item, newIndicesNext, keyVal;\n for (\n start = 0, end = Math.min(previous.length, target.length);\n start < end &&\n (previous[start] === target[start] ||\n (key && previous[start] && target[start] && previous[start][key] === target[start][key]));\n start++\n ) {\n applyState(target[start], previous, start, merge, key);\n }\n const temp = new Array(target.length),\n newIndices = new Map();\n for (\n end = previous.length - 1, newEnd = target.length - 1;\n end >= start &&\n newEnd >= start &&\n (previous[end] === target[newEnd] ||\n (key && previous[end] && target[newEnd] && previous[end][key] === target[newEnd][key]));\n end--, newEnd--\n ) {\n temp[newEnd] = previous[end];\n }\n if (start > newEnd || start > end) {\n for (j = start; j <= newEnd; j++) setProperty(previous, j, target[j]);\n for (; j < target.length; j++) {\n setProperty(previous, j, temp[j]);\n applyState(target[j], previous, j, merge, key);\n }\n if (previous.length > target.length) setProperty(previous, \"length\", target.length);\n return;\n }\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = target[j];\n keyVal = key && item ? item[key] : item;\n i = newIndices.get(keyVal);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(keyVal, j);\n }\n for (i = start; i <= end; i++) {\n item = previous[i];\n keyVal = key && item ? item[key] : item;\n j = newIndices.get(keyVal);\n if (j !== undefined && j !== -1) {\n temp[j] = previous[i];\n j = newIndicesNext[j];\n newIndices.set(keyVal, j);\n }\n }\n for (j = start; j < target.length; j++) {\n if (j in temp) {\n setProperty(previous, j, temp[j]);\n applyState(target[j], previous, j, merge, key);\n } else setProperty(previous, j, target[j]);\n }\n } else {\n for (let i = 0, len = target.length; i < len; i++) {\n applyState(target[i], previous, i, merge, key);\n }\n }\n if (previous.length > target.length) setProperty(previous, \"length\", target.length);\n return;\n }\n const targetKeys = Object.keys(target);\n for (let i = 0, len = targetKeys.length; i < len; i++) {\n applyState(target[targetKeys[i]], previous, targetKeys[i], merge, key);\n }\n const previousKeys = Object.keys(previous);\n for (let i = 0, len = previousKeys.length; i < len; i++) {\n if (target[previousKeys[i]] === undefined) setProperty(previous, previousKeys[i], undefined);\n }\n}\nfunction reconcile(value, options = {}) {\n const { merge, key = \"id\" } = options,\n v = unwrap(value);\n return state => {\n if (!isWrappable(state) || !isWrappable(v)) return v;\n const res = applyState(\n v,\n {\n [$ROOT]: state\n },\n $ROOT,\n merge,\n key\n );\n return res === undefined ? state : res;\n };\n}\nconst producers = new WeakMap();\nconst setterTraps = {\n get(target, property) {\n if (property === $RAW) return target;\n const value = target[property];\n let proxy;\n return isWrappable(value)\n ? producers.get(value) ||\n (producers.set(value, (proxy = new Proxy(value, setterTraps))), proxy)\n : value;\n },\n set(target, property, value) {\n setProperty(target, property, unwrap(value));\n return true;\n },\n deleteProperty(target, property) {\n setProperty(target, property, undefined, true);\n return true;\n }\n};\nfunction produce(fn) {\n return state => {\n if (isWrappable(state)) {\n let proxy;\n if (!(proxy = producers.get(state))) {\n producers.set(state, (proxy = new Proxy(state, setterTraps)));\n }\n fn(proxy);\n }\n return state;\n };\n}\n\nconst DEV = undefined;\n\nexport { $RAW, DEV, createMutable, createStore, modifyMutable, produce, reconcile, unwrap };\n","import type { DrawingTool } from '~/types'\n\ntype ToolConfig = {\n\tid: DrawingTool\n\tlabel: string\n\tgetCursor: (color: string) => string\n\tstrokeWidth: number\n\topacity: {\n\t\tselected: number\n\t\tdefault: number\n\t}\n}\n\nexport const toolConfig: Record<DrawingTool, ToolConfig> = {\n\trectangle: {\n\t\tid: 'rectangle',\n\t\tlabel: 'Highlight',\n\t\tgetCursor: () => 'crosshair',\n\t\tstrokeWidth: 2,\n\t\topacity: {\n\t\t\tselected: 1,\n\t\t\tdefault: 1,\n\t\t},\n\t},\n\tpath: {\n\t\tid: 'path',\n\t\tlabel: 'Pen',\n\t\tgetCursor: (color: string) =>\n\t\t\t`url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" stroke=\"${color.replace('#', '%23')}\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"24\" cy=\"24\" r=\"8\"/></svg>') 24 24, auto`,\n\t\tstrokeWidth: 6,\n\t\topacity: {\n\t\t\tselected: 0.6,\n\t\t\tdefault: 1,\n\t\t},\n\t},\n}\n","export const calculateLuminance = (hexColor: string): number => {\n\t// Remove the # if present\n\tconst color = hexColor.replace('#', '')\n\n\t// Convert hex to RGB\n\tconst r = Number.parseInt(color.slice(0, 2), 16) / 255\n\tconst g = Number.parseInt(color.slice(2, 2), 16) / 255\n\tconst b = Number.parseInt(color.slice(4, 2), 16) / 255\n\n\t// Calculate relative luminance using sRGB coefficients\n\treturn 0.2126 * r + 0.7152 * g + 0.0722 * b\n}\n\nexport const getContrastColor = (hexColor: string): string => {\n\tconst luminance = calculateLuminance(hexColor)\n\t// Use white text for dark backgrounds (luminance < 0.5)\n\t// Use black text for light backgrounds (luminance >= 0.5)\n\treturn luminance < 0.5 ? '#FFFFFF' : '#000000'\n}\n","export const deepMerge = (target: any, source: any): any => {\n\tif (!source) return target\n\tconst result = { ...target }\n\tfor (const key in source) {\n\t\tif (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n\t\t\tresult[key] = deepMerge(target[key], source[key])\n\t\t} else {\n\t\t\tresult[key] = source[key]\n\t\t}\n\t}\n\treturn result\n}\n","import type { ConsoleEntry } from '~/types'\n\nlet consoleBuffer: ConsoleEntry[] = []\nlet originalConsole: { log: typeof console.log; warn: typeof console.warn; error: typeof console.error } | null = null\nlet originalOnError: typeof window.onerror | null = null\nlet originalOnUnhandledRejection: ((event: PromiseRejectionEvent) => void) | null = null\n\nconst createConsoleProxy = (type: ConsoleEntry['type'], originalFn: (...args: any[]) => void) => {\n\treturn (...args: any[]) => {\n\t\tconst message = args.map(arg => (typeof arg === 'string' ? arg : arg instanceof Error ? arg.stack || arg.message : JSON.stringify(arg))).join(' ')\n\n\t\tconsoleBuffer.push({\n\t\t\ttype,\n\t\t\tmessage,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t})\n\n\t\tif (consoleBuffer.length > 1000) {\n\t\t\tconsoleBuffer = consoleBuffer.slice(-1000)\n\t\t}\n\n\t\toriginalFn.apply(console, args)\n\t}\n}\n\nexport const setupConsole = () => {\n\tif (originalConsole) return\n\n\toriginalConsole = {\n\t\tlog: console.log,\n\t\twarn: console.warn,\n\t\terror: console.error,\n\t}\n\n\toriginalOnError = window.onerror\n\toriginalOnUnhandledRejection = window.onunhandledrejection\n\n\twindow.onerror = (message, source, lineno, colno, error) => {\n\t\tconst errorMessage = error?.stack || error?.message || message\n\t\tconsoleBuffer.push({\n\t\t\ttype: 'error',\n\t\t\tmessage: `Uncaught Error: ${errorMessage}\\nLocation: ${source}:${lineno}:${colno}`,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t})\n\n\t\tif (originalOnError) {\n\t\t\treturn originalOnError(message, source, lineno, colno, error)\n\t\t}\n\t\treturn false\n\t}\n\n\twindow.onunhandledrejection = event => {\n\t\tconst error = event.reason\n\t\tconsoleBuffer.push({\n\t\t\ttype: 'error',\n\t\t\tmessage: `Unhandled Promise Rejection: ${error?.stack || error?.message || error}`,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t})\n\n\t\tif (originalOnUnhandledRejection) {\n\t\t\toriginalOnUnhandledRejection(event)\n\t\t}\n\t}\n\n\tconsole.log = createConsoleProxy('log', originalConsole.log)\n\tconsole.warn = createConsoleProxy('warn', originalConsole.warn)\n\tconsole.error = createConsoleProxy('error', originalConsole.error)\n\n\twindow.addEventListener('error', event => {\n\t\tconst { message, filename, lineno, colno, error } = event\n\t\tconst errorMessage = error?.stack || error?.message || message\n\t\tconsoleBuffer.push({\n\t\t\ttype: 'error',\n\t\t\tmessage: `Uncaught Error: ${errorMessage}\\nLocation: ${filename}:${lineno}:${colno}`,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t})\n\t})\n}\n\nexport const cleanupConsole = () => {\n\tif (originalConsole) {\n\t\tconsole.log = originalConsole.log\n\t\tconsole.warn = originalConsole.warn\n\t\tconsole.error = originalConsole.error\n\t\toriginalConsole = null\n\t}\n\tif (originalOnError) {\n\t\twindow.onerror = originalOnError\n\t\toriginalOnError = null\n\t}\n\tif (originalOnUnhandledRejection) {\n\t\twindow.onunhandledrejection = originalOnUnhandledRejection\n\t\toriginalOnUnhandledRejection = null\n\t}\n\twindow.removeEventListener('error', () => {})\n\tconsoleBuffer = []\n}\n\nexport const getConsoleBuffer = (): ConsoleEntry[] => [...consoleBuffer]\n","export const isMobileDevice = () => {\n\treturn (\n\t\t/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || window.matchMedia?.('(max-width: 768px)').matches\n\t)\n}\n","import type { Point } from '~/types'\n\nexport const getPointFromEvent = (e: MouseEvent | TouchEvent, { useClientCoords = false }: { useClientCoords?: boolean } = {}): Point => {\n\tconst isTouchEvent = typeof TouchEvent !== 'undefined' && e instanceof TouchEvent\n\tconst touch = isTouchEvent ? e.touches[0] : null\n\treturn {\n\t\tx: touch ? (useClientCoords ? touch.clientX : touch.pageX) : useClientCoords ? (e as MouseEvent).clientX : (e as MouseEvent).pageX,\n\t\ty: touch ? (useClientCoords ? touch.clientY : touch.pageY) : useClientCoords ? (e as MouseEvent).clientY : (e as MouseEvent).pageY,\n\t}\n}\n\nexport const getDistance = (p1: Point, p2: Point): number => {\n\tconst dx = p2.x - p1.x\n\tconst dy = p2.y - p1.y\n\treturn Math.sqrt(dx * dx + dy * dy)\n}\n","import type { Point } from '~/types'\n\nexport const getRectFromPoints = (points: Point[]) => {\n\tif (points.length !== 2) return null\n\tconst [start, end] = points\n\treturn {\n\t\tx: Math.min(start.x, end.x),\n\t\ty: Math.min(start.y, end.y),\n\t\twidth: Math.abs(end.x - start.x),\n\t\theight: Math.abs(end.y - start.y),\n\t}\n}\n\nexport const getPathFromPoints = (points: Point[]) => {\n\tif (points.length < 2) return null\n\treturn `M ${points[0].x} ${points[0].y} ${points\n\t\t.slice(1)\n\t\t.map(point => `L ${point.x} ${point.y}`)\n\t\t.join(' ')}`\n}\n","import html2canvas from 'html2canvas'\nimport type { Screenshot } from '~/types'\n\nconst createCanvas = (width: number, height: number): HTMLCanvasElement => {\n\tconst canvas = document.createElement('canvas')\n\tcanvas.width = width\n\tcanvas.height = height\n\treturn canvas\n}\n\nconst shouldIgnoreElement = (element: Element): boolean => {\n\treturn element.hasAttribute('data-hide-when-drawing')\n}\n\nexport const captureScreenshot = async (): Promise<Screenshot | undefined> => {\n\ttry {\n\t\tconst screenshot = await html2canvas(document.body, {\n\t\t\tbackgroundColor: null,\n\t\t\tlogging: false,\n\t\t\tuseCORS: true,\n\t\t\tscale: 1,\n\t\t\tallowTaint: true,\n\t\t\tforeignObjectRendering: true,\n\t\t\tignoreElements: shouldIgnoreElement,\n\t\t})\n\n\t\tconst canvas = createCanvas(screenshot.width, screenshot.height)\n\t\tconst ctx = canvas.getContext('2d')\n\n\t\tif (!ctx) {\n\t\t\tthrow new Error('Failed to get canvas context')\n\t\t}\n\n\t\tctx.drawImage(screenshot, 0, 0)\n\n\t\treturn canvas.toDataURL() as Screenshot\n\t} catch (error) {\n\t\tconsole.error('Failed to capture screenshot:', error)\n\t\treturn undefined\n\t}\n}\n","export const generateCutoutPath = (\n\tdimensions: {\n\t\twidth: number\n\t\theight: number\n\t},\n\tcurrentPoints: { x: number; y: number }[],\n\tshapes: { type: string; points: { x: number; y: number }[] }[],\n) => {\n\tlet path = `M0 0 H${dimensions.width} V${dimensions.height} H0 Z`\n\n\tif (currentPoints.length === 2) {\n\t\tconst [start, end] = currentPoints\n\t\tpath += ` M${start.x} ${start.y} h${end.x - start.x} v${end.y - start.y} h${start.x - end.x} v${start.y - end.y}`\n\t}\n\n\tfor (const shape of shapes) {\n\t\tif (shape.type === 'rectangle') {\n\t\t\tconst [start, end] = shape.points\n\t\t\tpath += ` M${start.x} ${start.y} h${end.x - start.x} v${end.y - start.y} h${start.x - end.x} v${start.y - end.y}`\n\t\t}\n\t}\n\n\treturn path\n}\n","import type { EchoConfig } from '~/types'\n\nexport const validateOptions = (options: EchoConfig): void => {\n\tif (typeof options !== 'object' || options === null) {\n\t\tthrow new Error('Echo initialization failed: options must be an object')\n\t}\n\n\tif (typeof options.onSubmit !== 'function') {\n\t\tthrow new Error('Echo initialization failed: onSubmit must be a function')\n\t}\n\n\tif (options.primaryColor && !/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(options.primaryColor)) {\n\t\tthrow new Error('Echo initialization failed: primaryColor must be a valid hex color')\n\t}\n}\n","import { createStore } from 'solid-js/store'\nimport { toolConfig } from '~/config/drawingConfig'\nimport type { DrawingTool, FullEchoConfig, Point, Shape } from '~/types'\nimport { loadPageState } from '~/utils'\nimport { getDistance, getPointFromEvent } from '~/utils/events'\n\nconst MOVEMENT_THRESHOLD = 5 // pixels\n\nconst computeCursor = (tool: DrawingTool, color: string) => {\n\treturn toolConfig[tool].getCursor(color)\n}\n\nexport type DrawingState = {\n\tisDrawing: boolean\n\tselectedShapeId: string | null\n\tselectedTool: DrawingTool\n\tselectedColor: string\n\tshapes: Shape[]\n\tcurrentPoints: Point[]\n\tshowTooltip: boolean\n\tmousePosition: Point\n\thasDrawn: boolean\n\tisDragging: boolean\n\tdragStartPos: Point | null\n\tinitialClickPos: Point | null\n\tdragOffset: Point | null\n\tcursor: string\n}\n\nexport type DrawingStore = {\n\tstate: DrawingState\n\tsetState: (state: Partial<DrawingState>, isClearing?: boolean) => void\n\tmethods: {\n\t\tstartDrawing: (initialPoint: Point) => void\n\t\tupdateDrawing: (point: Point) => void\n\t\tfinishDrawing: () => void\n\t\thandleShapeClick: (shapeId: string) => void\n\t\thandleStart: (e: MouseEvent | TouchEvent) => void\n\t\thandleMove: (e: MouseEvent | TouchEvent) => void\n\t\thandleEnd: (e: MouseEvent | TouchEvent) => void\n\t\thandleEnter: (e: MouseEvent | TouchEvent) => void\n\t\thandleLeave: (e: MouseEvent | TouchEvent) => void\n\t\tstartDrag: (point: Point) => void\n\t\tstopDrag: () => void\n\t\tsetInitialClick: (point: Point | null) => void\n\t\tupdateDragOffset: (shape: { points: Point[] }, point: Point) => void\n\t}\n}\n\nexport const createDrawingStore = (\n\tconfig: FullEchoConfig,\n\tcurrentPageKey: string,\n\tonStateChange?: (state: Partial<DrawingState>, isClearing?: boolean) => void,\n): DrawingStore => {\n\tconst [state, setState] = createStore<DrawingState>({\n\t\tisDrawing: false,\n\t\tcurrentPoints: [],\n\t\tselectedShapeId: null,\n\t\tselectedTool: 'rectangle',\n\t\tshowTooltip: true,\n\t\tmousePosition: { x: 0, y: 0 },\n\t\tselectedColor: config.primaryColor,\n\t\tshapes: loadPageState(currentPageKey)?.drawing?.shapes || [],\n\t\thasDrawn: false,\n\t\tisDragging: false,\n\t\tdragStartPos: null,\n\t\tinitialClickPos: null,\n\t\tdragOffset: null,\n\t\tcursor: computeCursor('rectangle', config.primaryColor),\n\t})\n\n\tconst wrappedSetState = (newState: Partial<DrawingState>, isClearing = false) => {\n\t\tif (newState.selectedTool || newState.selectedColor) {\n\t\t\tconst tool = newState.selectedTool || state.selectedTool\n\t\t\tconst color = newState.selectedColor || state.selectedColor\n\t\t\tnewState.cursor = computeCursor(tool, color)\n\t\t}\n\t\tsetState(newState)\n\t\tonStateChange?.(newState, isClearing)\n\t}\n\n\tconst methods = {\n\t\tstartDrawing: (initialPoint: Point) => {\n\t\t\twrappedSetState({\n\t\t\t\tisDrawing: true,\n\t\t\t\tcurrentPoints: [initialPoint],\n\t\t\t\tselectedShapeId: null,\n\t\t\t})\n\t\t},\n\t\tupdateDrawing: (point: Point) => {\n\t\t\tif (state.selectedTool === 'rectangle') {\n\t\t\t\twrappedSetState({ currentPoints: [state.currentPoints[0], point] })\n\t\t\t} else if (state.selectedTool === 'path') {\n\t\t\t\twrappedSetState({\n\t\t\t\t\tcurrentPoints: [...state.currentPoints, point],\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tfinishDrawing: () => {\n\t\t\tif (state.currentPoints.length >= 2) {\n\t\t\t\tconst newShape: Shape = {\n\t\t\t\t\tid: Math.random().toString(36).substring(2),\n\t\t\t\t\ttype: state.selectedTool,\n\t\t\t\t\tcolor: state.selectedColor,\n\t\t\t\t\tpoints: state.currentPoints,\n\t\t\t\t}\n\t\t\t\twrappedSetState({ shapes: [...state.shapes, newShape] })\n\t\t\t}\n\t\t\twrappedSetState({ isDrawing: false, currentPoints: [] })\n\t\t},\n\t\thandleShapeClick: (shapeId: string) => {\n\t\t\t// wrappedSetState({\n\t\t\t// \tselectedShapeId: state.selectedShapeId === shapeId ? null : shapeId,\n\t\t\t// })\n\t\t},\n\t\thandleStart: (e: MouseEvent | TouchEvent) => {\n\t\t\tif (e instanceof MouseEvent) {\n\t\t\t\tconst target = e.target as HTMLElement\n\t\t\t\tif (!target.classList.contains('echo-drawing-layer-mask') && !target.classList.contains('echo-shape')) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst point = getPointFromEvent(e)\n\n\t\t\tif (e.target instanceof SVGElement && e.target.classList.contains('echo-shape')) {\n\t\t\t\tconst shapeId = e.target.dataset.shapeId\n\t\t\t\tif (shapeId && state.selectedShapeId === shapeId) {\n\t\t\t\t\tconst shape = state.shapes.find(s => s.id === shapeId)\n\t\t\t\t\tif (shape) {\n\t\t\t\t\t\tmethods.startDrag(point)\n\t\t\t\t\t\tmethods.updateDragOffset(shape, point)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmethods.setInitialClick(point)\n\t\t},\n\t\thandleMove: (e: MouseEvent | TouchEvent) => {\n\t\t\tconst clientPoint = getPointFromEvent(e, { useClientCoords: true })\n\t\t\tconst point = getPointFromEvent(e)\n\n\t\t\twrappedSetState({ mousePosition: clientPoint })\n\n\t\t\tif (state.isDragging && state.selectedShapeId && state.dragStartPos) {\n\t\t\t\tconst shape = state.shapes.find(s => s.id === state.selectedShapeId)\n\t\t\t\tif (shape) {\n\t\t\t\t\tconst dx = point.x - state.dragStartPos.x\n\t\t\t\t\tconst dy = point.y - state.dragStartPos.y\n\n\t\t\t\t\tconst updatedShapes = state.shapes.map(s => {\n\t\t\t\t\t\tif (s.id === state.selectedShapeId) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...s,\n\t\t\t\t\t\t\t\tpoints: s.points.map(p => ({\n\t\t\t\t\t\t\t\t\tx: p.x + dx,\n\t\t\t\t\t\t\t\t\ty: p.y + dy,\n\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn s\n\t\t\t\t\t})\n\n\t\t\t\t\twrappedSetState({ shapes: updatedShapes })\n\t\t\t\t\tmethods.startDrag(point)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (state.initialClickPos && !state.isDrawing) {\n\t\t\t\tconst distance = getDistance(state.initialClickPos, point)\n\t\t\t\tif (distance >= MOVEMENT_THRESHOLD) {\n\t\t\t\t\tmethods.startDrawing(state.initialClickPos)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (state.isDrawing) {\n\t\t\t\tmethods.updateDrawing(point)\n\t\t\t}\n\t\t},\n\t\thandleEnd: (e: MouseEvent | TouchEvent) => {\n\t\t\tif (state.isDragging) {\n\t\t\t\tmethods.stopDrag()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (state.initialClickPos && !state.isDrawing) {\n\t\t\t\tconst point = getPointFromEvent(e)\n\t\t\t\tconst distance = getDistance(state.initialClickPos, point)\n\t\t\t\tif (distance < MOVEMENT_THRESHOLD && e.target instanceof SVGElement && e.target.classList.contains('echo-shape')) {\n\t\t\t\t\tconst shapeId = e.target.dataset.shapeId\n\t\t\t\t\tif (shapeId) {\n\t\t\t\t\t\twrappedSetState({ selectedShapeId: shapeId })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmethods.setInitialClick(null)\n\t\t\tmethods.finishDrawing()\n\t\t},\n\t\thandleEnter: (e: MouseEvent | TouchEvent) => {\n\t\t\tif (e.target === e.currentTarget && !state.hasDrawn) {\n\t\t\t\twrappedSetState({ showTooltip: true })\n\t\t\t}\n\t\t},\n\t\thandleLeave: (e: MouseEvent | TouchEvent) => {\n\t\t\tif (e.target === e.currentTarget) {\n\t\t\t\twrappedSetState({ showTooltip: false })\n\t\t\t}\n\t\t},\n\t\tstartDrag: (point: Point) => {\n\t\t\twrappedSetState({\n\t\t\t\tisDragging: true,\n\t\t\t\tdragStartPos: point,\n\t\t\t})\n\t\t},\n\t\tstopDrag: () => {\n\t\t\twrappedSetState({\n\t\t\t\tisDragging: false,\n\t\t\t\tdragStartPos: null,\n\t\t\t\tdragOffset: null,\n\t\t\t})\n\t\t},\n\t\tsetInitialClick: (point: Point | null) => {\n\t\t\twrappedSetState({\n\t\t\t\tinitialClickPos: point,\n\t\t\t})\n\t\t},\n\t\tupdateDragOffset: (shape: { points: Point[] }, point: Point) => {\n\t\t\twrappedSetState({\n\t\t\t\tdragOffset: {\n\t\t\t\t\tx: point.x - shape.points[0].x,\n\t\t\t\t\ty: point.y - shape.points[0].y,\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\n\treturn {\n\t\tstate,\n\t\tsetState: wrappedSetState,\n\t\tmethods,\n\t}\n}\n","import { createStore } from 'solid-js/store'\nimport type { FullEchoConfig, Screenshot } from '~/types'\nimport { loadPageState } from '~/utils'\n\nexport type FeedbackState = {\n\tcomment: string\n\tscreenshot?: Screenshot\n\tisCapturing: boolean\n\tisMinimized: boolean\n}\n\nexport type FeedbackStore = {\n\tstate: FeedbackState\n\tsetState: (state: Partial<FeedbackState>, isClearing?: boolean) => void\n}\n\nexport const createFeedbackStore = (\n\tconfig: FullEchoConfig,\n\tcurrentPageKey: string,\n\tonStateChange?: (state: Partial<FeedbackState>, isClearing?: boolean) => void,\n): FeedbackStore => {\n\tconst [state, setState] = createStore<FeedbackState>({\n\t\tcomment: loadPageState(currentPageKey)?.feedback?.comment || '',\n\t\tscreenshot: undefined,\n\t\tisCapturing: false,\n\t\tisMinimized: false,\n\t})\n\n\tconst wrappedSetState = (newState: Partial<FeedbackState>, isClearing = false) => {\n\t\tsetState(newState)\n\t\tonStateChange?.(newState, isClearing)\n\t}\n\n\treturn {\n\t\tstate,\n\t\tsetState: wrappedSetState,\n\t}\n}\n","import { createStore } from 'solid-js/store'\nimport type { FullEchoConfig, Notification, TextConfig } from '~/types'\nimport { getStoredPagesCount } from '~/utils'\n\nexport type WidgetState = {\n\ttext: TextConfig\n\tisOpen: boolean\n\tprimaryColor: string\n\tnotification: Notification\n\tdimensions: {\n\t\twidth: number\n\t\theight: number\n\t}\n\tisStoredFeedbackOpen: boolean\n\tpagesCount: number\n\twelcomeMessageIsClosing: boolean\n}\n\nexport type WidgetStore = {\n\tstate: WidgetState\n\tsetState: (state: Partial<WidgetState>) => void\n}\n\nexport const createWidgetStore = (config: FullEchoConfig, currentPageKey: string): WidgetStore => {\n\tconst [state, setState] = createStore<WidgetState>({\n\t\ttext: config.textConfig,\n\t\tisOpen: false,\n\t\tprimaryColor: config.primaryColor,\n\t\tnotification: {\n\t\t\tshow: false,\n\t\t\ttype: null,\n\t\t\tmessage: null,\n\t\t},\n\t\tdimensions: {\n\t\t\twidth: document.documentElement.clientWidth,\n\t\t\theight: document.documentElement.scrollHeight,\n\t\t},\n\t\tisStoredFeedbackOpen: false,\n\t\tpagesCount: getStoredPagesCount(),\n\t\twelcomeMessageIsClosing: false,\n\t})\n\n\treturn {\n\t\tstate,\n\t\tsetState,\n\t}\n}\n","import type { EchoConfig, FeedbackPayload, FullEchoConfig } from '~/types'\nimport { type Notification } from '~/types'\nimport { debounce } from '~/utils/debounce'\nimport { registerMutationObserver, registerWindowEventListener } from '~/utils/listeners'\nimport { clearPageState, getPageKey, getStoredPagesCount, loadPageState, savePageState } from '~/utils/storage'\nimport { type DrawingStore, createDrawingStore } from './drawingStore'\nimport { type FeedbackStore, createFeedbackStore } from './feedbackStore'\nimport { type WidgetStore, createWidgetStore } from './widgetStore'\n\nexport type EchoStore = {\n\tfeedback: FeedbackStore\n\tdrawing: DrawingStore\n\twidget: WidgetStore\n\tmethods: {\n\t\treset: () => void\n\t\tsubmit: EchoConfig['onSubmit']\n\t}\n}\n\nexport const createEchoStore = (config: FullEchoConfig): EchoStore => {\n\tlet currentPageKey = getPageKey()\n\tconst debouncedSave = debounce((pageKey: string, isClearing = false) => {\n\t\tconst shouldSaveState = isClearing || feedback.state.comment.trim().length > 0 || drawing.state.shapes.length > 0\n\t\tif (shouldSaveState) {\n\t\t\tsavePageState(pageKey, {\n\t\t\t\tfeedback: feedback.state,\n\t\t\t\tdrawing: drawing.state,\n\t\t\t})\n\t\t\twidget.setState({ pagesCount: getStoredPagesCount() })\n\t\t}\n\t}, 1000)\n\n\tconst feedback = createFeedbackStore(config, currentPageKey, (state, isClearing) => {\n\t\tdebouncedSave(currentPageKey, isClearing)\n\t})\n\n\tconst drawing = createDrawingStore(config, currentPageKey, (state, isClearing) => {\n\t\tdebouncedSave(currentPageKey, isClearing)\n\t})\n\n\tconst widget = createWidgetStore(config, currentPageKey)\n\n\tconst handleUrlChange = () => {\n\t\tconst newPageKey = getPageKey()\n\t\tif (newPageKey !== currentPageKey) {\n\t\t\tcurrentPageKey = newPageKey\n\t\t\tconst newState = loadPageState(currentPageKey)\n\n\t\t\tfeedback.setState({\n\t\t\t\tcomment: newState?.feedback.comment || '',\n\t\t\t})\n\n\t\t\tdrawing.setState({\n\t\t\t\tshapes: newState?.drawing.shapes || [],\n\t\t\t})\n\t\t}\n\t}\n\n\tregisterWindowEventListener({\n\t\tevent: 'popstate',\n\t\tcallback: handleUrlChange,\n\t})\n\n\tregisterMutationObserver({\n\t\ttarget: document.documentElement,\n\t\toptions: {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t},\n\t\tcallback: () => {\n\t\t\tconst newPageKey = getPageKey()\n\t\t\tif (newPageKey !== currentPageKey) {\n\t\t\t\thandleUrlChange()\n\t\t\t}\n\t\t},\n\t})\n\n\tconst reset = () => {\n\t\tclearPageState(currentPageKey)\n\n\t\tfeedback.setState(\n\t\t\t{\n\t\t\t\tcomment: '',\n\t\t\t\tscreenshot: undefined,\n\t\t\t\tisCapturing: false,\n\t\t\t\tisMinimized: false,\n\t\t\t},\n\t\t\ttrue,\n\t\t)\n\n\t\tdrawing.setState(\n\t\t\t{\n\t\t\t\tisDrawing: false,\n\t\t\t\tcurrentPoints: [],\n\t\t\t\tshapes: [],\n\t\t\t\tselectedShapeId: null,\n\t\t\t\tselectedTool: 'rectangle',\n\t\t\t\tshowTooltip: true,\n\t\t\t\tmousePosition: { x: 0, y: 0 },\n\t\t\t\thasDrawn: false,\n\t\t\t\tselectedColor: config.primaryColor,\n\t\t\t\tisDragging: false,\n\t\t\t\tdragStartPos: null,\n\t\t\t\tinitialClickPos: null,\n\t\t\t\tdragOffset: null,\n\t\t\t},\n\t\t\ttrue,\n\t\t)\n\n\t\twidget.setState({\n\t\t\tisOpen: false,\n\t\t})\n\t}\n\n\tconst postSubmit = (result: Notification) => {\n\t\twidget.setState({ notification: { show: true, type: result.type, message: result.message } })\n\n\t\tsetTimeout(() => {\n\t\t\twidget.setState({ notification: { show: false, type: result.type, message: result.message } })\n\t\t}, 5000)\n\t}\n\n\treturn {\n\t\tfeedback,\n\t\tdrawing,\n\t\twidget,\n\t\tmethods: {\n\t\t\treset,\n\t\t\tsubmit: async (data: FeedbackPayload) => {\n\t\t\t\twidget.setState({ isOpen: false })\n\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await config.onSubmit(data)\n\n\t\t\t\t\tif (response instanceof Response && !response.ok) {\n\t\t\t\t\t\tpostSubmit({ show: true, type: 'error', message: 'Submission failed' })\n\t\t\t\t\t\treturn response\n\t\t\t\t\t}\n\n\t\t\t\t\treset()\n\t\t\t\t\tpostSubmit({ show: true, type: 'success', message: 'Feedback submitted' })\n\t\t\t\t\treturn response\n\t\t\t\t} catch (error) {\n\t\t\t\t\tpostSubmit({ show: true, type: 'error', message: 'Submission failed' })\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t}\n}\n","import { type Component, JSXElement, createContext, useContext } from 'solid-js'\nimport { type EchoStore, createEchoStore } from '~/stores'\nimport type { FullEchoConfig } from '~/types'\n\ntype EchoProviderProps = FullEchoConfig & {\n\tchildren: JSXElement\n}\n\nconst EchoContext = createContext<EchoStore>()\n\nexport const EchoProvider: Component<EchoProviderProps> = props => {\n\tconst store = createEchoStore({\n\t\tprimaryColor: props.primaryColor,\n\t\tonSubmit: props.onSubmit,\n\t\ttextConfig: props.textConfig,\n\t\tposition: props.position,\n\t})\n\n\treturn <EchoContext.Provider value={store}>{props.children}</EchoContext.Provider>\n}\n\nexport const useEchoStore = () => {\n\tconst store = useContext(EchoContext)\n\tif (!store) {\n\t\tthrow new Error('useEchoStore must be used within EchoProvider')\n\t}\n\treturn store\n}\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const ChevronRightIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<path d=\"m9 18 6-6-6-6\" />\n\t</svg>\n)\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const ContemberIcon: Component<IconProps> = props => {\n\treturn (\n\t\t<svg width={props.size ?? 24} height={props.size ?? 24} viewBox=\"0 0 64 66\" fill=\"none\" class={props.class} style={props.style}>\n\t\t\t<path\n\t\t\t\td=\"M59.716 36.936L54.9 33l-6.17 5.108a77.278 77.278 0 00-12.744 13.469l-3.637 4.914-3.778-5.017a83.719 83.719 0 00-13.956-14.538L9.799 33l2.86-2.332A104.39 104.39 0 0030.1 12.5l2.24-2.98 1.736 2.298a111.905 111.905 0 0018.608 19.384l2.206 1.81 2.861-2.333a104.13 104.13 0 005.297-4.641C59.978 11.294 47.409.26 32.349.26 14.997.26.92 14.923.92 33c0 18.076 14.077 32.74 31.43 32.74 15.102 0 27.715-11.103 30.73-25.892a75.808 75.808 0 00-3.375-2.912h.011z\"\n\t\t\t\tfill={props.fill ?? 'currentColor'}\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const HighlightIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<path d=\"M3 7V5a2 2 0 0 1 2-2h2\" />\n\t\t<path d=\"M17 3h2a2 2 0 0 1 2 2v2\" />\n\t\t<path d=\"M21 17v2a2 2 0 0 1-2 2h-2\" />\n\t\t<path d=\"M7 21H5a2 2 0 0 1-2-2v-2\" />\n\t</svg>\n)\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const PenIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<path d=\"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\" />\n\t</svg>\n)\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const TrashIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<path d=\"M3 6h18\" />\n\t\t<path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n\t\t<path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n\t\t<line x1=\"10\" x2=\"10\" y1=\"11\" y2=\"17\" />\n\t\t<line x1=\"14\" x2=\"14\" y1=\"11\" y2=\"17\" />\n\t</svg>\n)\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const CheckCircleIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<circle cx=\"12\" cy=\"12\" r=\"10\" />\n\t\t<path d=\"m9 12 2 2 4-4\" />\n\t</svg>\n)\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const XCircleIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<circle cx=\"12\" cy=\"12\" r=\"10\" />\n\t\t<path d=\"m15 9-6 6\" />\n\t\t<path d=\"m9 9 6 6\" />\n\t</svg>\n)\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const XIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<path d=\"M18 6 6 18\" />\n\t\t<path d=\"m6 6 12 12\" />\n\t</svg>\n)\n","import { type Component, For } from 'solid-js'\nimport { useEchoStore } from '~/contexts/EchoContext'\n\nconst COLORS = [\n\t'#ff6b6b', // Soft Red\n\t'#69db7c', // Soft Green\n\t'#74c0fc', // Soft Blue\n\t'#ffd43b', // Soft Yellow\n\t'#da77f2', // Soft Purple\n\t'#66d9e8', // Soft Cyan\n\t'#ffa94d', // Soft Orange\n\t'#e599f7', // Soft Pink\n]\n\nexport const ColorSelector: Component = () => {\n\tconst store = useEchoStore()\n\n\treturn (\n\t\t<>\n\t\t\t<div class=\"echo-color-selector\">\n\t\t\t\t<button\n\t\t\t\t\tclass=\"echo-drawing-toolbar-button\"\n\t\t\t\t\ttitle=\"Color\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t'background-color': store.drawing.state.selectedColor,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<div class=\"echo-color-swatch-wrapper\">\n\t\t\t\t\t<div class=\"echo-color-swatch\">\n\t\t\t\t\t\t<For each={[store.widget.state.primaryColor, ...COLORS]}>\n\t\t\t\t\t\t\t{color => (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"echo-color-swatch-button\"\n\t\t\t\t\t\t\t\t\ttitle={`Select ${color} color`}\n\t\t\t\t\t\t\t\t\tdata-selected={store.drawing.state.selectedColor === color}\n\t\t\t\t\t\t\t\t\tonClick={() => store.drawing.setState({ selectedColor: color })}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t'background-color': color,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</For>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t)\n}\n","import { type Component, For } from 'solid-js'\nimport { HighlightIcon, PenIcon, TrashIcon } from '~/components/icons'\nimport { toolConfig } from '~/config/drawingConfig'\nimport { useEchoStore } from '~/contexts/EchoContext'\nimport type { IconProps } from '~/types'\nimport { ColorSelector } from './ColorSelector'\n\nconst ToolIcon: Record<string, Component<IconProps>> = {\n\trectangle: HighlightIcon,\n\tpath: PenIcon,\n}\n\nexport const DrawingToolbar: Component = () => {\n\tconst store = useEchoStore()\n\tconst tools = Object.values(toolConfig)\n\n\treturn (\n\t\t<div class=\"echo-drawing-toolbar\" data-hide-when-drawing=\"true\">\n\t\t\t<For each={tools}>\n\t\t\t\t{tool => {\n\t\t\t\t\tconst Icon = ToolIcon[tool.id]\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"echo-drawing-toolbar-button\"\n\t\t\t\t\t\t\ttitle={tool.label}\n\t\t\t\t\t\t\tdata-selected={store.drawing.state.selectedTool === tool.id}\n\t\t\t\t\t\t\tonClick={() => store.drawing.setState({ selectedTool: tool.id })}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon class=\"echo-drawing-toolbar-icon\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)\n\t\t\t\t}}\n\t\t\t</For>\n\t\t\t<ColorSelector />\n\t\t\t{/* TODO: Add a confirmation dialog */}\n\t\t\t<button class=\"echo-drawing-toolbar-button\" title=\"Clear drawings\" onClick={() => store.drawing.setState({ shapes: [] }, true)}>\n\t\t\t\t<TrashIcon class=\"echo-drawing-toolbar-icon\" />\n\t\t\t</button>\n\t\t</div>\n\t)\n}\n","import type { Component, JSX } from 'solid-js'\n\ntype ButtonProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n\tvariant?: 'primary' | 'secondary'\n\tsize?: 'xs' | 'sm' | 'md' | 'lg'\n}\n\nexport const Button: Component<ButtonProps> = props => {\n\tconst variant = () => props.variant || 'primary'\n\tconst size = () => props.size || 'md'\n\n\treturn <button {...props} class={`echo-button echo-button-${variant()} echo-button-${size()} ${props.class}`} />\n}\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const ExternalLinkIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n\t\t<polyline points=\"15 3 21 3 21 9\" />\n\t\t<line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n\t</svg>\n)\n","import { type Component, For, Show, createMemo, createSignal } from 'solid-js'\nimport { Button } from '~/components/atoms/Button'\nimport { XIcon } from '~/components/icons'\nimport { ExternalLinkIcon } from '~/components/icons/ExternalLinkIcon'\nimport { useEchoStore } from '~/contexts'\nimport { registerMutationObserver, registerWindowEventListener } from '~/utils/listeners'\nimport { clearPageState, getStoredPages } from '~/utils/storage'\n\nexport const StoredFeedback: Component = () => {\n\tconst store = useEchoStore()\n\tconst [pages, setPages] = createSignal(getStoredPages())\n\tconst [currentPath, setCurrentPath] = createSignal(window.location.pathname)\n\n\tconst handleStorageChange = () => {\n\t\tconst storedPages = getStoredPages()\n\t\tsetPages(storedPages)\n\t\tstore.widget.setState({ pagesCount: storedPages.length })\n\t}\n\n\tconst handleUrlChange = () => {\n\t\tsetCurrentPath(window.location.pathname)\n\t}\n\n\tregisterWindowEventListener({\n\t\tevent: 'echo-storage-change',\n\t\tcallback: handleStorageChange,\n\t})\n\n\tregisterWindowEventListener({\n\t\tevent: 'popstate',\n\t\tcallback: handleUrlChange,\n\t})\n\n\tregisterMutationObserver({\n\t\ttarget: document.documentElement,\n\t\toptions: {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t},\n\t\tcallback: () => {\n\t\t\tsetCurrentPath(window.location.pathname)\n\t\t},\n\t})\n\n\tconst handleNavigate = (path: string, latestQuery?: string) => {\n\t\tconst targetUrl = latestQuery ? `${path}${latestQuery}` : path\n\t\twindow.location.href = targetUrl\n\t\tstore.widget.setState({ isStoredFeedbackOpen: false })\n\t}\n\n\tconst handleDelete = (path: string) => {\n\t\tif (currentPath() === path) {\n\t\t\tstore.methods.reset()\n\t\t}\n\t\tclearPageState(path)\n\n\t\tconst storedPages = getStoredPages()\n\t\tsetPages(storedPages)\n\t\tstore.widget.setState({ pagesCount: storedPages.length })\n\t}\n\n\tconst formatPath = (path: string) => {\n\t\tif (path === '/') return '/'\n\t\tconst parts = path.split('/')\n\t\tif (parts.length <= 4) return path\n\t\treturn `/${parts[1]}/.../${parts[parts.length - 1]}`\n\t}\n\n\treturn (\n\t\t<Show when={store.widget.state.isStoredFeedbackOpen}>\n\t\t\t<div class=\"echo-stored-feedback\">\n\t\t\t\t<div class=\"echo-stored-feedback-header\">\n\t\t\t\t\t<h3>Unsubmitted Feedback</h3>\n\t\t\t\t\t<Button variant=\"secondary\" size=\"sm\" onClick={() => store.widget.setState({ isStoredFeedbackOpen: false })}>\n\t\t\t\t\t\t<XIcon size={20} />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"echo-stored-feedback-list\">\n\t\t\t\t\t<For each={pages()}>\n\t\t\t\t\t\t{page => {\n\t\t\t\t\t\t\tconst isCurrent = createMemo(() => page.path === currentPath())\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div class={`echo-stored-feedback-item ${isCurrent() ? 'echo-stored-feedback-item-current' : ''}`}>\n\t\t\t\t\t\t\t\t\t<div class=\"echo-stored-feedback-content\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"echo-stored-feedback-path\" title={page.path}>\n\t\t\t\t\t\t\t\t\t\t\t{formatPath(page.path)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"echo-stored-feedback-preview\">{page.state.feedback.comment}</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"echo-stored-feedback-actions\">\n\t\t\t\t\t\t\t\t\t\t{!isCurrent() && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"echo-stored-feedback-link\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleNavigate(page.path, page.state.latestQuery)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<ExternalLinkIcon />\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<Button class=\"echo-stored-feedback-delete\" variant=\"secondary\" size=\"sm\" onClick={() => handleDelete(page.path)}>\n\t\t\t\t\t\t\t\t\t\t\tDelete\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}}\n\t\t\t\t\t</For>\n\t\t\t\t\t<Show when={pages().length === 0}>\n\t\t\t\t\t\t<div class=\"echo-stored-feedback-empty\">No unsubmitted feedback</div>\n\t\t\t\t\t</Show>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Show>\n\t)\n}\n","import type { Component } from 'solid-js'\nimport { createEffect, createSignal } from 'solid-js'\nimport { ContemberIcon } from '~/components/icons/ContemberIcon'\nimport { useEchoStore } from '~/contexts'\nimport { getFromStorage, setToStorage } from '~/utils'\nimport { StoredFeedback } from './StoredFeedback'\n\nexport const LauncherButton: Component = () => {\n\tconst store = useEchoStore()\n\tconst [isMinimized, setIsMinimized] = createSignal(false)\n\tlet minimizeTimeout: number | undefined\n\n\tconst resetHideTimeout = () => {\n\t\tif (minimizeTimeout) {\n\t\t\twindow.clearTimeout(minimizeTimeout)\n\t\t}\n\t\tminimizeTimeout = window.setTimeout(() => {\n\t\t\tconst hasSeenMessage = getFromStorage('welcome_message_shown', false)\n\t\t\tif (!store.widget.state.isOpen && !store.widget.state.isStoredFeedbackOpen && hasSeenMessage) {\n\t\t\t\tsetIsMinimized(true)\n\t\t\t}\n\t\t}, 4000) // Hide after 4 seconds of inactivity\n\t}\n\n\tconst handleEchoLauncherButtonEnter = () => {\n\t\tsetIsMinimized(false)\n\t}\n\n\tconst handleEchoLauncherButtonLeave = () => {\n\t\tresetHideTimeout()\n\t}\n\n\tconst handleClick = () => {\n\t\tstore.widget.setState({ isOpen: !store.widget.state.isOpen })\n\t\tstore.widget.setState({ welcomeMessageIsClosing: true })\n\t\tsetToStorage('welcome_message_shown', true)\n\t}\n\n\tcreateEffect(() => {\n\t\tif (!store.widget.state.isOpen) {\n\t\t\tsetIsMinimized(false)\n\t\t\tresetHideTimeout()\n\t\t}\n\t\tif (store.widget.state.isStoredFeedbackOpen) {\n\t\t\tsetIsMinimized(false)\n\t\t}\n\t})\n\n\tconst handleCountClick = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tstore.widget.setState({ isStoredFeedbackOpen: !store.widget.state.isStoredFeedbackOpen })\n\t\tsetIsMinimized(false)\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<button\n\t\t\t\tclass=\"echo-launcher-button\"\n\t\t\t\tdata-hidden={store.widget.state.isOpen}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonPointerEnter={handleEchoLauncherButtonEnter}\n\t\t\t\tonPointerLeave={handleEchoLauncherButtonLeave}\n\t\t\t\tstyle={{\n\t\t\t\t\tleft: isMinimized() ? '45px' : '0',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ContemberIcon stroke=\"white\" fill=\"#ffffff\" />\n\t\t\t\t{store.widget.state.pagesCount > 0 && (\n\t\t\t\t\t<span class=\"echo-launcher-button-count\" onClick={handleCountClick}>\n\t\t\t\t\t\t{store.widget.state.pagesCount}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t\t<StoredFeedback />\n\t\t</>\n\t)\n}\n","import type { Component } from 'solid-js'\nimport { Button } from '~/components/atoms'\nimport { CheckCircleIcon, XCircleIcon, XIcon } from '~/components/icons'\nimport { useEchoStore } from '~/contexts/EchoContext'\n\nexport const Notification: Component = () => {\n\tconst store = useEchoStore()\n\n\tconst hideNotification = () => {\n\t\tstore.widget.setState({ notification: { ...store.widget.state.notification, show: false } })\n\t}\n\n\tconst getTitle = () => {\n\t\tswitch (store.widget.state.notification.type) {\n\t\t\tcase 'success':\n\t\t\t\treturn store.widget.state.text.notification.successTitle\n\t\t\tcase 'error':\n\t\t\t\treturn store.widget.state.text.notification.errorTitle\n\t\t\tdefault:\n\t\t\t\treturn ''\n\t\t}\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclass=\"echo-notification\"\n\t\t\tdata-type={store.widget.state.notification.type}\n\t\t\tdata-empty={!store.widget.state.notification.type}\n\t\t\tdata-hidden={!store.widget.state.notification.show}\n\t\t>\n\t\t\t<Button\n\t\t\t\tclass=\"echo-notification-hide\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tonClick={hideNotification}\n\t\t\t\ttitle={store.widget.state.text.notification.hideTitle}\n\t\t\t>\n\t\t\t\t<XIcon size={20} />\n\t\t\t</Button>\n\t\t\t<div class=\"echo-notification-icon\">\n\t\t\t\t{store.widget.state.notification.type === 'success' ? (\n\t\t\t\t\t<CheckCircleIcon size={32} />\n\t\t\t\t) : store.widget.state.notification.type === 'error' ? (\n\t\t\t\t\t<XCircleIcon size={32} />\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t\t<div class=\"echo-notification-content\">\n\t\t\t\t<div class=\"echo-notification-title\">{getTitle()}</div>\n\t\t\t\t<div class=\"echo-notification-message\">{store.widget.state.notification?.message}</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import type { Component } from 'solid-js'\nimport { XIcon } from '~/components/icons'\nimport { useEchoStore } from '~/contexts/EchoContext'\nimport { getFromStorage, setToStorage } from '~/utils/storage'\n\nexport const WelcomeMessage: Component = () => {\n\tconst store = useEchoStore()\n\tconst hasSeenMessage = getFromStorage('welcome_message_shown', false)\n\n\tconst hideMessage = (e: MouseEvent | KeyboardEvent) => {\n\t\te.stopPropagation()\n\t\tstore.widget.setState({ welcomeMessageIsClosing: true })\n\t\tsetToStorage('welcome_message_shown', true)\n\t}\n\n\tconst openWidget = () => {\n\t\tstore.widget.setState({ isOpen: true })\n\t\tstore.widget.setState({ welcomeMessageIsClosing: true })\n\t\tsetToStorage('welcome_message_shown', true)\n\t}\n\n\tif (hasSeenMessage) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<button\n\t\t\tclass=\"echo-welcome-message\"\n\t\t\tdata-hidden={store.widget.state.welcomeMessageIsClosing}\n\t\t\tonClick={openWidget}\n\t\t\tstyle={{\n\t\t\t\tbottom: '80px',\n\t\t\t\tright: '20px',\n\t\t\t}}\n\t\t>\n\t\t\t<span class=\"echo-welcome-message-pulsar\" />\n\t\t\t{store.widget.state.text.welcomeMessage.text}\n\t\t\t<div\n\t\t\t\tclass=\"echo-welcome-message-close\"\n\t\t\t\tonClick={hideMessage}\n\t\t\t\trole=\"button\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\taria-label={store.widget.state.text.welcomeMessage.closeAriaLabel}\n\t\t\t\tonKeyDown={e => e.key === 'Enter' && hideMessage(e)}\n\t\t\t>\n\t\t\t\t<XIcon size={16} strokeWidth={3} />\n\t\t\t</div>\n\t\t</button>\n\t)\n}\n","import { Component, Show, createMemo } from 'solid-js'\nimport { toolConfig } from '~/config/drawingConfig'\nimport type { Shape as ShapeType } from '~/types'\nimport { getPathFromPoints, getRectFromPoints } from '~/utils/geometry'\n\ntype ShapeProps = ShapeType & {\n\tselectedShapeId: string | null\n\tonShapeClick?: (id: string) => void\n}\n\nexport const Shape: Component<ShapeProps> = props => {\n\tconst isSelected = createMemo(() => props.id === props.selectedShapeId)\n\n\treturn (\n\t\t<>\n\t\t\t<Show when={props.type === 'rectangle'}>\n\t\t\t\t<RectangleShape {...props} isSelected={isSelected()} />\n\t\t\t</Show>\n\n\t\t\t<Show when={props.type === 'path'}>\n\t\t\t\t<PathShape {...props} isSelected={isSelected()} />\n\t\t\t</Show>\n\t\t</>\n\t)\n}\n\nconst RectangleShape: Component<ShapeProps & { isSelected: boolean }> = props => {\n\tconst rect = createMemo(() => getRectFromPoints(props.points))\n\treturn (\n\t\t<Show when={rect()}>\n\t\t\t<rect\n\t\t\t\tclass=\"echo-shape\"\n\t\t\t\tdata-shape-id={props.id}\n\t\t\t\tdata-selected={props.isSelected}\n\t\t\t\tx={rect()!.x}\n\t\t\t\ty={rect()!.y}\n\t\t\t\twidth={rect()!.width}\n\t\t\t\theight={rect()!.height}\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke={props.color}\n\t\t\t\tstroke-width={toolConfig.rectangle.strokeWidth}\n\t\t\t\topacity={props.isSelected ? toolConfig.rectangle.opacity.selected : toolConfig.rectangle.opacity.default}\n\t\t\t\tvector-effect=\"non-scaling-stroke\"\n\t\t\t\tstroke-dasharray={props.isSelected ? '5,5' : 'none'}\n\t\t\t\tcursor={props.isSelected ? 'move' : 'pointer'}\n\t\t\t\tonClick={() => props.onShapeClick?.(props.id)}\n\t\t\t/>\n\t\t</Show>\n\t)\n}\n\nconst PathShape: Component<ShapeProps & { isSelected: boolean }> = props => {\n\tconst path = createMemo(() => getPathFromPoints(props.points))\n\treturn (\n\t\t<Show when={path()}>\n\t\t\t<path\n\t\t\t\tclass=\"echo-shape\"\n\t\t\t\tdata-shape-id={props.id}\n\t\t\t\tdata-selected={props.isSelected}\n\t\t\t\td={path()!}\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke={props.color}\n\t\t\t\tstroke-width={toolConfig.path.strokeWidth}\n\t\t\t\tvector-effect=\"non-scaling-stroke\"\n\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\topacity={props.isSelected ? toolConfig.path.opacity.selected : toolConfig.path.opacity.default}\n\t\t\t\tcursor={props.isSelected ? 'move' : 'pointer'}\n\t\t\t\tonClick={() => props.onShapeClick?.(props.id)}\n\t\t\t/>\n\t\t</Show>\n\t)\n}\n","import { type Component, Show, createMemo } from 'solid-js'\nimport { useEchoStore } from '~/contexts'\nimport { isMobileDevice } from '~/utils/device'\n\nexport const DrawingTooltip: Component = () => {\n\tconst store = useEchoStore()\n\n\tconst showTooltip = createMemo(() => {\n\t\treturn (\n\t\t\tstore.drawing.state.showTooltip &&\n\t\t\tstore.drawing.state.mousePosition.y &&\n\t\t\tstore.drawing.state.mousePosition.x &&\n\t\t\tstore.widget.state.isOpen &&\n\t\t\t!isMobileDevice()\n\t\t)\n\t})\n\n\treturn (\n\t\t<Show when={showTooltip()}>\n\t\t\t<div\n\t\t\t\tclass=\"echo-drawing-tooltip\"\n\t\t\t\tdata-hide-when-drawing=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\ttop: `${store.drawing.state.mousePosition.y + 20}px`,\n\t\t\t\t\tleft: `${store.drawing.state.mousePosition.x + 10}px`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{store.widget.state.text.drawingTooltip.text}\n\t\t\t</div>\n\t\t</Show>\n\t)\n}\n","import { type Component, createMemo, createSignal } from 'solid-js'\nimport { Button } from '~/components/atoms'\nimport { TrashIcon } from '~/components/icons'\nimport { useEchoStore } from '~/contexts'\nimport type { Point } from '~/types'\nimport { getRectFromPoints } from '~/utils/geometry'\nimport { registerWindowEventListener } from '~/utils/listeners'\n\nexport const ShapeActions: Component = () => {\n\tconst store = useEchoStore()\n\tlet actionsRef: HTMLDivElement | undefined\n\tconst [scrollPosition, setScrollPosition] = createSignal({ x: window.scrollX, y: window.scrollY })\n\n\tconst handleScroll = () => {\n\t\tsetScrollPosition({ x: window.scrollX, y: window.scrollY })\n\t}\n\n\tregisterWindowEventListener({\n\t\tevent: 'scroll',\n\t\tcallback: handleScroll,\n\t})\n\n\tconst handleDelete = () => {\n\t\tif (store.drawing.state.selectedShapeId) {\n\t\t\tstore.drawing.setState({\n\t\t\t\tshapes: store.drawing.state.shapes.filter(shape => shape.id !== store.drawing.state.selectedShapeId),\n\t\t\t\tselectedShapeId: null,\n\t\t\t})\n\t\t}\n\t}\n\n\tconst selectedShape = createMemo(() => {\n\t\tif (!store.drawing.state.selectedShapeId) return null\n\t\treturn store.drawing.state.shapes.find(shape => shape.id === store.drawing.state.selectedShapeId)\n\t})\n\n\tconst position = createMemo(() => {\n\t\tconst shape = selectedShape()\n\t\tconst actionsRect = actionsRef?.getBoundingClientRect()\n\n\t\tif (!shape || !actionsRect) return null\n\n\t\tlet point: Point | null = null\n\n\t\tif (shape.type === 'rectangle') {\n\t\t\tconst rect = getRectFromPoints(shape.points)\n\t\t\tif (!rect) return null\n\t\t\tpoint = {\n\t\t\t\tx: rect.x + rect.width / 2,\n\t\t\t\ty: rect.y,\n\t\t\t}\n\t\t} else if (shape.type === 'path' && shape.points.length > 0) {\n\t\t\tpoint = {\n\t\t\t\tx: shape.points[0].x,\n\t\t\t\ty: shape.points[0].y,\n\t\t\t}\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\n\t\tconst PADDING = 8\n\n\t\tconst scroll = scrollPosition()\n\t\treturn {\n\t\t\tx: Math.max(actionsRect.width / 2 + PADDING, Math.min(window.innerWidth - actionsRect.width / 2 - PADDING, point.x - scroll.x)),\n\t\t\ty: Math.max(actionsRect.height + PADDING, Math.min(window.innerHeight - PADDING, point.y - scroll.y)),\n\t\t}\n\t})\n\n\treturn (\n\t\t<div\n\t\t\tref={actionsRef}\n\t\t\tclass=\"echo-shape-actions\"\n\t\t\tdata-hide-when-drawing=\"true\"\n\t\t\thidden={!position()}\n\t\t\tstyle={{\n\t\t\t\tleft: position() ? `${position()?.x}px` : '0',\n\t\t\t\ttop: position() ? `${position()?.y}px` : '0',\n\t\t\t}}\n\t\t>\n\t\t\t<Button onClick={handleDelete} size=\"sm\" variant=\"secondary\" title=\"Delete shape\">\n\t\t\t\t<TrashIcon size={20} />\n\t\t\t</Button>\n\t\t</div>\n\t)\n}\n","import { type Component, For, onCleanup, onMount } from 'solid-js'\nimport { useEchoStore } from '~/contexts'\nimport { generateCutoutPath } from '~/utils/svg'\nimport { Shape } from '../atoms/Shape'\nimport { DrawingTooltip } from '../molecules/DrawingTooltip'\nimport { ShapeActions } from '../molecules/ShapeActions'\n\nexport const DrawingLayer: Component = () => {\n\tconst store = useEchoStore()\n\tlet drawingLayerContainerRef: HTMLDivElement | undefined\n\n\tonMount(() => {\n\t\tdrawingLayerContainerRef?.addEventListener('mousemove', store.drawing.methods.handleMove)\n\t\tdrawingLayerContainerRef?.addEventListener('mouseup', store.drawing.methods.handleEnd)\n\t\tdrawingLayerContainerRef?.addEventListener('touchmove', store.drawing.methods.handleMove, { passive: false })\n\t\tdrawingLayerContainerRef?.addEventListener('touchend', store.drawing.methods.handleEnd)\n\t})\n\n\tonCleanup(() => {\n\t\tdrawingLayerContainerRef?.removeEventListener('mousemove', store.drawing.methods.handleMove)\n\t\tdrawingLayerContainerRef?.removeEventListener('mouseup', store.drawing.methods.handleEnd)\n\t\tdrawingLayerContainerRef?.removeEventListener('touchmove', store.drawing.methods.handleMove)\n\t\tdrawingLayerContainerRef?.removeEventListener('touchend', store.drawing.methods.handleEnd)\n\t})\n\n\treturn (\n\t\t<div\n\t\t\tref={drawingLayerContainerRef}\n\t\t\tclass=\"echo-drawing-layer-container\"\n\t\t\tstyle={{\n\t\t\t\tcursor: store.drawing.state.cursor,\n\t\t\t}}\n\t\t>\n\t\t\t<DrawingTooltip />\n\t\t\t<ShapeActions />\n\n\t\t\t<svg\n\t\t\t\twidth=\"100%\"\n\t\t\t\theight=\"100%\"\n\t\t\t\tclass=\"echo-drawing-layer\"\n\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\tonMouseDown={e => {\n\t\t\t\t\tstore.drawing.methods.handleStart(e)\n\t\t\t\t\tstore.drawing.setState({ showTooltip: false, hasDrawn: true })\n\t\t\t\t}}\n\t\t\t\tonTouchStart={e => {\n\t\t\t\t\te.preventDefault() // Prevent scrolling while drawing\n\t\t\t\t\tstore.drawing.methods.handleStart(e)\n\t\t\t\t\tstore.drawing.methods.handleEnter(e)\n\t\t\t\t\tstore.drawing.setState({ showTooltip: false, hasDrawn: true })\n\t\t\t\t}}\n\t\t\t\tonMouseMove={store.drawing.methods.handleMove}\n\t\t\t\tonTouchMove={e => {\n\t\t\t\t\te.preventDefault() // Prevent scrolling while drawing\n\t\t\t\t\tstore.drawing.methods.handleMove(e)\n\t\t\t\t}}\n\t\t\t\tonMouseEnter={store.drawing.methods.handleEnter}\n\t\t\t\tonMouseLeave={store.drawing.methods.handleLeave}\n\t\t\t\tonTouchEnd={store.drawing.methods.handleLeave}\n\t\t\t>\n\t\t\t\t{/* overlay mask */}\n\t\t\t\t<path\n\t\t\t\t\tclass=\"echo-drawing-layer-mask\"\n\t\t\t\t\td={generateCutoutPath(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twidth: store.widget.state.dimensions.width,\n\t\t\t\t\t\t\theight: store.widget.state.dimensions.height,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstore.drawing.state.currentPoints,\n\t\t\t\t\t\tstore.drawing.state.shapes,\n\t\t\t\t\t)}\n\t\t\t\t\tfill=\"rgba(33, 43, 55, 1)\"\n\t\t\t\t\tfill-opacity=\"0.2\"\n\t\t\t\t\tfill-rule=\"evenodd\"\n\t\t\t\t/>\n\n\t\t\t\t{/* already drawn shapes */}\n\t\t\t\t<For each={store.drawing.state.shapes}>\n\t\t\t\t\t{shape => (\n\t\t\t\t\t\t<Shape\n\t\t\t\t\t\t\tid={shape.id}\n\t\t\t\t\t\t\ttype={shape.type}\n\t\t\t\t\t\t\tcolor={shape.color}\n\t\t\t\t\t\t\tpoints={shape.points}\n\t\t\t\t\t\t\tselectedShapeId={store.drawing.state.selectedShapeId}\n\t\t\t\t\t\t\tonShapeClick={store.drawing.methods.handleShapeClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</For>\n\n\t\t\t\t{/* current shape */}\n\t\t\t\t<Shape\n\t\t\t\t\tid=\"temp\"\n\t\t\t\t\ttype={store.drawing.state.selectedTool}\n\t\t\t\t\tcolor={store.drawing.state.selectedColor}\n\t\t\t\t\tpoints={store.drawing.state.currentPoints}\n\t\t\t\t\tselectedShapeId={store.drawing.state.selectedShapeId}\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t</div>\n\t)\n}\n","import { type Component, createEffect } from 'solid-js'\nimport { Button } from '~/components/atoms/Button'\nimport { ChevronRightIcon, XIcon } from '~/components/icons'\nimport { useEchoStore } from '~/contexts/EchoContext'\nimport { FeedbackPayload } from '~/types'\nimport { getConsoleBuffer } from '~/utils/console'\nimport { captureScreenshot } from '~/utils/screenshot'\n\nexport const FeedbackForm: Component = () => {\n\tlet textAreaRef: HTMLTextAreaElement | undefined\n\tconst store = useEchoStore()\n\n\tconst handleSubmit = async (e: SubmitEvent) => {\n\t\te.preventDefault()\n\n\t\tconst screenshot = await captureScreenshot()\n\n\t\tconst data: FeedbackPayload = {\n\t\t\tcomment: store.feedback.state.comment,\n\t\t\tscreenshot: screenshot,\n\t\t\tmetadata: {\n\t\t\t\turl: window.location.href,\n\t\t\t\tuserAgent: navigator.userAgent,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\tbrowserInfo: {\n\t\t\t\t\twidth: window.innerWidth,\n\t\t\t\t\theight: window.innerHeight,\n\t\t\t\t\tscreenWidth: window.screen.width,\n\t\t\t\t\tscreenHeight: window.screen.height,\n\t\t\t\t},\n\t\t\t},\n\t\t\tconsole: getConsoleBuffer(),\n\t\t}\n\n\t\tstore.methods.submit(data)\n\t}\n\n\tcreateEffect(() => {\n\t\tif (textAreaRef && store.widget.state.isOpen) {\n\t\t\ttextAreaRef.focus()\n\t\t}\n\t})\n\n\tconst minimize = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tstore.feedback.setState({ isMinimized: true })\n\t}\n\n\tconst maximize = () => {\n\t\tstore.feedback.setState({ isMinimized: false })\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclass=\"echo-feedback\"\n\t\t\tdata-minimized={store.feedback.state.isMinimized}\n\t\t\tdata-hide-when-drawing=\"true\"\n\t\t\tonClick={() => store.feedback.state.isMinimized && maximize()}\n\t\t\tstyle={{ cursor: store.feedback.state.isMinimized ? 'pointer' : 'default' }}\n\t\t>\n\t\t\t<form class=\"echo-feedback-content\" onSubmit={handleSubmit}>\n\t\t\t\t<div class=\"echo-feedback-header\">\n\t\t\t\t\t<h3 class=\"echo-feedback-title\">{store.widget.state.text.feedbackForm.title}</h3>\n\t\t\t\t\t<div class=\"echo-feedback-header-actions\">\n\t\t\t\t\t\t<Button type=\"button\" title=\"Hide form\" variant=\"secondary\" size=\"sm\" onClick={minimize}>\n\t\t\t\t\t\t\t<ChevronRightIcon size={20} />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button type=\"button\" title=\"Close form\" variant=\"secondary\" size=\"sm\" onClick={() => store.widget.setState({ isOpen: false })}>\n\t\t\t\t\t\t\t<XIcon size={20} />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<textarea\n\t\t\t\t\tref={textAreaRef}\n\t\t\t\t\tclass=\"echo-feedback-form-textarea\"\n\t\t\t\t\tvalue={store.feedback.state.comment}\n\t\t\t\t\tplaceholder={store.widget.state.text.feedbackForm.placeholder}\n\t\t\t\t\tonInput={e => store.feedback.setState({ comment: e.currentTarget.value })}\n\t\t\t\t\trequired\n\t\t\t\t/>\n\n\t\t\t\t<Button type=\"submit\" variant=\"primary\" size=\"lg\" style={{ width: '100%' }}>\n\t\t\t\t\t{store.widget.state.text.feedbackForm.submitButton}\n\t\t\t\t</Button>\n\t\t\t</form>\n\t\t</div>\n\t)\n}\n","import { type Component, JSXElement, createEffect, createSignal } from 'solid-js'\nimport { Portal } from 'solid-js/web'\nimport { EchoProvider } from '~/contexts'\nimport { useEchoStore } from '~/contexts/EchoContext'\nimport type { FullEchoConfig } from '~/types'\nimport { getContrastColor } from '~/utils/color'\nimport { registerKeyListener, registerMutationObserver, registerWindowEventListener } from '~/utils/listeners'\nimport staticStyles from './../styles.css?inline'\nimport { DrawingToolbar } from './molecules/DrawingToolbar'\nimport { LauncherButton } from './molecules/LauncherButton'\nimport { Notification } from './molecules/Notification'\nimport { WelcomeMessage } from './molecules/WelcomeMessage'\nimport { DrawingLayer } from './organisms/DrawingLayer'\nimport { FeedbackForm } from './organisms/FeedbackForm'\n\nexport const Echo: Component<FullEchoConfig> = props => {\n\treturn (\n\t\t<Portal useShadow mount={document.body}>\n\t\t\t<EchoProvider {...props}>\n\t\t\t\t<EchoRoot>\n\t\t\t\t\t<EchoStyles primaryColor={props.primaryColor!} />\n\t\t\t\t\t<EchoInterface />\n\t\t\t\t</EchoRoot>\n\t\t\t</EchoProvider>\n\t\t</Portal>\n\t)\n}\n\nconst EchoStyles: Component<{ primaryColor: string }> = props => {\n\tconst [dynamicStyles, setDynamicStyles] = createSignal('')\n\n\tcreateEffect(() => {\n\t\tconst css = `\n\t\t\t\t.echo-root {\n\t\t\t\t\t--primary-color: ${props.primaryColor};\n\t\t\t\t\t--primary-text-color: ${getContrastColor(props.primaryColor)};\n\t\t\t\t}\n\t\t\t`\n\t\tsetDynamicStyles(css)\n\t})\n\n\treturn (\n\t\t<>\n\t\t\t<style>\n\t\t\t\t{staticStyles}\n\t\t\t\t{dynamicStyles()}\n\t\t\t</style>\n\t\t</>\n\t)\n}\n\nconst EchoInterface: Component = () => {\n\tconst store = useEchoStore()\n\n\treturn (\n\t\t<>\n\t\t\t<div class=\"echo-launcher\" data-hidden={store.widget.state.isOpen}>\n\t\t\t\t<LauncherButton />\n\t\t\t\t<WelcomeMessage />\n\t\t\t\t<Notification />\n\t\t\t</div>\n\n\t\t\t<div class=\"echo-overlay\" data-hidden={!store.widget.state.isOpen}>\n\t\t\t\t<FeedbackForm />\n\t\t\t\t<DrawingToolbar />\n\t\t\t\t<DrawingLayer />\n\t\t\t</div>\n\t\t</>\n\t)\n}\n\nconst EchoRoot: Component<{\n\tchildren: JSXElement\n}> = props => {\n\tlet rootRef: HTMLDivElement | undefined\n\tconst store = useEchoStore()\n\n\tconst updateHeight = () => {\n\t\trequestAnimationFrame(() => {\n\t\t\tif (!rootRef) return\n\n\t\t\trootRef.style.height = '0px'\n\t\t\trootRef.style.height = `${document.documentElement.scrollHeight}px`\n\t\t\tstore.widget.setState({\n\t\t\t\tdimensions: {\n\t\t\t\t\twidth: document.documentElement.clientWidth,\n\t\t\t\t\theight: document.documentElement.scrollHeight,\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t}\n\n\tregisterWindowEventListener({\n\t\tevent: 'resize',\n\t\tcallback: updateHeight,\n\t\tonMount: updateHeight,\n\t})\n\n\tregisterKeyListener('Escape', () => {\n\t\tstore.widget.setState({ isOpen: false })\n\t})\n\n\tregisterMutationObserver({\n\t\ttarget: document.documentElement,\n\t\toptions: {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t\tattributes: true,\n\t\t},\n\t\tcallback: () => {\n\t\t\tupdateHeight()\n\t\t},\n\t})\n\n\treturn (\n\t\t<div\n\t\t\tref={rootRef}\n\t\t\tclass=\"echo-root\"\n\t\t\tdata-drawing={store.drawing.state.isDrawing}\n\t\t\tstyle={{\n\t\t\t\theight: `${store.widget.state.dimensions.height}px`,\n\t\t\t\twidth: `${store.widget.state.dimensions.width}px`,\n\t\t\t}}\n\t\t>\n\t\t\t{props.children}\n\t\t</div>\n\t)\n}\n","import type { TextConfig } from '~/types'\n\nexport const defaultText: TextConfig = {\n\twelcomeMessage: {\n\t\ttext: 'Click here to leave feedback',\n\t\tcloseAriaLabel: 'Close welcome message',\n\t},\n\tfeedbackForm: {\n\t\ttitle: 'Send Feedback',\n\t\tplaceholder: \"What's on your mind? We'd love to hear your feedback...\",\n\t\tscreenshotAlt: 'Screenshot Preview',\n\t\tsubmitButton: 'Send Feedback',\n\t\tminimizeTitle: 'Minimize',\n\t\texpandTitle: 'Expand',\n\t\tcloseTitle: 'Close',\n\t\tshowFormTitle: 'Show Feedback Form',\n\t},\n\tnotification: {\n\t\tsuccessTitle: 'Thank you for your feedback!',\n\t\terrorTitle: 'Something went wrong.',\n\t\terrorMessage: 'Failed to send feedback. Please try again.',\n\t\thideTitle: 'Hide notification',\n\t},\n\tdrawingTooltip: {\n\t\ttext: 'Click & drag to draw',\n\t},\n}\n","import { render } from 'solid-js/web'\nimport { Echo } from './components/Echo'\nimport { defaultText } from './config/defaultText'\nimport { type EchoConfig, type FeedbackPayload } from './types'\nimport { deepMerge } from './utils/common'\nimport { cleanupConsole, getConsoleBuffer, setupConsole } from './utils/console'\nimport { validateOptions } from './utils/validators'\nimport './styles.css'\n\nlet activeInstance: (() => void) | null = null\n\n/**\n * Initialize the Echo feedback widget.\n * @throws {Error} If initialization fails or invalid options are provided\n * @returns {() => void} Cleanup function to remove the widget\n */\nexport function initEcho(options: EchoConfig): () => void {\n\tif (activeInstance) {\n\t\tconsole.warn('Echo widget is already initialized. Cleaning up previous instance...')\n\t\tactiveInstance()\n\t}\n\n\ttry {\n\t\tvalidateOptions(options)\n\t\tsetupConsole()\n\n\t\tconst { position = 'bottom-right', primaryColor = '#6227dc', onSubmit, textConfig = {} } = options\n\t\tconst mergedTextConfig = deepMerge(defaultText, textConfig)\n\n\t\tconst container = document.createElement('div')\n\t\tcontainer.id = 'echo-container'\n\t\tdocument.body.appendChild(container)\n\n\t\tconst dispose = render(\n\t\t\t() => (\n\t\t\t\t<Echo\n\t\t\t\t\tposition={position}\n\t\t\t\t\tprimaryColor={primaryColor}\n\t\t\t\t\ttextConfig={mergedTextConfig}\n\t\t\t\t\tonSubmit={async data =>\n\t\t\t\t\t\tawait onSubmit({\n\t\t\t\t\t\t\t...data,\n\t\t\t\t\t\t\tconsole: getConsoleBuffer(),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t),\n\t\t\tcontainer,\n\t\t)\n\n\t\tconst cleanup = () => {\n\t\t\tdispose()\n\t\t\tcontainer.remove()\n\t\t\tcleanupConsole()\n\t\t\tactiveInstance = null\n\t\t}\n\n\t\twindow.addEventListener('unload', cleanup, { once: true })\n\n\t\tactiveInstance = cleanup\n\t\treturn cleanup\n\t} catch (error) {\n\t\tconsole.error('Echo initialization failed:', error)\n\t\tthrow error\n\t}\n}\n\nexport type { FeedbackPayload, EchoConfig }\n"],"names":["booleans","Properties","ChildProperties","Aliases","PropAliases","getPropAlias","prop","tagName","a","DelegatedEvents","reconcileArrays","parentNode","b","bLength","aEnd","bEnd","aStart","bStart","after","map","node","i","index","sequence","t","$$EVENTS","render","code","element","init","options","disposer","createRoot","dispose","insert","template","html","isImportNode","isSVG","create","fn","untrack","delegateEvents","eventNames","document","e","l","name","eventHandler","setAttribute","value","isHydrating","setBoolAttribute","className","addEventListener","handler","delegate","handlerFn","classList","prev","classKeys","prevKeys","len","key","toggleClassKey","classValue","style","nodeStyle","v","s","spread","props","skipChildren","prevProps","createRenderEffect","insertExpression","use","assign","arg","parent","accessor","marker","initial","current","skipRef","assignProp","sharedConfig","toPropertyName","_","w","classNames","nameLen","isCE","isProp","isChildProp","propAlias","forceProp","h","el","ev","oriTarget","oriCurrentTarget","retarget","handleNode","data","walkUpTree","path","unwrapArray","hydrating","cleaned","multi","cleanChildren","array","currentArray","normalizeIncomingArray","nodes","appendNodes","normalized","unwrap","dynamic","item","replacement","inserted","isParent","SVG_NAMESPACE","createElement","Portal","useShadow","mount","owner","getOwner","content","createEffect","runWithOwner","createMemo","clean","setClean","createSignal","cleanup","onCleanup","container","renderRoot","debounce","func","wait","timeout","args","registerKeyListener","callback","registerWindowEventListener","event","mountCallback","cleanupCallback","handleEvent","onMount","registerMutationObserver","target","observer","STORAGE_PREFIX","STORAGE_KEY","dispatchStorageChange","getStorageKey","getFromStorage","defaultValue","setToStorage","error","getPageKey","savePageState","pageKey","state","existingData","allPagesData","currentQuery","essentialState","loadPageState","clearPageState","getStoredPagesCount","getStoredPages","$RAW","$NODE","$HAS","$SELF","wrap$1","p","$PROXY","proxyTraps$1","keys","desc","isWrappable","obj","proto","set","result","unwrapped","getNodes","symbol","getNode","property","proxyDescriptor$1","trackSelf","getListener","ownKeys","receiver","$TRACK","tracked","setProperty","deleting","mergeStoreNode","updateArray","next","updatePath","traversed","part","partType","isArray","from","to","by","createStore","store","unwrappedStore","wrappedStore","setStore","batch","toolConfig","color","calculateLuminance","hexColor","r","g","getContrastColor","deepMerge","source","consoleBuffer","originalConsole","originalOnError","originalOnUnhandledRejection","createConsoleProxy","type","originalFn","message","setupConsole","lineno","colno","errorMessage","filename","cleanupConsole","getConsoleBuffer","isMobileDevice","_a","getPointFromEvent","useClientCoords","touch","getDistance","p1","p2","dx","dy","getRectFromPoints","points","start","end","getPathFromPoints","point","createCanvas","width","height","canvas","shouldIgnoreElement","captureScreenshot","screenshot","html2canvas","ctx","generateCutoutPath","dimensions","currentPoints","shapes","shape","validateOptions","MOVEMENT_THRESHOLD","computeCursor","tool","createDrawingStore","config","currentPageKey","onStateChange","setState","_b","wrappedSetState","newState","isClearing","methods","initialPoint","newShape","shapeId","clientPoint","updatedShapes","createFeedbackStore","createWidgetStore","createEchoStore","debouncedSave","feedback","drawing","widget","handleUrlChange","newPageKey","reset","postSubmit","response","EchoContext","createContext","EchoProvider","primaryColor","onSubmit","textConfig","position","_$createComponent","Provider","children","useEchoStore","useContext","Error","ChevronRightIcon","_el$","_tmpl$","_$effect","_p$","_v$","size","_v$2","_v$3","fill","_v$4","stroke","_v$5","strokeWidth","_v$6","class","_v$7","_$setAttribute","o","n","_$style","undefined","ContemberIcon","_el$2","firstChild","HighlightIcon","PenIcon","TrashIcon","CheckCircleIcon","XCircleIcon","XIcon","COLORS","ColorSelector","_el$3","nextSibling","_el$4","For","each","_el$5","_tmpl$2","$$click","selectedColor","removeProperty","_$p","_$delegateEvents","ToolIcon","rectangle","DrawingToolbar","tools","Object","values","Icon","id","selectedTool","label","_$insert","Button","variant","_$mergeProps","ExternalLinkIcon","StoredFeedback","pages","setPages","currentPath","setCurrentPath","window","location","pathname","handleStorageChange","storedPages","pagesCount","length","documentElement","childList","subtree","handleNavigate","latestQuery","targetUrl","href","isStoredFeedbackOpen","handleDelete","formatPath","parts","split","Show","when","onClick","page","isCurrent","_el$6","_tmpl$3","_el$7","_el$8","_el$9","_el$10","comment","_c$","_$memo","_$className","LauncherButton","isMinimized","setIsMinimized","minimizeTimeout","resetHideTimeout","clearTimeout","setTimeout","hasSeenMessage","isOpen","handleEchoLauncherButtonEnter","handleEchoLauncherButtonLeave","handleClick","welcomeMessageIsClosing","handleCountClick","stopPropagation","Notification","hideNotification","notification","show","getTitle","text","successTitle","errorTitle","title","hideTitle","_c$2","WelcomeMessage","hideMessage","openWidget","welcomeMessage","$$keydown","closeAriaLabel","Shape","isSelected","selectedShapeId","RectangleShape","PathShape","rect","onShapeClick","x","y","_v$8","_v$9","opacity","selected","default","_v$10","_v$11","d","_v$12","_v$13","_v$14","_v$15","_v$16","_v$17","_v$18","DrawingTooltip","showTooltip","mousePosition","drawingTooltip","ShapeActions","actionsRef","scrollPosition","setScrollPosition","scrollX","scrollY","handleScroll","filter","selectedShape","find","actionsRect","getBoundingClientRect","PADDING","scroll","Math","max","min","innerWidth","innerHeight","_ref$","_$use","hidden","DrawingLayer","drawingLayerContainerRef","handleMove","handleEnd","passive","removeEventListener","_$addEventListener","handleLeave","handleEnter","$$touchmove","preventDefault","$$touchstart","handleStart","hasDrawn","$$mousedown","handleShapeClick","cursor","FeedbackForm","textAreaRef","handleSubmit","metadata","url","userAgent","navigator","timestamp","Date","toISOString","browserInfo","screenWidth","screen","screenHeight","console","submit","focus","minimize","maximize","feedbackForm","$$input","currentTarget","submitButton","placeholder","Echo","body","EchoRoot","EchoStyles","EchoInterface","dynamicStyles","setDynamicStyles","css","staticStyles","rootRef","updateHeight","requestAnimationFrame","scrollHeight","clientWidth","attributes","_tmpl$4","isDrawing","defaultText","activeInstance","initEcho","warn","mergedTextConfig","appendChild","remove","once"],"mappings":";;AA+BA,MAAMA,KAAW;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACMC,KAA2B,oBAAI,IAAI;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAGD;AACL,CAAC,GACKE,KAAgC,oBAAI,IAAI;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GACKC,KAAwB,uBAAO,OAAO,uBAAO,OAAO,IAAI,GAAG;AAAA,EAC/D,WAAW;AAAA,EACX,SAAS;AACX,CAAC,GACKC,KAA4B,uBAAO,OAAO,uBAAO,OAAO,IAAI,GAAG;AAAA,EACnE,OAAO;AAAA,EACP,gBAAgB;AAAA,IACd,GAAG;AAAA,IACH,QAAQ;AAAA,IACR,OAAO;AAAA,EACR;AAAA,EACD,OAAO;AAAA,IACL,GAAG;AAAA,IACH,KAAK;AAAA,EACN;AAAA,EACD,UAAU;AAAA,IACR,GAAG;AAAA,IACH,QAAQ;AAAA,EACT;AAAA,EACD,aAAa;AAAA,IACX,GAAG;AAAA,IACH,OAAO;AAAA,EACR;AAAA,EACD,UAAU;AAAA,IACR,GAAG;AAAA,IACH,OAAO;AAAA,IACP,UAAU;AAAA,EACd;AACA,CAAC;AACD,SAASC,GAAaC,GAAMC,GAAS;AACnC,QAAMC,IAAIJ,GAAYE,CAAI;AAC1B,SAAO,OAAOE,KAAM,WAAYA,EAAED,CAAO,IAAIC,EAAE,IAAO,SAAaA;AACrE;AACA,MAAMC,KAAgC,oBAAI,IAAI;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AA8WD,SAASC,GAAgBC,GAAYH,GAAGI,GAAG;AACzC,MAAIC,IAAUD,EAAE,QACdE,IAAON,EAAE,QACTO,IAAOF,GACPG,IAAS,GACTC,IAAS,GACTC,IAAQV,EAAEM,IAAO,CAAC,EAAE,aACpBK,IAAM;AACR,SAAOH,IAASF,KAAQG,IAASF,KAAM;AACrC,QAAIP,EAAEQ,CAAM,MAAMJ,EAAEK,CAAM,GAAG;AAC3B,MAAAD,KACAC;AACA;AAAA,IACN;AACI,WAAOT,EAAEM,IAAO,CAAC,MAAMF,EAAEG,IAAO,CAAC;AAC/B,MAAAD,KACAC;AAEF,QAAID,MAASE,GAAQ;AACnB,YAAMI,IAAOL,IAAOF,IAAWI,IAASL,EAAEK,IAAS,CAAC,EAAE,cAAcL,EAAEG,IAAOE,CAAM,IAAKC;AACxF,aAAOD,IAASF,IAAM,CAAAJ,EAAW,aAAaC,EAAEK,GAAQ,GAAGG,CAAI;AAAA,IACrE,WAAeL,MAASE;AAClB,aAAOD,IAASF;AACd,SAAI,CAACK,KAAO,CAACA,EAAI,IAAIX,EAAEQ,CAAM,CAAC,MAAGR,EAAEQ,CAAM,EAAE,OAAQ,GACnDA;AAAA,aAEOR,EAAEQ,CAAM,MAAMJ,EAAEG,IAAO,CAAC,KAAKH,EAAEK,CAAM,MAAMT,EAAEM,IAAO,CAAC,GAAG;AACjE,YAAMM,IAAOZ,EAAE,EAAEM,CAAI,EAAE;AACvB,MAAAH,EAAW,aAAaC,EAAEK,GAAQ,GAAGT,EAAEQ,GAAQ,EAAE,WAAW,GAC5DL,EAAW,aAAaC,EAAE,EAAEG,CAAI,GAAGK,CAAI,GACvCZ,EAAEM,CAAI,IAAIF,EAAEG,CAAI;AAAA,IACtB,OAAW;AACL,UAAI,CAACI,GAAK;AACR,QAAAA,IAAM,oBAAI,IAAK;AACf,YAAIE,IAAIJ;AACR,eAAOI,IAAIN,IAAM,CAAAI,EAAI,IAAIP,EAAES,CAAC,GAAGA,GAAG;AAAA,MAC1C;AACM,YAAMC,IAAQH,EAAI,IAAIX,EAAEQ,CAAM,CAAC;AAC/B,UAAIM,KAAS;AACX,YAAIL,IAASK,KAASA,IAAQP,GAAM;AAClC,cAAIM,IAAIL,GACNO,IAAW,GACXC;AACF,iBAAO,EAAEH,IAAIP,KAAQO,IAAIN,KAClB,GAAAS,IAAIL,EAAI,IAAIX,EAAEa,CAAC,CAAC,MAAM,QAAQG,MAAMF,IAAQC;AACjD,YAAAA;AAEF,cAAIA,IAAWD,IAAQL,GAAQ;AAC7B,kBAAMG,IAAOZ,EAAEQ,CAAM;AACrB,mBAAOC,IAASK,IAAO,CAAAX,EAAW,aAAaC,EAAEK,GAAQ,GAAGG,CAAI;AAAA,UAC5E,MAAiB,CAAAT,EAAW,aAAaC,EAAEK,GAAQ,GAAGT,EAAEQ,GAAQ,CAAC;AAAA,QACxD,MAAM,CAAAA;AAAA,UACF,CAAAR,EAAEQ,GAAQ,EAAE,OAAQ;AAAA,IACjC;AAAA,EACA;AACA;AAEA,MAAMS,KAAW;AACjB,SAASC,GAAOC,GAAMC,GAASC,GAAMC,IAAU,CAAA,GAAI;AACjD,MAAIC;AACJ,SAAAC,GAAW,CAAAC,MAAW;AACpB,IAAAF,IAAWE,GACXL,MAAY,WACRD,EAAI,IACJO,EAAON,GAASD,KAAQC,EAAQ,aAAa,OAAO,QAAWC,CAAI;AAAA,EAC3E,GAAKC,EAAQ,KAAK,GACT,MAAM;AACX,IAAAC,EAAU,GACVH,EAAQ,cAAc;AAAA,EACvB;AACH;AACA,SAASO,EAASC,GAAMC,GAAcC,GAAO;AAC3C,MAAIlB;AACJ,QAAMmB,IAAS,MAAM;AACnB,UAAMf,IAAI,SAAS,cAAc,UAAU;AAC3C,WAAAA,EAAE,YAAYY,GACPE,IAAQd,EAAE,QAAQ,WAAW,aAAaA,EAAE,QAAQ;AAAA,EAC5D,GACKgB,IAAKH,IACP,MAAMI,GAAQ,MAAM,SAAS,WAAWrB,MAASA,IAAOmB,MAAW,EAAI,CAAC,IACxE,OAAOnB,MAASA,IAAOmB,EAAM,IAAK,UAAU,EAAI;AACpD,SAAAC,EAAG,YAAYA,GACRA;AACT;AACA,SAASE,EAAeC,GAAYC,IAAW,OAAO,UAAU;AAC9D,QAAMC,IAAID,EAASnB,EAAQ,MAAMmB,EAASnB,EAAQ,IAAI,oBAAI;AAC1D,WAASJ,IAAI,GAAGyB,IAAIH,EAAW,QAAQtB,IAAIyB,GAAGzB,KAAK;AACjD,UAAM0B,IAAOJ,EAAWtB,CAAC;AACzB,IAAKwB,EAAE,IAAIE,CAAI,MACbF,EAAE,IAAIE,CAAI,GACVH,EAAS,iBAAiBG,GAAMC,EAAY;AAAA,EAElD;AACA;AAWA,SAASC,EAAa7B,GAAM2B,GAAMG,GAAO;AACvC,EAAIC,EAAY/B,CAAI,MAChB8B,KAAS,OAAM9B,EAAK,gBAAgB2B,CAAI,IACvC3B,EAAK,aAAa2B,GAAMG,CAAK;AACpC;AAMA,SAASE,GAAiBhC,GAAM2B,GAAMG,GAAO;AAC3C,EAAIC,EAAY/B,CAAI,MACpB8B,IAAQ9B,EAAK,aAAa2B,GAAM,EAAE,IAAI3B,EAAK,gBAAgB2B,CAAI;AACjE;AACA,SAASM,GAAUjC,GAAM8B,GAAO;AAC9B,EAAIC,EAAY/B,CAAI,MAChB8B,KAAS,OAAM9B,EAAK,gBAAgB,OAAO,IAC1CA,EAAK,YAAY8B;AACxB;AACA,SAASI,EAAiBlC,GAAM2B,GAAMQ,GAASC,GAAU;AACvD,MAAIA;AACF,IAAI,MAAM,QAAQD,CAAO,KACvBnC,EAAK,KAAK2B,CAAI,EAAE,IAAIQ,EAAQ,CAAC,GAC7BnC,EAAK,KAAK2B,CAAI,MAAM,IAAIQ,EAAQ,CAAC,KAC5BnC,EAAK,KAAK2B,CAAI,EAAE,IAAIQ;AAAA,WAClB,MAAM,QAAQA,CAAO,GAAG;AACjC,UAAME,IAAYF,EAAQ,CAAC;AAC3B,IAAAnC,EAAK,iBAAiB2B,GAAOQ,EAAQ,CAAC,IAAI,CAAAV,MAAKY,EAAU,KAAKrC,GAAMmC,EAAQ,CAAC,GAAGV,CAAC,CAAG;AAAA,EACxF,MAAS,CAAAzB,EAAK,iBAAiB2B,GAAMQ,GAAS,OAAOA,KAAY,cAAcA,CAAO;AACtF;AACA,SAASG,GAAUtC,GAAM8B,GAAOS,IAAO,CAAA,GAAI;AACzC,QAAMC,IAAY,OAAO,KAAKV,KAAS,CAAA,CAAE,GACvCW,IAAW,OAAO,KAAKF,CAAI;AAC7B,MAAItC,GAAGyC;AACP,OAAKzC,IAAI,GAAGyC,IAAMD,EAAS,QAAQxC,IAAIyC,GAAKzC,KAAK;AAC/C,UAAM0C,IAAMF,EAASxC,CAAC;AACtB,IAAI,CAAC0C,KAAOA,MAAQ,eAAeb,EAAMa,CAAG,MAC5CC,GAAe5C,GAAM2C,GAAK,EAAK,GAC/B,OAAOJ,EAAKI,CAAG;AAAA,EACnB;AACE,OAAK1C,IAAI,GAAGyC,IAAMF,EAAU,QAAQvC,IAAIyC,GAAKzC,KAAK;AAChD,UAAM0C,IAAMH,EAAUvC,CAAC,GACrB4C,IAAa,CAAC,CAACf,EAAMa,CAAG;AAC1B,IAAI,CAACA,KAAOA,MAAQ,eAAeJ,EAAKI,CAAG,MAAME,KAAc,CAACA,MAChED,GAAe5C,GAAM2C,GAAK,EAAI,GAC9BJ,EAAKI,CAAG,IAAIE;AAAA,EAChB;AACE,SAAON;AACT;AACA,SAASO,EAAM9C,GAAM8B,GAAOS,GAAM;AAChC,MAAI,CAACT,EAAO,QAAOS,IAAOV,EAAa7B,GAAM,OAAO,IAAI8B;AACxD,QAAMiB,IAAY/C,EAAK;AACvB,MAAI,OAAO8B,KAAU,SAAU,QAAQiB,EAAU,UAAUjB;AAC3D,SAAOS,KAAS,aAAaQ,EAAU,UAAUR,IAAO,SACxDA,MAASA,IAAO,KAChBT,MAAUA,IAAQ;AAClB,MAAIkB,GAAGC;AACP,OAAKA,KAAKV;AACR,IAAAT,EAAMmB,CAAC,KAAK,QAAQF,EAAU,eAAeE,CAAC,GAC9C,OAAOV,EAAKU,CAAC;AAEf,OAAKA,KAAKnB;AACR,IAAAkB,IAAIlB,EAAMmB,CAAC,GACPD,MAAMT,EAAKU,CAAC,MACdF,EAAU,YAAYE,GAAGD,CAAC,GAC1BT,EAAKU,CAAC,IAAID;AAGd,SAAOT;AACT;AACA,SAASW,GAAOlD,GAAMmD,IAAQ,CAAA,GAAIjC,GAAOkC,GAAc;AACrD,QAAMC,IAAY,CAAE;AAElB,SAAAC;AAAA,IACE,MAAOD,EAAU,WAAWE,EAAiBvD,GAAMmD,EAAM,UAAUE,EAAU,QAAQ;AAAA,EACtF,GAEHC,EAAmB,MAAM,OAAOH,EAAM,OAAQ,cAAcK,EAAIL,EAAM,KAAKnD,CAAI,CAAC,GAChFsD,EAAmB,MAAMG,GAAOzD,GAAMmD,GAAOjC,GAAO,IAAMmC,GAAW,EAAI,CAAC,GACnEA;AACT;AAWA,SAASG,EAAIpC,GAAIZ,GAASkD,GAAK;AAC7B,SAAOrC,GAAQ,MAAMD,EAAGZ,GAASkD,CAAG,CAAC;AACvC;AACA,SAAS5C,EAAO6C,GAAQC,GAAUC,GAAQC,GAAS;AAEjD,MADID,MAAW,UAAa,CAACC,MAASA,IAAU,CAAE,IAC9C,OAAOF,KAAa,WAAY,QAAOL,EAAiBI,GAAQC,GAAUE,GAASD,CAAM;AAC7F,EAAAP,EAAmB,CAAAS,MAAWR,EAAiBI,GAAQC,EAAQ,GAAIG,GAASF,CAAM,GAAGC,CAAO;AAC9F;AACA,SAASL,GAAOzD,GAAMmD,GAAOjC,GAAOkC,GAAcC,IAAY,CAAA,GAAIW,IAAU,IAAO;AACjF,EAAAb,MAAUA,IAAQ;AAClB,aAAWjE,KAAQmE;AACjB,QAAI,EAAEnE,KAAQiE,IAAQ;AACpB,UAAIjE,MAAS,WAAY;AACzB,MAAAmE,EAAUnE,CAAI,IAAI+E,GAAWjE,GAAMd,GAAM,MAAMmE,EAAUnE,CAAI,GAAGgC,GAAO8C,GAASb,CAAK;AAAA,IAC3F;AAEE,aAAWjE,KAAQiE,GAAO;AACxB,QAAIjE,MAAS;AAEX;AAEF,UAAM4C,IAAQqB,EAAMjE,CAAI;AACxB,IAAAmE,EAAUnE,CAAI,IAAI+E,GAAWjE,GAAMd,GAAM4C,GAAOuB,EAAUnE,CAAI,GAAGgC,GAAO8C,GAASb,CAAK;AAAA,EAC1F;AACA;AA2EA,SAASpB,EAAY/B,GAAM;AACzB,SAAO,CAAC,CAACkE,EAAa,WAAW,CAACA,EAAa,SAAS,CAAClE,KAAQA,EAAK;AACxE;AACA,SAASmE,GAAexC,GAAM;AAC5B,SAAOA,EAAK,YAAa,EAAC,QAAQ,aAAa,CAACyC,GAAGC,MAAMA,EAAE,aAAa;AAC1E;AACA,SAASzB,GAAe5C,GAAM2C,GAAKb,GAAO;AACxC,QAAMwC,IAAa3B,EAAI,KAAI,EAAG,MAAM,KAAK;AACzC,WAAS,IAAI,GAAG4B,IAAUD,EAAW,QAAQ,IAAIC,GAAS;AACxD,IAAAvE,EAAK,UAAU,OAAOsE,EAAW,CAAC,GAAGxC,CAAK;AAC9C;AACA,SAASmC,GAAWjE,GAAMd,GAAM4C,GAAOS,GAAMrB,GAAO8C,GAASb,GAAO;AAClE,MAAIqB,GAAMC,GAAQC,GAAaC,GAAWC;AAC1C,MAAI1F,MAAS,QAAS,QAAO4D,EAAM9C,GAAM8B,GAAOS,CAAI;AACpD,MAAIrD,MAAS,YAAa,QAAOoD,GAAUtC,GAAM8B,GAAOS,CAAI;AAC5D,MAAIT,MAAUS,EAAM,QAAOA;AAC3B,MAAIrD,MAAS;AACX,IAAK8E,KAASlC,EAAM9B,CAAI;AAAA,WACfd,EAAK,MAAM,GAAG,CAAC,MAAM,OAAO;AACrC,UAAMuC,IAAIvC,EAAK,MAAM,CAAC;AACtB,IAAAqD,KAAQvC,EAAK,oBAAoByB,GAAGc,GAAM,OAAOA,KAAS,cAAcA,CAAI,GAC5ET,KAAS9B,EAAK,iBAAiByB,GAAGK,GAAO,OAAOA,KAAU,cAAcA,CAAK;AAAA,EACjF,WAAa5C,EAAK,MAAM,GAAG,EAAE,MAAM,cAAc;AAC7C,UAAMuC,IAAIvC,EAAK,MAAM,EAAE;AACvB,IAAAqD,KAAQvC,EAAK,oBAAoByB,GAAGc,GAAM,EAAI,GAC9CT,KAAS9B,EAAK,iBAAiByB,GAAGK,GAAO,EAAI;AAAA,EACjD,WAAa5C,EAAK,MAAM,GAAG,CAAC,MAAM,MAAM;AACpC,UAAMyC,IAAOzC,EAAK,MAAM,CAAC,EAAE,YAAa,GAClCkD,IAAW/C,GAAgB,IAAIsC,CAAI;AACzC,QAAI,CAACS,KAAYG,GAAM;AACrB,YAAMsC,IAAI,MAAM,QAAQtC,CAAI,IAAIA,EAAK,CAAC,IAAIA;AAC1C,MAAAvC,EAAK,oBAAoB2B,GAAMkD,CAAC;AAAA,IACtC;AACI,KAAIzC,KAAYN,OACdI,EAAiBlC,GAAM2B,GAAMG,GAAOM,CAAQ,GAC5CA,KAAYd,EAAe,CAACK,CAAI,CAAC;AAAA,EAEvC,WAAazC,EAAK,MAAM,GAAG,CAAC,MAAM;AAC9B,IAAA2C,EAAa7B,GAAMd,EAAK,MAAM,CAAC,GAAG4C,CAAK;AAAA,WAC9B5C,EAAK,MAAM,GAAG,CAAC,MAAM;AAC9B,IAAA8C,GAAiBhC,GAAMd,EAAK,MAAM,CAAC,GAAG4C,CAAK;AAAA,YAE1C8C,IAAY1F,EAAK,MAAM,GAAG,CAAC,MAAM,aACjCwF,IAAc5F,GAAgB,IAAII,CAAI,OAEnCyF,IAAY1F,GAAaC,GAAMc,EAAK,OAAO,OAAOyE,IAAS5F,GAAW,IAAIK,CAAI,OACjFsF,IAAOxE,EAAK,SAAS,SAAS,GAAG,KAAK,QAAQmD,IAC/C;AACA,QAAIyB;AACF,MAAA1F,IAAOA,EAAK,MAAM,CAAC,GACnBuF,IAAS;AAAA,aACA1C,EAAY/B,CAAI,EAAG,QAAO8B;AACrC,IAAI5C,MAAS,WAAWA,MAAS,cAAa+C,GAAUjC,GAAM8B,CAAK,IAC1D0C,KAAQ,CAACC,KAAU,CAACC,IAAa1E,EAAKmE,GAAejF,CAAI,CAAC,IAAI4C,IAClE9B,EAAK2E,KAAazF,CAAI,IAAI4C;AAAA,EACnC;AAGS,IAAAD,EAAa7B,GAAMjB,GAAQG,CAAI,KAAKA,GAAM4C,CAAK;AAEtD,SAAOA;AACT;AACA,SAASF,GAAa,GAAG;AACvB,MAAIsC,EAAa,YAAYA,EAAa,UACpCA,EAAa,OAAO,KAAK,CAAC,CAACY,GAAIC,CAAE,MAAMA,MAAO,CAAC;AAAG;AAExD,MAAI/E,IAAO,EAAE;AACb,QAAM2C,IAAM,KAAK,EAAE,IAAI,IACjBqC,IAAY,EAAE,QACdC,IAAmB,EAAE,eACrBC,IAAW,CAAApD,MACf,OAAO,eAAe,GAAG,UAAU;AAAA,IACjC,cAAc;AAAA,IACd,OAAAA;AAAA,EACN,CAAK,GACGqD,IAAa,MAAM;AACvB,UAAMhD,IAAUnC,EAAK2C,CAAG;AACxB,QAAIR,KAAW,CAACnC,EAAK,UAAU;AAC7B,YAAMoF,IAAOpF,EAAK,GAAG2C,CAAG,MAAM;AAE9B,UADAyC,MAAS,SAAYjD,EAAQ,KAAKnC,GAAMoF,GAAM,CAAC,IAAIjD,EAAQ,KAAKnC,GAAM,CAAC,GACnE,EAAE,aAAc;AAAA,IAC1B;AACI,WAAAA,EAAK,QACH,OAAOA,EAAK,QAAS,YACrB,CAACA,EAAK,KAAK,UACXA,EAAK,SAAS,EAAE,MAAM,KACtBkF,EAASlF,EAAK,IAAI,GACb;AAAA,EACR,GACKqF,IAAa,MAAM;AACvB,WAAOF,EAAU,MAAOnF,IAAOA,EAAK,UAAUA,EAAK,cAAcA,EAAK,QAAM;AAAA,EAC7E;AAQD,MAPA,OAAO,eAAe,GAAG,iBAAiB;AAAA,IACxC,cAAc;AAAA,IACd,MAAM;AACJ,aAAOA,KAAQ;AAAA,IACrB;AAAA,EACA,CAAG,GACGkE,EAAa,YAAY,CAACA,EAAa,SAAMA,EAAa,OAAO,KAAK,OAAO,KAC7E,EAAE,cAAc;AAClB,UAAMoB,IAAO,EAAE,aAAc;AAC7B,IAAAJ,EAASI,EAAK,CAAC,CAAC;AAChB,aAASrF,IAAI,GAAGA,IAAIqF,EAAK,SAAS,MAChCtF,IAAOsF,EAAKrF,CAAC,GACT,EAACkF,EAAU,IAFoBlF,KAAK;AAGxC,UAAID,EAAK,QAAQ;AACf,QAAAA,IAAOA,EAAK,QACZqF,EAAY;AACZ;AAAA,MACR;AACM,UAAIrF,EAAK,eAAeiF;AACtB;AAAA,IAER;AAAA,EACG,MAAM,CAAAI,EAAY;AACnB,EAAAH,EAASF,CAAS;AACpB;AACA,SAASzB,EAAiBI,GAAQ7B,GAAOiC,GAASF,GAAQ0B,GAAa;AACrE,QAAMC,IAAYzD,EAAY4B,CAAM;AACpC,MAAI6B,GAAW;AACb,KAACzB,MAAYA,IAAU,CAAC,GAAGJ,EAAO,UAAU;AAC5C,QAAI8B,IAAU,CAAE;AAChB,aAASxF,IAAI,GAAGA,IAAI8D,EAAQ,QAAQ9D,KAAK;AACvC,YAAMD,IAAO+D,EAAQ9D,CAAC;AACtB,MAAID,EAAK,aAAa,KAAKA,EAAK,KAAK,MAAM,GAAG,CAAC,MAAM,OAAMA,EAAK,OAAQ,IACnEyF,EAAQ,KAAKzF,CAAI;AAAA,IAC5B;AACI,IAAA+D,IAAU0B;AAAA,EACd;AACE,SAAO,OAAO1B,KAAY,aAAY,CAAAA,IAAUA,EAAS;AACzD,MAAIjC,MAAUiC,EAAS,QAAOA;AAC9B,QAAM3D,IAAI,OAAO0B,GACf4D,IAAQ7B,MAAW;AAErB,MADAF,IAAU+B,KAAS3B,EAAQ,CAAC,KAAKA,EAAQ,CAAC,EAAE,cAAeJ,GACvDvD,MAAM,YAAYA,MAAM,UAAU;AAEpC,QADIoF,KACApF,MAAM,aACR0B,IAAQA,EAAM,SAAU,GACpBA,MAAUiC;AAAS,aAAOA;AAEhC,QAAI2B,GAAO;AACT,UAAI1F,IAAO+D,EAAQ,CAAC;AACpB,MAAI/D,KAAQA,EAAK,aAAa,IAC5BA,EAAK,SAAS8B,MAAU9B,EAAK,OAAO8B,KAC/B9B,IAAO,SAAS,eAAe8B,CAAK,GAC3CiC,IAAU4B,EAAchC,GAAQI,GAASF,GAAQ7D,CAAI;AAAA,IAC3D;AACM,MAAI+D,MAAY,MAAM,OAAOA,KAAY,WACvCA,IAAUJ,EAAO,WAAW,OAAO7B,IAC9BiC,IAAUJ,EAAO,cAAc7B;AAAA,EAEzC,WAAUA,KAAS,QAAQ1B,MAAM,WAAW;AAC3C,QAAIoF,EAAW,QAAOzB;AACtB,IAAAA,IAAU4B,EAAchC,GAAQI,GAASF,CAAM;AAAA,EACnD,OAAS;AAAA,QAAIzD,MAAM;AACf,aAAAkD,EAAmB,MAAM;AACvB,YAAIN,IAAIlB,EAAO;AACf,eAAO,OAAOkB,KAAM,aAAY,CAAAA,IAAIA,EAAG;AACvC,QAAAe,IAAUR,EAAiBI,GAAQX,GAAGe,GAASF,CAAM;AAAA,MAC3D,CAAK,GACM,MAAME;AACR,QAAI,MAAM,QAAQjC,CAAK,GAAG;AAC/B,YAAM8D,IAAQ,CAAE,GACVC,IAAe9B,KAAW,MAAM,QAAQA,CAAO;AACrD,UAAI+B,GAAuBF,GAAO9D,GAAOiC,GAASwB,CAAW;AAC3D,eAAAjC,EAAmB,MAAOS,IAAUR,EAAiBI,GAAQiC,GAAO7B,GAASF,GAAQ,EAAI,CAAE,GACpF,MAAME;AAEf,UAAIyB,GAAW;AACb,YAAI,CAACI,EAAM,OAAQ,QAAO7B;AAC1B,YAAIF,MAAW,OAAW,QAAQE,IAAU,CAAC,GAAGJ,EAAO,UAAU;AACjE,YAAI3D,IAAO4F,EAAM,CAAC;AAClB,YAAI5F,EAAK,eAAe2D,EAAQ,QAAOI;AACvC,cAAMgC,IAAQ,CAAC/F,CAAI;AACnB,gBAAQA,IAAOA,EAAK,iBAAiB6D,IAAQ,CAAAkC,EAAM,KAAK/F,CAAI;AAC5D,eAAQ+D,IAAUgC;AAAA,MACxB;AACI,UAAIH,EAAM,WAAW;AAEnB,YADA7B,IAAU4B,EAAchC,GAAQI,GAASF,CAAM,GAC3C6B,EAAO,QAAO3B;AAAA,YACb,CAAI8B,IACL9B,EAAQ,WAAW,IACrBiC,GAAYrC,GAAQiC,GAAO/B,CAAM,IAC5BvE,GAAgBqE,GAAQI,GAAS6B,CAAK,KAE7C7B,KAAW4B,EAAchC,CAAM,GAC/BqC,GAAYrC,GAAQiC,CAAK;AAE3B,MAAA7B,IAAU6B;AAAA,IACd,WAAa9D,EAAM,UAAU;AACzB,UAAI0D,KAAa1D,EAAM,WAAY,QAAQiC,IAAU2B,IAAQ,CAAC5D,CAAK,IAAIA;AACvE,UAAI,MAAM,QAAQiC,CAAO,GAAG;AAC1B,YAAI2B,EAAO,QAAQ3B,IAAU4B,EAAchC,GAAQI,GAASF,GAAQ/B,CAAK;AACzE,QAAA6D,EAAchC,GAAQI,GAAS,MAAMjC,CAAK;AAAA,MAChD,MAAW,CAAIiC,KAAW,QAAQA,MAAY,MAAM,CAACJ,EAAO,aACtDA,EAAO,YAAY7B,CAAK,IACnB6B,EAAO,aAAa7B,GAAO6B,EAAO,UAAU;AACnD,MAAAI,IAAUjC;AAAA,IACd;AAAA;AACE,SAAOiC;AACT;AACA,SAAS+B,GAAuBG,GAAYL,GAAO7B,GAASmC,GAAQ;AAClE,MAAIC,IAAU;AACd,WAASlG,IAAI,GAAGyC,IAAMkD,EAAM,QAAQ3F,IAAIyC,GAAKzC,KAAK;AAChD,QAAImG,IAAOR,EAAM3F,CAAC,GAChBsC,IAAOwB,KAAWA,EAAQkC,EAAW,MAAM,GAC3C7F;AACF,QAAI,EAAAgG,KAAQ,QAAQA,MAAS,MAAQA,MAAS,IACzC,MAAKhG,IAAI,OAAOgG,MAAU,YAAYA,EAAK;AAC9C,MAAAH,EAAW,KAAKG,CAAI;AAAA,aACX,MAAM,QAAQA,CAAI;AAC3B,MAAAD,IAAUL,GAAuBG,GAAYG,GAAM7D,CAAI,KAAK4D;AAAA,aACnD/F,MAAM;AACf,UAAI8F,GAAQ;AACV,eAAO,OAAOE,KAAS,aAAY,CAAAA,IAAOA,EAAM;AAChD,QAAAD,IACEL;AAAA,UACEG;AAAA,UACA,MAAM,QAAQG,CAAI,IAAIA,IAAO,CAACA,CAAI;AAAA,UAClC,MAAM,QAAQ7D,CAAI,IAAIA,IAAO,CAACA,CAAI;AAAA,QAC9C,KAAe4D;AAAA,MACf;AACQ,QAAAF,EAAW,KAAKG,CAAI,GACpBD,IAAU;AAAA,SAEP;AACL,YAAMrE,IAAQ,OAAOsE,CAAI;AACzB,MAAI7D,KAAQA,EAAK,aAAa,KAAKA,EAAK,SAAST,IAAOmE,EAAW,KAAK1D,CAAI,IACvE0D,EAAW,KAAK,SAAS,eAAenE,CAAK,CAAC;AAAA,IACzD;AAAA,EACA;AACE,SAAOqE;AACT;AACA,SAASH,GAAYrC,GAAQiC,GAAO/B,IAAS,MAAM;AACjD,WAAS5D,IAAI,GAAGyC,IAAMkD,EAAM,QAAQ3F,IAAIyC,GAAKzC,IAAK,CAAA0D,EAAO,aAAaiC,EAAM3F,CAAC,GAAG4D,CAAM;AACxF;AACA,SAAS8B,EAAchC,GAAQI,GAASF,GAAQwC,GAAa;AAC3D,MAAIxC,MAAW,OAAW,QAAQF,EAAO,cAAc;AACvD,QAAM3D,IAAOqG,KAAe,SAAS,eAAe,EAAE;AACtD,MAAItC,EAAQ,QAAQ;AAClB,QAAIuC,IAAW;AACf,aAASrG,IAAI8D,EAAQ,SAAS,GAAG9D,KAAK,GAAGA,KAAK;AAC5C,YAAM6E,IAAKf,EAAQ9D,CAAC;AACpB,UAAID,MAAS8E,GAAI;AACf,cAAMyB,IAAWzB,EAAG,eAAenB;AACnC,QAAI,CAAC2C,KAAY,CAACrG,IAChBsG,IAAW5C,EAAO,aAAa3D,GAAM8E,CAAE,IAAInB,EAAO,aAAa3D,GAAM6D,CAAM,IACxE0C,KAAYzB,EAAG,OAAQ;AAAA,MAC7B,MAAM,CAAAwB,IAAW;AAAA,IACxB;AAAA,EACG,MAAM,CAAA3C,EAAO,aAAa3D,GAAM6D,CAAM;AACvC,SAAO,CAAC7D,CAAI;AACd;AAkDA,MAAMwG,KAAgB;AACtB,SAASC,GAActH,GAAS+B,IAAQ,IAAO;AAC7C,SAAOA,IAAQ,SAAS,gBAAgBsF,IAAerH,CAAO,IAAI,SAAS,cAAcA,CAAO;AAClG;AAKA,SAASuH,GAAOvD,GAAO;AACrB,QAAM,EAAE,WAAAwD,EAAS,IAAKxD,GACpBU,IAAS,SAAS,eAAe,EAAE,GACnC+C,IAAQ,MAAMzD,EAAM,SAAS,SAAS,MACtC0D,IAAQC,GAAU;AACpB,MAAIC,GACAvB,IAAY,CAAC,CAACtB,EAAa;AAC/B,SAAA8C;AAAA,IACE,MAAM;AACJ,MAAIxB,MAAWsB,GAAQ,EAAG,OAAOtB,IAAY,KAC7CuB,MAAYA,IAAUE,GAAaJ,GAAO,MAAMK,EAAW,MAAM/D,EAAM,QAAQ,CAAC;AAChF,YAAM2B,IAAK8B,EAAO;AAClB,UAAI9B,aAAc,iBAAiB;AACjC,cAAM,CAACqC,GAAOC,CAAQ,IAAIC,EAAa,EAAK,GACtCC,IAAU,MAAMF,EAAS,EAAI;AACnC,QAAAxG,GAAW,CAAAC,MAAWC,EAAOgE,GAAI,MAAQqC,MAAsBtG,MAAZkG,KAAwB,IAAI,CAAC,GAChFQ,EAAUD,CAAO;AAAA,MACzB,OAAa;AACL,cAAME,IAAYf,GAActD,EAAM,QAAQ,MAAM,OAAOA,EAAM,KAAK,GACpEsE,IACEd,KAAaa,EAAU,eACnBA,EAAU,aAAa;AAAA,UACrB,MAAM;AAAA,QACP,CAAA,IACDA;AACR,eAAO,eAAeA,GAAW,UAAU;AAAA,UACzC,MAAM;AACJ,mBAAO3D,EAAO;AAAA,UACf;AAAA,UACD,cAAc;AAAA,QACxB,CAAS,GACD/C,EAAO2G,GAAYV,CAAO,GAC1BjC,EAAG,YAAY0C,CAAS,GACxBrE,EAAM,OAAOA,EAAM,IAAIqE,CAAS,GAChCD,EAAU,MAAMzC,EAAG,YAAY0C,CAAS,CAAC;AAAA,MACjD;AAAA,IACK;AAAA,IACD;AAAA,IACA;AAAA,MACE,QAAQ,CAAChC;AAAA,IACf;AAAA,EACG,GACM3B;AACT;ACvnCa,MAAA6D,KAAW,CAAqCC,GAASC,MAAiB;AAClF,MAAAC;AAEJ,SAAO,IAAIC,MAAwB;AAClC,iBAAaD,CAAO,GACpBA,IAAU,OAAO,WAAW,MAAMF,EAAK,GAAGG,CAAI,GAAGF,CAAI;AAAA,EACtD;AACD,GCJaG,KAAsB,CAACpF,GAAaqF,MAAyC;AAC7D,EAAAC,EAAA;AAAA,IAC3B,OAAO;AAAA,IACP,UAAU,CAAKxG,MAAA;AACV,MAAAA,EAAE,QAAQkB,KACbqF,EAASvG,CAAC;AAAA,IACX;AAAA,EACD,CACA;AACF,GAEawG,IAaT,CAAC9E,MAAe;AACnB,QAAM,EAAE,OAAA+E,GAAO,UAAAF,GAAU,SAASG,GAAe,WAAWC,MAAoBjF,GAC1EkF,IAAc,CAAC5G,MAAa;AACjC,IAAAuG,EAASvG,CAAC;AAAA,EACX;AAEA,EAAA6G,GAAQ,MAAM;AACG,IAAAH,KAAA,QAAAA,KACT,OAAA,iBAAiBD,GAAOG,CAAW;AAAA,EAAA,CAC1C,GAEDd,EAAU,MAAM;AACG,IAAAa,KAAA,QAAAA,KACX,OAAA,oBAAoBF,GAAOG,CAAW;AAAA,EAAA,CAC7C;AACF,GACaE,KAA2B,CAACpF,MAMnC;AACC,QAAA,EAAE,QAAAqF,GAAQ,SAAA9H,GAAS,UAAAsH,GAAU,SAASG,GAAe,WAAWC,MAAoBjF,GACpFsF,IAAW,IAAI,iBAAiBT,CAAQ;AAE9C,EAAAM,GAAQ,MAAM;AACG,IAAAH,KAAA,QAAAA,KACPM,EAAA,QAAQD,GAAQ9H,CAAO;AAAA,EAAA,CAChC,GAED6G,EAAU,MAAM;AACG,IAAAa,KAAA,QAAAA,KAClBK,EAAS,WAAW;AAAA,EAAA,CACpB;AACF,GCjDMC,KAAiB,SACjBC,IAAc,mBAEPC,KAAwB,MAAM;AAC1C,SAAO,cAAc,IAAI,YAAY,qBAAqB,CAAC;AAC5D,GAEaC,KAAgB,CAAClG,MAAwB,GAAG+F,EAAc,GAAG/F,CAAG,IAEhEmG,KAAiB,CAAInG,GAAaoG,MAAuB;AACjE,MAAA;AACH,UAAM3C,IAAO,aAAa,QAAQyC,GAAclG,CAAG,CAAC;AACpD,WAAOyD,IAAO,KAAK,MAAMA,CAAI,IAAI2C;AAAA,EAAA,QAC1B;AACA,WAAAA;AAAA,EAAA;AAET,GAEaC,KAAe,CAAIrG,GAAab,MAAmB;AAC3D,MAAA;AACH,iBAAa,QAAQ+G,GAAclG,CAAG,GAAG,KAAK,UAAUb,CAAK,CAAC;AAAA,WACtDmH,GAAO;AACP,YAAA,KAAK,mCAAmCA,CAAK;AAAA,EAAA;AAEvD,GAEaC,KAAa,MAClB,OAAO,SAAS,UAGXC,KAAgB,CAACC,GAAiBC,MAA8D;AACxG,MAAA;AACG,UAAAC,IAAe,aAAa,QAAQX,CAAW,GAC/CY,IAAeD,IAAe,KAAK,MAAMA,CAAY,IAAI,CAAC;AAEhE,QAAI,CAACD,EAAM,SAAS,YAAY,CAACA,EAAM,QAAQ,UAAUA,EAAM,QAAQ,OAAO,WAAW;AACxF,aAAOE,EAAaH,CAAO;AAAA,SACrB;AACA,YAAAI,IAAe,OAAO,SAAS,UAAU,QACzCC,IAAkC;AAAA,QACvC,UAAU;AAAA,UACT,SAASJ,EAAM,SAAS;AAAA,QACzB;AAAA,QACA,SAAS;AAAA,UACR,QAAQA,EAAM,QAAQ;AAAA,QACvB;AAAA,QACA,aAAaG;AAAA,MACd;AACA,MAAAD,EAAaH,CAAO,IAAIK;AAAA,IAAA;AAGzB,iBAAa,QAAQd,GAAa,KAAK,UAAUY,CAAY,CAAC,GACxCX,GAAA;AAAA,WACdK,GAAO;AACP,YAAA,MAAM,8BAA8BA,CAAK;AAAA,EAAA;AAEnD,GAEaS,KAAgB,CAACN,MAA4C;AACrE,MAAA;AACG,UAAAE,IAAe,aAAa,QAAQX,CAAW;AACjD,WAACW,KAEgB,KAAK,MAAMA,CAAY,EACxBF,CAAO,KAAK;AAAA,WACxBH,GAAO;AACP,mBAAA,MAAM,8BAA8BA,CAAK,GAC1C;AAAA,EAAA;AAET,GAEaU,KAAiB,CAACP,MAAoB;AAC9C,MAAA;AACG,UAAAE,IAAe,aAAa,QAAQX,CAAW;AACrD,QAAI,CAACW,EAAc;AAEb,UAAAC,IAAe,KAAK,MAAMD,CAAY;AAC5C,WAAOC,EAAaH,CAAO,GAC3B,aAAa,QAAQT,GAAa,KAAK,UAAUY,CAAY,CAAC,GACxCX,GAAA;AAAA,WACdK,GAAO;AACP,YAAA,MAAM,+BAA+BA,CAAK;AAAA,EAAA;AAEpD,GAEaW,KAAsB,MAAc;AAC5C,MAAA;AACG,UAAAN,IAAe,aAAa,QAAQX,CAAW;AACjD,QAAA,CAACW,EAAqB,QAAA;AAEpB,UAAAC,IAAe,KAAK,MAAMD,CAAY;AACrC,WAAA,OAAO,KAAKC,CAAY,EAAE;AAAA,WACzBN,GAAO;AACP,mBAAA,MAAM,qCAAqCA,CAAK,GACjD;AAAA,EAAA;AAET,GAEaY,KAAiB,MAAkD;AAC3E,MAAA;AACG,UAAAP,IAAe,aAAa,QAAQX,CAAW;AACjD,QAAA,CAACW,EAAc,QAAO,CAAC;AAErB,UAAAC,IAAe,KAAK,MAAMD,CAAY;AACrC,WAAA,OAAO,QAAQC,CAAY,EAAE,IAAI,CAAC,CAACjE,GAAM+D,CAAK,OAAO;AAAA,MAC3D,MAAA/D;AAAA,MACA,OAAA+D;AAAA,IAAA,EACC;AAAA,WACMJ,GAAO;AACP,mBAAA,MAAM,+BAA+BA,CAAK,GAC3C,CAAC;AAAA,EAAA;AAEV,GC3HMa,KAAO,OAAO,WAAW,GAC7BC,IAAQ,OAAO,YAAY,GAC3BC,IAAO,OAAO,WAAW,GACzBC,KAAQ,OAAO,YAAY;AAC7B,SAASC,GAAOpI,GAAO;AACrB,MAAIqI,IAAIrI,EAAMsI,CAAM;AACpB,MAAI,CAACD,MACH,OAAO,eAAerI,GAAOsI,GAAQ;AAAA,IACnC,OAAQD,IAAI,IAAI,MAAMrI,GAAOuI,EAAY;AAAA,EAC/C,CAAK,GACG,CAAC,MAAM,QAAQvI,CAAK,IAAG;AACzB,UAAMwI,IAAO,OAAO,KAAKxI,CAAK,GAC5ByI,IAAO,OAAO,0BAA0BzI,CAAK;AAC/C,aAAS,IAAI,GAAGJ,IAAI4I,EAAK,QAAQ,IAAI5I,GAAG,KAAK;AAC3C,YAAMxC,IAAOoL,EAAK,CAAC;AACnB,MAAIC,EAAKrL,CAAI,EAAE,OACb,OAAO,eAAe4C,GAAO5C,GAAM;AAAA,QACjC,YAAYqL,EAAKrL,CAAI,EAAE;AAAA,QACvB,KAAKqL,EAAKrL,CAAI,EAAE,IAAI,KAAKiL,CAAC;AAAA,MACtC,CAAW;AAAA,IAEX;AAAA,EACA;AAEE,SAAOA;AACT;AACA,SAASK,GAAYC,GAAK;AACxB,MAAIC;AACJ,SACED,KAAO,QACP,OAAOA,KAAQ,aACdA,EAAIL,CAAM,KACT,EAAEM,IAAQ,OAAO,eAAeD,CAAG,MACnCC,MAAU,OAAO,aACjB,MAAM,QAAQD,CAAG;AAEvB;AACA,SAASvE,EAAOE,GAAMuE,IAAM,oBAAI,IAAG,GAAI;AACrC,MAAIC,GAAQC,GAAW7H,GAAG9D;AAC1B,MAAK0L,IAASxE,KAAQ,QAAQA,EAAK0D,EAAI,EAAI,QAAOc;AAClD,MAAI,CAACJ,GAAYpE,CAAI,KAAKuE,EAAI,IAAIvE,CAAI,EAAG,QAAOA;AAChD,MAAI,MAAM,QAAQA,CAAI,GAAG;AACvB,IAAI,OAAO,SAASA,CAAI,IAAGA,IAAOA,EAAK,MAAM,CAAC,IACzCuE,EAAI,IAAIvE,CAAI;AACjB,aAASnG,IAAI,GAAG,IAAImG,EAAK,QAAQnG,IAAI,GAAGA;AACtC,MAAA+C,IAAIoD,EAAKnG,CAAC,IACL4K,IAAY3E,EAAOlD,GAAG2H,CAAG,OAAO3H,MAAGoD,EAAKnG,CAAC,IAAI4K;AAAA,EAExD,OAAS;AACL,IAAI,OAAO,SAASzE,CAAI,IAAGA,IAAO,OAAO,OAAO,CAAE,GAAEA,CAAI,IACnDuE,EAAI,IAAIvE,CAAI;AACjB,UAAMkE,IAAO,OAAO,KAAKlE,CAAI,GAC3BmE,IAAO,OAAO,0BAA0BnE,CAAI;AAC9C,aAASnG,IAAI,GAAGyB,IAAI4I,EAAK,QAAQrK,IAAIyB,GAAGzB;AAEtC,MADAf,IAAOoL,EAAKrK,CAAC,GACT,CAAAsK,EAAKrL,CAAI,EAAE,QACf8D,IAAIoD,EAAKlH,CAAI,IACR2L,IAAY3E,EAAOlD,GAAG2H,CAAG,OAAO3H,MAAGoD,EAAKlH,CAAI,IAAI2L;AAAA,EAE3D;AACE,SAAOzE;AACT;AACA,SAAS0E,GAAStC,GAAQuC,GAAQ;AAChC,MAAIhF,IAAQyC,EAAOuC,CAAM;AACzB,SAAKhF,KACH,OAAO,eAAeyC,GAAQuC,GAAQ;AAAA,IACpC,OAAQhF,IAAQ,uBAAO,OAAO,IAAI;AAAA,EACxC,CAAK,GACIA;AACT;AACA,SAASiF,EAAQjF,GAAOkF,GAAUnJ,GAAO;AACvC,MAAIiE,EAAMkF,CAAQ,EAAG,QAAOlF,EAAMkF,CAAQ;AAC1C,QAAM,CAAChI,GAAG0H,CAAG,IAAItD,EAAavF,GAAO;AAAA,IACnC,QAAQ;AAAA,IACR,UAAU;AAAA,EACd,CAAG;AACD,SAAAmB,EAAE,IAAI0H,GACE5E,EAAMkF,CAAQ,IAAIhI;AAC5B;AACA,SAASiI,GAAkB1C,GAAQyC,GAAU;AAC3C,QAAMV,IAAO,QAAQ,yBAAyB/B,GAAQyC,CAAQ;AAC9D,SAAI,CAACV,KAAQA,EAAK,OAAO,CAACA,EAAK,gBAAgBU,MAAab,KAAUa,MAAalB,MAEnF,OAAOQ,EAAK,OACZ,OAAOA,EAAK,UACZA,EAAK,MAAM,MAAM/B,EAAO4B,CAAM,EAAEa,CAAQ,IACjCV;AACT;AACA,SAASY,GAAU3C,GAAQ;AACzB,EAAA4C,GAAW,KAAMJ,EAAQF,GAAStC,GAAQuB,CAAK,GAAGE,EAAK,EAAG;AAC5D;AACA,SAASoB,GAAQ7C,GAAQ;AACvB,SAAA2C,GAAU3C,CAAM,GACT,QAAQ,QAAQA,CAAM;AAC/B;AACA,MAAM6B,KAAe;AAAA,EACnB,IAAI7B,GAAQyC,GAAUK,GAAU;AAC9B,QAAIL,MAAanB,GAAM,QAAOtB;AAC9B,QAAIyC,MAAab,EAAQ,QAAOkB;AAChC,QAAIL,MAAaM;AACf,aAAAJ,GAAU3C,CAAM,GACT8C;AAET,UAAMvF,IAAQ+E,GAAStC,GAAQuB,CAAK,GAC9ByB,IAAUzF,EAAMkF,CAAQ;AAC9B,QAAInJ,IAAQ0J,IAAUA,EAAO,IAAKhD,EAAOyC,CAAQ;AACjD,QAAIA,MAAalB,KAASkB,MAAajB,KAAQiB,MAAa,YAAa,QAAOnJ;AAChF,QAAI,CAAC0J,GAAS;AACZ,YAAMjB,IAAO,OAAO,yBAAyB/B,GAAQyC,CAAQ;AAC7D,MACEG,GAAa,MACZ,OAAOtJ,KAAU,cAAc0G,EAAO,eAAeyC,CAAQ,MAC9D,EAAEV,KAAQA,EAAK,SAEfzI,IAAQkJ,EAAQjF,GAAOkF,GAAUnJ,CAAK,EAAG;AAAA,IACjD;AACI,WAAO0I,GAAY1I,CAAK,IAAIoI,GAAOpI,CAAK,IAAIA;AAAA,EAC7C;AAAA,EACD,IAAI0G,GAAQyC,GAAU;AACpB,WACEA,MAAanB,MACbmB,MAAab,KACba,MAAaM,MACbN,MAAalB,KACbkB,MAAajB,KACbiB,MAAa,cAEN,MACTG,GAAW,KAAMJ,EAAQF,GAAStC,GAAQwB,CAAI,GAAGiB,CAAQ,EAAG,GACrDA,KAAYzC;AAAA,EACpB;AAAA,EACD,MAAM;AACJ,WAAO;AAAA,EACR;AAAA,EACD,iBAAiB;AACf,WAAO;AAAA,EACR;AAAA,EACD,SAAS6C;AAAA,EACT,0BAA0BH;AAC5B;AACA,SAASO,GAAYpC,GAAO4B,GAAUnJ,GAAO4J,IAAW,IAAO;AAC7D,MAAI,CAACA,KAAYrC,EAAM4B,CAAQ,MAAMnJ,EAAO;AAC5C,QAAMS,IAAO8G,EAAM4B,CAAQ,GACzBvI,IAAM2G,EAAM;AACd,EAAIvH,MAAU,UACZ,OAAOuH,EAAM4B,CAAQ,GACjB5B,EAAMW,CAAI,KAAKX,EAAMW,CAAI,EAAEiB,CAAQ,KAAK1I,MAAS,UAAW8G,EAAMW,CAAI,EAAEiB,CAAQ,EAAE,EAAG,MAEzF5B,EAAM4B,CAAQ,IAAInJ,GACduH,EAAMW,CAAI,KAAKX,EAAMW,CAAI,EAAEiB,CAAQ,KAAK1I,MAAS,UAAW8G,EAAMW,CAAI,EAAEiB,CAAQ,EAAE,EAAG;AAE3F,MAAIlF,IAAQ+E,GAASzB,GAAOU,CAAK,GAC/B/J;AAEF,OADKA,IAAOgL,EAAQjF,GAAOkF,GAAU1I,CAAI,MAAIvC,EAAK,EAAE,MAAM8B,CAAK,GAC3D,MAAM,QAAQuH,CAAK,KAAKA,EAAM,WAAW3G,GAAK;AAChD,aAASzC,IAAIoJ,EAAM,QAAQpJ,IAAIyC,GAAKzC,IAAK,EAACD,IAAO+F,EAAM9F,CAAC,MAAMD,EAAK,EAAG;AACtE,KAACA,IAAOgL,EAAQjF,GAAO,UAAUrD,CAAG,MAAM1C,EAAK,EAAEqJ,EAAM,MAAM;AAAA,EACjE;AACE,GAACrJ,IAAO+F,EAAMkE,EAAK,MAAMjK,EAAK,EAAG;AACnC;AACA,SAAS2L,GAAetC,GAAOvH,GAAO;AACpC,QAAMwI,IAAO,OAAO,KAAKxI,CAAK;AAC9B,WAAS7B,IAAI,GAAGA,IAAIqK,EAAK,QAAQrK,KAAK,GAAG;AACvC,UAAM0C,IAAM2H,EAAKrK,CAAC;AAClB,IAAAwL,GAAYpC,GAAO1G,GAAKb,EAAMa,CAAG,CAAC;AAAA,EACtC;AACA;AACA,SAASiJ,GAAY7H,GAAS8H,GAAM;AAGlC,MAFI,OAAOA,KAAS,eAAYA,IAAOA,EAAK9H,CAAO,IACnD8H,IAAO3F,EAAO2F,CAAI,GACd,MAAM,QAAQA,CAAI,GAAG;AACvB,QAAI9H,MAAY8H,EAAM;AACtB,QAAI5L,IAAI,GACNyC,IAAMmJ,EAAK;AACb,WAAO5L,IAAIyC,GAAKzC,KAAK;AACnB,YAAM6B,IAAQ+J,EAAK5L,CAAC;AACpB,MAAI8D,EAAQ9D,CAAC,MAAM6B,KAAO2J,GAAY1H,GAAS9D,GAAG6B,CAAK;AAAA,IAC7D;AACI,IAAA2J,GAAY1H,GAAS,UAAUrB,CAAG;AAAA,EACtC,MAAS,CAAAiJ,GAAe5H,GAAS8H,CAAI;AACrC;AACA,SAASC,EAAW/H,GAASuB,GAAMyG,IAAY,CAAA,GAAI;AACjD,MAAIC,GACFzJ,IAAOwB;AACT,MAAIuB,EAAK,SAAS,GAAG;AACnB,IAAA0G,IAAO1G,EAAK,MAAO;AACnB,UAAM2G,IAAW,OAAOD,GACtBE,IAAU,MAAM,QAAQnI,CAAO;AACjC,QAAI,MAAM,QAAQiI,CAAI,GAAG;AACvB,eAAS/L,IAAI,GAAGA,IAAI+L,EAAK,QAAQ/L;AAC/B,QAAA6L,EAAW/H,GAAS,CAACiI,EAAK/L,CAAC,CAAC,EAAE,OAAOqF,CAAI,GAAGyG,CAAS;AAEvD;AAAA,IACN,WAAeG,KAAWD,MAAa,YAAY;AAC7C,eAAShM,IAAI,GAAGA,IAAI8D,EAAQ,QAAQ9D;AAClC,QAAI+L,EAAKjI,EAAQ9D,CAAC,GAAGA,CAAC,KAAG6L,EAAW/H,GAAS,CAAC9D,CAAC,EAAE,OAAOqF,CAAI,GAAGyG,CAAS;AAE1E;AAAA,IACN,WAAeG,KAAWD,MAAa,UAAU;AAC3C,YAAM,EAAE,MAAAE,IAAO,GAAG,IAAAC,IAAKrI,EAAQ,SAAS,GAAG,IAAAsI,IAAK,EAAC,IAAKL;AACtD,eAAS/L,IAAIkM,GAAMlM,KAAKmM,GAAInM,KAAKoM;AAC/B,QAAAP,EAAW/H,GAAS,CAAC9D,CAAC,EAAE,OAAOqF,CAAI,GAAGyG,CAAS;AAEjD;AAAA,IACN,WAAezG,EAAK,SAAS,GAAG;AAC1B,MAAAwG,EAAW/H,EAAQiI,CAAI,GAAG1G,GAAM,CAAC0G,CAAI,EAAE,OAAOD,CAAS,CAAC;AACxD;AAAA,IACN;AACI,IAAAxJ,IAAOwB,EAAQiI,CAAI,GACnBD,IAAY,CAACC,CAAI,EAAE,OAAOD,CAAS;AAAA,EACvC;AACE,MAAIjK,IAAQwD,EAAK,CAAC;AAClB,EAAI,OAAOxD,KAAU,eACnBA,IAAQA,EAAMS,GAAMwJ,CAAS,GACzBjK,MAAUS,MAEZyJ,MAAS,UAAalK,KAAS,SACnCA,IAAQoE,EAAOpE,CAAK,GAChBkK,MAAS,UAAcxB,GAAYjI,CAAI,KAAKiI,GAAY1I,CAAK,KAAK,CAAC,MAAM,QAAQA,CAAK,IACxF6J,GAAepJ,GAAMT,CAAK,IACrB2J,GAAY1H,GAASiI,GAAMlK,CAAK;AACzC;AACA,SAASwK,MAAe,CAACC,GAAO7L,CAAO,GAAG;AACxC,QAAM8L,IAAiBtG,EAAOqG,KAAS,EAAE,GACnCL,IAAU,MAAM,QAAQM,CAAc,GACtCC,IAAevC,GAAOsC,CAAc;AAC1C,WAASE,KAAY5E,GAAM;AACzB,IAAA6E,GAAM,MAAM;AACV,MAAAT,KAAWpE,EAAK,WAAW,IACvB8D,GAAYY,GAAgB1E,EAAK,CAAC,CAAC,IACnCgE,EAAWU,GAAgB1E,CAAI;AAAA,IACzC,CAAK;AAAA,EACL;AACE,SAAO,CAAC2E,GAAcC,CAAQ;AAChC;AC/NO,MAAME,IAA8C;AAAA,EAC1D,WAAW;AAAA,IACV,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,WAAW,MAAM;AAAA,IACjB,aAAa;AAAA,IACb,SAAS;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,EAEX;AAAA,EACA,MAAM;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,WAAW,CAACC,MACX,uIAAuIA,EAAM,QAAQ,KAAK,KAAK,CAAC;AAAA,IACjK,aAAa;AAAA,IACb,SAAS;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,EACV;AAEF,GCnCaC,KAAqB,CAACC,MAA6B;AAE/D,QAAMF,IAAQE,EAAS,QAAQ,KAAK,EAAE,GAGhCC,IAAI,OAAO,SAASH,EAAM,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,KAC7CI,IAAI,OAAO,SAASJ,EAAM,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,KAC7CrN,IAAI,OAAO,SAASqN,EAAM,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAGnD,SAAO,SAASG,IAAI,SAASC,IAAI,SAASzN;AAC3C,GAEa0N,KAAmB,CAACH,MACdD,GAAmBC,CAAQ,IAG1B,MAAM,YAAY,WCjBzBI,KAAY,CAAC3E,GAAa4E,MAAqB;AACvD,MAAA,CAACA,EAAe,QAAA5E;AACd,QAAAoC,IAAS,EAAE,GAAGpC,EAAO;AAC3B,aAAW7F,KAAOyK;AACjB,IAAIA,EAAOzK,CAAG,KAAK,OAAOyK,EAAOzK,CAAG,KAAM,YAAY,CAAC,MAAM,QAAQyK,EAAOzK,CAAG,CAAC,IACxEiI,EAAAjI,CAAG,IAAIwK,GAAU3E,EAAO7F,CAAG,GAAGyK,EAAOzK,CAAG,CAAC,IAEzCiI,EAAAjI,CAAG,IAAIyK,EAAOzK,CAAG;AAGnB,SAAAiI;AACR;ACTA,IAAIyC,IAAgC,CAAC,GACjCC,IAA8G,MAC9GC,IAAgD,MAChDC,IAAgF;AAEpF,MAAMC,KAAqB,CAACC,GAA4BC,MAChD,IAAI7F,MAAgB;AACpB,QAAA8F,IAAU9F,EAAK,IAAI,CAAApE,MAAQ,OAAOA,KAAQ,WAAWA,IAAMA,aAAe,QAAQA,EAAI,SAASA,EAAI,UAAU,KAAK,UAAUA,CAAG,CAAE,EAAE,KAAK,GAAG;AAEjJ,EAAA2J,EAAc,KAAK;AAAA,IAClB,MAAAK;AAAA,IACA,SAAAE;AAAA,IACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,EAAA,CAClC,GAEGP,EAAc,SAAS,QACVA,IAAAA,EAAc,MAAM,IAAK,IAG/BM,EAAA,MAAM,SAAS7F,CAAI;AAC/B,GAGY+F,KAAe,MAAM;AACjC,EAAIP,MAEcA,IAAA;AAAA,IACjB,KAAK,QAAQ;AAAA,IACb,MAAM,QAAQ;AAAA,IACd,OAAO,QAAQ;AAAA,EAChB,GAEAC,IAAkB,OAAO,SACzBC,IAA+B,OAAO,sBAEtC,OAAO,UAAU,CAACI,GAASR,GAAQU,GAAQC,GAAO9E,MAAU;AAC3D,UAAM+E,KAAe/E,KAAA,gBAAAA,EAAO,WAASA,KAAA,gBAAAA,EAAO,YAAW2E;AAOvD,WANAP,EAAc,KAAK;AAAA,MAClB,MAAM;AAAA,MACN,SAAS,mBAAmBW,CAAY;AAAA,YAAeZ,CAAM,IAAIU,CAAM,IAAIC,CAAK;AAAA,MAChF,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAAA,CAClC,GAEGR,IACIA,EAAgBK,GAASR,GAAQU,GAAQC,GAAO9E,CAAK,IAEtD;AAAA,EACR,GAEA,OAAO,uBAAuB,CAASf,MAAA;AACtC,UAAMe,IAAQf,EAAM;AACpB,IAAAmF,EAAc,KAAK;AAAA,MAClB,MAAM;AAAA,MACN,SAAS,iCAAgCpE,KAAA,gBAAAA,EAAO,WAASA,KAAA,gBAAAA,EAAO,YAAWA,CAAK;AAAA,MAChF,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAAA,CAClC,GAEGuE,KACHA,EAA6BtF,CAAK;AAAA,EAEpC,GAEA,QAAQ,MAAMuF,GAAmB,OAAOH,EAAgB,GAAG,GAC3D,QAAQ,OAAOG,GAAmB,QAAQH,EAAgB,IAAI,GAC9D,QAAQ,QAAQG,GAAmB,SAASH,EAAgB,KAAK,GAE1D,OAAA,iBAAiB,SAAS,CAASpF,MAAA;AACzC,UAAM,EAAE,SAAA0F,GAAS,UAAAK,GAAU,QAAAH,GAAQ,OAAAC,GAAO,OAAA9E,MAAUf,GAC9C8F,KAAe/E,KAAA,gBAAAA,EAAO,WAASA,KAAA,gBAAAA,EAAO,YAAW2E;AACvD,IAAAP,EAAc,KAAK;AAAA,MAClB,MAAM;AAAA,MACN,SAAS,mBAAmBW,CAAY;AAAA,YAAeC,CAAQ,IAAIH,CAAM,IAAIC,CAAK;AAAA,MAClF,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAAA,CAClC;AAAA,EAAA,CACD;AACF,GAEaG,KAAiB,MAAM;AACnC,EAAIZ,MACH,QAAQ,MAAMA,EAAgB,KAC9B,QAAQ,OAAOA,EAAgB,MAC/B,QAAQ,QAAQA,EAAgB,OACdA,IAAA,OAEfC,MACH,OAAO,UAAUA,GACCA,IAAA,OAEfC,MACH,OAAO,uBAAuBA,GACCA,IAAA,OAEzB,OAAA,oBAAoB,SAAS,MAAM;AAAA,EAAA,CAAE,GAC5CH,IAAgB,CAAC;AAClB,GAEac,KAAmB,MAAsB,CAAC,GAAGd,CAAa,GClG1De,KAAiB,MAAM;;AAElC,SAAA,iEAAiE,KAAK,UAAU,SAAS,OAAKC,IAAA,OAAO,eAAP,gBAAAA,EAAA,aAAoB,sBAAsB;AAE1I,GCFaC,IAAoB,CAAC,GAA4B,EAAE,iBAAAC,IAAkB,GAAM,IAAmC,CAAA,MAAc;AAExI,QAAMC,IADe,OAAO,aAAe,OAAe,aAAa,aAC1C,EAAE,QAAQ,CAAC,IAAI;AACrC,SAAA;AAAA,IACN,GAAGA,IAASD,IAAkBC,EAAM,UAAUA,EAAM,QAASD,IAAmB,EAAiB,UAAW,EAAiB;AAAA,IAC7H,GAAGC,IAASD,IAAkBC,EAAM,UAAUA,EAAM,QAASD,IAAmB,EAAiB,UAAW,EAAiB;AAAA,EAC9H;AACD,GAEaE,KAAc,CAACC,GAAWC,MAAsB;AACtD,QAAAC,IAAKD,EAAG,IAAID,EAAG,GACfG,IAAKF,EAAG,IAAID,EAAG;AACrB,SAAO,KAAK,KAAKE,IAAKA,IAAKC,IAAKA,CAAE;AACnC,GCbaC,KAAoB,CAACC,MAAoB;AACjD,MAAAA,EAAO,WAAW,EAAU,QAAA;AAC1B,QAAA,CAACC,GAAOC,CAAG,IAAIF;AACd,SAAA;AAAA,IACN,GAAG,KAAK,IAAIC,EAAM,GAAGC,EAAI,CAAC;AAAA,IAC1B,GAAG,KAAK,IAAID,EAAM,GAAGC,EAAI,CAAC;AAAA,IAC1B,OAAO,KAAK,IAAIA,EAAI,IAAID,EAAM,CAAC;AAAA,IAC/B,QAAQ,KAAK,IAAIC,EAAI,IAAID,EAAM,CAAC;AAAA,EACjC;AACD,GAEaE,KAAoB,CAACH,MAC7BA,EAAO,SAAS,IAAU,OACvB,KAAKA,EAAO,CAAC,EAAE,CAAC,IAAIA,EAAO,CAAC,EAAE,CAAC,IAAIA,EACxC,MAAM,CAAC,EACP,IAAI,CAAAI,MAAS,KAAKA,EAAM,CAAC,IAAIA,EAAM,CAAC,EAAE,EACtC,KAAK,GAAG,CAAC,ICfNC,KAAe,CAACC,GAAeC,MAAsC;AACpE,QAAAC,IAAS,SAAS,cAAc,QAAQ;AAC9C,SAAAA,EAAO,QAAQF,GACfE,EAAO,SAASD,GACTC;AACR,GAEMC,KAAsB,CAAChP,MACrBA,EAAQ,aAAa,wBAAwB,GAGxCiP,KAAoB,YAA6C;AACzE,MAAA;AACH,UAAMC,IAAa,MAAMC,GAAY,SAAS,MAAM;AAAA,MACnD,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,wBAAwB;AAAA,MACxB,gBAAgBH;AAAA,IAAA,CAChB,GAEKD,IAASH,GAAaM,EAAW,OAAOA,EAAW,MAAM,GACzDE,IAAML,EAAO,WAAW,IAAI;AAElC,QAAI,CAACK;AACE,YAAA,IAAI,MAAM,8BAA8B;AAG3C,WAAAA,EAAA,UAAUF,GAAY,GAAG,CAAC,GAEvBH,EAAO,UAAU;AAAA,WAChBtG,GAAO;AACP,YAAA,MAAM,iCAAiCA,CAAK;AAC7C;AAAA,EAAA;AAET,GCxCa4G,KAAqB,CACjCC,GAIAC,GACAC,MACI;AACJ,MAAI1K,IAAO,SAASwK,EAAW,KAAK,KAAKA,EAAW,MAAM;AAEtD,MAAAC,EAAc,WAAW,GAAG;AACzB,UAAA,CAACf,GAAOC,CAAG,IAAIc;AACb,IAAAzK,KAAA,KAAK0J,EAAM,CAAC,IAAIA,EAAM,CAAC,KAAKC,EAAI,IAAID,EAAM,CAAC,KAAKC,EAAI,IAAID,EAAM,CAAC,KAAKA,EAAM,IAAIC,EAAI,CAAC,KAAKD,EAAM,IAAIC,EAAI,CAAC;AAAA,EAAA;AAGhH,aAAWgB,KAASD;AACf,QAAAC,EAAM,SAAS,aAAa;AAC/B,YAAM,CAACjB,GAAOC,CAAG,IAAIgB,EAAM;AACnB,MAAA3K,KAAA,KAAK0J,EAAM,CAAC,IAAIA,EAAM,CAAC,KAAKC,EAAI,IAAID,EAAM,CAAC,KAAKC,EAAI,IAAID,EAAM,CAAC,KAAKA,EAAM,IAAIC,EAAI,CAAC,KAAKD,EAAM,IAAIC,EAAI,CAAC;AAAA,IAAA;AAI1G,SAAA3J;AACR,GCrBa4K,KAAkB,CAACxP,MAA8B;AAC7D,MAAI,OAAOA,KAAY,YAAYA,MAAY;AACxC,UAAA,IAAI,MAAM,uDAAuD;AAGpE,MAAA,OAAOA,EAAQ,YAAa;AACzB,UAAA,IAAI,MAAM,yDAAyD;AAG1E,MAAIA,EAAQ,gBAAgB,CAAC,qCAAqC,KAAKA,EAAQ,YAAY;AACpF,UAAA,IAAI,MAAM,oEAAoE;AAEtF,GCRMyP,KAAqB,GAErBC,KAAgB,CAACC,GAAmBxD,MAClCD,EAAWyD,CAAI,EAAE,UAAUxD,CAAK,GAwC3ByD,KAAqB,CACjCC,GACAC,GACAC,MACkB;;AAClB,QAAM,CAACpH,GAAOqH,CAAQ,IAAIpE,GAA0B;AAAA,IACnD,WAAW;AAAA,IACX,eAAe,CAAC;AAAA,IAChB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,aAAa;AAAA,IACb,eAAe,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,IAC5B,eAAeiE,EAAO;AAAA,IACtB,UAAQI,KAAAtC,IAAA3E,GAAc8G,CAAc,MAA5B,gBAAAnC,EAA+B,YAA/B,gBAAAsC,EAAwC,WAAU,CAAC;AAAA,IAC3D,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,QAAQP,GAAc,aAAaG,EAAO,YAAY;AAAA,EAAA,CACtD,GAEKK,IAAkB,CAACC,GAAiCC,IAAa,OAAU;AAC5E,QAAAD,EAAS,gBAAgBA,EAAS,eAAe;AAC9C,YAAAR,IAAOQ,EAAS,gBAAgBxH,EAAM,cACtCwD,IAAQgE,EAAS,iBAAiBxH,EAAM;AACrC,MAAAwH,EAAA,SAAST,GAAcC,GAAMxD,CAAK;AAAA,IAAA;AAE5C,IAAA6D,EAASG,CAAQ,GACjBJ,KAAA,QAAAA,EAAgBI,GAAUC;AAAA,EAC3B,GAEMC,IAAU;AAAA,IACf,cAAc,CAACC,MAAwB;AACtB,MAAAJ,EAAA;AAAA,QACf,WAAW;AAAA,QACX,eAAe,CAACI,CAAY;AAAA,QAC5B,iBAAiB;AAAA,MAAA,CACjB;AAAA,IACF;AAAA,IACA,eAAe,CAAC7B,MAAiB;AAC5B,MAAA9F,EAAM,iBAAiB,cACVuH,EAAA,EAAE,eAAe,CAACvH,EAAM,cAAc,CAAC,GAAG8F,CAAK,GAAG,IACxD9F,EAAM,iBAAiB,UACjBuH,EAAA;AAAA,QACf,eAAe,CAAC,GAAGvH,EAAM,eAAe8F,CAAK;AAAA,MAAA,CAC7C;AAAA,IAEH;AAAA,IACA,eAAe,MAAM;AAChB,UAAA9F,EAAM,cAAc,UAAU,GAAG;AACpC,cAAM4H,IAAkB;AAAA,UACvB,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC;AAAA,UAC1C,MAAM5H,EAAM;AAAA,UACZ,OAAOA,EAAM;AAAA,UACb,QAAQA,EAAM;AAAA,QACf;AACgB,QAAAuH,EAAA,EAAE,QAAQ,CAAC,GAAGvH,EAAM,QAAQ4H,CAAQ,GAAG;AAAA,MAAA;AAExD,MAAAL,EAAgB,EAAE,WAAW,IAAO,eAAe,IAAI;AAAA,IACxD;AAAA,IACA,kBAAkB,CAACM,MAAoB;AAAA,IAIvC;AAAA,IACA,aAAa,CAACzP,MAA+B;AAC5C,UAAIA,aAAa,YAAY;AAC5B,cAAM+G,IAAS/G,EAAE;AACb,YAAA,CAAC+G,EAAO,UAAU,SAAS,yBAAyB,KAAK,CAACA,EAAO,UAAU,SAAS,YAAY;AACnG;AAAA,MACD;AAGK,YAAA2G,IAAQb,EAAkB7M,CAAC;AAE7B,UAAAA,EAAE,kBAAkB,cAAcA,EAAE,OAAO,UAAU,SAAS,YAAY,GAAG;AAC1E,cAAAyP,IAAUzP,EAAE,OAAO,QAAQ;AAC7B,YAAAyP,KAAW7H,EAAM,oBAAoB6H,GAAS;AACjD,gBAAMjB,IAAQ5G,EAAM,OAAO,KAAK,CAAKpG,MAAAA,EAAE,OAAOiO,CAAO;AACrD,cAAIjB,GAAO;AACV,YAAAc,EAAQ,UAAU5B,CAAK,GACf4B,EAAA,iBAAiBd,GAAOd,CAAK;AACrC;AAAA,UAAA;AAAA,QACD;AAAA,MACD;AAGD,MAAA4B,EAAQ,gBAAgB5B,CAAK;AAAA,IAC9B;AAAA,IACA,YAAY,CAAC1N,MAA+B;AAC3C,YAAM0P,IAAc7C,EAAkB7M,GAAG,EAAE,iBAAiB,IAAM,GAC5D0N,IAAQb,EAAkB7M,CAAC;AAIjC,UAFgBmP,EAAA,EAAE,eAAeO,GAAa,GAE1C9H,EAAM,cAAcA,EAAM,mBAAmBA,EAAM,gBACxCA,EAAM,OAAO,KAAK,OAAKpG,EAAE,OAAOoG,EAAM,eAAe,GACxD;AACV,cAAMuF,IAAKO,EAAM,IAAI9F,EAAM,aAAa,GAClCwF,IAAKM,EAAM,IAAI9F,EAAM,aAAa,GAElC+H,IAAgB/H,EAAM,OAAO,IAAI,CAAKpG,MACvCA,EAAE,OAAOoG,EAAM,kBACX;AAAA,UACN,GAAGpG;AAAA,UACH,QAAQA,EAAE,OAAO,IAAI,CAAMkH,OAAA;AAAA,YAC1B,GAAGA,EAAE,IAAIyE;AAAA,YACT,GAAGzE,EAAE,IAAI0E;AAAA,UAAA,EACR;AAAA,QACH,IAEM5L,CACP;AAEe,QAAA2N,EAAA,EAAE,QAAQQ,GAAe,GACzCL,EAAQ,UAAU5B,CAAK;AACvB;AAAA,MAAA;AAIF,UAAI9F,EAAM,mBAAmB,CAACA,EAAM,WAAW;AAE9C,QADiBoF,GAAYpF,EAAM,iBAAiB8F,CAAK,KACzCgB,MACPY,EAAA,aAAa1H,EAAM,eAAe;AAE3C;AAAA,MAAA;AAGD,MAAIA,EAAM,aACT0H,EAAQ,cAAc5B,CAAK;AAAA,IAE7B;AAAA,IACA,WAAW,CAAC1N,MAA+B;AAC1C,UAAI4H,EAAM,YAAY;AACrB,QAAA0H,EAAQ,SAAS;AACjB;AAAA,MAAA;AAGD,UAAI1H,EAAM,mBAAmB,CAACA,EAAM,WAAW;AACxC,cAAA8F,IAAQb,EAAkB7M,CAAC;AAE7B,YADagN,GAAYpF,EAAM,iBAAiB8F,CAAK,IAC1CgB,MAAsB1O,EAAE,kBAAkB,cAAcA,EAAE,OAAO,UAAU,SAAS,YAAY,GAAG;AAC3G,gBAAAyP,IAAUzP,EAAE,OAAO,QAAQ;AACjC,UAAIyP,KACaN,EAAA,EAAE,iBAAiBM,GAAS;AAAA,QAC7C;AAAA,MACD;AAGD,MAAAH,EAAQ,gBAAgB,IAAI,GAC5BA,EAAQ,cAAc;AAAA,IACvB;AAAA,IACA,aAAa,CAACtP,MAA+B;AAC5C,MAAIA,EAAE,WAAWA,EAAE,iBAAiB,CAAC4H,EAAM,YAC1BuH,EAAA,EAAE,aAAa,IAAM;AAAA,IAEvC;AAAA,IACA,aAAa,CAACnP,MAA+B;AACxC,MAAAA,EAAE,WAAWA,EAAE,iBACFmP,EAAA,EAAE,aAAa,IAAO;AAAA,IAExC;AAAA,IACA,WAAW,CAACzB,MAAiB;AACZ,MAAAyB,EAAA;AAAA,QACf,YAAY;AAAA,QACZ,cAAczB;AAAA,MAAA,CACd;AAAA,IACF;AAAA,IACA,UAAU,MAAM;AACC,MAAAyB,EAAA;AAAA,QACf,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,YAAY;AAAA,MAAA,CACZ;AAAA,IACF;AAAA,IACA,iBAAiB,CAACzB,MAAwB;AACzB,MAAAyB,EAAA;AAAA,QACf,iBAAiBzB;AAAA,MAAA,CACjB;AAAA,IACF;AAAA,IACA,kBAAkB,CAACc,GAA4Bd,MAAiB;AAC/C,MAAAyB,EAAA;AAAA,QACf,YAAY;AAAA,UACX,GAAGzB,EAAM,IAAIc,EAAM,OAAO,CAAC,EAAE;AAAA,UAC7B,GAAGd,EAAM,IAAIc,EAAM,OAAO,CAAC,EAAE;AAAA,QAAA;AAAA,MAC9B,CACA;AAAA,IAAA;AAAA,EAEH;AAEO,SAAA;AAAA,IACN,OAAA5G;AAAA,IACA,UAAUuH;AAAA,IACV,SAAAG;AAAA,EACD;AACD,GCrOaM,KAAsB,CAClCd,GACAC,GACAC,MACmB;;AACnB,QAAM,CAACpH,GAAOqH,CAAQ,IAAIpE,GAA2B;AAAA,IACpD,WAASqE,KAAAtC,IAAA3E,GAAc8G,CAAc,MAA5B,gBAAAnC,EAA+B,aAA/B,gBAAAsC,EAAyC,YAAW;AAAA,IAC7D,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,EAAA,CACb;AAOM,SAAA;AAAA,IACN,OAAAtH;AAAA,IACA,UAPuB,CAACwH,GAAkCC,IAAa,OAAU;AACjF,MAAAJ,EAASG,CAAQ,GACjBJ,KAAA,QAAAA,EAAgBI,GAAUC;AAAA,IAC3B;AAAA,EAKA;AACD,GCdaQ,KAAoB,CAACf,GAAwBC,MAAwC;AACjG,QAAM,CAACnH,GAAOqH,CAAQ,IAAIpE,GAAyB;AAAA,IAClD,MAAMiE,EAAO;AAAA,IACb,QAAQ;AAAA,IACR,cAAcA,EAAO;AAAA,IACrB,cAAc;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACA,YAAY;AAAA,MACX,OAAO,SAAS,gBAAgB;AAAA,MAChC,QAAQ,SAAS,gBAAgB;AAAA,IAClC;AAAA,IACA,sBAAsB;AAAA,IACtB,YAAY3G,GAAoB;AAAA,IAChC,yBAAyB;AAAA,EAAA,CACzB;AAEM,SAAA;AAAA,IACN,OAAAP;AAAA,IACA,UAAAqH;AAAA,EACD;AACD,GC3Baa,KAAkB,CAAChB,MAAsC;AACrE,MAAIC,IAAiBtH,GAAW;AAChC,QAAMsI,IAAgB9J,GAAS,CAAC0B,GAAiB0H,IAAa,OAAU;AAEvE,KADwBA,KAAcW,EAAS,MAAM,QAAQ,KAAA,EAAO,SAAS,KAAKC,EAAQ,MAAM,OAAO,SAAS,OAE/GvI,GAAcC,GAAS;AAAA,MACtB,UAAUqI,EAAS;AAAA,MACnB,SAASC,EAAQ;AAAA,IAAA,CACjB,GACDC,EAAO,SAAS,EAAE,YAAY/H,MAAuB;AAAA,KAEpD,GAAI,GAED6H,IAAWJ,GAAoBd,GAAQC,GAAgB,CAACnH,GAAOyH,MAAe;AACnF,IAAAU,EAAchB,GAAgBM,CAAU;AAAA,EAAA,CACxC,GAEKY,IAAUpB,GAAmBC,GAAQC,GAAgB,CAACnH,GAAOyH,MAAe;AACjF,IAAAU,EAAchB,GAAgBM,CAAU;AAAA,EAAA,CACxC,GAEKa,IAASL,GAAkBf,CAAsB,GAEjDqB,IAAkB,MAAM;AAC7B,UAAMC,IAAa3I,GAAW;AAC9B,QAAI2I,MAAerB,GAAgB;AACjB,MAAAA,IAAAqB;AACX,YAAAhB,IAAWnH,GAAc8G,CAAc;AAE7C,MAAAiB,EAAS,SAAS;AAAA,QACjB,UAASZ,KAAA,gBAAAA,EAAU,SAAS,YAAW;AAAA,MAAA,CACvC,GAEDa,EAAQ,SAAS;AAAA,QAChB,SAAQb,KAAA,gBAAAA,EAAU,QAAQ,WAAU,CAAA;AAAA,MAAC,CACrC;AAAA,IAAA;AAAA,EAEH;AAE4B,EAAA5I,EAAA;AAAA,IAC3B,OAAO;AAAA,IACP,UAAU2J;AAAA,EAAA,CACV,GAEwBrJ,GAAA;AAAA,IACxB,QAAQ,SAAS;AAAA,IACjB,SAAS;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,IACV;AAAA,IACA,UAAU,MAAM;AAEf,MADmBW,GAAW,MACXsH,KACFoB,EAAA;AAAA,IACjB;AAAA,EACD,CACA;AAED,QAAME,IAAQ,MAAM;AACnB,IAAAnI,GAAe6G,CAAc,GAEpBiB,EAAA;AAAA,MACR;AAAA,QACC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,aAAa;AAAA,MACd;AAAA,MACA;AAAA,IACD,GAEQC,EAAA;AAAA,MACP;AAAA,QACC,WAAW;AAAA,QACX,eAAe,CAAC;AAAA,QAChB,QAAQ,CAAC;AAAA,QACT,iBAAiB;AAAA,QACjB,cAAc;AAAA,QACd,aAAa;AAAA,QACb,eAAe,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,QAC5B,UAAU;AAAA,QACV,eAAenB,EAAO;AAAA,QACtB,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,YAAY;AAAA,MACb;AAAA,MACA;AAAA,IACD,GAEAoB,EAAO,SAAS;AAAA,MACf,QAAQ;AAAA,IAAA,CACR;AAAA,EACF,GAEMI,IAAa,CAACnH,MAAyB;AAC5C,IAAA+G,EAAO,SAAS,EAAE,cAAc,EAAE,MAAM,IAAM,MAAM/G,EAAO,MAAM,SAASA,EAAO,WAAW,GAE5F,WAAW,MAAM;AAChB,MAAA+G,EAAO,SAAS,EAAE,cAAc,EAAE,MAAM,IAAO,MAAM/G,EAAO,MAAM,SAASA,EAAO,WAAW;AAAA,OAC3F,GAAI;AAAA,EACR;AAEO,SAAA;AAAA,IACN,UAAA6G;AAAA,IACA,SAAAC;AAAA,IACA,QAAAC;AAAA,IACA,SAAS;AAAA,MACR,OAAAG;AAAA,MACA,QAAQ,OAAO1M,MAA0B;AACxC,QAAAuM,EAAO,SAAS,EAAE,QAAQ,GAAA,CAAO;AAE7B,YAAA;AACH,gBAAMK,IAAW,MAAMzB,EAAO,SAASnL,CAAI;AAE3C,iBAAI4M,aAAoB,YAAY,CAACA,EAAS,MAC7CD,EAAW,EAAE,MAAM,IAAM,MAAM,SAAS,SAAS,qBAAqB,GAC/DC,MAGFF,EAAA,GACNC,EAAW,EAAE,MAAM,IAAM,MAAM,WAAW,SAAS,sBAAsB,GAClEC;AAAA,gBACQ;AACf,UAAAD,EAAW,EAAE,MAAM,IAAM,MAAM,SAAS,SAAS,qBAAqB;AAAA,QAAA;AAAA,MACvE;AAAA,IACD;AAAA,EAEF;AACD,GC5IME,KAAcC,GAAyB,GAEhCC,KAA6ChP,CAASA,MAAA;AAClE,QAAMoJ,IAAQgF,GAAgB;AAAA,IAC7Ba,cAAcjP,EAAMiP;AAAAA,IACpBC,UAAUlP,EAAMkP;AAAAA,IAChBC,YAAYnP,EAAMmP;AAAAA,IAClBC,UAAUpP,EAAMoP;AAAAA,EAAAA,CAChB;AAEDC,SAAAA,EAAQP,GAAYQ,UAAQ;AAAA,IAAC3Q,OAAOyK;AAAAA,IAAK,IAAAmG,WAAA;AAAA,aAAGvP,EAAMuP;AAAAA,IAAAA;AAAAA,EAAQ,CAAA;AAC3D,GAEaC,IAAeA,MAAM;AAC3BpG,QAAAA,IAAQqG,GAAWX,EAAW;AACpC,MAAI,CAAC1F;AACE,UAAA,IAAIsG,MAAM,+CAA+C;AAEzDtG,SAAAA;AACR;;ACxBauG,MAAAA,KAAyC3P,QAAK,MAAA;AAAA,MAAA4P,IAAAC,GAAA;AAAAC,SAAAA,EAAAC,CAAAA,MAAA;AAAAC,QAAAA,IAGlDhQ,EAAMiQ,QAAQ,IAAEC,IACflQ,EAAMiQ,QAAQ,IAAEE,IAElBnQ,EAAMoQ,QAAQ,QAAMC,IAClBrQ,EAAMsQ,UAAU,gBAAcC,IACxBvQ,EAAMwQ,eAAe,GAACC,IAG7BzQ,EAAM0Q,OAAKC,IACX3Q,EAAML;AAAKqQ,WAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,SAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAhB,GAAAG,UAAAA,EAAA9S,IAAAiT,CAAA,GAAAC,MAAAJ,EAAA9T,KAAA2U,EAAAhB,GAAAG,QAAAA,EAAA9T,IAAAkU,CAAA,GAAAE,MAAAN,EAAAc,KAAAD,EAAAhB,GAAAG,UAAAA,EAAAc,IAAAR,CAAA,GAAAE,MAAAR,EAAAjT,KAAA8T,EAAAhB,GAAAG,gBAAAA,EAAAjT,IAAAyT,CAAA,GAAAE,MAAAV,EAAAe,KAAAF,EAAAhB,GAAAG,SAAAA,EAAAe,IAAAL,CAAA,GAAAV,EAAAjQ,IAAAiR,EAAAnB,GAAAe,GAAAZ,EAAAjQ,CAAA,GAAAiQ;AAAAA,EAAAA,GAAA;AAAA,IAAAzR,GAAA0S;AAAAA,IAAA/T,GAAA+T;AAAAA,IAAA/U,GAAA+U;AAAAA,IAAAH,GAAAG;AAAAA,IAAAlU,GAAAkU;AAAAA,IAAAF,GAAAE;AAAAA,IAAAlR,GAAAkR;AAAAA,EAAAA,CAAA,GAAApB;AAAA,GAInB;;AChBM,MAAMqB,KAAsCjR,CAASA,OAC3D,MAAA;AAAA,MAAA4P,IAAAC,GAAAA,GAAAqB,IAAAtB,EAAAuB;AAAArB,SAAAA,EAAAC,CAAAA,MAAA;AAAA,QAAAC,IACahQ,EAAMiQ,QAAQ,IAAEC,IAAUlQ,EAAMiQ,QAAQ,IAAEE,IAAyCnQ,EAAM0Q,OAAKL,IAASrQ,EAAML,OAAK4Q,IAGtHvQ,EAAMoQ,QAAQ;AAAcJ,WAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,SAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAhB,GAAAG,UAAAA,EAAA9S,IAAAiT,CAAA,GAAAC,MAAAJ,EAAA9T,KAAA2U,EAAAhB,GAAAG,SAAAA,EAAA9T,IAAAkU,CAAA,GAAAJ,EAAAc,IAAAE,EAAAnB,GAAAS,GAAAN,EAAAc,CAAA,GAAAN,MAAAR,EAAAjT,KAAA8T,EAAAM,GAAAnB,QAAAA,EAAAjT,IAAAyT,CAAA,GAAAR;AAAAA,EAAAA,GAAA;AAAA,IAAAzR,GAAA0S;AAAAA,IAAA/T,GAAA+T;AAAAA,IAAA/U,GAAA+U;AAAAA,IAAAH,GAAAG;AAAAA,IAAAlU,GAAAkU;AAAAA,EAAAA,CAAA,GAAApB;AAAAA,GAAA;;ACLzBwB,MAAAA,KAAsCpR,QAAK,MAAA;AAAA,MAAA4P,IAAAC,GAAA;AAAAC,SAAAA,EAAAC,CAAAA,MAAA;AAAAC,QAAAA,IAG/ChQ,EAAMiQ,QAAQ,IAAEC,IACflQ,EAAMiQ,QAAQ,IAAEE,IAElBnQ,EAAMoQ,QAAQ,QAAMC,IAClBrQ,EAAMsQ,UAAU,gBAAcC,IACxBvQ,EAAMwQ,eAAe,GAACC,IAG7BzQ,EAAM0Q,OAAKC,IACX3Q,EAAML;AAAKqQ,WAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,SAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAhB,GAAAG,UAAAA,EAAA9S,IAAAiT,CAAA,GAAAC,MAAAJ,EAAA9T,KAAA2U,EAAAhB,GAAAG,QAAAA,EAAA9T,IAAAkU,CAAA,GAAAE,MAAAN,EAAAc,KAAAD,EAAAhB,GAAAG,UAAAA,EAAAc,IAAAR,CAAA,GAAAE,MAAAR,EAAAjT,KAAA8T,EAAAhB,GAAAG,gBAAAA,EAAAjT,IAAAyT,CAAA,GAAAE,MAAAV,EAAAe,KAAAF,EAAAhB,GAAAG,SAAAA,EAAAe,IAAAL,CAAA,GAAAV,EAAAjQ,IAAAiR,EAAAnB,GAAAe,GAAAZ,EAAAjQ,CAAA,GAAAiQ;AAAAA,EAAAA,GAAA;AAAA,IAAAzR,GAAA0S;AAAAA,IAAA/T,GAAA+T;AAAAA,IAAA/U,GAAA+U;AAAAA,IAAAH,GAAAG;AAAAA,IAAAlU,GAAAkU;AAAAA,IAAAF,GAAAE;AAAAA,IAAAlR,GAAAkR;AAAAA,EAAAA,CAAA,GAAApB;AAAA,GAOnB;;ACnBYyB,MAAAA,KAAgCrR,QAAK,MAAA;AAAA,MAAA4P,IAAAC,GAAA;AAAAC,SAAAA,EAAAC,CAAAA,MAAA;AAAAC,QAAAA,IAGzChQ,EAAMiQ,QAAQ,IAAEC,IACflQ,EAAMiQ,QAAQ,IAAEE,IAElBnQ,EAAMoQ,QAAQ,QAAMC,IAClBrQ,EAAMsQ,UAAU,gBAAcC,IACxBvQ,EAAMwQ,eAAe,GAACC,IAG7BzQ,EAAM0Q,OAAKC,IACX3Q,EAAML;AAAKqQ,WAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,SAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAhB,GAAAG,UAAAA,EAAA9S,IAAAiT,CAAA,GAAAC,MAAAJ,EAAA9T,KAAA2U,EAAAhB,GAAAG,QAAAA,EAAA9T,IAAAkU,CAAA,GAAAE,MAAAN,EAAAc,KAAAD,EAAAhB,GAAAG,UAAAA,EAAAc,IAAAR,CAAA,GAAAE,MAAAR,EAAAjT,KAAA8T,EAAAhB,GAAAG,gBAAAA,EAAAjT,IAAAyT,CAAA,GAAAE,MAAAV,EAAAe,KAAAF,EAAAhB,GAAAG,SAAAA,EAAAe,IAAAL,CAAA,GAAAV,EAAAjQ,IAAAiR,EAAAnB,GAAAe,GAAAZ,EAAAjQ,CAAA,GAAAiQ;AAAAA,EAAAA,GAAA;AAAA,IAAAzR,GAAA0S;AAAAA,IAAA/T,GAAA+T;AAAAA,IAAA/U,GAAA+U;AAAAA,IAAAH,GAAAG;AAAAA,IAAAlU,GAAAkU;AAAAA,IAAAF,GAAAE;AAAAA,IAAAlR,GAAAkR;AAAAA,EAAAA,CAAA,GAAApB;AAAA,GAInB;;AChBY0B,MAAAA,KAAkCtR,QAAK,MAAA;AAAA,MAAA4P,IAAAC,GAAA;AAAAC,SAAAA,EAAAC,CAAAA,MAAA;AAAAC,QAAAA,IAG3ChQ,EAAMiQ,QAAQ,IAAEC,IACflQ,EAAMiQ,QAAQ,IAAEE,IAElBnQ,EAAMoQ,QAAQ,QAAMC,IAClBrQ,EAAMsQ,UAAU,gBAAcC,IACxBvQ,EAAMwQ,eAAe,GAACC,IAG7BzQ,EAAM0Q,OAAKC,IACX3Q,EAAML;AAAKqQ,WAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,SAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAhB,GAAAG,UAAAA,EAAA9S,IAAAiT,CAAA,GAAAC,MAAAJ,EAAA9T,KAAA2U,EAAAhB,GAAAG,QAAAA,EAAA9T,IAAAkU,CAAA,GAAAE,MAAAN,EAAAc,KAAAD,EAAAhB,GAAAG,UAAAA,EAAAc,IAAAR,CAAA,GAAAE,MAAAR,EAAAjT,KAAA8T,EAAAhB,GAAAG,gBAAAA,EAAAjT,IAAAyT,CAAA,GAAAE,MAAAV,EAAAe,KAAAF,EAAAhB,GAAAG,SAAAA,EAAAe,IAAAL,CAAA,GAAAV,EAAAjQ,IAAAiR,EAAAnB,GAAAe,GAAAZ,EAAAjQ,CAAA,GAAAiQ;AAAAA,EAAAA,GAAA;AAAA,IAAAzR,GAAA0S;AAAAA,IAAA/T,GAAA+T;AAAAA,IAAA/U,GAAA+U;AAAAA,IAAAH,GAAAG;AAAAA,IAAAlU,GAAAkU;AAAAA,IAAAF,GAAAE;AAAAA,IAAAlR,GAAAkR;AAAAA,EAAAA,CAAA,GAAApB;AAAA,GAQnB;;ACpBY2B,MAAAA,KAAwCvR,QAAK,MAAA;AAAA,MAAA4P,IAAAC,GAAA;AAAAC,SAAAA,EAAAC,CAAAA,MAAA;AAAAC,QAAAA,IAGjDhQ,EAAMiQ,QAAQ,IAAEC,IACflQ,EAAMiQ,QAAQ,IAAEE,IAElBnQ,EAAMoQ,QAAQ,QAAMC,IAClBrQ,EAAMsQ,UAAU,gBAAcC,IACxBvQ,EAAMwQ,eAAe,GAACC,IAG7BzQ,EAAM0Q,OAAKC,IACX3Q,EAAML;AAAKqQ,WAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,SAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAhB,GAAAG,UAAAA,EAAA9S,IAAAiT,CAAA,GAAAC,MAAAJ,EAAA9T,KAAA2U,EAAAhB,GAAAG,QAAAA,EAAA9T,IAAAkU,CAAA,GAAAE,MAAAN,EAAAc,KAAAD,EAAAhB,GAAAG,UAAAA,EAAAc,IAAAR,CAAA,GAAAE,MAAAR,EAAAjT,KAAA8T,EAAAhB,GAAAG,gBAAAA,EAAAjT,IAAAyT,CAAA,GAAAE,MAAAV,EAAAe,KAAAF,EAAAhB,GAAAG,SAAAA,EAAAe,IAAAL,CAAA,GAAAV,EAAAjQ,IAAAiR,EAAAnB,GAAAe,GAAAZ,EAAAjQ,CAAA,GAAAiQ;AAAAA,EAAAA,GAAA;AAAA,IAAAzR,GAAA0S;AAAAA,IAAA/T,GAAA+T;AAAAA,IAAA/U,GAAA+U;AAAAA,IAAAH,GAAAG;AAAAA,IAAAlU,GAAAkU;AAAAA,IAAAF,GAAAE;AAAAA,IAAAlR,GAAAkR;AAAAA,EAAAA,CAAA,GAAApB;AAAA,GAKnB;;ACjBY4B,MAAAA,KAAoCxR,QAAK,MAAA;AAAA,MAAA4P,IAAAC,GAAA;AAAAC,SAAAA,EAAAC,CAAAA,MAAA;AAAAC,QAAAA,IAG7ChQ,EAAMiQ,QAAQ,IAAEC,IACflQ,EAAMiQ,QAAQ,IAAEE,IAElBnQ,EAAMoQ,QAAQ,QAAMC,IAClBrQ,EAAMsQ,UAAU,gBAAcC,IACxBvQ,EAAMwQ,eAAe,GAACC,IAG7BzQ,EAAM0Q,OAAKC,IACX3Q,EAAML;AAAKqQ,WAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,SAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAhB,GAAAG,UAAAA,EAAA9S,IAAAiT,CAAA,GAAAC,MAAAJ,EAAA9T,KAAA2U,EAAAhB,GAAAG,QAAAA,EAAA9T,IAAAkU,CAAA,GAAAE,MAAAN,EAAAc,KAAAD,EAAAhB,GAAAG,UAAAA,EAAAc,IAAAR,CAAA,GAAAE,MAAAR,EAAAjT,KAAA8T,EAAAhB,GAAAG,gBAAAA,EAAAjT,IAAAyT,CAAA,GAAAE,MAAAV,EAAAe,KAAAF,EAAAhB,GAAAG,SAAAA,EAAAe,IAAAL,CAAA,GAAAV,EAAAjQ,IAAAiR,EAAAnB,GAAAe,GAAAZ,EAAAjQ,CAAA,GAAAiQ;AAAAA,EAAAA,GAAA;AAAA,IAAAzR,GAAA0S;AAAAA,IAAA/T,GAAA+T;AAAAA,IAAA/U,GAAA+U;AAAAA,IAAAH,GAAAG;AAAAA,IAAAlU,GAAAkU;AAAAA,IAAAF,GAAAE;AAAAA,IAAAlR,GAAAkR;AAAAA,EAAAA,CAAA,GAAApB;AAAA,GAMnB;;AClBY6B,MAAAA,KAA8BzR,QAAK,MAAA;AAAA,MAAA4P,IAAAC,GAAA;AAAAC,SAAAA,EAAAC,CAAAA,MAAA;AAAAC,QAAAA,IAGvChQ,EAAMiQ,QAAQ,IAAEC,IACflQ,EAAMiQ,QAAQ,IAAEE,IAElBnQ,EAAMoQ,QAAQ,QAAMC,IAClBrQ,EAAMsQ,UAAU,gBAAcC,IACxBvQ,EAAMwQ,eAAe,GAACC,IAG7BzQ,EAAM0Q,OAAKC,IACX3Q,EAAML;AAAKqQ,WAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,SAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAhB,GAAAG,UAAAA,EAAA9S,IAAAiT,CAAA,GAAAC,MAAAJ,EAAA9T,KAAA2U,EAAAhB,GAAAG,QAAAA,EAAA9T,IAAAkU,CAAA,GAAAE,MAAAN,EAAAc,KAAAD,EAAAhB,GAAAG,UAAAA,EAAAc,IAAAR,CAAA,GAAAE,MAAAR,EAAAjT,KAAA8T,EAAAhB,GAAAG,gBAAAA,EAAAjT,IAAAyT,CAAA,GAAAE,MAAAV,EAAAe,KAAAF,EAAAhB,GAAAG,SAAAA,EAAAe,IAAAL,CAAA,GAAAV,EAAAjQ,IAAAiR,EAAAnB,GAAAe,GAAAZ,EAAAjQ,CAAA,GAAAiQ;AAAAA,EAAAA,GAAA;AAAA,IAAAzR,GAAA0S;AAAAA,IAAA/T,GAAA+T;AAAAA,IAAA/U,GAAA+U;AAAAA,IAAAH,GAAAG;AAAAA,IAAAlU,GAAAkU;AAAAA,IAAAF,GAAAE;AAAAA,IAAAlR,GAAAkR;AAAAA,EAAAA,CAAA,GAAApB;AAAA,GAKnB;;ACjBD,MAAM8B,KAAS;AAAA,EACd;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAW,GAGCC,KAA2BA,MAAM;AAC7C,QAAMvI,IAAQoG,EAAa;AAE3B,UAAA,MAAA;AAAAI,QAAAA,IAAAC,MAAAqB,IAAAtB,EAAAuB,YAAAS,IAAAV,EAAAW,aAAAC,IAAAF,EAAAT;AAAAW,WAAAA,EAAAA,GAAAzC,EAYM0C,IAAG;AAAA,MAAA,IAACC,OAAI;AAAA,eAAE,CAAC5I,EAAMoF,OAAOtI,MAAM+I,cAAc,GAAGyC,EAAM;AAAA,MAAC;AAAA,MAAAnC,UACrD7F,QAAK,MAAA;AAAA,YAAAuI,IAAAC,GAAA;AAAAD,eAAAA,EAAAE,UAKK,MAAM/I,EAAMmF,QAAQhB,SAAS;AAAA,UAAE6E,eAAe1I;AAAAA,QAAAA,CAAO,GAACkH,EAAAqB,GAFxD,SAAA,UAAUvI,CAAK,QAAQ,GAIJuI,KAAAA,OAAAA,EAAAtS,MAAA2I,YAALoB,oBAAAA,CAAK,IAAAuI,EAAAtS,MAAA0S,eAAA,kBAAA,GAAAzB,EAAAA,MAAAA,EAAAqB,GAHX7I,iBAAAA,EAAMmF,QAAQrI,MAAMkM,kBAAkB1I,CAAK,CAAA,GAAAuI;AAAAA,MAAA,GAAA;AAAA,IAAA,CAM3D,CAAA,GAAAnC,EAAAwC,QAAAA,IAhBkBlJ,EAAMmF,QAAQrI,MAAMkM,yBAAalB,EAAAvR,MAAA2I,YAAA,oBAAAgK,CAAA,IAAApB,EAAAvR,MAAA0S,eAAA,kBAAA,CAAA,GAAAzC;AAAAA,EAAAA,GAAA;AAuB3D;AAAC2C,EAAA,CAAA,OAAA,CAAA;;ACxCD,MAAMC,KAAiD;AAAA,EACtDC,WAAWrB;AAAAA,EACXjP,MAAMkP;AACP,GAEaqB,KAA4BA,MAAM;AAC9C,QAAMtJ,IAAQoG,EAAa,GACrBmD,IAAQC,OAAOC,OAAOpJ,CAAU;AAEtC,UAAA,MAAA;AAAA,QAAAmG,IAAAC,GAAAA,GAAAqB,IAAAtB,EAAAuB;AAAAvB,WAAAA,EAAAA,GAAAP,EAEG0C,IAAG;AAAA,MAACC,MAAMW;AAAAA,MAAKpD,UACdrC,CAAQA,MAAA;AACF4F,cAAAA,IAAON,GAAStF,EAAK6F,EAAE;AAC7B,gBAAA,MAAA;AAAA,cAAAnB,IAAAM,GAAA;AAAAN,iBAAAA,EAAAO,UAKW,MAAM/I,EAAMmF,QAAQhB,SAAS;AAAA,YAAEyF,cAAc9F,EAAK6F;AAAAA,UAAAA,CAAI,GAACnB,EAAAA,GAAAvC,EAE/DyD,GAAI;AAAA,YAAA,OAAA;AAAA,UAAA,CAAA,CAAA,GAAAhD,EAAAC,CAAAA,MAAA;AAAAC,gBAAAA,IAJE9C,EAAK+F,OAAK/C,IACF9G,EAAMmF,QAAQrI,MAAM8M,iBAAiB9F,EAAK6F;AAAE/C,mBAAAA,MAAAD,EAAAzR,KAAAsS,EAAAgB,GAAA7B,SAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAgB,GAAA7B,iBAAAA,EAAA9S,IAAAiT,CAAA,GAAAH;AAAAA,UAAAA,GAAA;AAAA,YAAAzR,GAAA0S;AAAAA,YAAA/T,GAAA+T;AAAAA,UAAAA,CAAA,GAAAY;AAAAA,QAAAA,GAAA;AAAA,MAAA;AAAA,IAM7D,CAAA,GAAAV,CAAA,GAAAgC,EAAAtD,GAAAP,EAEDsC,SAAaT,CAAA,GAAAA,EAAAiB,UAE8D,MAAM/I,EAAMmF,QAAQhB,SAAS;AAAA,MAAEV,QAAQ,CAAA;AAAA,OAAM,EAAI,GAACqE,EAAAA,GAAA7B,EAC5HiC,IAAS;AAAA,MAAA,OAAA;AAAA,IAAA,CAAA,CAAA,GAAA1B;AAAAA,EAAAA,GAAA;AAId;AAAC2C,EAAA,CAAA,OAAA,CAAA;;ACjCM,MAAMY,IAAiCnT,CAASA,MAAA;AAChDoT,QAAAA,IAAUA,MAAMpT,EAAMoT,WAAW,WACjCnD,IAAOA,MAAMjQ,EAAMiQ,QAAQ;AAEjC,UAAA,MAAA;AAAA,QAAAL,IAAAC,GAAA;AAAAD,WAAAA,GAAAA,GAAAyD,EAAmBrT,GAAK;AAAA,MAAA,IAAA,QAAA;AAAS,eAAA,2BAA2BoT,GAAS,gBAAgBnD,GAAM,IAAIjQ,EAAM0Q,KAAK;AAAA,MAAA;AAAA,IAAE,CAAA,GAAA,EAAA,GAAAd;AAAAA,EAAAA,GAAA;AAC7G;;ACTa0D,MAAAA,KAAyCtT,QAAK,MAAA;AAAA,MAAA4P,IAAAC,GAAA;AAAAC,SAAAA,EAAAC,CAAAA,MAAA;AAAAC,QAAAA,IAGlDhQ,EAAMiQ,QAAQ,IAAEC,IACflQ,EAAMiQ,QAAQ,IAAEE,IAElBnQ,EAAMoQ,QAAQ,QAAMC,IAClBrQ,EAAMsQ,UAAU,gBAAcC,IACxBvQ,EAAMwQ,eAAe,GAACC,IAG7BzQ,EAAM0Q,OAAKC,IACX3Q,EAAML;AAAKqQ,WAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,SAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAhB,GAAAG,UAAAA,EAAA9S,IAAAiT,CAAA,GAAAC,MAAAJ,EAAA9T,KAAA2U,EAAAhB,GAAAG,QAAAA,EAAA9T,IAAAkU,CAAA,GAAAE,MAAAN,EAAAc,KAAAD,EAAAhB,GAAAG,UAAAA,EAAAc,IAAAR,CAAA,GAAAE,MAAAR,EAAAjT,KAAA8T,EAAAhB,GAAAG,gBAAAA,EAAAjT,IAAAyT,CAAA,GAAAE,MAAAV,EAAAe,KAAAF,EAAAhB,GAAAG,SAAAA,EAAAe,IAAAL,CAAA,GAAAV,EAAAjQ,IAAAiR,EAAAnB,GAAAe,GAAAZ,EAAAjQ,CAAA,GAAAiQ;AAAAA,EAAAA,GAAA;AAAA,IAAAzR,GAAA0S;AAAAA,IAAA/T,GAAA+T;AAAAA,IAAA/U,GAAA+U;AAAAA,IAAAH,GAAAG;AAAAA,IAAAlU,GAAAkU;AAAAA,IAAAF,GAAAE;AAAAA,IAAAlR,GAAAkR;AAAAA,EAAAA,CAAA,GAAApB;AAAA,GAMnB;;ACbM,MAAM2D,KAA4BA,MAAM;AAC9C,QAAMnK,IAAQoG,EAAa,GACrB,CAACgE,GAAOC,CAAQ,IAAIvP,EAAawC,IAAgB,GACjD,CAACgN,GAAaC,CAAc,IAAIzP,EAAa0P,OAAOC,SAASC,QAAQ,GAErEC,IAAsBA,MAAM;AACjC,UAAMC,IAActN,GAAe;AACnC+M,IAAAA,EAASO,CAAW,GACpB5K,EAAMoF,OAAOjB,SAAS;AAAA,MAAE0G,YAAYD,EAAYE;AAAAA,IAAAA,CAAQ;AAAA,EACzD,GAEMzF,IAAkBA,MAAM;AACdmF,IAAAA,EAAAA,OAAOC,SAASC,QAAQ;AAAA,EACxC;AAE4B,EAAAhP,EAAA;AAAA,IAC3BC,OAAO;AAAA,IACPF,UAAUkP;AAAAA,EAAAA,CACV,GAE2BjP,EAAA;AAAA,IAC3BC,OAAO;AAAA,IACPF,UAAU4J;AAAAA,EAAAA,CACV,GAEwBrJ,GAAA;AAAA,IACxBC,QAAQhH,SAAS8V;AAAAA,IACjB5W,SAAS;AAAA,MACR6W,WAAW;AAAA,MACXC,SAAS;AAAA,IACV;AAAA,IACAxP,UAAUA,MAAM;AACA+O,MAAAA,EAAAA,OAAOC,SAASC,QAAQ;AAAA,IAAA;AAAA,EACxC,CACA;AAEKQ,QAAAA,IAAiBA,CAACnS,GAAcoS,MAAyB;AAC9D,UAAMC,IAAYD,IAAc,GAAGpS,CAAI,GAAGoS,CAAW,KAAKpS;AAC1DyR,WAAOC,SAASY,OAAOD,GACvBpL,EAAMoF,OAAOjB,SAAS;AAAA,MAAEmH,sBAAsB;AAAA,IAAA,CAAO;AAAA,EACtD,GAEMC,IAAeA,CAACxS,MAAiB;AAClCuR,IAAAA,QAAkBvR,KACrBiH,EAAMwE,QAAQe,MAAM,GAErBnI,GAAerE,CAAI;AAEnB,UAAM6R,IAActN,GAAe;AACnC+M,IAAAA,EAASO,CAAW,GACpB5K,EAAMoF,OAAOjB,SAAS;AAAA,MAAE0G,YAAYD,EAAYE;AAAAA,IAAAA,CAAQ;AAAA,EACzD,GAEMU,IAAaA,CAACzS,MAAiB;AAChCA,QAAAA,MAAS,IAAY,QAAA;AACnB0S,UAAAA,IAAQ1S,EAAK2S,MAAM,GAAG;AACxBD,WAAAA,EAAMX,UAAU,IAAU/R,IACvB,IAAI0S,EAAM,CAAC,CAAC,QAAQA,EAAMA,EAAMX,SAAS,CAAC,CAAC;AAAA,EACnD;AAEA,SAAA7E,EACE0F,GAAI;AAAA,IAAA,IAACC,OAAI;AAAE5L,aAAAA,EAAMoF,OAAOtI,MAAMwO;AAAAA,IAAoB;AAAA,IAAA,IAAAnF,WAAA;AAAAK,UAAAA,IAAAsC,MAAAhB,IAAAtB,EAAAuB;AAAAD,MAAAA,EAAAC;AAAAW,UAAAA,IAAAZ,EAAAW;AAAAX,aAAAA,EAAAA,GAAA7B,EAI/C8D,GAAM;AAAA,QAACC,SAAO;AAAA,QAAanD,MAAI;AAAA,QAAMgF,SAASA,MAAM7L,EAAMoF,OAAOjB,SAAS;AAAA,UAAEmH,sBAAsB;AAAA,QAAA,CAAO;AAAA,QAAC,IAAAnF,WAAA;AAAA,iBAAAF,EACzGoC,IAAK;AAAA,YAACxB,MAAM;AAAA,UAAA,CAAE;AAAA,QAAA;AAAA,MAAA,CAAA,GAAA,IAAA,GAAA6B,EAAAA,GAAAzC,EAIf0C,IAAG;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEwB,EAAM;AAAA,QAAC;AAAA,QAAAjE,UAChB2F,CAAQA,MAAA;AACR,gBAAMC,IAAYpR,EAAW,MAAMmR,EAAK/S,SAASuR,GAAa;AAC9D,kBAAA,MAAA;AAAA,gBAAA0B,IAAAC,GAAAC,GAAAA,IAAAF,EAAAjE,YAAAoE,IAAAD,EAAAnE,YAAAqE,KAAAD,EAAA1D,aAAA4D,KAAAH,EAAAzD;AAAAqB,mBAAAA,EAAAqC,GAIKX,MAAAA,EAAWM,EAAK/S,IAAI,CAAC,GAAA+Q,EAAAsC,IAEoBN,MAAAA,EAAKhP,MAAMoI,SAASoH,OAAO,GAAAxC,EAAAuC,KAAA,MAAA;AAAA,kBAAAE,IAAAC,SAGpET,GAAW;AAAA,qBAAA,MAAZQ,EAAAA,KAAAtG,EACC8D,GAAM;AAAA,gBAAA,OAAA;AAAA,gBAENC,SAAO;AAAA,gBACPnD,MAAI;AAAA,gBACJgF,SAASA,MAAMX,EAAeY,EAAK/S,MAAM+S,EAAKhP,MAAMqO,WAAW;AAAA,gBAAC,IAAAhF,WAAA;AAAAF,yBAAAA,EAE/DiE,IAAgB,EAAA;AAAA,gBAAA;AAAA,cAAA,CAElB;AAAA,YAAA,GAAA,GAAA,IAAA,GAAAmC,EAAAA,IAAApG,EACA8D,GAAM;AAAA,cAAA,OAAA;AAAA,cAAqCC,SAAO;AAAA,cAAanD,MAAI;AAAA,cAAMgF,SAASA,MAAMN,EAAaO,EAAK/S,IAAI;AAAA,cAACoN,UAAA;AAAA,YAAA,CAAA,GAAA,IAAA,GAAAO,EAAAC,CAAAA,MAAA;AAAAC,kBAAAA,KAlBtG,6BAA6BmF,EAAU,IAAI,sCAAsC,EAAE,IAAEjF,KAEjDgF,EAAK/S;AAAI6N,qBAAAA,OAAAD,EAAAzR,KAAAuX,GAAAT,GAAArF,EAAAzR,IAAA0R,EAAA,GAAAE,OAAAH,EAAA9S,KAAA2T,EAAA2E,GAAAxF,SAAAA,EAAA9S,IAAAiT,EAAA,GAAAH;AAAAA,YAAAA,GAAA;AAAA,cAAAzR,GAAA0S;AAAAA,cAAA/T,GAAA+T;AAAAA,YAAAA,CAAA,GAAAoE;AAAAA,UAAAA,GAAA;AAAA,QAAA;AAAA,MAsB1D,CAAA,GAAA,IAAA,GAAAtD,EAAAA,GAAAzC,EAED0F,GAAI;AAAA,QAAA,IAACC,OAAI;AAAExB,iBAAAA,EAAAA,EAAQU,WAAW;AAAA,QAAC;AAAA,QAAA,IAAA3E,WAAA;AAAA,iBAAAM,GAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAA,IAAA,GAAAD;AAAAA,IAAAA;AAAAA,EAAA,CAAA;AAOrC;;AC5GO,MAAMkG,KAA4BA,MAAM;AAC9C,QAAM1M,IAAQoG,EAAa,GACrB,CAACuG,GAAaC,CAAc,IAAI9R,EAAa,EAAK;AACpD+R,MAAAA;AAEJ,QAAMC,IAAmBA,MAAM;AAC9B,IAAID,KACHrC,OAAOuC,aAAaF,CAAe,GAElBrC,IAAAA,OAAOwC,WAAW,MAAM;AACnCC,YAAAA,IAAiB1Q,GAAe,yBAAyB,EAAK;AAChE,MAAA,CAACyD,EAAMoF,OAAOtI,MAAMoQ,UAAU,CAAClN,EAAMoF,OAAOtI,MAAMwO,wBAAwB2B,KAC7EL,EAAe,EAAI;AAAA,OAElB,GAAI;AAAA,EACR,GAEMO,IAAgCA,MAAM;AAC3CP,IAAAA,EAAe,EAAK;AAAA,EACrB,GAEMQ,IAAgCA,MAAM;AAC1B,IAAAN,EAAA;AAAA,EAClB,GAEMO,IAAcA,MAAM;AACzBrN,IAAAA,EAAMoF,OAAOjB,SAAS;AAAA,MAAE+I,QAAQ,CAAClN,EAAMoF,OAAOtI,MAAMoQ;AAAAA,IAAAA,CAAQ,GAC5DlN,EAAMoF,OAAOjB,SAAS;AAAA,MAAEmJ,yBAAyB;AAAA,IAAA,CAAM,GACvD7Q,GAAa,yBAAyB,EAAI;AAAA,EAC3C;AAEAhC,EAAAA,GAAa,MAAM;AAClB,IAAKuF,EAAMoF,OAAOtI,MAAMoQ,WACvBN,EAAe,EAAK,GACHE,EAAA,IAEd9M,EAAMoF,OAAOtI,MAAMwO,wBACtBsB,EAAe,EAAK;AAAA,EACrB,CACA;AAEKW,QAAAA,IAAmBA,CAACrY,MAAkB;AAC3CA,IAAAA,EAAEsY,gBAAgB,GAClBxN,EAAMoF,OAAOjB,SAAS;AAAA,MAAEmH,sBAAsB,CAACtL,EAAMoF,OAAOtI,MAAMwO;AAAAA,IAAAA,CAAsB,GACxFsB,EAAe,EAAK;AAAA,EACrB;AAEA,SAAA,EAAA,MAAA;AAAA,QAAApG,IAAAC,GAAA;AAAA9Q,WAAAA,EAAAA,iBAAA,gBAOmByX,CAA6B,GAAAzX,EAAAA,iBAAA,gBAD7BwX,CAA6B,GAAA3G,EAAAuC,UADpCsE,GAAW7G,EAAAA,GAAAP,EAOnB4B,IAAa;AAAA,MAACX,QAAM;AAAA,MAASF,MAAI;AAAA,IAAA,CAAA,GAAA,IAAA,GAAA8C,EAAAtD,IAAA,MAAA;AAAA,UAAA+F,IAAAC,EAAA,MACjCxM,EAAMoF,OAAOtI,MAAM+N,aAAa,CAAC;AAAA,aAAA,MAAjC0B,EAAA,MAAA,MAAA;AAAA,YAAAzE,IAAAgB,GAAA;AAAAhB,eAAAA,EAAAiB,UACkDwE,GAAgBzD,EAAAhC,GAChE9H,MAAAA,EAAMoF,OAAOtI,MAAM+N,UAAU,GAAA/C;AAAAA,MAAAA,GAE/B;AAAA,IAAA,GAAA,GAAA,IAAA,GAAApB,EAAAC,CAAAA,MAAA;AAAAC,UAAAA,IAbY5G,EAAMoF,OAAOtI,MAAMoQ,QAAMpG,IAK/B6F,MAAgB,SAAS;AAAG/F,aAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,eAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,OAAA8S,EAAA9S,IAAAiT,MAAA,OAAAN,EAAAjQ,MAAA2I,YAAA4H,QAAAA,CAAA,IAAAN,EAAAjQ,MAAA0S,eAAA,MAAA,IAAAtC;AAAAA,IAAAA,GAAA;AAAA,MAAAzR,GAAA0S;AAAAA,MAAA/T,GAAA+T;AAAAA,IAAAA,CAAA,GAAApB;AAAAA,QAAAP,EAUnCkE,IAAc,CAAA,CAAA,CAAA;AAGlB;AAAChB,EAAA,CAAA,OAAA,CAAA;;ACvEM,MAAMsE,KAA0BA,MAAM;AAC5C,QAAMzN,IAAQoG,EAAa,GAErBsH,IAAmBA,MAAM;AAC9B1N,IAAAA,EAAMoF,OAAOjB,SAAS;AAAA,MAAEwJ,cAAc;AAAA,QAAE,GAAG3N,EAAMoF,OAAOtI,MAAM6Q;AAAAA,QAAcC,MAAM;AAAA,MAAA;AAAA,IAAM,CAAG;AAAA,EAC5F,GAEMC,IAAWA,MAAM;AACtB,YAAQ7N,EAAMoF,OAAOtI,MAAM6Q,aAAaxM,MAAI;AAAA,MAC3C,KAAK;AACJ,eAAOnB,EAAMoF,OAAOtI,MAAMgR,KAAKH,aAAaI;AAAAA,MAC7C,KAAK;AACJ,eAAO/N,EAAMoF,OAAOtI,MAAMgR,KAAKH,aAAaK;AAAAA,MAC7C;AACQ,eAAA;AAAA,IAAA;AAAA,EAEV;AAEA,UAAA,MAAA;AAAA,QAAAxH,IAAAC,GAAAqB,GAAAA,IAAAtB,EAAAuB,YAAAS,IAAAV,EAAAW,aAAAC,IAAAF,EAAAT,YAAAc,IAAAH,EAAAD;AAAAjC,WAAAA,EAAAA,GAAAP,EAOG8D,GAAM;AAAA,MAAA,OAAA;AAAA,MAENC,SAAO;AAAA,MACPnD,MAAI;AAAA,MACJgF,SAAS6B;AAAAA,MAAgB,IACzBO,QAAK;AAAA,eAAEjO,EAAMoF,OAAOtI,MAAMgR,KAAKH,aAAaO;AAAAA,MAAS;AAAA,MAAA,IAAA/H,WAAA;AAAA,eAAAF,EAEpDoC,IAAK;AAAA,UAACxB,MAAM;AAAA,QAAA,CAAE;AAAA,MAAA;AAAA,IAAA,CAAA,GAAAiB,CAAA,GAAAgC,EAAAhC,IAAA,MAAA;AAAAyE,UAAAA,IAAAC,EAAA,MAGdxM,EAAMoF,OAAOtI,MAAM6Q,aAAaxM,SAAS,SAAS;AAAA,aAAA,MAAlDoL,EAAAA,IAAAtG,EACCkC,IAAe;AAAA,QAACtB,MAAM;AAAA,MAAE,CAAA,KAAA,MAAA;AAAAsH,YAAAA,IAAA3B,EAAA,MACtBxM,EAAMoF,OAAOtI,MAAM6Q,aAAaxM,SAAS,OAAO;AAAA,eAAA,MAAhDgN,EAAAA,IAAAlI,EACFmC,IAAW;AAAA,UAACvB,MAAM;AAAA,QAAE,CAAA,IAClB;AAAA,MAAA,GAAI;AAAA,IAAA,IAAA,GAAAiD,EAAApB,GAG8BmF,CAAQ,GAAA/D,EAAAjB,GAAA;;AACN7I,cAAAA,IAAAA,EAAMoF,OAAOtI,MAAM6Q,iBAAnB3N,gBAAAA,EAAiCqB;AAAAA,KAAO,GAAAqF,EAAAC,CAAAA,MAAA;AAAA,UAAAC,IAtBtE5G,EAAMoF,OAAOtI,MAAM6Q,aAAaxM,MAAI2F,IACnC,CAAC9G,EAAMoF,OAAOtI,MAAM6Q,aAAaxM,MAAI4F,IACpC,CAAC/G,EAAMoF,OAAOtI,MAAM6Q,aAAaC;AAAIhH,aAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,aAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAhB,GAAAG,cAAAA,EAAA9S,IAAAiT,CAAA,GAAAC,MAAAJ,EAAA9T,KAAA2U,EAAAhB,GAAAG,eAAAA,EAAA9T,IAAAkU,CAAA,GAAAJ;AAAAA,IAAAA,GAAA;AAAA,MAAAzR,GAAA0S;AAAAA,MAAA/T,GAAA+T;AAAAA,MAAA/U,GAAA+U;AAAAA,IAAAA,CAAA,GAAApB;AAAAA,EAAAA,GAAA;AAwBrD;;AC/CO,MAAM4H,KAA4BA,MAAM;AAC9C,QAAMpO,IAAQoG,EAAa,GACrB6G,IAAiB1Q,GAAe,yBAAyB,EAAK,GAE9D8R,IAAcA,CAACnZ,MAAkC;AACtDA,IAAAA,EAAEsY,gBAAgB,GAClBxN,EAAMoF,OAAOjB,SAAS;AAAA,MAAEmJ,yBAAyB;AAAA,IAAA,CAAM,GACvD7Q,GAAa,yBAAyB,EAAI;AAAA,EAC3C,GAEM6R,IAAaA,MAAM;AACxBtO,IAAAA,EAAMoF,OAAOjB,SAAS;AAAA,MAAE+I,QAAQ;AAAA,IAAA,CAAM,GACtClN,EAAMoF,OAAOjB,SAAS;AAAA,MAAEmJ,yBAAyB;AAAA,IAAA,CAAM,GACvD7Q,GAAa,yBAAyB,EAAI;AAAA,EAC3C;AAEA,SAAIwQ,IACI,QAGR,MAAA;AAAA,QAAAzG,IAAAC,GAAA,GAAAqB,IAAAtB,EAAAuB,YAAAS,IAAAV,EAAAW;AAAAjC,WAAAA,EAAAuC,UAIWuF,GAAU/X,EAAAA,MAAA2I,YAAA,UAAA,MAAA,GAAA3I,EAAAA,MAAA2I,YAAA,SAAA,MAAA,GAAAsH,EAAAA,GAOlBxG,MAAAA,EAAMoF,OAAOtI,MAAMgR,KAAKS,eAAeT,MAAItF,CAAA,GAAAA,EAAAgG,YAOhCtZ,CAAKA,MAAAA,EAAEkB,QAAQ,WAAWiY,EAAYnZ,CAAC,GAACsT,EAAAO,UAJ1CsF,GAAW7F,EAAAA,GAAAvC,EAMnBoC,IAAK;AAAA,MAACxB,MAAM;AAAA,MAAIO,aAAa;AAAA,IAAA,CAAC,CAAA,GAAAV,EAAAC,CAAAA,MAAA;AAAAC,UAAAA,IAjBnB5G,EAAMoF,OAAOtI,MAAMwQ,yBAAuBxG,IAc1C9G,EAAMoF,OAAOtI,MAAMgR,KAAKS,eAAeE;AAAc7H,aAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,eAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAgB,GAAA7B,cAAAA,EAAA9S,IAAAiT,CAAA,GAAAH;AAAAA,IAAAA,GAAA;AAAA,MAAAzR,GAAA0S;AAAAA,MAAA/T,GAAA+T;AAAAA,IAAAA,CAAA,GAAApB;AAAAA,EAAAA,GAAA;AAOrE;AAAC2C,EAAA,CAAA,SAAA,SAAA,CAAA;;ACvCM,MAAMuF,KAA+B9X,CAASA,MAAA;AACpD,QAAM+X,IAAahU,EAAW,MAAM/D,EAAM+S,OAAO/S,EAAMgY,eAAe;AAEtE3I,SAAAA,CAAAA,EAEG0F,GAAI;AAAA,IAAA,IAACC,OAAI;AAAA,aAAEhV,EAAMuK,SAAS;AAAA,IAAW;AAAA,IAAA,IAAAgF,WAAA;AAAAF,aAAAA,EACpC4I,IAAc5E,EAAKrT,GAAK;AAAA,QAAA,IAAE+X,aAAU;AAAA,iBAAEA,EAAW;AAAA,QAAA;AAAA,MAAC,CAAA,CAAA;AAAA,IAAA;AAAA,EAAA,CAAA1I,GAAAA,EAGnD0F,GAAI;AAAA,IAAA,IAACC,OAAI;AAAA,aAAEhV,EAAMuK,SAAS;AAAA,IAAM;AAAA,IAAA,IAAAgF,WAAA;AAAAF,aAAAA,EAC/B6I,IAAS7E,EAAKrT,GAAK;AAAA,QAAA,IAAE+X,aAAU;AAAA,iBAAEA,EAAW;AAAA,QAAA;AAAA,MAAC,CAAA,CAAA;AAAA,IAAA;AAAA,EAAA,CAAA,CAAA;AAIlD,GAEME,KAAkEjY,CAASA,MAAA;AAChF,QAAMmY,IAAOpU,EAAW,MAAM4H,GAAkB3L,EAAM4L,MAAM,CAAC;AAC7D,SAAAyD,EACE0F,GAAI;AAAA,IAAA,IAACC,OAAI;AAAA,aAAEmD,EAAK;AAAA,IAAC;AAAA,IAAA,IAAA5I,WAAA;AAAA,UAAAK,IAAAC,GAAA;AAAAD,aAAAA,EAAAuC,UAgBP,MAAMnS;;AAAAA,gBAAAA,IAAAA,EAAMoY,iBAANpY,gBAAAA,EAAAA,KAAAA,GAAqBA,EAAM+S;AAAAA,SAAGjD,EAAAC,CAAAA,MAAA;AAAAC,YAAAA,IAb9BhQ,EAAM+S,IAAE7C,IACRlQ,EAAM+X,YAAU5H,IAC5BgI,IAAQE,GAAChI,IACT8H,EAAQG,EAAAA,GAAC/H,IACL4H,EAAK,EAAGjM,OAAKuE,IACZ0H,IAAQhM,QAAMwE,IAEd3Q,EAAM0J,OAAK6O,IACL9O,EAAWgJ,UAAUjC,aAAWgI,IACrCxY,EAAM+X,aAAatO,EAAWgJ,UAAUgG,QAAQC,WAAWjP,EAAWgJ,UAAUgG,QAAQE,SAAOC,IAEtF5Y,EAAM+X,aAAa,QAAQ,QAAMc,IAC3C7Y,EAAM+X,aAAa,SAAS;AAAS/H,eAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,iBAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,KAAA2T,EAAAhB,GAAAG,iBAAAA,EAAA9S,IAAAiT,CAAA,GAAAC,MAAAJ,EAAA9T,KAAA2U,EAAAhB,GAAAG,KAAAA,EAAA9T,IAAAkU,CAAA,GAAAE,MAAAN,EAAAc,KAAAD,EAAAhB,GAAAG,KAAAA,EAAAc,IAAAR,CAAA,GAAAE,MAAAR,EAAAjT,KAAA8T,EAAAhB,GAAAG,SAAAA,EAAAjT,IAAAyT,CAAA,GAAAE,MAAAV,EAAAe,KAAAF,EAAAhB,GAAAG,UAAAA,EAAAe,IAAAL,CAAA,GAAAE,MAAAZ,EAAAjQ,KAAA8Q,EAAAhB,GAAAG,UAAAA,EAAAjQ,IAAA6Q,CAAA,GAAA4H,MAAAxI,EAAArO,KAAAkP,EAAAhB,GAAAG,gBAAAA,EAAArO,IAAA6W,CAAA,GAAAC,MAAAzI,EAAAlG,KAAA+G,EAAAhB,GAAAG,WAAAA,EAAAlG,IAAA2O,CAAA,GAAAI,MAAA7I,EAAA+I,KAAAlI,EAAAhB,GAAAG,oBAAAA,EAAA+I,IAAAF,CAAA,GAAAC,MAAA9I,EAAAxR,KAAAqS,EAAAhB,GAAAG,UAAAA,EAAAxR,IAAAsa,CAAA,GAAA9I;AAAAA,MAAAA,GAAA;AAAA,QAAAzR,GAAA0S;AAAAA,QAAA/T,GAAA+T;AAAAA,QAAA/U,GAAA+U;AAAAA,QAAAH,GAAAG;AAAAA,QAAAlU,GAAAkU;AAAAA,QAAAF,GAAAE;AAAAA,QAAAlR,GAAAkR;AAAAA,QAAAtP,GAAAsP;AAAAA,QAAAnH,GAAAmH;AAAAA,QAAA8H,GAAA9H;AAAAA,QAAAzS,GAAAyS;AAAAA,MAAAA,CAAA,GAAApB;AAAAA,IAAAA;AAAAA,EAAA,CAAA;AAKjD,GAEMsI,KAA6DlY,CAASA,MAAA;AAC3E,QAAMmC,IAAO4B,EAAW,MAAMgI,GAAkB/L,EAAM4L,MAAM,CAAC;AAC7D,SAAAyD,EACE0F,GAAI;AAAA,IAAA,IAACC,OAAI;AAAA,aAAE7S,EAAK;AAAA,IAAC;AAAA,IAAA,IAAAoN,WAAA;AAAA,UAAA2B,IAAAgB,GAAA;AAAAhB,aAAAA,EAAAiB,UAaP,MAAMnS;;AAAAA,gBAAAA,IAAAA,EAAMoY,iBAANpY,gBAAAA,EAAAA,KAAAA,GAAqBA,EAAM+S;AAAAA,SAAGjD,EAAAC,CAAAA,MAAA;AAAA,YAAAgJ,IAV9B/Y,EAAM+S,IAAEiG,IACRhZ,EAAM+X,YAAUkB,IAC5B9W,EAAO+W,GAAAA,IAEFlZ,EAAM0J,OAAKyP,IACL1P,EAAWtH,KAAKqO,aAAW4I,IAGhCpZ,EAAM+X,aAAatO,EAAWtH,KAAKsW,QAAQC,WAAWjP,EAAWtH,KAAKsW,QAAQE,SAAOU,IACtFrZ,EAAM+X,aAAa,SAAS;AAASgB,eAAAA,MAAAhJ,EAAAzR,KAAAsS,EAAAM,GAAAnB,iBAAAA,EAAAzR,IAAAya,CAAA,GAAAC,MAAAjJ,EAAA9S,KAAA2T,EAAAM,GAAAnB,iBAAAA,EAAA9S,IAAA+b,CAAA,GAAAC,MAAAlJ,EAAA9T,KAAA2U,EAAAM,GAAAnB,KAAAA,EAAA9T,IAAAgd,CAAA,GAAAC,MAAAnJ,EAAAc,KAAAD,EAAAM,GAAAnB,UAAAA,EAAAc,IAAAqI,CAAA,GAAAC,MAAApJ,EAAAjT,KAAA8T,EAAAM,GAAAnB,gBAAAA,EAAAjT,IAAAqc,CAAA,GAAAC,MAAArJ,EAAAe,KAAAF,EAAAM,GAAAnB,WAAAA,EAAAe,IAAAsI,CAAA,GAAAC,MAAAtJ,EAAAjQ,KAAA8Q,EAAAM,GAAAnB,UAAAA,EAAAjQ,IAAAuZ,CAAA,GAAAtJ;AAAAA,MAAAA,GAAA;AAAA,QAAAzR,GAAA0S;AAAAA,QAAA/T,GAAA+T;AAAAA,QAAA/U,GAAA+U;AAAAA,QAAAH,GAAAG;AAAAA,QAAAlU,GAAAkU;AAAAA,QAAAF,GAAAE;AAAAA,QAAAlR,GAAAkR;AAAAA,MAAAA,CAAA,GAAAE;AAAAA,IAAAA;AAAAA,EAAA,CAAA;AAKjD;AAACqB,EAAA,CAAA,OAAA,CAAA;;ACnEM,MAAM+G,KAA4BA,MAAM;AAC9C,QAAMlQ,IAAQoG,EAAa,GAErB+J,IAAcxV,EAAW,MAE7BqF,EAAMmF,QAAQrI,MAAMqT,eACpBnQ,EAAMmF,QAAQrI,MAAMsT,cAAclB,KAClClP,EAAMmF,QAAQrI,MAAMsT,cAAcnB,KAClCjP,EAAMoF,OAAOtI,MAAMoQ,UACnB,CAACrL,GAAe,CAEjB;AAED,SAAAoE,EACE0F,GAAI;AAAA,IAAA,IAACC,OAAI;AAAA,aAAEuE,EAAY;AAAA,IAAC;AAAA,IAAA,IAAAhK,WAAA;AAAA,UAAAK,IAAAC,GAAA;AAAAqD,aAAAA,EAAAtD,GAStBxG,MAAAA,EAAMoF,OAAOtI,MAAMgR,KAAKuC,eAAevC,IAAI,GAAApH,EAAAC,CAAAA,MAAA;AAAA,YAAAC,IAJtC,GAAG5G,EAAMmF,QAAQrI,MAAMsT,cAAclB,IAAI,EAAE,MAAIpI,IAC9C,GAAG9G,EAAMmF,QAAQrI,MAAMsT,cAAcnB,IAAI,EAAE;AAAIrI,eAAAA,MAAAD,EAAAzR,OAAAyR,EAAAzR,IAAA0R,MAAA,OAAAJ,EAAAjQ,MAAA2I,YAAA0H,OAAAA,CAAA,IAAAJ,EAAAjQ,MAAA0S,eAAA,KAAA,IAAAnC,MAAAH,EAAA9S,OAAA8S,EAAA9S,IAAAiT,MAAA,OAAAN,EAAAjQ,MAAA2I,YAAA4H,QAAAA,CAAA,IAAAN,EAAAjQ,MAAA0S,eAAA,MAAA,IAAAtC;AAAAA,MAAAA,GAAA;AAAA,QAAAzR,GAAA0S;AAAAA,QAAA/T,GAAA+T;AAAAA,MAAAA,CAAA,GAAApB;AAAAA,IAAAA;AAAAA,EAAA,CAAA;AAO1D;;ACvBO,MAAM8J,KAA0BA,MAAM;AAC5C,QAAMtQ,IAAQoG,EAAa;AACvBmK,MAAAA;AACJ,QAAM,CAACC,GAAgBC,CAAiB,IAAI3V,EAAa;AAAA,IAAEmU,GAAGzE,OAAOkG;AAAAA,IAASxB,GAAG1E,OAAOmG;AAAAA,EAAAA,CAAS;AAMrE,EAAAjV,EAAA;AAAA,IAC3BC,OAAO;AAAA,IACPF,UANoBmV,MAAM;AACR,MAAAH,EAAA;AAAA,QAAExB,GAAGzE,OAAOkG;AAAAA,QAASxB,GAAG1E,OAAOmG;AAAAA,MAAAA,CAAS;AAAA,IAC3D;AAAA,EAIWC,CACV;AAED,QAAMrF,IAAeA,MAAM;AACtBvL,IAAAA,EAAMmF,QAAQrI,MAAM8R,mBACvB5O,EAAMmF,QAAQhB,SAAS;AAAA,MACtBV,QAAQzD,EAAMmF,QAAQrI,MAAM2G,OAAOoN,OAAOnN,CAASA,MAAAA,EAAMiG,OAAO3J,EAAMmF,QAAQrI,MAAM8R,eAAe;AAAA,MACnGA,iBAAiB;AAAA,IAAA,CACjB;AAAA,EAEH,GAEMkC,IAAgBnW,EAAW,MAC3BqF,EAAMmF,QAAQrI,MAAM8R,kBAClB5O,EAAMmF,QAAQrI,MAAM2G,OAAOsN,KAAKrN,CAASA,MAAAA,EAAMiG,OAAO3J,EAAMmF,QAAQrI,MAAM8R,eAAe,IAD/C,IAEjD,GAEK5I,IAAWrL,EAAW,MAAM;AACjC,UAAM+I,IAAQoN,EAAc,GACtBE,IAAcT,KAAAA,gBAAAA,EAAYU;AAEhC,QAAI,CAACvN,KAAS,CAACsN,EAAoB,QAAA;AAEnC,QAAIpO,IAAsB;AAEtBc,QAAAA,EAAMvC,SAAS,aAAa;AACzB4N,YAAAA,IAAOxM,GAAkBmB,EAAMlB,MAAM;AACvC,UAAA,CAACuM,EAAa,QAAA;AACV,MAAAnM,IAAA;AAAA,QACPqM,GAAGF,EAAKE,IAAIF,EAAKjM,QAAQ;AAAA,QACzBoM,GAAGH,EAAKG;AAAAA,MACT;AAAA,IAAA,WACUxL,EAAMvC,SAAS,UAAUuC,EAAMlB,OAAOsI,SAAS;AACjD,MAAAlI,IAAA;AAAA,QACPqM,GAAGvL,EAAMlB,OAAO,CAAC,EAAEyM;AAAAA,QACnBC,GAAGxL,EAAMlB,OAAO,CAAC,EAAE0M;AAAAA,MACpB;AAAA;AAEO,aAAA;AAGR,UAAMgC,IAAU,GAEVC,IAASX,EAAe;AACvB,WAAA;AAAA,MACNvB,GAAGmC,KAAKC,IAAIL,EAAYlO,QAAQ,IAAIoO,GAASE,KAAKE,IAAI9G,OAAO+G,aAAaP,EAAYlO,QAAQ,IAAIoO,GAAStO,EAAMqM,IAAIkC,EAAOlC,CAAC,CAAC;AAAA,MAC9HC,GAAGkC,KAAKC,IAAIL,EAAYjO,SAASmO,GAASE,KAAKE,IAAI9G,OAAOgH,cAAcN,GAAStO,EAAMsM,IAAIiC,EAAOjC,CAAC,CAAC;AAAA,IACrG;AAAA,EAAA,CACA;AAED,UAAA,MAAA;AAAA,QAAA1I,IAAAC,GAAA,GAAAgL,IAEOlB;AAAU,kBAAAkB,KAAAC,aAAAA,EAAAD,GAAAjL,CAAA,IAAV+J,IAAU/J,GAAAA,EAAAA,GAAAP,EASd8D,GAAM;AAAA,MAAC8B,SAASN;AAAAA,MAAc1E,MAAI;AAAA,MAAMmD,SAAO;AAAA,MAAaiE,OAAK;AAAA,MAAA,IAAA9H,WAAA;AAAA,eAAAF,EAChEiC,IAAS;AAAA,UAACrB,MAAM;AAAA,QAAA,CAAE;AAAA,MAAA;AAAA,IAAA,CAAA,CAAA,GAAAH,EAAAC,CAAAA,MAAA;;AAAAC,UAAAA,IAPZ,CAACZ,KAAUc,IAEZd,MAAa,IAAGA,IAAAA,EAAS,MAATA,gBAAAA,EAAYiJ,CAAC,OAAO,KAAGlI,IACxCf,MAAa,IAAGA,IAAAA,QAAAA,gBAAAA,EAAYkJ,CAAC,OAAO;AAAGtI,aAAAA,MAAAD,EAAAzR,MAAAsR,EAAAmL,SAAAhL,EAAAzR,IAAA0R,IAAAE,MAAAH,EAAA9S,OAAA8S,EAAA9S,IAAAiT,MAAA,OAAAN,EAAAjQ,MAAA2I,YAAA4H,QAAAA,CAAA,IAAAN,EAAAjQ,MAAA0S,eAAA,MAAA,IAAAlC,MAAAJ,EAAA9T,OAAA8T,EAAA9T,IAAAkU,MAAA,OAAAP,EAAAjQ,MAAA2I,YAAA6H,OAAAA,CAAA,IAAAP,EAAAjQ,MAAA0S,eAAA,KAAA,IAAAtC;AAAAA,IAAAA,GAAA;AAAA,MAAAzR,GAAA0S;AAAAA,MAAA/T,GAAA+T;AAAAA,MAAA/U,GAAA+U;AAAAA,IAAAA,CAAA,GAAApB;AAAAA,EAAAA,GAAA;AAQhD;;AC9EO,MAAMoL,KAA0BA,MAAM;AAC5C,QAAM5R,IAAQoG,EAAa;AACvByL,MAAAA;AAEJ9V,SAAAA,GAAQ,MAAM;AACb8V,IAAAA,KAAAA,QAAAA,EAA0Blc,iBAAiB,aAAaqK,EAAMmF,QAAQX,QAAQsN,aAC9ED,KAAAA,QAAAA,EAA0Blc,iBAAiB,WAAWqK,EAAMmF,QAAQX,QAAQuN,YAC5EF,KAAAA,QAAAA,EAA0Blc,iBAAiB,aAAaqK,EAAMmF,QAAQX,QAAQsN,YAAY;AAAA,MAAEE,SAAS;AAAA,IAAA,IACrGH,KAAAA,QAAAA,EAA0Blc,iBAAiB,YAAYqK,EAAMmF,QAAQX,QAAQuN;AAAAA,EAAS,CACtF,GAED/W,EAAU,MAAM;AACf6W,IAAAA,KAAAA,QAAAA,EAA0BI,oBAAoB,aAAajS,EAAMmF,QAAQX,QAAQsN,aACjFD,KAAAA,QAAAA,EAA0BI,oBAAoB,WAAWjS,EAAMmF,QAAQX,QAAQuN,YAC/EF,KAAAA,QAAAA,EAA0BI,oBAAoB,aAAajS,EAAMmF,QAAQX,QAAQsN,aACjFD,KAAAA,QAAAA,EAA0BI,oBAAoB,YAAYjS,EAAMmF,QAAQX,QAAQuN;AAAAA,EAAS,CACzF,IAED,MAAA;AAAA,QAAAvL,IAAAC,GAAA,GAAAqB,IAAAtB,EAAAuB,YAAAS,IAAAV,EAAAC,YAAA0J,IAEOI;AAAwB,kBAAAJ,KAAAC,aAAAA,EAAAD,GAAAjL,CAAA,IAAxBqL,IAAwBrL,GAAAsD,EAAAtD,GAAAP,EAM5BiK,SAAcpI,CAAA,GAAAgC,EAAAtD,GAAAP,EACdqK,SAAYxI,CAAA,GAAAoK,EAAApK,GAwBA9H,YAAAA,EAAMmF,QAAQX,QAAQ2N,aAAW,EAAA,GAAAD,EAAApK,GAD/B9H,cAAAA,EAAMmF,QAAQX,QAAQ2N,WAAW,GAAAD,EAAApK,GADjC9H,cAAAA,EAAMmF,QAAQX,QAAQ4N,WAAW,GAAAtK,EAAAuK,cAJlCnd,CAAKA,MAAA;AACjBA,MAAAA,EAAEod,eAAe,GACXnN,EAAAA,QAAQX,QAAQsN,WAAW5c,CAAC;AAAA,IACnC,GAACgd,EAAApK,GAJY9H,aAAAA,EAAMmF,QAAQX,QAAQsN,YAAU,EAAA,GAAAhK,EAAAyK,eAN/Brd,CAAKA,MAAA;AAClBA,MAAAA,EAAEod,eAAe,GACXnN,EAAAA,QAAQX,QAAQgO,YAAYtd,CAAC,GAC7BiQ,EAAAA,QAAQX,QAAQ4N,YAAYld,CAAC,GACnC8K,EAAMmF,QAAQhB,SAAS;AAAA,QAAEgM,aAAa;AAAA,QAAOsC,UAAU;AAAA,MAAA,CAAM;AAAA,IAC9D,GAAC3K,EAAA4K,cATYxd,CAAKA,MAAA;AACXiQ,MAAAA,EAAAA,QAAQX,QAAQgO,YAAYtd,CAAC,GACnC8K,EAAMmF,QAAQhB,SAAS;AAAA,QAAEgM,aAAa;AAAA,QAAOsC,UAAU;AAAA,MAAA,CAAM;AAAA,IAC9D,GAAC3K,EAAAA,GAAA7B,EAiCA0C,IAAG;AAAA,MAAA,IAACC,OAAI;AAAE5I,eAAAA,EAAMmF,QAAQrI,MAAM2G;AAAAA,MAAM;AAAA,MAAA0C,UACnCzC,CAAKuC,MAAAA,EACJyI,IAAK;AAAA,QAAA,IACL/E,KAAE;AAAA,iBAAEjG,EAAMiG;AAAAA,QAAE;AAAA,QAAA,IACZxI,OAAI;AAAA,iBAAEuC,EAAMvC;AAAAA,QAAI;AAAA,QAAA,IAChBb,QAAK;AAAA,iBAAEoD,EAAMpD;AAAAA,QAAK;AAAA,QAAA,IAClBkC,SAAM;AAAA,iBAAEkB,EAAMlB;AAAAA,QAAM;AAAA,QAAA,IACpBoM,kBAAe;AAAE5O,iBAAAA,EAAMmF,QAAQrI,MAAM8R;AAAAA,QAAe;AAAA,QAAA,IACpDI,eAAY;AAAEhP,iBAAAA,EAAMmF,QAAQX,QAAQmO;AAAAA,QAAAA;AAAAA,MAAgB,CAAA;AAAA,IAErD,CAAA,GAAA,IAAA,GAAA7K,EAAAA,GAAA7B,EAIDyI,IAAK;AAAA,MACL/E,IAAE;AAAA,MAAA,IACFxI,OAAI;AAAEnB,eAAAA,EAAMmF,QAAQrI,MAAM8M;AAAAA,MAAY;AAAA,MAAA,IACtCtJ,QAAK;AAAEN,eAAAA,EAAMmF,QAAQrI,MAAMkM;AAAAA,MAAa;AAAA,MAAA,IACxCxG,SAAM;AAAExC,eAAAA,EAAMmF,QAAQrI,MAAM0G;AAAAA,MAAa;AAAA,MAAA,IACzCoL,kBAAe;AAAE5O,eAAAA,EAAMmF,QAAQrI,MAAM8R;AAAAA,MAAAA;AAAAA,IAAe,CAAA,GAAA,IAAA,GAAAlI,EAAAC,CAAAA,MAAA;AAAA,UAAAC,IAlE7C5G,EAAMmF,QAAQrI,MAAM8V,QAAM9L,IAiC9BxD,GACF;AAAA,QACCR,OAAO9C,EAAMoF,OAAOtI,MAAMyG,WAAWT;AAAAA,QACrCC,QAAQ/C,EAAMoF,OAAOtI,MAAMyG,WAAWR;AAAAA,MAAAA,GAEvC/C,EAAMmF,QAAQrI,MAAM0G,eACpBxD,EAAMmF,QAAQrI,MAAM2G,MACrB;AAACmD,aAAAA,MAAAD,EAAAzR,OAAAyR,EAAAzR,IAAA0R,MAAA,OAAAJ,EAAAjQ,MAAA2I,YAAA0H,UAAAA,CAAA,IAAAJ,EAAAjQ,MAAA0S,eAAA,QAAA,IAAAnC,MAAAH,EAAA9S,KAAA2T,EAAAgB,GAAA7B,KAAAA,EAAA9S,IAAAiT,CAAA,GAAAH;AAAAA,IAAAA,GAAA;AAAA,MAAAzR,GAAA0S;AAAAA,MAAA/T,GAAA+T;AAAAA,IAAAA,CAAA,GAAApB;AAAAA,EAAAA,GAAA;AA+BN;AAAC2C,EAAA,CAAA,aAAA,cAAA,aAAA,aAAA,UAAA,CAAA;;AC7FM,MAAM0J,KAA0BA,MAAM;AACxCC,MAAAA;AACJ,QAAM9S,IAAQoG,EAAa,GAErB2M,IAAe,OAAO7d,MAAmB;AAC9CA,IAAAA,EAAEod,eAAe;AAEXnP,UAAAA,IAAa,MAAMD,GAAkB,GAErCrK,IAAwB;AAAA,MAC7ByT,SAAStM,EAAMkF,SAASpI,MAAMwP;AAAAA,MAC9BnJ,YAAAA;AAAAA,MACA6P,UAAU;AAAA,QACTC,KAAKzI,OAAOC,SAASY;AAAAA,QACrB6H,WAAWC,UAAUD;AAAAA,QACrBE,YAAW,oBAAIC,KAAK,GAAEC,YAAY;AAAA,QAClCC,aAAa;AAAA,UACZzQ,OAAO0H,OAAO+G;AAAAA,UACdxO,QAAQyH,OAAOgH;AAAAA,UACfgC,aAAahJ,OAAOiJ,OAAO3Q;AAAAA,UAC3B4Q,cAAclJ,OAAOiJ,OAAO1Q;AAAAA,QAAAA;AAAAA,MAE9B;AAAA,MACA4Q,SAAS/R,GAAiB;AAAA,IAC3B;AAEM4C,IAAAA,EAAAA,QAAQoP,OAAO/a,CAAI;AAAA,EAC1B;AAEA4B,EAAAA,GAAa,MAAM;AAClB,IAAIqY,KAAe9S,EAAMoF,OAAOtI,MAAMoQ,UACrC4F,EAAYe,MAAM;AAAA,EACnB,CACA;AAEKC,QAAAA,IAAWA,CAAC5e,MAAkB;AACnCA,IAAAA,EAAEsY,gBAAgB,GAClBxN,EAAMkF,SAASf,SAAS;AAAA,MAAEwI,aAAa;AAAA,IAAA,CAAM;AAAA,EAC9C,GAEMoH,IAAWA,MAAM;AACtB/T,IAAAA,EAAMkF,SAASf,SAAS;AAAA,MAAEwI,aAAa;AAAA,IAAA,CAAO;AAAA,EAC/C;AAEA,UAAA,MAAA;AAAA,QAAAnG,IAAAC,MAAAqB,IAAAtB,EAAAuB,YAAAS,IAAAV,EAAAC,YAAAW,IAAAF,EAAAT,YAAAc,IAAAH,EAAAD,aAAAuD,IAAAxD,EAAAC;AAAAjC,IAAAA,EAAAuC,UAKW,MAAM/I,EAAMkF,SAASpI,MAAM6P,eAAeoH,EAAS,GAACpe,EAAAA,iBAAA,UAGfod,CAAY,GAAAjJ,EAAApB,GAEvB1I,MAAAA,EAAMoF,OAAOtI,MAAMgR,KAAKkG,aAAa/F,KAAK,GAAApF,EAAAA,GAAA5C,EAEzE8D,GAAM;AAAA,MAAC5I,MAAI;AAAA,MAAU8M,OAAK;AAAA,MAAajE,SAAO;AAAA,MAAanD,MAAI;AAAA,MAAMgF,SAASiI;AAAAA,MAAQ,IAAA3N,WAAA;AAAA,eAAAF,EACrFM,IAAgB;AAAA,UAACM,MAAM;AAAA,QAAA,CAAE;AAAA,MAAA;AAAA,IAAA,CAAA,GAAA,IAAA,GAAAgC,EAAAA,GAAA5C,EAE1B8D,GAAM;AAAA,MAAC5I,MAAI;AAAA,MAAU8M,OAAK;AAAA,MAAcjE,SAAO;AAAA,MAAanD,MAAI;AAAA,MAAMgF,SAASA,MAAM7L,EAAMoF,OAAOjB,SAAS;AAAA,QAAE+I,QAAQ;AAAA,MAAA,CAAO;AAAA,MAAC,IAAA/G,WAAA;AAAA,eAAAF,EAC5HoC,IAAK;AAAA,UAACxB,MAAM;AAAA,QAAA,CAAE;AAAA,MAAA;AAAA,IAAA,CAAA,GAAA,IAAA,GAAAmF,EAAAiI,UAUR/e,CAAAA,MAAK8K,EAAMkF,SAASf,SAAS;AAAA,MAAEmI,SAASpX,EAAEgf,cAAc3e;AAAAA,IAAAA,CAAO;AAAC,QAAAkc,IAJpEqB;AAAW,kBAAArB,KAAAC,aAAAA,EAAAD,GAAAzF,CAAA,IAAX8G,IAAW9G,GAAAlE,EAAAA,GAAA7B,EAQhB8D,GAAM;AAAA,MAAC5I,MAAI;AAAA,MAAU6I,SAAO;AAAA,MAAWnD,MAAI;AAAA,MAAMtQ,OAAO;AAAA,QAAEuM,OAAO;AAAA,MAAO;AAAA,MAAC,IAAAqD,WAAA;AAAA,eACxEnG,EAAMoF,OAAOtI,MAAMgR,KAAKkG,aAAaG;AAAAA,MAAAA;AAAAA,IAAY,CAAA,GAAA,IAAA,GAAAzN,EAAAC,CAAAA,MAAA;AAAA,UAAAC,IA5BpC5G,EAAMkF,SAASpI,MAAM6P,aAAW7F,IAG/B9G,EAAMkF,SAASpI,MAAM6P,cAAc,YAAY,WAAS5F,IAmB1D/G,EAAMoF,OAAOtI,MAAMgR,KAAKkG,aAAaI;AAAWxN,aAAAA,MAAAD,EAAAzR,KAAAsS,EAAAhB,GAAAG,kBAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,OAAA8S,EAAA9S,IAAAiT,MAAA,OAAAN,EAAAjQ,MAAA2I,YAAA4H,UAAAA,CAAA,IAAAN,EAAAjQ,MAAA0S,eAAA,QAAA,IAAAlC,MAAAJ,EAAA9T,KAAA2U,EAAAwE,GAAArF,eAAAA,EAAA9T,IAAAkU,CAAA,GAAAJ;AAAAA,IAAAA,GAAA;AAAA,MAAAzR,GAAA0S;AAAAA,MAAA/T,GAAA+T;AAAAA,MAAA/U,GAAA+U;AAAAA,IAAAA,CAAA,GAAAlB,EAAA,MAAAsF,EAAAzW,QADtDyK,EAAMkF,SAASpI,MAAMwP,OAAO,GAAA9F;AAAAA,EAAAA,GAAA;AAYxC;AAAC2C,EAAA,CAAA,SAAA,OAAA,CAAA;;ACzEM,MAAMkL,KAAkCzd,CAASA,MACvDqP,EACE9L,IAAM;AAAA,EAACC,WAAS;AAAA,EAAA,IAACC,QAAK;AAAA,WAAEpF,SAASqf;AAAAA,EAAI;AAAA,EAAA,IAAAnO,WAAA;AAAAF,WAAAA,EACpCL,IAAYqE,EAAKrT,GAAK;AAAA,MAAA,IAAAuP,WAAA;AAAA,eAAAF,EACrBsO,IAAQ;AAAA,UAAA,IAAApO,WAAA;AAAAF,mBAAAA,CAAAA,EACPuO,IAAU;AAAA,cAAA,IAAC3O,eAAY;AAAA,uBAAEjP,EAAMiP;AAAAA,cAAAA;AAAAA,YAAaI,CAAAA,GAAAA,EAC5CwO,IAAa,CAAA,CAAA,CAAA;AAAA,UAAA;AAAA,QAAA,CAAA;AAAA,MAAA;AAAA,IAAA,CAAA,CAAA;AAAA,EAAA;AAAA,CAAA,GAObD,KAAkD5d,CAASA,MAAA;AAChE,QAAM,CAAC8d,GAAeC,CAAgB,IAAI7Z,EAAa,EAAE;AAEzDL,SAAAA,GAAa,MAAM;AAClB,UAAMma,IAAM;AAAA;AAAA,wBAEUhe,EAAMiP,YAAY;AAAA,6BACblF,GAAiB/J,EAAMiP,YAAY,CAAC;AAAA;AAAA;AAG/D8O,IAAAA,EAAiBC,CAAG;AAAA,EAAA,CACpB,IAED,MAAA;AAAA,QAAApO,IAAAC,GAAA;AAAAD,WAAAA,EAAAA,GAGIqO,IAAY,IAAA,GAAArO,EAAAA,GACZkO,GAAa,IAAA,GAAAlO;AAAAA,EAAAA,GAAA;AAIlB,GAEMiO,KAA2BA,MAAM;AACtC,QAAMzU,IAAQoG,EAAa;AAE3B,SAAA,EAAA,MAAA;AAAA,QAAA0B,IAAAgB,GAAA;AAAAgB,WAAAA,EAAAhC,GAAA7B,EAGIyG,IAAc,CAAA,CAAA,GAAA,IAAA,GAAA5C,EAAAhC,GAAA7B,EACdmI,IAAc,CAAA,CAAA,GAAA,IAAA,GAAAtE,EAAAhC,GAAA7B,EACdwH,IAAY,CAAA,CAAA,GAAA,IAAA,GAAA/G,EAAA,MAAAc,EAAAM,GAAA,eAH0B9H,EAAMoF,OAAOtI,MAAMoQ,MAAM,CAAA,GAAApF;AAAAA,EAAA,GAAA,IAAA,MAAA;AAAA,QAAAU,IAAAyD,GAAA;AAAAnC,WAAAA,EAAAtB,GAAAvC,EAO/D4M,IAAY,CAAA,CAAA,GAAA,IAAA,GAAA/I,EAAAtB,GAAAvC,EACZqD,IAAc,CAAA,CAAA,GAAA,IAAA,GAAAQ,EAAAtB,GAAAvC,EACd2L,IAAY,CAAA,CAAA,GAAA,IAAA,GAAApK,EAAAA,MAAAA,EAAAgB,GAHyB,eAAA,CAACxI,EAAMoF,OAAOtI,MAAMoQ,MAAM,CAAA,GAAA1E;AAAAA,EAAAA,IAAA;AAOpE,GAEM+L,KAED3d,CAASA,MAAA;AACTke,MAAAA;AACJ,QAAM9U,IAAQoG,EAAa,GAErB2O,IAAeA,MAAM;AAC1BC,0BAAsB,MAAM;AAC3B,MAAKF,MAELA,EAAQve,MAAMwM,SAAS,OACvB+R,EAAQve,MAAMwM,SAAS,GAAG9N,SAAS8V,gBAAgBkK,YAAY,MAC/DjV,EAAMoF,OAAOjB,SAAS;AAAA,QACrBZ,YAAY;AAAA,UACXT,OAAO7N,SAAS8V,gBAAgBmK;AAAAA,UAChCnS,QAAQ9N,SAAS8V,gBAAgBkK;AAAAA,QAAAA;AAAAA,MAClC,CACA;AAAA,IAAA,CACD;AAAA,EACF;AAE4B,SAAAvZ,EAAA;AAAA,IAC3BC,OAAO;AAAA,IACPF,UAAUsZ;AAAAA,IACVhZ,SAASgZ;AAAAA,EAAAA,CACT,GAEDvZ,GAAoB,UAAU,MAAM;AACnCwE,IAAAA,EAAMoF,OAAOjB,SAAS;AAAA,MAAE+I,QAAQ;AAAA,IAAA,CAAO;AAAA,EAAA,CACvC,GAEwBlR,GAAA;AAAA,IACxBC,QAAQhH,SAAS8V;AAAAA,IACjB5W,SAAS;AAAA,MACR6W,WAAW;AAAA,MACXC,SAAS;AAAA,MACTkK,YAAY;AAAA,IACb;AAAA,IACA1Z,UAAUA,MAAM;AACF,MAAAsZ,EAAA;AAAA,IAAA;AAAA,EACd,CACA,IAED,MAAA;AAAA,QAAArM,IAAA0M,GAAA,GAAA3D,IAEOqD;AAAO,kBAAArD,KAAAC,aAAAA,EAAAD,GAAA/I,CAAA,IAAPoM,IAAOpM,GAAAA,EAAAA,GAQX9R,MAAAA,EAAMuP,QAAQ,GAAAO,EAAAC,CAAAA,MAAA;AAAA,UAAAC,IAND5G,EAAMmF,QAAQrI,MAAMuY,WAASvO,IAElC,GAAG9G,EAAMoF,OAAOtI,MAAMyG,WAAWR,MAAM,MAAIgE,IAC5C,GAAG/G,EAAMoF,OAAOtI,MAAMyG,WAAWT,KAAK;AAAI8D,aAAAA,MAAAD,EAAAzR,KAAAsS,EAAAkB,GAAA/B,gBAAAA,EAAAzR,IAAA0R,CAAA,GAAAE,MAAAH,EAAA9S,OAAA8S,EAAA9S,IAAAiT,MAAA,OAAA4B,EAAAnS,MAAA2I,YAAA4H,UAAAA,CAAA,IAAA4B,EAAAnS,MAAA0S,eAAA,QAAA,IAAAlC,MAAAJ,EAAA9T,OAAA8T,EAAA9T,IAAAkU,MAAA,OAAA2B,EAAAnS,MAAA2I,YAAA6H,SAAAA,CAAA,IAAA2B,EAAAnS,MAAA0S,eAAA,OAAA,IAAAtC;AAAAA,IAAAA,GAAA;AAAA,MAAAzR,GAAA0S;AAAAA,MAAA/T,GAAA+T;AAAAA,MAAA/U,GAAA+U;AAAAA,IAAAA,CAAA,GAAAc;AAAAA,EAAAA,GAAA;AAMrD,GC7Ha4M,KAA0B;AAAA,EACtC,gBAAgB;AAAA,IACf,MAAM;AAAA,IACN,gBAAgB;AAAA,EACjB;AAAA,EACA,cAAc;AAAA,IACb,OAAO;AAAA,IACP,aAAa;AAAA,IACb,eAAe;AAAA,IACf,cAAc;AAAA,IACd,eAAe;AAAA,IACf,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,eAAe;AAAA,EAChB;AAAA,EACA,cAAc;AAAA,IACb,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACA,gBAAgB;AAAA,IACf,MAAM;AAAA,EAAA;AAER;ACjBA,IAAIC,IAAsC;AAOnC,SAASC,GAASrhB,GAAiC;AACzD,EAAIohB,MACH5B,QAAQ8B,KAAK,sEAAsE,GACpEF,EAAA;AAGZ,MAAA;AACH5R,IAAAA,GAAgBxP,CAAO,GACVmN,GAAA;AAEP,UAAA;AAAA,MAAE0E,UAAAA,IAAW;AAAA,MAAgBH,cAAAA,IAAe;AAAA,MAAWC,UAAAA;AAAAA,MAAUC,YAAAA,IAAa,CAAA;AAAA,IAAC,IAAM5R,GACrFuhB,IAAmB9U,GAAU0U,IAAavP,CAAU,GAEpD9K,IAAYhG,SAASiF,cAAc,KAAK;AAC9Ce,IAAAA,EAAU0O,KAAK,kBACN2K,SAAAA,KAAKqB,YAAY1a,CAAS;AAEnC,UAAM3G,IAAUP,GACf,MAAAkS,EACEoO,IAAI;AAAA,MACJrO,UAAAA;AAAAA,MACAH,cAAAA;AAAAA,MACAE,YAAY2P;AAAAA,MACZ5P,UAAU,OAAMjN,MACf,MAAMiN,EAAS;AAAA,QACd,GAAGjN;AAAAA,QACH8a,SAAS/R,GAAiB;AAAA,MAC1B,CAAA;AAAA,IAGH,CAAA,GACD3G,CACD,GAEMF,IAAUA,MAAM;AACb,MAAAzG,EAAA,GACR2G,EAAU2a,OAAO,GACFjU,GAAA,GACE4T,IAAA;AAAA,IAClB;AAEO5f,kBAAAA,iBAAiB,UAAUoF,GAAS;AAAA,MAAE8a,MAAM;AAAA,IAAA,CAAM,GAExC9a,IAAAA,GACVA;AAAAA,WACC2B,GAAO;AACPA,kBAAAA,MAAM,+BAA+BA,CAAK,GAC5CA;AAAAA,EAAAA;AAER;","x_google_ignoreList":[0,4]}