@delmaredigital/payload-puck 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/LICENSE +21 -73
  2. package/README.md +1 -22
  3. package/package.json +3 -2
  4. package/dist/AccordionClient.js.map +0 -1
  5. package/dist/AccordionClient.mjs.map +0 -1
  6. package/dist/AnimatedWrapper.js.map +0 -1
  7. package/dist/AnimatedWrapper.mjs.map +0 -1
  8. package/dist/admin/client.js.map +0 -1
  9. package/dist/admin/client.mjs.map +0 -1
  10. package/dist/admin/index.js.map +0 -1
  11. package/dist/admin/index.mjs.map +0 -1
  12. package/dist/api/index.js.map +0 -1
  13. package/dist/api/index.mjs.map +0 -1
  14. package/dist/components/index.css.map +0 -1
  15. package/dist/components/index.js.map +0 -1
  16. package/dist/components/index.mjs.map +0 -1
  17. package/dist/config/config.editor.css.map +0 -1
  18. package/dist/config/config.editor.js.map +0 -1
  19. package/dist/config/config.editor.mjs.map +0 -1
  20. package/dist/config/index.js.map +0 -1
  21. package/dist/config/index.mjs.map +0 -1
  22. package/dist/editor/index.js.map +0 -1
  23. package/dist/editor/index.mjs.map +0 -1
  24. package/dist/fields/index.css.map +0 -1
  25. package/dist/fields/index.js.map +0 -1
  26. package/dist/fields/index.mjs.map +0 -1
  27. package/dist/index.js.map +0 -1
  28. package/dist/index.mjs.map +0 -1
  29. package/dist/layouts/index.js.map +0 -1
  30. package/dist/layouts/index.mjs.map +0 -1
  31. package/dist/plugin/index.js.map +0 -1
  32. package/dist/plugin/index.mjs.map +0 -1
  33. package/dist/render/index.js.map +0 -1
  34. package/dist/render/index.mjs.map +0 -1
  35. package/dist/theme/index.js.map +0 -1
  36. package/dist/theme/index.mjs.map +0 -1
  37. package/dist/utils/index.js.map +0 -1
  38. package/dist/utils/index.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/fields/shared.ts","../../src/hooks/useScrollAnimation.ts","../../src/components/AnimatedWrapper.tsx","../../src/lib/utils.ts","../../src/components/ui/button.tsx","../../src/components/ui/input.tsx","../../src/components/ui/label.tsx","../../src/fields/PaddingField.tsx","../../src/theme/defaults.ts","../../src/theme/utils.ts","../../src/theme/context.tsx","../../src/fields/ColorPickerField.tsx","../../src/components/ui/select.tsx","../../src/fields/BorderField.tsx","../../src/components/ui/checkbox.tsx","../../src/fields/DimensionsField.tsx","../../src/fields/MarginField.tsx","../../src/fields/ResetField.tsx","../../src/components/ui/dialog.tsx","../../src/components/ui/skeleton.tsx","../../src/fields/MediaField.tsx","../../src/fields/GradientEditor.tsx","../../src/fields/BackgroundField.tsx","../../src/fields/AnimationField.tsx","../../src/fields/ResponsiveField.tsx","../../src/fields/ResponsiveVisibilityField.tsx","../../src/components/layout/Container.tsx","../../src/fields/FlexAlignmentField.tsx","../../src/components/layout/Flex.tsx","../../src/components/layout/Grid.tsx","../../src/components/layout/Section.tsx","../../src/components/layout/Spacer.tsx","../../src/fields/TemplateField.tsx","../../src/components/layout/Template.tsx","../../src/components/layout/Template.server.tsx","../../src/fields/AlignmentField.tsx","../../src/components/typography/Heading.tsx","../../src/components/typography/Text.tsx","../../src/components/typography/RichText.tsx","../../src/fields/TiptapField.tsx","../../src/fields/TiptapModal.tsx","../../src/fields/TiptapModalField.tsx","../../src/components/typography/RichText.editor.tsx","../../src/fields/TransformField.tsx","../../src/components/media/Image.tsx","../../src/fields/SizeField.tsx","../../src/components/interactive/Button.tsx","../../src/components/interactive/Card.tsx","../../src/components/interactive/Divider.tsx","../../src/components/interactive/Accordion.tsx"],"names":["useRef","useState","useCallback","useEffect","jsx","cn","twMerge","clsx","cva","React","Slot","React2","React3","LabelPrimitive","jsxs","Link","Unlink","memo","createContext","useContext","X","SelectPrimitive","React6","ChevronDown","ChevronUp","Check","DEFAULT_VALUE","ArrowUp","ArrowRight","ArrowDown","ArrowLeft","React8","MoveHorizontal","Square","SlidersHorizontal","AlignStartHorizontal","AlignCenterHorizontal","AlignEndHorizontal","Icon","Fragment","createUsePuck","RefreshCw","DialogPrimitive","React12","Image","Search","Loader2","AlertCircle","Upload","Trash2","value","Plus","DEFAULT_GRADIENT","opacity","ChevronRight","Smartphone","Tablet","Laptop","Monitor","BREAKPOINT_ICONS","Eye","EyeOff","Content","useId","AlignLeft","AlignCenter","AlignRight","AlignHorizontalDistributeCenter","GripHorizontal","AlignStartVertical","AlignCenterVertical","AlignEndVertical","MoveVertical","DEFAULT_PADDING","DEFAULT_DIMENSIONS","defaultProps","usePuck","updateComponentInData","Save","Download","createElement","Extension","StarterKit","TextAlign","TextStyle","Color","Highlight","Superscript","Subscript","editor","useEditor","useEditorState","Bold","Italic","Underline","Strikethrough","SuperscriptIcon","SubscriptIcon","Heading1","Heading2","Heading3","Heading4","Heading5","Heading6","Pilcrow","ALargeSmall","List","ListOrdered","Quote","AlignJustify","Palette","Highlighter","Minus","CornerDownLeft","RemoveFormatting","Code","EditorContent","Maximize2","useMemo","OriginGrid","RotateCw","Box"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,SAAS,MAAM,OAAA,EAA0D;AAC9E,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AACzC;AAkFO,SAAS,mBAAmB,KAAA,EAAqC;AACtE,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AAChD,EAAA,MAAM,CAAA,GAAI,KAAA;AACV,EAAA,OACE,OAAO,CAAA,CAAE,QAAA,KAAa,YACtB,OAAO,CAAA,CAAE,SAAS,QAAA,IAClB,OAAO,EAAE,IAAA,KAAS,QAAA,IAClB,EAAE,UAAA,IAAc,CAAA,CAAA,IAChB,EAAE,WAAA,IAAe,CAAA,CAAA,IACjB,EAAE,WAAA,IAAe,CAAA,CAAA;AAErB;AAmIO,IAAM,kBAAA,GAA4B;AAAA,EACvC,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,gBAAA;AAAA,EACP,OAAA,EAAS;AAAA,IACP,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,IACrC,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,aAAA,EAAc;AAAA,IAC7C,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,IACrC,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,WAAA,EAAY;AAAA,IACzC,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAAA,IACjC,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA;AAAO;AAEnC,CAAA;AAyEO,IAAM,WAAA,GAAqB;AAAA,EAChC,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,QAAA;AAAA,EACP,OAAA,EAAS;AAAA,IACP,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,IAC/B,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,IAAA,EAAK;AAAA,IAC9B,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,IAAA,EAAK;AAAA,IAC/B,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,IAAA,EAAK;AAAA,IAC9B,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,IAAA,EAAK;AAAA,IACpC,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA;AAAM;AAEjC,CAAA;AAwBO,IAAM,iBAAA,GAA2B;AAAA,EACtC,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,eAAA;AAAA,EACP,OAAA,EAAS;AAAA,IACP,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,IAC3B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,IAC3B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,IAC3B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,IAC3B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,IAC3B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA;AAAK;AAE/B,CAAA;AAMO,IAAM,aAAA,GAAuB;AAAA,EAClC,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,WAAA;AAAA,EACP,OAAA,EAAS;AAAA,IACP,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,IAAA,EAAK;AAAA,IACpC,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,IAAA,EAAK;AAAA,IAC9B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,IAC/B,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,IAAA,EAAK;AAAA,IAC9B,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,IAAA,EAAK;AAAA,IACpC,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA;AAAM;AAEjC,CAAA;AAMO,IAAM,gBAAA,GAA0B;AAAA,EACrC,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,cAAA;AAAA,EACP,OAAA,EAAS;AAAA,IACP,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,IAC/B,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,QAAA,EAAS;AAAA,IACzC,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,OAAA,EAAQ;AAAA,IACxC,EAAE,KAAA,EAAO,gBAAA,EAAkB,KAAA,EAAO,UAAA,EAAW;AAAA,IAC7C,EAAE,KAAA,EAAO,iBAAA,EAAmB,KAAA,EAAO,WAAA,EAAY;AAAA,IAC/C,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,MAAA;AAAO;AAE1C,CAAA;AAMO,IAAM,iBAAA,GAA2B;AAAA,EACtC,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS;AAAA,IACP,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAAA,IACjC,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,IACnC,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA;AAAS;AAEvC,CAAA;AAyEO,IAAM,YAAA,GAAuC;AAAA,EAClD,IAAA,EAAM,WAAA;AAAA,EACN,MAAA,EAAQ,aAAA;AAAA,EACR,KAAA,EAAO;AACT,CAAA;AA0CO,IAAM,SAAA,GAAoC;AAAA,EAC/C,IAAA,EAAM,EAAA;AAAA,EACN,EAAA,EAAI,WAAA;AAAA,EACJ,EAAA,EAAI,WAAA;AAAA,EACJ,EAAA,EAAI,WAAA;AAAA,EACJ,EAAA,EAAI,WAAA;AAAA,EACJ,KAAA,EAAO;AACT,CAAA;AAkBO,IAAM,eAAA,GAA0C;AAAA,EACrD,EAAA,EAAI,2DAAA;AAAA,EACJ,EAAA,EAAI,+CAAA;AAAA,EACJ,EAAA,EAAI,oCAAA;AAAA,EACJ,EAAA,EAAI,mCAAA;AAAA,EACJ,EAAA,EAAI,gCAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAKO,IAAM,WAAA,GAAsC;AAAA,EACjD,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,IAAA,EAAM,WAAA;AAAA,EACN,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,KAAA,EAAO;AACT,CAAA;AAKO,IAAM,cAAA,GAAyC;AAAA,EACpD,IAAA,EAAM,EAAA;AAAA,EACN,MAAA,EAAQ,eAAA;AAAA,EACR,KAAA,EAAO,cAAA;AAAA,EACP,QAAA,EAAU,cAAA;AAAA,EACV,SAAA,EAAW,cAAA;AAAA,EACX,IAAA,EAAM;AACR,CAAA;AAKO,IAAM,eAAA,GAA0C;AAAA,EACrD,KAAA,EAAO,cAAA;AAAA,EACP,MAAA,EAAQ,eAAA;AAAA,EACR,MAAA,EAAQ;AACV,CAAA;AAyCO,IAAM,iBAAA,GAA4C;AAAA,EACvD,KAAA,EAAO,eAAA;AAAA,EACP,YAAA,EAAc,eAAA;AAAA,EACd,MAAA,EAAQ,gBAAA;AAAA,EACR,GAAA,EAAK,aAAA;AAAA,EACL,UAAA,EAAY,aAAA;AAAA,EACZ,OAAA,EAAS,iBAAA;AAAA,EACT,eAAA,EAAiB,iBAAA;AAAA,EACjB,MAAA,EAAQ,gBAAA;AAAA,EACR,cAAA,EAAgB,gBAAA;AAAA,EAChB,MAAA,EAAQ,gBAAA;AAAA,EACR,cAAA,EAAgB;AAClB,CAAA;AAMO,IAAM,aAAA,GAAwC;AAAA,EACnD,KAAA,EAAO,aAAA;AAAA,EACP,YAAA,EAAc,aAAA;AAAA,EACd,MAAA,EAAQ,cAAA;AAAA,EACR,GAAA,EAAK,WAAA;AAAA,EACL,UAAA,EAAY,WAAA;AAAA,EACZ,OAAA,EAAS,eAAA;AAAA,EACT,QAAA,EAAU;AACZ,CAAA;AAgCA,SAAS,SAAS,GAAA,EAAyD;AACzE,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAClC,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC5C,EAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC5C,EAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAE5C,EAAA,IAAI,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,EAAG,OAAO,IAAA;AAE7C,EAAA,OAAO,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AACnB;AAKO,SAAS,gBAAgB,KAAA,EAA0D;AACxF,EAAA,IAAI,CAAC,KAAA,EAAO,GAAA,EAAK,OAAO,MAAA;AAExB,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AAC9B,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,KAAA,CAAM,GAAA;AAEvB,EAAA,MAAM,OAAA,GAAA,CAAW,KAAA,CAAM,OAAA,IAAW,GAAA,IAAO,GAAA;AAEzC,EAAA,IAAI,YAAY,CAAA,EAAG;AACjB,IAAA,OAAO,KAAA,CAAM,GAAA;AAAA,EACf;AAEA,EAAA,OAAO,CAAA,KAAA,EAAQ,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,CAAA;AACtD;AAKO,SAAS,kBAAkB,OAAA,EAA8D;AAC9F,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAErB,EAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,MAAK,GAAI,OAAA;AAE3C,EAAA,IAAI,GAAA,KAAQ,KAAA,IAAS,KAAA,KAAU,MAAA,IAAU,WAAW,IAAA,EAAM;AACxD,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,EACtB;AAEA,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,IAAA,KAAS,KAAA,EAAO;AACpC,IAAA,OAAO,GAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,GAAG,IAAI,CAAA,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,EACvD;AAEA,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,IAAI,IAAI,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,GAAG,IAAI,CAAA,CAAA;AACtE;AAKO,SAAS,iBAAiB,MAAA,EAA6D;AAC5F,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AAEpB,EAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,MAAK,GAAI,MAAA;AAE3C,EAAA,IAAI,GAAA,KAAQ,KAAA,IAAS,KAAA,KAAU,MAAA,IAAU,WAAW,IAAA,EAAM;AACxD,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,EACtB;AAEA,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,IAAA,KAAS,KAAA,EAAO;AACpC,IAAA,OAAO,GAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,GAAG,IAAI,CAAA,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,EACvD;AAEA,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,IAAI,IAAI,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,GAAG,IAAI,CAAA,CAAA;AACtE;AAKO,SAAS,iBAAiB,MAAA,EAAyE;AACxG,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,KAAA,KAAU,QAAQ,OAAO,MAAA;AAE/C,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,MAAA,CAAO,KAAK,CAAA,IAAK,SAAA;AAC/C,EAAA,MAAM,QAA6B,EAAC;AAEpC,EAAA,IAAI,MAAA,CAAO,MAAM,GAAA,EAAK;AACpB,IAAA,KAAA,CAAM,cAAA,GAAiB,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,EAAA,CAAA;AACtC,IAAA,KAAA,CAAM,iBAAiB,MAAA,CAAO,KAAA;AAC9B,IAAA,KAAA,CAAM,cAAA,GAAiB,KAAA;AAAA,EACzB;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,KAAA,EAAO;AACtB,IAAA,KAAA,CAAM,gBAAA,GAAmB,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,EAAA,CAAA;AACxC,IAAA,KAAA,CAAM,mBAAmB,MAAA,CAAO,KAAA;AAChC,IAAA,KAAA,CAAM,gBAAA,GAAmB,KAAA;AAAA,EAC3B;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,MAAA,EAAQ;AACvB,IAAA,KAAA,CAAM,iBAAA,GAAoB,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,EAAA,CAAA;AACzC,IAAA,KAAA,CAAM,oBAAoB,MAAA,CAAO,KAAA;AACjC,IAAA,KAAA,CAAM,iBAAA,GAAoB,KAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,IAAA,EAAM;AACrB,IAAA,KAAA,CAAM,eAAA,GAAkB,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,EAAA,CAAA;AACvC,IAAA,KAAA,CAAM,kBAAkB,MAAA,CAAO,KAAA;AAC/B,IAAA,KAAA,CAAM,eAAA,GAAkB,KAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,IAAA,KAAA,CAAM,YAAA,GAAe,CAAA,EAAG,MAAA,CAAO,MAAM,CAAA,EAAA,CAAA;AAAA,EACvC;AAEA,EAAA,OAAO,OAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,GAAS,IAAI,KAAA,GAAQ,MAAA;AACjD;AAKO,SAAS,gBAAgB,KAAA,EAAuE;AACrG,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AAEnB,EAAA,MAAM,QAA6B,EAAC;AAEpC,EAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,IAAA,KAAA,CAAM,KAAA,GAAQ,MAAA;AACd,IAAA,KAAA,CAAM,QAAA,GAAW,MAAA;AAAA,EACnB,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,WAAW,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,EAAG,MAAM,IAAI,CAAA,CAAA;AAC/C,IAAA,KAAA,CAAM,KAAA,GAAQ,MAAA;AAAA,EAChB;AAEA,EAAA,QAAQ,MAAM,SAAA;AAAW,IACvB,KAAK,MAAA;AACH,MAAA,KAAA,CAAM,UAAA,GAAa,GAAA;AACnB,MAAA,KAAA,CAAM,WAAA,GAAc,MAAA;AACpB,MAAA;AAAA,IACF,KAAK,QAAA;AACH,MAAA,KAAA,CAAM,UAAA,GAAa,MAAA;AACnB,MAAA,KAAA,CAAM,WAAA,GAAc,MAAA;AACpB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAA,KAAA,CAAM,UAAA,GAAa,MAAA;AACnB,MAAA,KAAA,CAAM,WAAA,GAAc,GAAA;AACpB,MAAA;AAAA;AAGJ,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,qBACd,UAAA,EACiC;AACjC,EAAA,IAAI,CAAC,YAAY,OAAO,MAAA;AAGxB,EAAA,IAAI,kBAAA,CAAmB,UAAU,CAAA,EAAG;AAClC,IAAA,OAAO,gBAAgB,UAAU,CAAA;AAAA,EACnC;AAEA,EAAA,MAAM,GAAA,GAAM,UAAA;AACZ,EAAA,MAAM,QAA6B,EAAC;AAGpC,EAAA,IAAI,GAAA,CAAI,SAAS,MAAA,EAAQ;AACvB,IAAA,KAAA,CAAM,KAAA,GAAQ,MAAA;AACd,IAAA,KAAA,CAAM,QAAA,GAAW,MAAA;AAAA,EACnB,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,KAAA,GAAQ,MAAA;AAGd,IAAA,IAAI,IAAI,QAAA,EAAU,OAAA,KAAY,SAAS,GAAA,CAAI,QAAA,EAAU,QAAQ,CAAA,EAAG;AAC9D,MAAA,KAAA,CAAM,QAAA,GAAW,GAAG,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA,EAAG,GAAA,CAAI,SAAS,IAAI,CAAA,CAAA;AAAA,IAC5D;AAGA,IAAA,IAAI,IAAI,QAAA,EAAU,OAAA,IAAW,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA,EAAG;AACnD,MAAA,KAAA,CAAM,QAAA,GAAW,GAAG,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA,EAAG,GAAA,CAAI,SAAS,IAAI,CAAA,CAAA;AAAA,IAC5D;AAAA,EACF;AAGA,EAAA,IAAI,IAAI,SAAA,EAAW,OAAA,IAAW,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AACrD,IAAA,KAAA,CAAM,SAAA,GAAY,GAAG,GAAA,CAAI,SAAA,CAAU,KAAK,CAAA,EAAG,GAAA,CAAI,UAAU,IAAI,CAAA,CAAA;AAAA,EAC/D;AAEA,EAAA,IAAI,IAAI,SAAA,EAAW,OAAA,IAAW,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AACrD,IAAA,KAAA,CAAM,SAAA,GAAY,GAAG,GAAA,CAAI,SAAA,CAAU,KAAK,CAAA,EAAG,GAAA,CAAI,UAAU,IAAI,CAAA,CAAA;AAAA,EAC/D;AAGA,EAAA,QAAQ,IAAI,SAAA;AAAW,IACrB,KAAK,MAAA;AACH,MAAA,KAAA,CAAM,UAAA,GAAa,GAAA;AACnB,MAAA,KAAA,CAAM,WAAA,GAAc,MAAA;AACpB,MAAA;AAAA,IACF,KAAK,QAAA;AACH,MAAA,KAAA,CAAM,UAAA,GAAa,MAAA;AACnB,MAAA,KAAA,CAAM,WAAA,GAAc,MAAA;AACpB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAA,KAAA,CAAM,UAAA,GAAa,MAAA;AACnB,MAAA,KAAA,CAAM,WAAA,GAAc,GAAA;AACpB,MAAA;AAAA;AAGJ,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,qBAAqB,GAAA,EAAiD;AACpF,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AAEjB,EAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,EAAQ,OAAO,MAAA;AAEhC,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,IAAI,QAAA,EAAU,OAAA,IAAW,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA,EAAG;AACnD,IAAA,KAAA,CAAM,IAAA,CAAK,QAAQ,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,CAAE,CAAA;AAAA,EAC7D;AAEA,EAAA,IAAI,IAAI,QAAA,EAAU,OAAA,IAAW,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA,EAAG;AACnD,IAAA,KAAA,CAAM,IAAA,CAAK,QAAQ,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,CAAE,CAAA;AAAA,EAC7D;AAEA,EAAA,IAAI,IAAI,SAAA,EAAW,OAAA,IAAW,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AACrD,IAAA,KAAA,CAAM,IAAA,CAAK,UAAU,GAAA,CAAI,SAAA,CAAU,KAAK,CAAA,EAAG,GAAA,CAAI,SAAA,CAAU,IAAI,CAAA,CAAE,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,IAAI,SAAA,EAAW,OAAA,IAAW,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AACrD,IAAA,KAAA,CAAM,IAAA,CAAK,UAAU,GAAA,CAAI,SAAA,CAAU,KAAK,CAAA,EAAG,GAAA,CAAI,SAAA,CAAU,IAAI,CAAA,CAAE,CAAA;AAAA,EACjE;AAEA,EAAA,OAAO,MAAM,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,GAAI,MAAA;AAChD;AAmDO,SAAS,mBAAmB,QAAA,EAAoD;AACrF,EAAA,IAAI,CAAC,QAAA,EAAU,KAAA,IAAS,QAAA,CAAS,KAAA,CAAM,WAAW,CAAA,EAAG;AACnD,IAAA,OAAO,aAAA;AAAA,EACT;AAGA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAG,QAAA,CAAS,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,QAAA,GAAW,EAAE,QAAQ,CAAA;AAG9E,EAAA,MAAM,QAAA,GAAW,WAAA,CACd,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA,IAAK,aAAA;AAC7C,IAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,CAAA,CAAA,CAAA;AAAA,EAClC,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,IAAI,QAAA,CAAS,SAAS,QAAA,EAAU;AAC9B,IAAA,MAAM,KAAA,GAAQ,SAAS,WAAA,IAAe,QAAA;AACtC,IAAA,MAAM,QAAA,GAAW,SAAS,cAAA,IAAkB,QAAA;AAC5C,IAAA,OAAO,CAAA,gBAAA,EAAmB,KAAK,CAAA,IAAA,EAAO,QAAQ,KAAK,QAAQ,CAAA,CAAA,CAAA;AAAA,EAC7D;AAGA,EAAA,OAAO,CAAA,gBAAA,EAAmB,QAAA,CAAS,KAAK,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAA,CAAA;AAC1D;AAKA,SAAS,cACP,QAAA,EACQ;AACR,EAAA,MAAM,WAAA,GAA6E;AAAA,IACjF,MAAA,EAAQ,QAAA;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,UAAA,EAAY,UAAA;AAAA,IACZ,WAAA,EAAa,WAAA;AAAA,IACb,aAAA,EAAe,aAAA;AAAA,IACf,cAAA,EAAgB;AAAA,GAClB;AACA,EAAA,OAAO,QAAA,GAAW,WAAA,CAAY,QAAQ,CAAA,IAAK,QAAA,GAAW,QAAA;AACxD;AAKA,SAAS,mBAAmB,SAAA,EAA8C;AACxE,EAAA,MAAM,YAAA,GAA0D;AAAA,IAC9D,QAAA,EAAU,QAAA;AAAA,IACV,WAAA,EAAa,WAAA;AAAA,IACb,SAAA,EAAW,SAAA;AAAA,IACX,UAAA,EAAY,UAAA;AAAA,IACZ,aAAA,EAAe,aAAA;AAAA,IACf,cAAA,EAAgB,cAAA;AAAA,IAChB,gBAAA,EAAkB,gBAAA;AAAA,IAClB,iBAAA,EAAmB,iBAAA;AAAA,IACnB,aAAA,EAAe;AAAA;AAAA,GACjB;AACA,EAAA,OAAO,YAAA,CAAa,SAAS,CAAA,IAAK,WAAA;AACpC;AAKA,SAAS,UAAU,IAAA,EAA4B;AAC7C,EAAA,MAAM,UAAA,GAAA,CAAc,IAAA,CAAK,YAAA,IAAgB,GAAA,IAAO,GAAA;AAChD,EAAA,MAAM,QAAA,GAAA,CAAY,IAAA,CAAK,UAAA,IAAc,CAAA,IAAK,GAAA;AAG1C,EAAA,IAAI,IAAA,CAAK,cAAc,aAAA,EAAe;AACpC,IAAA,OAAO,CAAA,6CAAA,EAAgD,UAAU,CAAA,EAAA,EAAK,IAAA,CAAK,aAAa,CAAA,cAAA,EAAiB,QAAQ,CAAA,EAAA,EAAK,IAAA,CAAK,WAAW,CAAA,EAAA,CAAA;AAAA,EACxI;AAGA,EAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,IAAA,CAAK,SAAS,CAAA;AACnD,EAAA,OAAO,CAAA,gBAAA,EAAmB,SAAS,CAAA,aAAA,EAAgB,UAAU,CAAA,EAAA,EAAK,IAAA,CAAK,aAAa,CAAA,cAAA,EAAiB,QAAQ,CAAA,EAAA,EAAK,IAAA,CAAK,WAAW,CAAA,EAAA,CAAA;AACpI;AAiBO,SAAS,qBACd,EAAA,EACqB;AACrB,EAAA,IAAI,CAAC,EAAA,IAAM,EAAA,CAAG,IAAA,KAAS,MAAA,EAAQ;AAC7B,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,QAA6B,EAAC;AAEpC,EAAA,QAAQ,GAAG,IAAA;AAAM,IACf,KAAK,OAAA;AACH,MAAA,IAAI,EAAA,CAAG,OAAO,GAAA,EAAK;AACjB,QAAA,KAAA,CAAM,eAAA,GAAkB,eAAA,CAAgB,EAAA,CAAG,KAAK,CAAA;AAAA,MAClD;AACA,MAAA;AAAA,IAEF,KAAK,UAAA;AACH,MAAA,IAAI,EAAA,CAAG,YAAY,EAAA,CAAG,QAAA,CAAS,SAAS,EAAA,CAAG,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AACpE,QAAA,KAAA,CAAM,UAAA,GAAa,kBAAA,CAAmB,EAAA,CAAG,QAAQ,CAAA;AAAA,MACnD;AACA,MAAA;AAAA,IAEF,KAAK,OAAA;AACH,MAAA,IAAI,EAAA,CAAG,KAAA,EAAO,KAAA,EAAO,GAAA,EAAK;AACxB,QAAA,MAAM,QAAA,GAAW,EAAA,CAAG,KAAA,CAAM,KAAA,CAAM,GAAA;AAChC,QAAA,MAAM,IAAA,GAAO,EAAA,CAAG,KAAA,CAAM,IAAA,IAAQ,OAAA;AAC9B,QAAA,MAAM,QAAA,GAAW,aAAA,CAAc,EAAA,CAAG,KAAA,CAAM,QAAQ,CAAA;AAChD,QAAA,MAAM,MAAA,GAAS,EAAA,CAAG,KAAA,CAAM,MAAA,IAAU,WAAA;AAClC,QAAA,MAAM,UAAA,GAAa,EAAA,CAAG,KAAA,CAAM,UAAA,IAAc,QAAA;AAG1C,QAAA,IAAI,EAAA,CAAG,SAAS,OAAA,EAAS;AAGvB,UAAA,MAAM,UAAA,GACJ,EAAA,CAAG,OAAA,CAAQ,IAAA,KAAS,OAAA,GAChB,eAAA,CAAgB,EAAA,CAAG,OAAA,CAAQ,KAAK,CAAA,GAChC,kBAAA,CAAmB,EAAA,CAAG,QAAQ,QAAQ,CAAA;AAI5C,UAAA,IAAI,EAAA,CAAG,OAAA,CAAQ,IAAA,KAAS,OAAA,IAAW,UAAA,EAAY;AAC7C,YAAA,KAAA,CAAM,kBAAkB,CAAA,gBAAA,EAAmB,UAAU,CAAA,EAAA,EAAK,UAAU,UAAU,QAAQ,CAAA,CAAA,CAAA;AAAA,UACxF,CAAA,MAAO;AACL,YAAA,KAAA,CAAM,eAAA,GAAkB,CAAA,EAAG,UAAU,CAAA,MAAA,EAAS,QAAQ,CAAA,CAAA,CAAA;AAAA,UACxD;AAEA,UAAA,KAAA,CAAM,cAAA,GAAiB,SAAS,IAAI,CAAA,CAAA;AACpC,UAAA,KAAA,CAAM,kBAAA,GAAqB,WAAW,QAAQ,CAAA,CAAA;AAC9C,UAAA,KAAA,CAAM,gBAAA,GAAmB,cAAc,MAAM,CAAA,CAAA;AAC7C,UAAA,KAAA,CAAM,oBAAA,GAAuB,WAAW,UAAU,CAAA,CAAA;AAAA,QACpD,CAAA,MAAO;AAEL,UAAA,KAAA,CAAM,eAAA,GAAkB,OAAO,QAAQ,CAAA,CAAA,CAAA;AACvC,UAAA,KAAA,CAAM,cAAA,GAAiB,IAAA;AACvB,UAAA,KAAA,CAAM,kBAAA,GAAqB,QAAA;AAC3B,UAAA,KAAA,CAAM,gBAAA,GAAmB,MAAA;AACzB,UAAA,KAAA,CAAM,oBAAA,GAAuB,UAAA;AAAA,QAC/B;AAGA,QAAA,IAAI,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,OAAA,EAAS;AAC1B,UAAA,MAAM,OAAA,GAAU,SAAA,CAAU,EAAA,CAAG,KAAA,CAAM,IAAI,CAAA;AACvC,UAAA,KAAA,CAAM,SAAA,GAAY,OAAA;AAEjB,UAAC,MAAiC,eAAA,GAAkB,OAAA;AAAA,QACvD;AAAA,MACF;AACA,MAAA;AAAA;AAGJ,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,0BACd,EAAA,EACoB;AACpB,EAAA,IAAI,CAAC,MAAM,EAAA,CAAG,IAAA,KAAS,WAAW,CAAC,EAAA,CAAG,OAAO,OAAO,MAAA;AACpD,EAAA,MAAM,OAAA,GAAU,EAAA,CAAG,KAAA,CAAM,OAAA,IAAW,GAAA;AACpC,EAAA,OAAO,OAAA,GAAU,GAAA,GAAM,OAAA,GAAU,GAAA,GAAM,MAAA;AACzC;AA4DO,IAAM,iBAAA,GAAoC;AAAA,EAC/C,MAAA,EAAQ,CAAA;AAAA,EACR,MAAA,EAAQ,CAAA;AAAA,EACR,MAAA,EAAQ,CAAA;AAAA,EACR,WAAA,EAAa,IAAA;AAAA,EACb,KAAA,EAAO,CAAA;AAAA,EACP,KAAA,EAAO,CAAA;AAAA,EACP,UAAA,EAAY,CAAA;AAAA,EACZ,UAAA,EAAY,CAAA;AAAA,EACZ,aAAA,EAAe,IAAA;AAAA,EACf,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,KAAA;AAAA,EACV,WAAA,EAAa,GAAA;AAAA,EACb,OAAA,EAAS,CAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA;AAKA,SAAS,qBAAqB,MAAA,EAAiC;AAC7D,EAAA,MAAM,SAAA,GAA6C;AAAA,IACjD,MAAA,EAAQ,QAAA;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,UAAA,EAAY,UAAA;AAAA,IACZ,WAAA,EAAa,WAAA;AAAA,IACb,aAAA,EAAe,aAAA;AAAA,IACf,cAAA,EAAgB;AAAA,GAClB;AACA,EAAA,OAAO,SAAA,CAAU,MAAM,CAAA,IAAK,QAAA;AAC9B;AAKO,SAAS,oBACd,SAAA,EACiC;AACjC,EAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AAEvB,EAAA,MAAM,QAA6B,EAAC;AACpC,EAAA,MAAM,aAAuB,EAAC;AAG9B,EAAA,IAAI,SAAA,CAAU,QAAA,IAAY,SAAA,CAAU,WAAA,EAAa;AAC/C,IAAA,KAAA,CAAM,WAAA,GAAc,CAAA,EAAG,SAAA,CAAU,WAAW,CAAA,EAAA,CAAA;AAAA,EAC9C;AAIA,EAAA,IAAI,SAAA,CAAU,UAAA,KAAe,CAAA,IAAK,SAAA,CAAU,eAAe,CAAA,EAAG;AAC5D,IAAA,UAAA,CAAW,IAAA;AAAA,MACT,CAAA,UAAA,EAAa,SAAA,CAAU,UAAU,CAAA,EAAG,SAAA,CAAU,aAAa,CAAA,EAAA,EAAK,SAAA,CAAU,UAAU,CAAA,EAAG,SAAA,CAAU,aAAa,CAAA,CAAA;AAAA,KAChH;AAAA,EACF;AAGA,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,OAAA,EAAU,SAAA,CAAU,MAAM,CAAA,IAAA,CAAM,CAAA;AAAA,EAClD;AAGA,EAAA,IAAI,UAAU,QAAA,EAAU;AACtB,IAAA,IAAI,SAAA,CAAU,OAAA,IAAW,SAAA,CAAU,OAAA,KAAY,CAAA,EAAG;AAChD,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,QAAA,EAAW,SAAA,CAAU,OAAO,CAAA,IAAA,CAAM,CAAA;AAAA,IACpD;AACA,IAAA,IAAI,SAAA,CAAU,OAAA,IAAW,SAAA,CAAU,OAAA,KAAY,CAAA,EAAG;AAChD,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,QAAA,EAAW,SAAA,CAAU,OAAO,CAAA,IAAA,CAAM,CAAA;AAAA,IACpD;AAAA,EACF;AAGA,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,WAAW,CAAA,EAAG;AACpD,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,SAAA,CAAU,MAAA,EAAQ;AACzC,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,MAAA,EAAS,SAAA,CAAU,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,IAC9C,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,KAAK,CAAA,MAAA,EAAS,SAAA,CAAU,MAAM,CAAA,EAAA,EAAK,SAAA,CAAU,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,IACnE;AAAA,EACF;AAGA,EAAA,IAAI,SAAA,CAAU,KAAA,KAAU,CAAA,IAAK,SAAA,CAAU,UAAU,CAAA,EAAG;AAClD,IAAA,IAAI,SAAA,CAAU,KAAA,KAAU,CAAA,IAAK,SAAA,CAAU,UAAU,CAAA,EAAG;AAClD,MAAA,UAAA,CAAW,KAAK,CAAA,KAAA,EAAQ,SAAA,CAAU,KAAK,CAAA,KAAA,EAAQ,SAAA,CAAU,KAAK,CAAA,IAAA,CAAM,CAAA;AAAA,IACtE,CAAA,MAAA,IAAW,SAAA,CAAU,KAAA,KAAU,CAAA,EAAG;AAChC,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,MAAA,EAAS,SAAA,CAAU,KAAK,CAAA,IAAA,CAAM,CAAA;AAAA,IAChD,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,MAAA,EAAS,SAAA,CAAU,KAAK,CAAA,IAAA,CAAM,CAAA;AAAA,IAChD;AAAA,EACF;AAGA,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,KAAA,CAAM,SAAA,GAAY,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAAA,EACvC;AAGA,EAAA,IAAI,SAAA,CAAU,WAAW,QAAA,EAAU;AACjC,IAAA,KAAA,CAAM,eAAA,GAAkB,oBAAA,CAAqB,SAAA,CAAU,MAAM,CAAA;AAAA,EAC/D;AAGA,EAAA,IAAI,UAAU,QAAA,EAAU;AACtB,IAAA,KAAA,CAAM,cAAA,GAAiB,aAAA;AAAA,EACzB;AAEA,EAAA,OAAO,OAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,GAAS,IAAI,KAAA,GAAQ,MAAA;AACjD;AAuBO,IAAM,WAAA,GAIR;AAAA,EACH,EAAE,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,UAAU,IAAA,EAAK;AAAA,EACzC,EAAE,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,UAAU,GAAA,EAAI;AAAA,EACxC,EAAE,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,UAAU,GAAA,EAAI;AAAA,EACxC,EAAE,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,UAAU,IAAA,EAAK;AAAA,EACzC,EAAE,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,UAAU,IAAA;AACtC,CAAA;AASO,SAAS,kBAAqB,KAAA,EAA6C;AAChF,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AAChD,EAAA,OAAO,IAAA,IAAQ,KAAA;AACjB;AAKA,SAAS,aAAa,GAAA,EAAqB;AACzC,EAAA,OAAO,GAAA,CAAI,QAAQ,QAAA,EAAU,CAAC,WAAW,CAAA,CAAA,EAAI,MAAA,CAAO,WAAA,EAAa,CAAA,CAAE,CAAA;AACrE;AAKO,SAAS,sBAAsB,MAAA,EAAqC;AACzE,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CACzB,OAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,QAAQ,KAAA,KAAU,EAAE,CAAA,CAC3E,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAA,EAAG,YAAA,CAAa,GAAG,CAAC,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA,CACtD,KAAK,IAAI,CAAA;AACd;AAqCO,SAAS,oBAAA,CACd,KAAA,EACA,SAAA,EACA,QAAA,EACqB;AAErB,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,EAAE,UAAA,EAAY,EAAC,EAAG,eAAe,EAAA,EAAG;AAAA,EAC7C;AAGA,EAAA,IAAI,CAAC,iBAAA,CAAqB,KAAK,CAAA,EAAG;AAChC,IAAA,MAAM,MAAA,GAAS,UAAU,KAAU,CAAA;AACnC,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,UAAU,EAAC;AAAA,MACvB,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAGA,EAAA,MAAM,eAAyB,EAAC;AAChC,EAAA,IAAI,aAAkC,EAAC;AAEvC,EAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,EAAA,KAAO;AAC1B,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,EAAA,CAAG,GAAG,CAAA;AAC5B,IAAA,IAAI,YAAY,MAAA,EAAW;AAE3B,IAAA,MAAM,QAAA,GAAW,UAAU,OAAO,CAAA;AAClC,IAAA,IAAI,CAAC,QAAA,EAAU;AAEf,IAAA,IAAI,EAAA,CAAG,QAAQ,IAAA,EAAM;AACnB,MAAA,UAAA,GAAa,QAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,MAAM,WAAA,GAAc,sBAAsB,QAAQ,CAAA;AAClD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,YAAA,CAAa,IAAA;AAAA,UACX,sBAAsB,EAAA,CAAG,QAAQ,CAAA,OAAA,EAAU,QAAQ,MAAM,WAAW,CAAA,IAAA;AAAA,SACtE;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,UAAA,EAAY,aAAA,EAAe,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,EAAE;AAC9D;AAqBO,IAAM,kBAAA,GAAsC;AAAA,EACjD,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAUO,SAAS,oBAAA,CACd,YACA,QAAA,EACQ;AACR,EAAA,IAAI,CAAC,YAAY,OAAO,EAAA;AAExB,EAAA,MAAM,eAAyB,EAAC;AAGhC,EAAA,MAAM,gBAAA,GAAsD;AAAA,IAC1D,EAAA,EAAI,IAAA;AAAA;AAAA,IACJ,EAAA,EAAI,GAAA;AAAA,IACJ,EAAA,EAAI,GAAA;AAAA,IACJ,EAAA,EAAI,IAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAGA,EAAA,MAAM,sBAAA,GAAyB,CAAC,EAAA,KAAkC;AAChE,IAAA,MAAM,QAAsB,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AACzD,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA;AAC9B,IAAA,IAAI,UAAU,EAAA,IAAM,KAAA,KAAU,KAAA,CAAM,MAAA,GAAS,GAAG,OAAO,IAAA;AACvD,IAAA,OAAO,gBAAA,CAAiB,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,EAC1C,CAAA;AAGA,EAAA,IAAI,UAAA,CAAW,OAAO,KAAA,EAAO;AAC3B,IAAA,MAAM,SAAA,GAAY,uBAAuB,IAAI,CAAA;AAC7C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,YAAA,CAAa,KAAK,CAAA,mBAAA,EAAsB,SAAA,GAAY,CAAC,CAAA,OAAA,EAAU,QAAQ,CAAA,qBAAA,CAAuB,CAAA;AAAA,IAChG,CAAA,MAAO;AACL,MAAA,YAAA,CAAa,IAAA,CAAK,CAAA,CAAA,EAAI,QAAQ,CAAA,mBAAA,CAAqB,CAAA;AAAA,IACrD;AAAA,EACF;AAGA,EAAA,WAAA,CAAY,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,EAAA,KAAO;AACnC,IAAA,IAAI,UAAA,CAAW,EAAA,CAAG,GAAG,CAAA,KAAM,KAAA,EAAO;AAChC,MAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,EAAA,CAAG,GAAG,CAAA;AACxC,MAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,EAAA,CAAG,GAAG,CAAA;AAE9C,MAAA,IAAI,YAAY,QAAA,EAAU;AAExB,QAAA,YAAA,CAAa,IAAA;AAAA,UACX,sBAAsB,QAAQ,CAAA,oBAAA,EAAuB,QAAA,GAAW,CAAC,UAAU,QAAQ,CAAA,qBAAA;AAAA,SACrF;AAAA,MACF,WAAW,QAAA,EAAU;AAEnB,QAAA,YAAA,CAAa,IAAA;AAAA,UACX,CAAA,mBAAA,EAAsB,QAAQ,CAAA,OAAA,EAAU,QAAQ,CAAA,qBAAA;AAAA,SAClD;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,YAAA,CAAa,KAAK,IAAI,CAAA;AAC/B;AAuBO,IAAM,cAAA,GAAyD;AAAA,EACpE,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,SAAA;AAAA,EACX,UAAA,EAAY,UAAA;AAAA,EACZ,aAAA,EAAe,aAAA;AAAA,EACf,MAAA,EAAQ,yCAAA;AAAA,EACR,eAAA,EAAiB,mCAAA;AAAA,EACjB,MAAA,EAAQ,wCAAA;AAAA,EACR,WAAA,EAAa,wCAAA;AAAA,EACb,YAAA,EAAc,yCAAA;AAAA,EACd,SAAA,EAAW,wCAAA;AAAA,EACX,UAAA,EAAY,yCAAA;AAAA,EACZ,aAAA,EAAe,wCAAA;AAAA,EACf,OAAA,EAAS;AACX,CAAA;AAqFO,IAAM,oBAAA,GAIR;AAAA,EACH,EAAE,UAAU,MAAA,EAAQ,KAAA,EAAO,QAAQ,UAAA,EAAY,CAAC,MAAM,CAAA,EAAE;AAAA,EACxD,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAY,CAAC,SAAA,EAAW,SAAA,EAAW,WAAA,EAAa,WAAA,EAAa,YAAA,EAAc,YAAY,CAAA,EAAE;AAAA,EAC5H,EAAE,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,UAAA,EAAY,CAAC,UAAA,EAAY,UAAA,EAAY,YAAA,EAAc,WAAW,CAAA,EAAE;AAAA,EACrG,EAAE,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,UAAA,EAAY,CAAC,UAAA,EAAY,YAAA,EAAc,YAAA,EAAc,aAAa,CAAA,EAAE;AAAA,EACzG,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,YAAY,CAAC,SAAA,EAAW,SAAA,EAAW,WAAW,CAAA,EAAE;AAAA,EACnF,EAAE,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,YAAY,CAAC,WAAA,EAAa,WAAA,EAAa,aAAa,CAAA,EAAE;AAAA,EAC7F,EAAE,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,YAAY,CAAC,WAAA,EAAa,WAAA,EAAa,aAAa,CAAA,EAAE;AAAA,EAC7F,EAAE,UAAU,MAAA,EAAQ,KAAA,EAAO,QAAQ,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA,EAAE;AAAA,EACpE,EAAE,UAAU,MAAA,EAAQ,KAAA,EAAO,QAAQ,UAAA,EAAY,CAAC,SAAA,EAAW,UAAU,CAAA;AACvE,CAAA;AAgDA,SAAS,qBAAqB,MAAA,EAA6C;AACzE,EAAA,IAAI,CAAC,QAAQ,OAAO,QAAA;AACpB,EAAA,MAAM,SAAA,GAA6C;AAAA,IACjD,MAAA,EAAQ,QAAA;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,UAAA,EAAY,UAAA;AAAA,IACZ,WAAA,EAAa,WAAA;AAAA,IACb,aAAA,EAAe,aAAA;AAAA,IACf,cAAA,EAAgB;AAAA,GAClB;AACA,EAAA,OAAO,SAAA,CAAU,MAAM,CAAA,IAAK,QAAA;AAC9B;AAMO,SAAS,oBAAoB,IAAA,EAA8D;AAChG,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,UAAU,OAAO,MAAA;AAE5C,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,GAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,CAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,IAAU,MAAA;AAC9B,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,MAAM,CAAA,IAAK,MAAA;AAE5C,EAAA,OAAO;AAAA,IACL,YAAY,CAAA,IAAA,EAAO,QAAQ,CAAA,GAAA,EAAM,SAAS,IAAI,KAAK,CAAA,EAAA,CAAA;AAAA,IACnD,kBAAA,EAAoB;AAAA,GACtB;AACF;AAOO,SAAS,2BAA2B,IAAA,EAOzC;AACA,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,QAAA,EAAU,GAAA;AAAA,IACV,KAAA,EAAO,CAAA;AAAA,IACP,MAAA,EAAQ,MAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,SAAS,QAAA,IAAY,IAAA,CAAK,aAAa,MAAA,EAAQ;AAC/D,IAAA,OAAO,aAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAW,KAAK,gBAAA,IAAoB,GAAA;AAC1C,EAAA,MAAM,KAAA,GAAQ,KAAK,aAAA,IAAiB,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,IAAA,CAAK,MAAA,IAAU,MAAM,CAAA,IAAK,MAAA;AACxD,EAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,IAAA,CAAK,MAAM,CAAA;AAG/C,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,EAAA;AAClC,EAAA,MAAM,SAAA,GAAY,KAAK,SAAA,IAAa,GAAA;AACpC,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,IAAe,EAAA;AACxC,EAAA,MAAM,UAAA,GAAa,KAAK,UAAA,IAAc,CAAA;AAGtC,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,MAAA;AAElC,EAAA,IAAI,UAA+B,EAAC;AACpC,EAAA,IAAI,UAA+B,EAAC;AAEpC,EAAA,QAAQ,QAAA;AAAU;AAAA,IAEhB,KAAK,SAAA;AACH,MAAA,OAAA,GAAU,EAAE,SAAS,CAAA,EAAE;AACvB,MAAA,OAAA,GAAU,EAAE,SAAS,CAAA,EAAE;AACvB,MAAA;AAAA,IAEF,KAAK,SAAA;AACH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,CAAA,WAAA,EAAc,QAAQ,CAAA,GAAA,CAAA,EAAM;AAC/D,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,eAAA,EAAgB;AACnD,MAAA;AAAA,IAEF,KAAK,WAAA;AACH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,CAAA,YAAA,EAAe,QAAQ,CAAA,GAAA,CAAA,EAAM;AAChE,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,eAAA,EAAgB;AACnD,MAAA;AAAA,IAEF,KAAK,WAAA;AACH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,CAAA,WAAA,EAAc,QAAQ,CAAA,GAAA,CAAA,EAAM;AAC/D,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,eAAA,EAAgB;AACnD,MAAA;AAAA,IAEF,KAAK,YAAA;AACH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,CAAA,YAAA,EAAe,QAAQ,CAAA,GAAA,CAAA,EAAM;AAChE,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,eAAA,EAAgB;AACnD,MAAA;AAAA,IAEF,KAAK,YAAA;AACH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,CAAA,MAAA,EAAS,SAAS,CAAA,CAAA,CAAA,EAAI;AACzD,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,UAAA,EAAW;AAC9C,MAAA;AAAA;AAAA,IAGF,KAAK,UAAA;AACH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,CAAA,MAAA,EAAS,SAAS,CAAA,CAAA,CAAA,EAAI;AACzD,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,UAAA,EAAW;AAC9C,MAAA;AAAA,IAEF,KAAK,UAAA;AACH,MAAA,OAAA,GAAU,EAAE,SAAS,CAAA,EAAG,SAAA,EAAW,SAAS,SAAS,CAAA,aAAA,EAAgB,QAAQ,CAAA,GAAA,CAAA,EAAM;AACnF,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,wBAAA,EAAyB;AAC5D,MAAA;AAAA,IAEF,KAAK,YAAA;AACH,MAAA,OAAA,GAAU,EAAE,SAAS,CAAA,EAAG,SAAA,EAAW,SAAS,SAAS,CAAA,cAAA,EAAiB,QAAQ,CAAA,GAAA,CAAA,EAAM;AACpF,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,wBAAA,EAAyB;AAC5D,MAAA;AAAA,IAEF,KAAK,WAAA;AAEH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,WAAW,CAAA,MAAA,EAAS,CAAA,GAAI,SAAS,CAAA,CAAA,CAAA,EAAI;AAC7D,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,UAAA,EAAW;AAC9C,MAAA;AAAA;AAAA,IAGF,KAAK,UAAA;AACH,MAAA,OAAA,GAAU,EAAE,SAAA,EAAW,CAAA,WAAA,EAAc,QAAQ,CAAA,GAAA,CAAA,EAAM;AACnD,MAAA,OAAA,GAAU,EAAE,WAAW,eAAA,EAAgB;AACvC,MAAA;AAAA,IAEF,KAAK,YAAA;AACH,MAAA,OAAA,GAAU,EAAE,SAAA,EAAW,CAAA,YAAA,EAAe,QAAQ,CAAA,GAAA,CAAA,EAAM;AACpD,MAAA,OAAA,GAAU,EAAE,WAAW,eAAA,EAAgB;AACvC,MAAA;AAAA,IAEF,KAAK,YAAA;AACH,MAAA,OAAA,GAAU,EAAE,SAAA,EAAW,CAAA,WAAA,EAAc,QAAQ,CAAA,GAAA,CAAA,EAAM;AACnD,MAAA,OAAA,GAAU,EAAE,WAAW,eAAA,EAAgB;AACvC,MAAA;AAAA,IAEF,KAAK,aAAA;AACH,MAAA,OAAA,GAAU,EAAE,SAAA,EAAW,CAAA,YAAA,EAAe,QAAQ,CAAA,GAAA,CAAA,EAAM;AACpD,MAAA,OAAA,GAAU,EAAE,WAAW,eAAA,EAAgB;AACvC,MAAA;AAAA;AAAA,IAGF,KAAK,SAAA;AACH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,CAAA,KAAA,EAAQ,UAAU,CAAA,GAAA,CAAA,EAAM;AACxD,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,SAAA,EAAU;AAC1C,MAAA;AAAA,IAEF,KAAK,SAAA;AACH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,CAAA,KAAA,EAAQ,UAAU,CAAA,GAAA,CAAA,EAAO,SAAA,EAAW,CAAA,WAAA,EAAc,QAAQ,CAAA,GAAA,CAAA,EAAM;AAChG,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,SAAA,EAAW,WAAW,eAAA,EAAgB;AACtE,MAAA;AAAA,IAEF,KAAK,WAAA;AACH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,CAAA,KAAA,EAAQ,UAAU,CAAA,GAAA,CAAA,EAAO,SAAA,EAAW,CAAA,YAAA,EAAe,QAAQ,CAAA,GAAA,CAAA,EAAM;AACjG,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,SAAA,EAAW,WAAW,eAAA,EAAgB;AACtE,MAAA;AAAA;AAAA,IAGF,KAAK,WAAA;AACH,MAAA,OAAA,GAAU,EAAE,SAAS,CAAA,EAAG,SAAA,EAAW,UAAU,WAAW,CAAA,WAAA,EAAc,SAAS,CAAA,CAAA,CAAA,EAAI;AACnF,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,oBAAA,EAAqB;AACxD,MAAA;AAAA,IAEF,KAAK,WAAA;AACH,MAAA,OAAA,GAAU,EAAE,SAAS,CAAA,EAAG,SAAA,EAAW,UAAU,WAAW,CAAA,gBAAA,EAAmB,QAAQ,CAAA,GAAA,CAAA,EAAM;AACzF,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,yBAAA,EAA0B;AAC7D,MAAA;AAAA,IAEF,KAAK,aAAA;AACH,MAAA,OAAA,GAAU,EAAE,SAAS,CAAA,EAAG,SAAA,EAAW,WAAW,WAAW,CAAA,iBAAA,EAAoB,QAAQ,CAAA,GAAA,CAAA,EAAM;AAC3F,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,yBAAA,EAA0B;AAC7D,MAAA;AAAA;AAAA;AAAA,IAIF,KAAK,WAAA;AACH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,WAAW,CAAA,MAAA,EAAS,SAAA,GAAY,GAAG,CAAA,CAAA,CAAA,EAAI;AAC/D,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,UAAA,EAAW;AAC9C,MAAA;AAAA,IAEF,KAAK,WAAA;AACH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,WAAW,CAAA,WAAA,EAAc,QAAA,GAAW,GAAG,CAAA,GAAA,CAAA,EAAM;AACrE,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,eAAA,EAAgB;AACnD,MAAA;AAAA,IAEF,KAAK,aAAA;AACH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,WAAW,CAAA,YAAA,EAAe,QAAA,GAAW,GAAG,CAAA,GAAA,CAAA,EAAM;AACtE,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,eAAA,EAAgB;AACnD,MAAA;AAAA;AAAA;AAAA;AAAA,IAKF,KAAK,QAAA;AACH,MAAA,OAAA,GAAU;AAAA,QACR,SAAA,EAAW,qCAAA;AAAA,QACX,OAAA,EAAS,GAAA;AAAA,QACT,kBAAA,EAAoB;AAAA,OACtB;AACA,MAAA,OAAA,GAAU;AAAA,QACR,SAAA,EAAW,mCAAA;AAAA,QACX,OAAA,EAAS,CAAA;AAAA,QACT,kBAAA,EAAoB;AAAA,OACtB;AACA,MAAA;AAAA,IAEF,KAAK,QAAA;AACH,MAAA,OAAA,GAAU;AAAA,QACR,SAAA,EAAW,qCAAA;AAAA,QACX,OAAA,EAAS,GAAA;AAAA,QACT,kBAAA,EAAoB;AAAA,OACtB;AACA,MAAA,OAAA,GAAU;AAAA,QACR,SAAA,EAAW,mCAAA;AAAA,QACX,OAAA,EAAS,CAAA;AAAA,QACT,kBAAA,EAAoB;AAAA,OACtB;AACA,MAAA;AAAA;AAAA,IAGF,KAAK,SAAA;AAEH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,WAAW,CAAA,MAAA,EAAS,SAAA,GAAY,GAAG,CAAA,CAAA,CAAA,EAAI;AAC/D,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,UAAA,EAAW;AAC9C,MAAA;AAAA,IAEF,KAAK,UAAA;AAEH,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,WAAW,CAAA,MAAA,EAAS,GAAA,GAAM,SAAS,CAAA,CAAA,CAAA,EAAI;AAC/D,MAAA,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,UAAA,EAAW;AAC9C,MAAA;AAGA;AAGJ,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AACF;AAMO,SAAS,6BAA6B,QAAA,EAAqD;AAChG,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,SAAS,CAAA,EAAG,OAAO,QAAA;AAC3C,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,UAAA;AACzC,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,UAAA;AACzC,EAAA,OAAO,MAAA;AACT;AAwFO,SAAS,6BAA6B,QAAA,EAK3C;AACA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,SAAA;AAAA,IAAW,WAAA;AAAA,IAAa,WAAA;AAAA,IAAa,YAAA;AAAA,IACrC,UAAA;AAAA,IAAY,YAAA;AAAA,IACZ,UAAA;AAAA,IAAY,YAAA;AAAA,IAAc,YAAA;AAAA,IAAc,aAAA;AAAA,IACxC,SAAA;AAAA,IAAW,WAAA;AAAA,IACX,WAAA;AAAA,IAAa,aAAA;AAAA,IACb,WAAA;AAAA,IAAa;AAAA,GACf,CAAE,SAAS,QAAQ,CAAA;AAEnB,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,YAAA;AAAA,IACA,UAAA;AAAA,IAAY,UAAA;AAAA,IAAY,YAAA;AAAA,IAAc,WAAA;AAAA,IACtC,WAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IAAW;AAAA,GACb,CAAE,SAAS,QAAQ,CAAA;AAEnB,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,WAAA;AAAA,IAAa,WAAA;AAAA,IAAa;AAAA,GAC5B,CAAE,SAAS,QAAQ,CAAA;AAEnB,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,SAAA;AAAA,IAAW,SAAA;AAAA,IAAW;AAAA,GACxB,CAAE,SAAS,QAAQ,CAAA;AAEnB,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,YAAA;AAAA,IACd,SAAA,EAAW,QAAA;AAAA,IACX,UAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAU;AAAA,GACZ;AACF;AAKO,IAAM,iBAAA,GAAoC;AAAA,EAC/C,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,MAAA;AAAA,EACV,gBAAA,EAAkB,GAAA;AAAA,EAClB,aAAA,EAAe,CAAA;AAAA,EACf,QAAA,EAAU,EAAA;AAAA,EACV,SAAA,EAAW,GAAA;AAAA,EACX,WAAA,EAAa,EAAA;AAAA,EACb,UAAA,EAAY,CAAA;AAAA,EACZ,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,eAAA,EAAiB,IAAA;AAAA,EACjB,gBAAA,EAAkB,GAAA;AAAA,EAClB,WAAA,EAAa;AACf,CAAA;AC/iEO,SAAS,kBAAA,CACd,OAAA,GAAqC,EAAC,EACT;AAC7B,EAAA,MAAM;AAAA,IACJ,eAAA,GAAkB,IAAA;AAAA,IAClB,SAAA,GAAY,GAAA;AAAA,IACZ,IAAA,GAAO,IAAA;AAAA,IACP,UAAA,GAAa,KAAA;AAAA,IACb,KAAA,GAAQ;AAAA,GACV,GAAI,OAAA;AAEJ,EAAA,MAAM,GAAA,GAAMA,cAAiB,IAAI,CAAA;AAEjC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,gBAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,gBAAS,KAAK,CAAA;AACpD,EAAA,MAAM,UAAA,GAAaD,cAA6C,IAAI,CAAA;AACpE,EAAA,MAAM,aAAA,GAAgBA,cAAO,KAAK,CAAA;AAGlC,EAAA,MAAM,KAAA,GAAQE,mBAAY,MAAM;AAC9B,IAAA,WAAA,CAAY,KAAK,CAAA;AACjB,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,aAAA,CAAc,OAAA,GAAU,KAAA;AACxB,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,IACvB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAC,gBAAA,CAAU,MAAM;AAGd,IAAA,IAAI,CAAC,eAAA,EAAiB;AAEpB,MAAA,IAAI,cAAc,OAAA,EAAS;AAC3B,MAAA,aAAA,CAAc,OAAA,GAAU,IAAA;AAGxB,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,qBAAA,CAAsB,MAAM;AAC1B,UAAA,IAAI,QAAQ,CAAA,EAAG;AACb,YAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,cAAA,WAAA,CAAY,IAAI,CAAA;AAChB,cAAA,cAAA,CAAe,IAAI,CAAA;AAAA,YACrB,GAAG,KAAK,CAAA;AAAA,UACV,CAAA,MAAO;AACL,YAAA,WAAA,CAAY,IAAI,CAAA;AAChB,YAAA,cAAA,CAAe,IAAI,CAAA;AAAA,UACrB;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AACD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,GAAA,CAAI,OAAA;AACpB,IAAA,IAAI,CAAC,OAAA,EAAS;AAGd,IAAA,IAAI,OAAO,yBAAyB,WAAA,EAAa;AAC/C,MAAA,WAAA,CAAY,IAAI,CAAA;AAChB,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,IAAI,oBAAA;AAAA,MACnB,CAAC,OAAA,KAAY;AACX,QAAA,MAAM,CAAC,KAAK,CAAA,GAAI,OAAA;AAChB,QAAA,MAAM,SAAS,KAAA,CAAM,cAAA;AAErB,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,IAAI,QAAQ,CAAA,EAAG;AAEb,YAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,cAAA,WAAA,CAAY,IAAI,CAAA;AAChB,cAAA,cAAA,CAAe,IAAI,CAAA;AAAA,YACrB,GAAG,KAAK,CAAA;AAAA,UACV,CAAA,MAAO;AACL,YAAA,WAAA,CAAY,IAAI,CAAA;AAChB,YAAA,cAAA,CAAe,IAAI,CAAA;AAAA,UACrB;AAGA,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,QAAA,CAAS,UAAA,EAAW;AAAA,UACtB;AAAA,QACF,CAAA,MAAA,IAAW,CAAC,IAAA,EAAM;AAEhB,UAAA,IAAI,WAAW,OAAA,EAAS;AACtB,YAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,YAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,UACvB;AACA,UAAA,WAAA,CAAY,KAAK,CAAA;AAAA,QACnB;AAAA,MACF,CAAA;AAAA,MACA;AAAA,QACE,SAAA;AAAA,QACA;AAAA;AACF,KACF;AAEA,IAAA,QAAA,CAAS,QAAQ,OAAO,CAAA;AAExB,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,SAAA,EAAW,MAAM,UAAA,EAAY,KAAA,EAAO,WAAW,CAAC,CAAA;AAErE,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;ACnKO,SAAS,eAAA,CAAgB;AAAA,EAC9B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAI,SAAA,GAAY;AAClB,CAAA,EAAyB;AAEvB,EAAA,MAAM,YAAA,GAAe,SAAA,KAClB,SAAA,CAAU,IAAA,KAAS,QAAA,IAAY,SAAA,CAAU,QAAA,IAAY,SAAA,CAAU,QAAA,KAAa,MAAA,IAC7E,SAAA,CAAU,IAAA,KAAS,QAAA,CAAA;AAIrB,EAAA,IAAI,CAAC,YAAA,EAAc;AAEjB,IAAA,IAAI,aAAa,KAAA,EAAO;AACtB,MAAA,uBAAOC,cAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAsB,KAAA,EAAe,QAAA,EAAS,CAAA;AAAA,IAClE;AACA,IAAA,6DAAU,QAAA,EAAS,CAAA;AAAA,EACrB;AAGA,EAAA,MAAM,EAAE,GAAA,EAAK,QAAA,EAAS,GAAI,kBAAA,CAAmB;AAAA,IAC3C,eAAA,EAAiB,UAAU,eAAA,IAAmB,IAAA;AAAA,IAC9C,SAAA,EAAW,UAAU,gBAAA,IAAoB,GAAA;AAAA,IACzC,IAAA,EAAM,UAAU,WAAA,IAAe,IAAA;AAAA,IAC/B,YAAY,SAAA,CAAU;AAAA,GACvB,CAAA;AAGD,EAAA,IAAI,SAAA,CAAU,SAAS,QAAA,EAAU;AAC/B,IAAA,MAAM,EAAE,SAAS,OAAA,EAAS,QAAA,EAAU,OAAO,MAAA,EAAQ,MAAA,EAAO,GAAI,0BAAA,CAA2B,SAAS,CAAA;AAGlG,IAAA,MAAM,eAAA,GAAkB,WAAW,OAAA,GAAU,OAAA;AAG7C,IAAA,MAAM,oBAAA,GAAuB;AAAA,MAC3B,CAAA,QAAA,EAAW,QAAQ,CAAA,GAAA,EAAM,MAAM,IAAI,KAAK,CAAA,EAAA,CAAA;AAAA,MACxC,CAAA,UAAA,EAAa,QAAQ,CAAA,GAAA,EAAM,MAAM,IAAI,KAAK,CAAA,EAAA,CAAA;AAAA,MAC1C,CAAA,OAAA,EAAU,QAAQ,CAAA,GAAA,EAAM,MAAM,IAAI,KAAK,CAAA,EAAA;AAAA,KACzC,CAAE,KAAK,IAAI,CAAA;AAEX,IAAA,uBACEA,cAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,GAAG,KAAA;AAAA,UACH,GAAG,eAAA;AAAA,UACH,UAAA,EAAY,oBAAA;AAAA,UACZ,eAAA,EAAiB;AAAA,SACnB;AAAA,QAEC;AAAA;AAAA,KACH;AAAA,EAEJ;AAGA,EAAA,MAAM,YAAA,GAAe,oBAAoB,SAAS,CAAA;AAElD,EAAA,uBACEA,cAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,GAAG,YAAA;AAAA;AAAA,QAEH,OAAA,EAAS,WAAW,CAAA,GAAI;AAAA,OAC1B;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;ACnHO,SAASC,OAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOC,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACAA,IAAM,cAAA,GAAiBC,0BAAA;AAAA,EACrB,mUAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,wDAAA;AAAA,QACT,WAAA,EAAa,oEAAA;AAAA,QACb,OAAA,EAAS,gFAAA;AAAA,QACT,SAAA,EAAW,8DAAA;AAAA,QACX,KAAA,EAAO,8CAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,gBAAA;AAAA,QACT,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI,WAAA;AAAA,QACJ,IAAA,EAAM,eAAA;AAAA,QACN,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAQA,IAAM,MAAA,GAAeC,iBAAA,CAAA,UAAA;AAAA,EACnB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,UAAU,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAChE,IAAA,MAAM,IAAA,GAAO,UAAUC,cAAA,GAAO,QAAA;AAC9B,IAAA,uBACEN,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,IAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,QAC1D,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;AC/CrB,IAAM,KAAA,GAAcM,iBAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,MAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtC,IAAA,uBACEP,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA,EAAWC,GAAAA;AAAA,UACT,mXAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF,CAAA;AACA,KAAA,CAAM,WAAA,GAAc,OAAA;ACXpB,IAAM,aAAA,GAAgBG,0BAAAA;AAAA,EACpB;AACF,CAAA;AAEA,IAAM,KAAA,GAAcI,6BAIlB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BR,cAAAA;AAAA,EAAgBS,yBAAA,CAAA,IAAA;AAAA,EAAf;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWR,GAAAA,CAAG,aAAA,EAAc,EAAG,SAAS,CAAA;AAAA,IACvC,GAAG;AAAA;AACN,CACD,CAAA;AACD,KAAA,CAAM,cAA6BQ,yBAAA,CAAA,IAAA,CAAK,WAAA;ACgBxC,IAAM,aAAA,GAA8B;AAAA,EAClC,GAAA,EAAK,CAAA;AAAA,EACL,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,CAAA;AAAA,EACR,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ;AACV,CAAA;AAMA,SAAS,iBAAA,CAAkB;AAAA,EACzB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAsB;AAEpB,EAAA,MAAM,eAAe,KAAA,IAAS,aAAA;AAG9B,EAAA,MAAM,QAAA,GAAW,aAAa,MAAA,IAAU,IAAA;AAGxC,EAAA,MAAM,gBAAA,GAAmBX,kBAAAA,CAAY,CACnC,IAAA,EACA,QAAA,KACG;AACH,IAAA,IAAI,QAAA,EAAU;AAEZ,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,GAAA,EAAK,QAAA;AAAA,QACL,KAAA,EAAO,QAAA;AAAA,QACP,MAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH,CAAA,MAAO;AAEL,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,CAAC,IAAI,GAAG,QAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,QAAA,EAAU,QAAQ,CAAC,CAAA;AAGrC,EAAA,MAAM,gBAAA,GAAmBA,mBAAY,MAAM;AACzC,IAAA,IAAI,QAAA,EAAU;AAEZ,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH,CAAA,MAAO;AAEL,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,KAAK,YAAA,CAAa,GAAA;AAAA,QAClB,OAAO,YAAA,CAAa,GAAA;AAAA,QACpB,QAAQ,YAAA,CAAa,GAAA;AAAA,QACrB,MAAM,YAAA,CAAa,GAAA;AAAA,QACnB,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,QAAA,EAAU,QAAQ,CAAC,CAAA;AAGrC,EAAA,MAAM,gBAAA,GAAmBA,kBAAAA,CAAY,CAAC,IAAA,KAAsB;AAC1D,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,YAAA;AAAA,MACH;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,MAAM,kBAAkB,CACtB,IAAA,EACA,8BAEAY,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,oBAAAV,eAAC,KAAA,EAAA,EAAM,SAAA,EAAU,0FACd,QAAA,EAAA,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,EACrB,CAAA;AAAA,oBACAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,GAAA,EAAK,CAAA;AAAA,QACL,KAAA,EAAO,aAAa,IAAI,CAAA;AAAA,QACxB,QAAA,EAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,IAAA,EAAM,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,EAAE,CAAA,IAAK,CAAC,CAAA;AAAA,QACzE,QAAA,EAAU,QAAA;AAAA,QACV,SAAA,EAAU;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAGF,EAAA,uBACEU,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uCACd,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MAGD,CAAC,4BACAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,WAAW,SAAA,GAAY,SAAA;AAAA,UAChC,IAAA,EAAK,MAAA;AAAA,UACL,OAAA,EAAS,gBAAA;AAAA,UACT,SAAA,EAAWC,GAAAA;AAAA,YACT,SAAA;AAAA,YACA,WAAW,EAAA,GAAK;AAAA,WAClB;AAAA,UACA,KAAA,EAAO,WAAW,0CAAA,GAA6C,sCAAA;AAAA,UAE9D,QAAA,EAAA,QAAA,mBACCD,cAAAA,CAACW,gBAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA,mBAE1BX,cAAAA,CAACY,kBAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAEhC,KAAA,EAEJ,CAAA;AAAA,oBAGAF,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACZ,QAAA,EAAA;AAAA,MAAA,eAAA,CAAgB,OAAO,KAAK,CAAA;AAAA,MAC5B,eAAA,CAAgB,SAAS,OAAO,CAAA;AAAA,MAChC,eAAA,CAAgB,UAAU,QAAQ,CAAA;AAAA,MAClC,eAAA,CAAgB,QAAQ,MAAM;AAAA,KAAA,EACjC,CAAA;AAAA,IAGC,aAAa,CAAC,QAAA,oBACbA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mDAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,wBACtDA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACX,QAAA,EAAA,CAAC,IAAA,EAAM,KAAK,CAAA,CAAoB,GAAA,CAAI,CAAC,IAAA,KAAS;AAC9C,UAAA,MAAM,QAAA,GAAW,aAAa,IAAA,KAAS,IAAA;AACvC,UAAA,uBACEA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,WAAW,SAAA,GAAY,SAAA;AAAA,cAChC,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,cACpC,SAAA,EAAWC,GAAAA;AAAA,gBACT,8BAAA;AAAA,gBACA,CAAC,QAAA,IAAY;AAAA,eACf;AAAA,cAEC,QAAA,EAAA;AAAA,aAAA;AAAA,YAVI;AAAA,WAWP;AAAA,QAEJ,CAAC,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,sBAEAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA,QAAA,GACG,CAAA,EAAG,YAAA,CAAa,GAAG,CAAA,EAAG,YAAA,CAAa,IAAI,CAAA,CAAA,GACvC,CAAA,EAAG,YAAA,CAAa,GAAG,CAAA,CAAA,EAAI,YAAA,CAAa,KAAK,CAAA,CAAA,EAAI,YAAA,CAAa,MAAM,CAAA,CAAA,EAAI,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,IAAI,CAAA,CAAA,EAE/G;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEO,IAAM,YAAA,GAAea,YAAK,iBAAiB,CAAA;AAS3C,SAAS,mBAAmB,MAAA,EAGE;AACnC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,WAAW,MAAA,CAAO;AAAA;AAAA;AACpB,GAEJ;AACF;;;AC/NO,IAAM,uBAAA,GAA+C;AAAA,EAC1D,OAAA,EAAS,EAAE,OAAA,EAAS,wDAAA,EAAyD;AAAA,EAC7E,SAAA,EAAW,EAAE,OAAA,EAAS,8DAAA,EAA+D;AAAA,EACrF,OAAA,EAAS,EAAE,OAAA,EAAS,gFAAA,EAAiF;AAAA,EACrG,KAAA,EAAO,EAAE,OAAA,EAAS,6DAAA,EAA8D;AAAA,EAChF,WAAA,EAAa,EAAE,OAAA,EAAS,oEAAA,EAAqE;AAAA,EAC7F,IAAA,EAAM,EAAE,OAAA,EAAS,gEAAA;AACnB,CAAA;AAMO,IAAM,2BAAA,GAAmD;AAAA,EAC9D,OAAA,EAAS,EAAE,OAAA,EAAS,wDAAA,EAAyD;AAAA,EAC7E,SAAA,EAAW,EAAE,OAAA,EAAS,8DAAA,EAA+D;AAAA,EACrF,OAAA,EAAS,EAAE,OAAA,EAAS,gFAAA,EAAiF;AAAA,EACrG,KAAA,EAAO,EAAE,OAAA,EAAS,6DAAA,EAA8D;AAAA,EAChF,IAAA,EAAM,EAAE,OAAA,EAAS,gEAAA;AACnB,CAAA;AAMO,IAAM,6BAAA,GAAkD;AAAA,EAC7D,OAAA,EAAS,UAAA;AAAA,EACT,IAAA,EAAM,+BAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAMO,IAAM,qBAAA,GAAuC;AAAA,EAClD,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ;AAAA,EACjC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,EACnC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,EACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,EACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,EACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ;AAAA,EACjC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,MAAA,EAAO;AAAA,EAChC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ;AAAA,EACjC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ;AAAA,EACjC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,KAAA;AAC3B,CAAA;AAMO,IAAM,kBAAA,GAAqB,iBAAA;AAM3B,IAAM,aAAA,GAA+B;AAAA,EAC1C,cAAA,EAAgB,uBAAA;AAAA,EAChB,iBAAA,EAAmB,2BAAA;AAAA,EACnB,mBAAA,EAAqB,6BAAA;AAAA,EACrB,YAAA,EAAc,qBAAA;AAAA,EACd,cAAA,EAAgB;AAClB,CAAA;;;ACUO,SAAS,iBAAA,CACd,QAAA,EACA,OAAA,EACA,QAAA,GAAW,SAAA,EACH;AACR,EAAA,MAAM,MAAA,GAAS,SAAS,OAAO,CAAA;AAC/B,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,OAAO,MAAA,CAAO,OAAA;AAAA,EAChB;AAEA,EAAA,MAAM,cAAA,GAAiB,SAAS,QAAQ,CAAA;AACxC,EAAA,OAAO,gBAAgB,OAAA,IAAW,EAAA;AACpC;AC1FA,IAAM,YAAA,GAAec,qBAAwC,IAAI,CAAA;AAkD1D,SAAS,QAAA,GAA0B;AACxC,EAAA,MAAM,OAAA,GAAUC,kBAAW,YAAY,CAAA;AAEvC,EAAA,OAAO,SAAS,KAAA,IAAS,aAAA;AAC3B;AC1BA,SAAS,aAAa,GAAA,EAAqB;AACzC,EAAA,IAAI,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAEhC,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,EAAE,CAAA,CAAE,GAAA,CAAI,OAAK,CAAA,GAAI,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAAA,EACjD;AAEA,EAAA,IAAI,CAAC,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAA,EAAG;AACnC,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,WAAA,EAAa,CAAA,CAAA;AAChC;AAKO,SAAS,WAAA,CAAY,KAAa,OAAA,EAAyB;AAChE,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAClC,EAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC5C,EAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC5C,EAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC5C,EAAA,OAAO,CAAA,KAAA,EAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,UAAU,GAAG,CAAA,CAAA,CAAA;AAChD;AAMA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,IAAA;AAAA,EACd;AACF,CAAA,EAA0B;AAExB,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,eAAA,GAAkB,WAAW,KAAA,CAAM,YAAA;AACzC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,IAAIlB,eAAAA,CAAS,KAAA,EAAO,OAAO,EAAE,CAAA;AAEzD,EAAA,MAAM,iBAAA,GAAoBC,kBAAAA,CAAY,CAAC,CAAA,KAA2C;AAChF,IAAA,MAAM,MAAA,GAAS,EAAE,MAAA,CAAO,KAAA;AACxB,IAAA,QAAA,CAAS;AAAA,MACP,GAAA,EAAK,MAAA;AAAA,MACL,OAAA,EAAS,OAAO,OAAA,IAAW;AAAA,KAC5B,CAAA;AACD,IAAA,WAAA,CAAY,MAAM,CAAA;AAAA,EACpB,CAAA,EAAG,CAAC,QAAA,EAAU,KAAA,EAAO,OAAO,CAAC,CAAA;AAE7B,EAAA,MAAM,oBAAA,GAAuBA,kBAAAA,CAAY,CAAC,CAAA,KAA2C;AACnF,IAAA,MAAM,KAAA,GAAQ,EAAE,MAAA,CAAO,KAAA;AACvB,IAAA,WAAA,CAAY,KAAK,CAAA;AAEjB,IAAA,MAAM,UAAA,GAAa,aAAa,KAAK,CAAA;AACrC,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,QAAA,CAAS;AAAA,QACP,GAAA,EAAK,UAAA;AAAA,QACL,OAAA,EAAS,OAAO,OAAA,IAAW;AAAA,OAC5B,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,KAAA,EAAO,OAAO,CAAC,CAAA;AAE7B,EAAA,MAAM,kBAAA,GAAqBA,mBAAY,MAAM;AAC3C,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,WAAA,CAAY,MAAM,GAAG,CAAA;AAAA,IACvB;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,GAAG,CAAC,CAAA;AAEf,EAAA,MAAM,mBAAA,GAAsBA,kBAAAA,CAAY,CAAC,CAAA,KAA2C;AAClF,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,CAAA;AAC9C,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,QAAA,CAAS;AAAA,QACP,KAAK,KAAA,CAAM,GAAA;AAAA,QACX,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,KAAA,EAAO,GAAG,CAAC,CAAA;AAEzB,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA,CAAY,CAAC,MAAA,KAA2C;AAChF,IAAA,QAAA,CAAS;AAAA,MACP,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,OAAA,EAAS,OAAO,OAAA,IAAW;AAAA,KAC5B,CAAA;AACD,IAAA,WAAA,CAAY,OAAO,GAAG,CAAA;AAAA,EACxB,CAAA,EAAG,CAAC,QAAA,EAAU,KAAA,EAAO,OAAO,CAAC,CAAA;AAE7B,EAAA,MAAM,WAAA,GAAcA,mBAAY,MAAM;AACpC,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,WAAA,CAAY,EAAE,CAAA;AAAA,EAChB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,YAAA,GAAe,OAAO,GAAA,GACxB,WAAA,CAAY,MAAM,GAAA,EAAK,KAAA,CAAM,OAAA,IAAW,GAAG,CAAA,GAC3C,aAAA;AAEJ,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,KAAA,oBACCV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,yBACd,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBAIFU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAEb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,kBAAAA,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,KAAA,EAAO,OAAO,GAAA,IAAO,SAAA;AAAA,UACrB,QAAA,EAAU,iBAAA;AAAA,UACV,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAU,yGAAA;AAAA,UACV,KAAA,EAAO,EAAE,OAAA,EAAS,CAAA;AAAE;AAAA,OACtB,EACF,CAAA;AAAA,sBAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UACb,QAAA,kBAAAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,MAAA;AAAA,UACL,KAAA,EAAO,QAAA;AAAA,UACP,QAAA,EAAU,oBAAA;AAAA,UACV,MAAA,EAAQ,kBAAA;AAAA,UACR,WAAA,EAAY,SAAA;AAAA,UACZ,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA,OACZ,EACF,CAAA;AAAA,sBAGAU,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,iFAAA;AAAA,UACV,KAAA,EAAO,KAAA,EAAO,GAAA,GAAM,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,IAAA,EAAO,KAAA,CAAM,OAAA,IAAW,GAAG,CAAA,SAAA,CAAA,GAAc,mBAAA;AAAA,UAGzE,QAAA,EAAA;AAAA,4BAAAV,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,kBAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACL,eAAA,EACE,0NAAA;AAAA,kBACF,cAAA,EAAgB,SAAA;AAAA,kBAChB,kBAAA,EAAoB,gCAAA;AAAA,kBACpB,eAAA,EAAiB;AAAA;AACnB;AAAA,aACF;AAAA,4BAEAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,kBAAA;AAAA,gBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,YAAA;AAAa;AAAA;AACzC;AAAA;AAAA,OACF;AAAA,MAGC,KAAA,IAAS,CAAC,QAAA,oBACTA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,KAAA,EAAM,aAAA;AAAA,UACN,SAAA,EAAU,uKAAA;AAAA,UAEV,QAAA,kBAAAA,cAAAA,CAACgB,aAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AACzB,KAAA,EAEJ,CAAA;AAAA,IAGC,eAAe,KAAA,EAAO,GAAA,oBACrBN,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,wBACxDU,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAA2C,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,OAAA,IAAW,GAAA;AAAA,UAAI;AAAA,SAAA,EAAC;AAAA,OAAA,EACnF,CAAA;AAAA,sBAEAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EAEb,QAAA,EAAA;AAAA,wBAAAV,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,kBAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,eAAA,EACE,0NAAA;AAAA,cACF,cAAA,EAAgB,SAAA;AAAA,cAChB,kBAAA,EAAoB,gCAAA;AAAA,cACpB,eAAA,EAAiB;AAAA;AACnB;AAAA,SACF;AAAA,wBAEAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,kBAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,CAAA,0CAAA,EAA6C,KAAA,CAAM,GAAG,CAAA,MAAA;AAAA;AACpE;AAAA,SACF;AAAA,wBAEAA,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,GAAA,EAAI,GAAA;AAAA,YACJ,GAAA,EAAI,KAAA;AAAA,YACJ,KAAA,EAAO,MAAM,OAAA,IAAW,GAAA;AAAA,YACxB,QAAA,EAAU,mBAAA;AAAA,YACV,QAAA,EAAU,QAAA;AAAA,YACV,SAAA,EAAU,qFAAA;AAAA,YACV,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA;AAAE;AAAA,SACrB;AAAA,wBAEAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,sGAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,IAAA,EAAM,CAAA,KAAA,EAAQ,KAAA,CAAM,OAAA,IAAW,GAAG,CAAA,QAAA;AAAA;AACpC;AAAA;AACF,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAID,gBAAgB,MAAA,GAAS,CAAA,IAAK,CAAC,QAAA,oBAC9BU,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,+CAAA,EAAgD,QAAA,EAAA,SAAA,EAEjE,CAAA;AAAA,sBACAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BACZ,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,CAAC,MAAA,KAAW;AAC/B,QAAA,MAAM,aAAa,KAAA,EAAO,GAAA,EAAK,aAAY,KAAM,MAAA,CAAO,IAAI,WAAA,EAAY;AACxE,QAAA,uBACEA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,iBAAA,CAAkB,MAAM,CAAA;AAAA,YACvC,SAAA,EAAWC,GAAAA;AAAA,cACT,wDAAA;AAAA,cACA,aACI,4EAAA,GACA;AAAA,aACN;AAAA,YACA,KAAA,EAAO,EAAE,eAAA,EAAiB,MAAA,CAAO,GAAA,EAAI;AAAA,YACrC,OAAO,MAAA,CAAO;AAAA,WAAA;AAAA,UAVT,MAAA,CAAO;AAAA,SAWd;AAAA,MAEJ,CAAC,CAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEO,IAAM,gBAAA,GAAmBY,YAAK,qBAAqB,CAAA;AASnD,SAAS,uBAAuB,MAAA,EAIJ;AACjC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB,SAAS,MAAA,CAAO;AAAA;AAAA;AAClB,GAEJ;AACF;ACzTA,IAAM,MAAA,GAAyBiB,0BAAA,CAAA,IAAA;AAE/B,IAAM,WAAA,GAA8BA,0BAAA,CAAA,KAAA;AAEpC,IAAM,WAAA,GAA8BA,0BAAA,CAAA,KAAA;AAEpC,IAAM,aAAA,GAAsBC,iBAAA,CAAA,UAAA,CAG1B,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCR,eAAAA;AAAA,EAAiBO,0BAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWhB,GAAAA;AAAA,MACT,iTAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,sBACDD,cAAAA,CAAiBiB,0BAAA,CAAA,IAAA,EAAhB,EAAqB,OAAA,EAAO,IAAA,EAC3B,QAAA,kBAAAjB,cAAAA,CAACmB,uBAAA,EAAA,EAAY,SAAA,EAAU,oBAAA,EAAqB,CAAA,EAC9C;AAAA;AAAA;AACF,CACD,CAAA;AACD,aAAA,CAAc,cAA8BF,0BAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,IAAM,oBAAA,GAA6BC,6BAGjC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BlB,cAAAA;AAAA,EAAiBiB,0BAAA,CAAA,cAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWhB,GAAAA;AAAA,MACT,sDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAAD,cAAAA,CAACoB,qBAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU;AAAA;AACjC,CACD,CAAA;AACD,oBAAA,CAAqB,cAA8BH,0BAAA,CAAA,cAAA,CAAe,WAAA;AAElE,IAAM,sBAAA,GAA+BC,6BAGnC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BlB,cAAAA;AAAA,EAAiBiB,0BAAA,CAAA,gBAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWhB,GAAAA;AAAA,MACT,sDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAAD,cAAAA,CAACmB,uBAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AACnC,CACD,CAAA;AACD,sBAAA,CAAuB,cACLF,0BAAA,CAAA,gBAAA,CAAiB,WAAA;AAEnC,IAAM,gBAAsBC,iBAAA,CAAA,UAAA,CAG1B,CAAC,EAAE,SAAA,EAAW,UAAU,QAAA,GAAW,QAAA,EAAU,GAAG,KAAA,IAAS,GAAA,qBACzDlB,cAAAA,CAAiBiB,0BAAA,CAAA,MAAA,EAAhB,EACC,QAAA,kBAAAP,eAAAA;AAAA,EAAiBO,0BAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWhB,GAAAA;AAAA,MACT,mdAAA;AAAA,MACA,aAAa,QAAA,IACX,iIAAA;AAAA,MACF;AAAA,KACF;AAAA,IACA,QAAA;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAAD,eAAC,oBAAA,EAAA,EAAqB,CAAA;AAAA,sBACtBA,cAAAA;AAAA,QAAiBiB,0BAAA,CAAA,QAAA;AAAA,QAAhB;AAAA,UACC,SAAA,EAAWhB,GAAAA;AAAA,YACT,KAAA;AAAA,YACA,aAAa,QAAA,IACX;AAAA,WACJ;AAAA,UAEC;AAAA;AAAA,OACH;AAAA,sBACAD,eAAC,sBAAA,EAAA,EAAuB;AAAA;AAAA;AAC1B,CAAA,EACF,CACD,CAAA;AACD,aAAA,CAAc,cAA8BiB,0BAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,IAAM,WAAA,GAAoBC,6BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BlB,cAAAA;AAAA,EAAiBiB,0BAAA,CAAA,KAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWhB,GAAAA,CAAG,wCAAA,EAA0C,SAAS,CAAA;AAAA,IAChE,GAAG;AAAA;AACN,CACD,CAAA;AACD,WAAA,CAAY,cAA8BgB,0BAAA,CAAA,KAAA,CAAM,WAAA;AAEhD,IAAM,UAAA,GAAmBC,iBAAA,CAAA,UAAA,CAGvB,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCR,eAAAA;AAAA,EAAiBO,0BAAA,CAAA,IAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWhB,GAAAA;AAAA,MACT,2NAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8DAAA,EACd,0BAAAA,cAAAA,CAAiBiB,0BAAA,CAAA,aAAA,EAAhB,EACC,QAAA,kBAAAjB,cAAAA,CAACqB,iBAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,GAC7B,CAAA,EACF,CAAA;AAAA,sBAEArB,cAAAA,CAAiBiB,0BAAA,CAAA,QAAA,EAAhB,EAA0B,QAAA,EAAS;AAAA;AAAA;AACtC,CACD,CAAA;AACD,UAAA,CAAW,cAA8BA,0BAAA,CAAA,IAAA,CAAK,WAAA;AAE9C,IAAM,eAAA,GAAwBC,6BAG5B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BlB,cAAAA;AAAA,EAAiBiB,0BAAA,CAAA,SAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWhB,GAAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,IAClD,GAAG;AAAA;AACN,CACD,CAAA;AACD,eAAA,CAAgB,cAA8BgB,0BAAA,CAAA,SAAA,CAAU,WAAA;AC5FxD,IAAMK,cAAAA,GAA6B;AAAA,EACjC,KAAA,EAAO,CAAA;AAAA,EACP,KAAA,EAAO,EAAE,GAAA,EAAK,SAAA,EAAW,SAAS,GAAA,EAAI;AAAA;AAAA,EACtC,MAAA,EAAQ,CAAA;AAAA,EACR,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,KAAA,EAAO,IAAA;AAAA,IACP,MAAA,EAAQ,IAAA;AAAA,IACR,IAAA,EAAM;AAAA;AAEV,CAAA;AAMA,IAAM,aAAA,GAA8D;AAAA,EAClE,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAAA,EACjC,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EACnC,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EACnC,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA;AAC1B,CAAA;AAMA,SAAS,gBAAA,CAAiB;AAAA,EACxB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAqB;AAEnB,EAAA,MAAM,eAAe,KAAA,IAASA,cAAAA;AAG9B,EAAA,MAAM,iBAAA,GAAoBxB,kBAAAA,CAAY,CAAC,CAAA,KAA2C;AAChF,IAAA,MAAM,WAAW,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,EAAE,CAAA,IAAK,CAAA;AACjD,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,YAAA;AAAA,MACH,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ;AAAA,KAC5B,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA,CAAY,CAAC,QAAA,KAAgC;AACrE,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,YAAA;AAAA,MACH,OAAO,QAAA,IAAY,EAAE,GAAA,EAAK,SAAA,EAAW,SAAS,GAAA;AAAI,KACnD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,MAAM,kBAAA,GAAqBA,kBAAAA,CAAY,CAAC,CAAA,KAA2C;AACjF,IAAA,MAAM,YAAY,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,EAAE,CAAA,IAAK,CAAA;AAClD,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,YAAA;AAAA,MACH,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAS;AAAA,KAC9B,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA,CAAY,CAAC,QAAA,KAA0B;AAC/D,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,YAAA;AAAA,MACH,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,MAAM,gBAAA,GAAmBA,kBAAAA,CAAY,CAAC,IAAA,KAA8C;AAClF,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,YAAA;AAAA,MACH,KAAA,EAAO;AAAA,QACL,GAAG,YAAA,CAAa,KAAA;AAAA,QAChB,CAAC,IAAI,GAAG,CAAC,YAAA,CAAa,MAAM,IAAI;AAAA;AAClC,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,MAAM,WAAA,GAAcA,mBAAY,MAAM;AACpC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,KAAA,CAAM,GAAA,IACzC,YAAA,CAAa,KAAA,CAAM,KAAA,IACnB,YAAA,CAAa,KAAA,CAAM,MAAA,IACnB,YAAA,CAAa,KAAA,CAAM,IAAA;AAErB,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uCACd,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MAED,KAAA,IAAS,CAAC,QAAA,oBACTA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAK,SAAA;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,SAAA,EAAU,8CAAA;AAAA,UACV,KAAA,EAAM,cAAA;AAAA,UAEN,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB,KAAA,EAEJ,CAAA;AAAA,oBAGAhB,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,2DAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,aAAa,YAAA,CAAa,KAAA,KAAU,SAAS,CAAA,EAAG,YAAA,CAAa,KAAK,CAAA,EAAA,CAAA,GAAO,CAAA;AAAA,UACzE,aAAa,YAAA,CAAa,KAAA;AAAA,UAC1B,WAAA,EAAa,YAAA,CAAa,KAAA,EAAO,GAAA,IAAO,SAAA;AAAA,UACxC,YAAA,EAAc,CAAA,EAAG,YAAA,CAAa,MAAM,CAAA,EAAA,CAAA;AAAA,UACpC,cAAA,EAAgB,YAAA,CAAa,KAAA,CAAM,GAAA,IAAO,YAAA,CAAa,UAAU,MAAA,GAAS,CAAA,EAAG,YAAA,CAAa,KAAK,CAAA,EAAA,CAAA,GAAO,CAAA;AAAA,UACtG,gBAAA,EAAkB,YAAA,CAAa,KAAA,CAAM,KAAA,IAAS,YAAA,CAAa,UAAU,MAAA,GAAS,CAAA,EAAG,YAAA,CAAa,KAAK,CAAA,EAAA,CAAA,GAAO,CAAA;AAAA,UAC1G,iBAAA,EAAmB,YAAA,CAAa,KAAA,CAAM,MAAA,IAAU,YAAA,CAAa,UAAU,MAAA,GAAS,CAAA,EAAG,YAAA,CAAa,KAAK,CAAA,EAAA,CAAA,GAAO,CAAA;AAAA,UAC5G,eAAA,EAAiB,YAAA,CAAa,KAAA,CAAM,IAAA,IAAQ,YAAA,CAAa,UAAU,MAAA,GAAS,CAAA,EAAG,YAAA,CAAa,KAAK,CAAA,EAAA,CAAA,GAAO,CAAA;AAAA,UACxG,OAAA,EAAA,CAAU,YAAA,CAAa,KAAA,EAAO,OAAA,IAAW,GAAA,IAAO;AAAA,SAClD;AAAA,QAEA,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,QAAA,EAAA,SAAA,EAAO;AAAA;AAAA,KACzD;AAAA,oBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,wBAC3DA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,GAAA,EAAK,CAAA;AAAA,YACL,GAAA,EAAK,EAAA;AAAA,YACL,OAAO,YAAA,CAAa,KAAA;AAAA,YACpB,QAAA,EAAU,iBAAA;AAAA,YACV,QAAA,EAAU,QAAA;AAAA,YACV,SAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF,CAAA;AAAA,sBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,wBACtDU,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAO,YAAA,CAAa,KAAA;AAAA,YACpB,aAAA,EAAe,CAAC,GAAA,KAAQ,iBAAA,CAAkB,GAAkB,CAAA;AAAA,YAC5D,QAAA,EAAU,QAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAV,cAAAA,CAAC,iBAAc,SAAA,EAAU,aAAA,EACvB,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAY,cAAA,EAAe,CAAA,EAC1C,CAAA;AAAA,8BACAA,cAAAA,CAAC,aAAA,EAAA,EACE,wBAAc,GAAA,CAAI,CAAC,0BAClBA,cAAAA,CAAC,UAAA,EAAA,EAA6B,KAAA,EAAO,MAAM,KAAA,EACxC,QAAA,EAAA,KAAA,CAAM,SADQ,KAAA,CAAM,KAEvB,CACD,CAAA,EACH;AAAA;AAAA;AAAA;AACF,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,sBAC5DA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,GAAA,EAAK,CAAA;AAAA,UACL,GAAA,EAAK,GAAA;AAAA,UACL,OAAO,YAAA,CAAa,MAAA;AAAA,UACpB,QAAA,EAAU,kBAAA;AAAA,UACV,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA;AACZ,KAAA,EACF,CAAA;AAAA,oBAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aACb,QAAA,kBAAAA,cAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,OAAO,YAAA,CAAa,KAAA;AAAA,QACpB,QAAA,EAAU,iBAAA;AAAA,QACV,KAAA,EAAM,OAAA;AAAA,QACN,QAAA;AAAA,QACA,WAAA,EAAa,IAAA;AAAA,QACb,OAAA,EAAS;AAAA,UACP,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ;AAAA,UACjC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,UACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,UACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,UACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,UACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,MAAA,EAAO;AAAA,UAChC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,KAAA;AAAM;AACjC;AAAA,KACF,EACF,CAAA;AAAA,IAGC,CAAC,QAAA,oBACAU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,sBACtDU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,YAAA,CAAa,KAAA,CAAM,GAAA,GAAM,SAAA,GAAY,SAAA;AAAA,YAC9C,IAAA,EAAK,MAAA;AAAA,YACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,YACrC,SAAA,EAAWC,GAAAA;AAAA,cACT,SAAA;AAAA,cACA,YAAA,CAAa,MAAM,GAAA,IAAO;AAAA,aAC5B;AAAA,YACA,KAAA,EAAM,YAAA;AAAA,YAEN,QAAA,kBAAAD,cAAAA,CAACuB,mBAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SAC/B;AAAA,wBACAvB,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,YAAA,CAAa,KAAA,CAAM,KAAA,GAAQ,SAAA,GAAY,SAAA;AAAA,YAChD,IAAA,EAAK,MAAA;AAAA,YACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,OAAO,CAAA;AAAA,YACvC,SAAA,EAAWC,GAAAA;AAAA,cACT,SAAA;AAAA,cACA,YAAA,CAAa,MAAM,KAAA,IAAS;AAAA,aAC9B;AAAA,YACA,KAAA,EAAM,cAAA;AAAA,YAEN,QAAA,kBAAAD,cAAAA,CAACwB,sBAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SAClC;AAAA,wBACAxB,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,YAAA,CAAa,KAAA,CAAM,MAAA,GAAS,SAAA,GAAY,SAAA;AAAA,YACjD,IAAA,EAAK,MAAA;AAAA,YACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,QAAQ,CAAA;AAAA,YACxC,SAAA,EAAWC,GAAAA;AAAA,cACT,SAAA;AAAA,cACA,YAAA,CAAa,MAAM,MAAA,IAAU;AAAA,aAC/B;AAAA,YACA,KAAA,EAAM,eAAA;AAAA,YAEN,QAAA,kBAAAD,cAAAA,CAACyB,qBAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACjC;AAAA,wBACAzB,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,YAAA,CAAa,KAAA,CAAM,IAAA,GAAO,SAAA,GAAY,SAAA;AAAA,YAC/C,IAAA,EAAK,MAAA;AAAA,YACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,MAAM,CAAA;AAAA,YACtC,SAAA,EAAWC,GAAAA;AAAA,cACT,SAAA;AAAA,cACA,YAAA,CAAa,MAAM,IAAA,IAAQ;AAAA,aAC7B;AAAA,YACA,KAAA,EAAM,aAAA;AAAA,YAEN,QAAA,kBAAAD,cAAAA,CAAC0B,qBAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AACjC,OAAA,EACF,CAAA;AAAA,sBACA1B,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,+CAAA,EACV,QAAA,EAAA,eAAA,GAAkB,cAAc,cAAA,EACnC;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEO,IAAM,WAAA,GAAca,YAAK,gBAAgB,CAAA;AASzC,SAAS,kBAAkB,MAAA,EAEE;AAClC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd;AAAA;AAAA;AACF,GAEJ;AACF;ACrVA,IAAM,QAAA,GAAiB2B,iBAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,eAAA,EAAiB,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC3D,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAA2C;AAC/D,MAAA,QAAA,GAAW,CAAC,CAAA;AACZ,MAAA,eAAA,GAAkB,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,IACpC,CAAA;AAEA,IAAA,uBACE3B,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAWC,GAAAA;AAAA,UACT,uEAAA;AAAA,UACA,qGAAA;AAAA,UACA,iDAAA;AAAA,UACA,+BAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACA,QAAA,EAAU,YAAA;AAAA,QACT,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF,CAAA;AACA,QAAA,CAAS,WAAA,GAAc,UAAA;AC6BvB,IAAMqB,cAAAA,GAAiC;AAAA,EACrC,IAAA,EAAM,WAAA;AAAA,EACN,SAAA,EAAW,QAAA;AAAA,EACX,QAAA,EAAU;AAAA,IACR,KAAA,EAAO,IAAA;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA,EACA,YAAA,EAAc;AAChB,CAAA;AAEA,IAAM,aAAA,GAAgB;AAAA,EACpB,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,GAAA,EAAI;AAAA,EAC9B,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,GAAA,EAAI;AAAA,EAC9B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAK;AAAA,EAC7B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA;AACxB,CAAA;AAEA,IAAM,WAAA,GAAgC,CAAC,IAAA,EAAM,KAAA,EAAO,KAAK,IAAI,CAAA;AAC7D,IAAM,YAAA,GAAiC,CAAC,IAAA,EAAM,KAAA,EAAO,KAAK,IAAI,CAAA;AAgB9D,SAAS,eAAA,CAAgB;AAAA,EACvB,KAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,EAAyB;AACvB,EAAA,MAAM,SAAA,GAAY,YAAY,OAAA,IAAW,KAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,YAAY,KAAA,IAAS,CAAA;AACnC,EAAA,MAAM,IAAA,GAAO,YAAY,IAAA,IAAQ,IAAA;AAEjC,EAAA,MAAM,iBAAA,GAAoBxB,kBAAAA;AAAA,IACxB,CAAC,CAAA,KAA2C;AAC1C,MAAA,MAAM,WAAW,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,EAAE,CAAA,IAAK,CAAA;AACjD,MAAA,QAAA,CAAS;AAAA,QACP,KAAA,EAAO,QAAA;AAAA,QACP,IAAA;AAAA,QACA,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,SAAA,EAAW,QAAQ;AAAA,GAC5B;AAEA,EAAA,MAAM,gBAAA,GAAmBA,kBAAAA;AAAA,IACvB,CAAC,OAAA,KAA4B;AAC3B,MAAA,QAAA,CAAS;AAAA,QACP,KAAA;AAAA,QACA,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,SAAA,EAAW,QAAQ;AAAA,GAC7B;AAEA,EAAA,MAAM,YAAA,GAAeA,kBAAAA;AAAA,IACnB,CAAC,OAAA,KAAqB;AACpB,MAAA,QAAA,CAAS,OAAO,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,qDAAA,EACf,QAAA,EAAA;AAAA,sBAAAV,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,SAAA;AAAA,UACT,eAAA,EAAiB,YAAA;AAAA,UACjB;AAAA;AAAA,OACF;AAAA,sBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAiC,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACzD,CAAA;AAAA,oBAEAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,GAAA,EAAK,CAAA;AAAA,QACL,KAAA,EAAO,YAAY,KAAA,GAAQ,EAAA;AAAA,QAC3B,QAAA,EAAU,iBAAA;AAAA,QACV,QAAA,EAAU,YAAY,CAAC,SAAA;AAAA,QACvB,WAAA;AAAA,QACA,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBAEAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,qBACVA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,IAAA,KAAS,CAAA,IAAK,SAAA,GAAY,SAAA,GAAY,OAAA;AAAA,QAC/C,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,CAAC,CAAA;AAAA,QACjC,QAAA,EAAU,YAAY,CAAC,SAAA;AAAA,QACvB,SAAA,EAAWC,GAAAA;AAAA,UACT,kCAAA;AAAA,UACA,IAAA,KAAS,KAAK,SAAA,IAAa;AAAA,SAC7B;AAAA,QAEC,QAAA,EAAA;AAAA,OAAA;AAAA,MAXI;AAAA,KAaR,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAMA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,kBAAA,GAAqB,IAAA;AAAA,EACrB,eAAA,GAAkB,IAAA;AAAA,EAClB,mBAAA,GAAsB;AACxB,CAAA,EAAyB;AAEvB,EAAA,MAAM,eAAe,KAAA,IAASqB,cAAAA;AAG9B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIzB,eAAAA;AAAA,IACtC,aAAa,YAAA,IAAgB;AAAA,GAC/B;AAGA,EAAA,MAAM,gBAAA,GAAmBC,kBAAAA;AAAA,IACvB,CAAC,IAAA,KAAyB;AACxB,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,QAAA,CAAS;AAAA,UACP,GAAG,YAAA;AAAA,UACH,IAAA;AAAA,UACA,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,QAAA,CAAS;AAAA,UACP,GAAG,YAAA;AAAA,UACH;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,oBAAA,GAAuBA,kBAAAA;AAAA,IAC3B,CAAC,UAAA,KAAoC;AACnC,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,oBAAA,GAAuBA,kBAAAA;AAAA,IAC3B,CAAC,OAAA,KAAqB;AACpB,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,QAAA,EAAU;AAAA,UACR,GAAG,YAAA,CAAa,QAAA;AAAA,UAChB;AAAA;AACF,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,oBAAA,GAAuBA,kBAAAA;AAAA,IAC3B,CAAC,UAAA,KAAoC;AACnC,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,oBAAA,GAAuBA,kBAAAA;AAAA,IAC3B,CAAC,OAAA,KAAqB;AACpB,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,QAAA,EAAU,UACN,EAAE,KAAA,EAAO,aAAa,QAAA,EAAU,KAAA,IAAS,GAAG,IAAA,EAAM,YAAA,CAAa,UAAU,IAAA,IAAQ,IAAA,EAAM,SAAS,IAAA,EAAK,GACrG,EAAE,GAAG,YAAA,CAAa,QAAA,EAAW,OAAA,EAAS,KAAA;AAAM,OACjD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,qBAAA,GAAwBA,kBAAAA;AAAA,IAC5B,CAAC,UAAA,KAAoC;AACnC,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,qBAAA,GAAwBA,kBAAAA;AAAA,IAC5B,CAAC,OAAA,KAAqB;AACpB,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,SAAA,EAAW,OAAA,GACP,EAAE,KAAA,EAAO,YAAA,CAAa,WAAW,KAAA,IAAS,CAAA,EAAG,IAAA,EAAM,YAAA,CAAa,SAAA,EAAW,IAAA,IAAQ,MAAM,OAAA,EAAS,IAAA,EAAK,GACvG,YAAA,CAAa,SAAA,GAAY,EAAE,GAAG,YAAA,CAAa,SAAA,EAAW,OAAA,EAAS,KAAA,EAAM,GAAI;AAAA,OAC9E,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,qBAAA,GAAwBA,kBAAAA;AAAA,IAC5B,CAAC,UAAA,KAAoC;AACnC,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,qBAAA,GAAwBA,kBAAAA;AAAA,IAC5B,CAAC,OAAA,KAAqB;AACpB,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,SAAA,EAAW,OAAA,GACP,EAAE,KAAA,EAAO,YAAA,CAAa,WAAW,KAAA,IAAS,CAAA,EAAG,IAAA,EAAM,YAAA,CAAa,SAAA,EAAW,IAAA,IAAQ,MAAM,OAAA,EAAS,IAAA,EAAK,GACvG,YAAA,CAAa,SAAA,GAAY,EAAE,GAAG,YAAA,CAAa,SAAA,EAAW,OAAA,EAAS,KAAA,EAAM,GAAI;AAAA,OAC9E,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,qBAAA,GAAwBA,kBAAAA;AAAA,IAC5B,CAAC,SAAA,KAAgC;AAC/B,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,kBAAA,GAAqBA,kBAAAA;AAAA,IACzB,CAAC,WAAA,KAAwB;AACvB,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,IAAA,EAAM,WAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACR,KAAA,EAAO,WAAA;AAAA,UACP,IAAA,EAAM,IAAA;AAAA,UACN,OAAA,EAAS;AAAA;AACX,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,WAAA,GAAcA,mBAAY,MAAM;AACpC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAA,MAAM,oBAAA,GAAuBA,mBAAY,MAAM;AAC7C,IAAA,MAAM,kBAAkB,CAAC,YAAA;AACzB,IAAA,eAAA,CAAgB,eAAe,CAAA;AAE/B,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,YAAA;AAAA,MACH,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,YAAA,EAAc,QAAQ,CAAC,CAAA;AAGzC,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,EAAE,MAAM,MAAA,EAA0B,IAAA,EAAM8B,4BAAgB,KAAA,EAAO,MAAA,EAAQ,OAAO,mBAAA,EAAoB;AAAA,IAClG,EAAE,MAAM,WAAA,EAA+B,IAAA,EAAMC,oBAAQ,KAAA,EAAO,SAAA,EAAW,OAAO,qCAAA,EAAsC;AAAA,IACpH,EAAE,MAAM,QAAA,EAA4B,IAAA,EAAMC,+BAAmB,KAAA,EAAO,QAAA,EAAU,OAAO,uBAAA;AAAwB,GAC/G;AAEA,EAAA,MAAM,eAAA,GAAkB;AAAA,IACtB,EAAE,SAAA,EAAW,MAAA,EAA4B,IAAA,EAAMC,gCAAA,EAAsB,OAAO,YAAA,EAAa;AAAA,IACzF,EAAE,SAAA,EAAW,QAAA,EAA8B,IAAA,EAAMC,iCAAA,EAAuB,OAAO,cAAA,EAAe;AAAA,IAC9F,EAAE,SAAA,EAAW,OAAA,EAA6B,IAAA,EAAMC,8BAAA,EAAoB,OAAO,aAAA;AAAc,GAC3F;AAEA,EAAA,MAAM,iBAAA,GAAoB,aAAa,IAAA,KAAS,MAAA;AAChD,EAA6B,kBAAA,KAAuB,YAAA,IAAgB,aAAa,SAAA,EAAW,OAAA,IAAW,aAAa,SAAA,EAAW,OAAA;AAE/H,EAAA,uBACEvB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uCAAuC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAE/D,KAAA,IAAS,CAAC,QAAA,oBACTA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAK,SAAA;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,SAAA,EAAU,8CAAA;AAAA,UACV,KAAA,EAAM,kBAAA;AAAA,UAEN,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB,KAAA,EAEJ,CAAA;AAAA,oBAGAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBACZ,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,EAAE,MAAM,IAAA,EAAMkC,KAAAA,EAAM,KAAA,EAAO,SAAA,EAAW,OAAM,KAAM;AACjE,MAAA,MAAM,QAAA,GAAW,aAAa,IAAA,KAAS,IAAA;AACvC,MAAA,uBACExB,eAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,WAAW,SAAA,GAAY,WAAA;AAAA,UAChC,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,UACpC,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAWT,GAAAA,CAAG,eAAA,EAAiB,QAAA,IAAY,gCAAgC,CAAA;AAAA,UAC3E,KAAA;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAACkC,KAAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,YAC7B;AAAA;AAAA,SAAA;AAAA,QAVI;AAAA,OAWP;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,IAGC,iBAAA,oBACCxB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sCAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,SAAA,EAE7E,CAAA;AAAA,wBACAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBACZ,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,MAAA,KAAW;AAC7B,UAAA,MAAM,QAAA,GACJ,YAAA,CAAa,QAAA,CAAS,KAAA,KAAU,MAAA,CAAO,KAAA,IACvC,YAAA,CAAa,QAAA,CAAS,IAAA,KAAS,IAAA,IAC/B,YAAA,CAAa,QAAA,CAAS,OAAA;AACxB,UAAA,uBACEA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,WAAW,SAAA,GAAY,SAAA;AAAA,cAChC,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,MAAM,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAA;AAAA,cAC9C,QAAA,EAAU,QAAA;AAAA,cACV,SAAA,EAAWC,GAAAA,CAAG,kBAAA,EAAoB,QAAA,IAAY,gCAAgC,CAAA;AAAA,cAE7E,QAAA,EAAA,MAAA,CAAO;AAAA,aAAA;AAAA,YARH,MAAA,CAAO;AAAA,WASd;AAAA,QAEJ,CAAC,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,MAGC,CAAC,YAAA,oBACAS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,WAAA,EAE7E,CAAA;AAAA,wBACAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,GAAA,EAAK,CAAA;AAAA,cACL,KAAA,EAAO,aAAa,QAAA,CAAS,KAAA;AAAA,cAC7B,QAAA,EAAU,CAAC,CAAA,KACT,oBAAA,CAAqB;AAAA,gBACnB,GAAG,YAAA,CAAa,QAAA;AAAA,gBAChB,OAAO,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,EAAE,CAAA,IAAK;AAAA,eACxC,CAAA;AAAA,cAEH,QAAA,EAAU,QAAA;AAAA,cACV,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BACZ,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,YAAA,MAAM,QAAA,GAAW,YAAA,CAAa,QAAA,CAAS,IAAA,KAAS,IAAA;AAChD,YAAA,uBACEA,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,WAAW,SAAA,GAAY,SAAA;AAAA,gBAChC,IAAA,EAAK,IAAA;AAAA,gBACL,OAAA,EAAS,MACP,oBAAA,CAAqB;AAAA,kBACnB,GAAG,YAAA,CAAa,QAAA;AAAA,kBAChB;AAAA,iBACD,CAAA;AAAA,gBAEH,QAAA,EAAU,QAAA;AAAA,gBACV,SAAA,EAAWC,GAAAA;AAAA,kBACT,4BAAA;AAAA,kBACA,QAAA,IAAY;AAAA,iBACd;AAAA,gBAEC,QAAA,EAAA;AAAA,eAAA;AAAA,cAhBI;AAAA,aAiBP;AAAA,UAEJ,CAAC,CAAA,EACH;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MAID,YAAA,oBACCS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EAEb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,mBAAA,EAE7E,CAAA;AAAA,0BACAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,eAAA,oBACCV,cAAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,WAAA;AAAA,gBACN,YAAY,YAAA,CAAa,QAAA;AAAA,gBACzB,QAAA,EAAU,oBAAA;AAAA,gBACV,QAAA,EAAU,oBAAA;AAAA,gBACV,KAAA,EAAO,WAAA;AAAA,gBACP,QAAA,EAAU;AAAA;AAAA,aACZ;AAAA,4BAEFA,cAAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,WAAA;AAAA,gBACN,YAAY,YAAA,CAAa,QAAA;AAAA,gBACzB,QAAA,EAAU,oBAAA;AAAA,gBACV,QAAA,EAAU,oBAAA;AAAA,gBACV,KAAA,EAAO,WAAA;AAAA,gBACP,QAAA,EAAU;AAAA;AAAA;AACZ,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,QAGC,kBAAA,oBACCU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,oBAAA,EAE7E,CAAA;AAAA,0BACAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,eAAA,oBACCV,cAAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,YAAA;AAAA,gBACN,YAAY,YAAA,CAAa,SAAA;AAAA,gBACzB,QAAA,EAAU,qBAAA;AAAA,gBACV,QAAA,EAAU,qBAAA;AAAA,gBACV,KAAA,EAAO,YAAA;AAAA,gBACP,QAAA,EAAU;AAAA;AAAA,aACZ;AAAA,4BAEFA,cAAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,YAAA;AAAA,gBACN,YAAY,YAAA,CAAa,SAAA;AAAA,gBACzB,QAAA,EAAU,qBAAA;AAAA,gBACV,QAAA,EAAU,qBAAA;AAAA,gBACV,KAAA,EAAO,YAAA;AAAA,gBACP,QAAA,EAAU;AAAA;AAAA;AACZ,WAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EAEJ;AAAA,KAAA,EAEJ,CAAA;AAAA,IAID,CAAC,qBAAqB,kBAAA,IAAsB,YAAA,oBAC3CU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,oBAAA,EAE7E,CAAA;AAAA,sBACAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,eAAA,oBACCV,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,YAAA;AAAA,YACN,YAAY,YAAA,CAAa,SAAA;AAAA,YACzB,QAAA,EAAU,qBAAA;AAAA,YACV,QAAA,EAAU,qBAAA;AAAA,YACV,KAAA,EAAO,YAAA;AAAA,YACP,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBAEFA,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,YAAA;AAAA,YACN,YAAY,YAAA,CAAa,SAAA;AAAA,YACzB,QAAA,EAAU,qBAAA;AAAA,YACV,QAAA,EAAU,qBAAA;AAAA,YACV,KAAA,EAAO,YAAA;AAAA,YACP,QAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAIFU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,6CAAA,EAA8C,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBACrEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACZ,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,CAAC,EAAE,SAAA,EAAW,IAAA,EAAMkC,KAAAA,EAAM,OAAM,KAAM;AACzD,UAAA,MAAM,QAAA,GAAW,aAAa,SAAA,KAAc,SAAA;AAC5C,UAAA,MAAM,UAAA,GAAa,QAAA,IAAY,YAAA,CAAa,IAAA,KAAS,MAAA;AACrD,UAAA,uBACElC,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,WAAW,SAAA,GAAY,WAAA;AAAA,cAChC,IAAA,EAAK,MAAA;AAAA,cACL,OAAA,EAAS,MAAM,qBAAA,CAAsB,SAAS,CAAA;AAAA,cAC9C,QAAA,EAAU,UAAA;AAAA,cACV,SAAA,EAAWC,GAAAA,CAAG,SAAA,EAAW,QAAA,IAAY,gCAAgC,CAAA;AAAA,cACrE,KAAA;AAAA,cAEA,QAAA,kBAAAD,cAAAA,CAACkC,KAAAA,EAAA,EAAK,WAAU,aAAA,EAAc;AAAA,aAAA;AAAA,YATzB;AAAA,WAUP;AAAA,QAEJ,CAAC,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAlC,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,yCAAA,EACb,QAAA,EAAA,oBAAA,CAAqB,YAAY,CAAA,EACpC;AAAA,KAAA,EACF,CAAA;AAAA,IAAA,CAGE,kBAAA,IAAsB,oCACtBA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAS,oBAAA;AAAA,QACT,QAAA,EAAU,QAAA;AAAA,QACV,SAAA,EAAU,4DAAA;AAAA,QAET,QAAA,EAAA,YAAA,mBACCU,eAAAA,CAAAyB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAnC,cAAAA,CAACoB,qBAAAA,EAAA,EAAU,SAAA,EAAU,kBAAA,EAAmB,CAAA;AAAA,UAAE;AAAA,SAAA,EAE5C,CAAA,mBAEAV,eAAAA,CAAAyB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAnC,cAAAA,CAACmB,uBAAAA,EAAA,EAAY,SAAA,EAAU,kBAAA,EAAmB,CAAA;AAAA,UAAE;AAAA,SAAA,EAE9C;AAAA;AAAA;AAEJ,GAAA,EAEJ,CAAA;AAEJ;AAEO,IAAM,eAAA,GAAkBN,YAAK,oBAAoB,CAAA;AAmBjD,SAAS,qBAAA,CACd,MAAA,GAAsC,EAAC,EACF;AACrC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,oBAAoB,MAAA,CAAO,kBAAA;AAAA,QAC3B,iBAAiB,MAAA,CAAO,eAAA;AAAA,QACxB,qBAAqB,MAAA,CAAO;AAAA;AAAA;AAC9B,GAEJ;AACF;AC1oBA,IAAMsB,cAAAA,GAA6B;AAAA,EACjC,GAAA,EAAK,CAAA;AAAA,EACL,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,CAAA;AAAA,EACR,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ;AACV,CAAA;AAMA,SAAS,gBAAA,CAAiB;AAAA,EACxB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAqB;AAEnB,EAAA,MAAM,eAAe,KAAA,IAASA,cAAAA;AAG9B,EAAA,MAAM,QAAA,GAAW,aAAa,MAAA,IAAU,IAAA;AAGxC,EAAA,MAAM,gBAAA,GAAmBxB,kBAAAA,CAAY,CACnC,IAAA,EACA,QAAA,KACG;AACH,IAAA,IAAI,QAAA,EAAU;AAEZ,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,GAAA,EAAK,QAAA;AAAA,QACL,KAAA,EAAO,QAAA;AAAA,QACP,MAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH,CAAA,MAAO;AAEL,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,CAAC,IAAI,GAAG,QAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,QAAA,EAAU,QAAQ,CAAC,CAAA;AAGrC,EAAA,MAAM,gBAAA,GAAmBA,mBAAY,MAAM;AACzC,IAAA,IAAI,QAAA,EAAU;AAEZ,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH,CAAA,MAAO;AAEL,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,KAAK,YAAA,CAAa,GAAA;AAAA,QAClB,OAAO,YAAA,CAAa,GAAA;AAAA,QACpB,QAAQ,YAAA,CAAa,GAAA;AAAA,QACrB,MAAM,YAAA,CAAa,GAAA;AAAA,QACnB,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,QAAA,EAAU,QAAQ,CAAC,CAAA;AAGrC,EAAA,MAAM,gBAAA,GAAmBA,kBAAAA,CAAY,CAAC,IAAA,KAAsB;AAC1D,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,YAAA;AAAA,MACH;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,MAAM,eAAA,GAAkB,CACtB,IAAA,EACA,SAAA,qBAEAY,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,oBAAAV,eAAC,KAAA,EAAA,EAAM,SAAA,EAAU,0FACd,QAAA,EAAA,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,EACrB,CAAA;AAAA,oBACAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,GAAA,EAAK,CAAA;AAAA,QACL,KAAA,EAAO,aAAa,IAAI,CAAA;AAAA,QACxB,QAAA,EAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,IAAA,EAAM,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,EAAE,CAAA,IAAK,CAAC,CAAA;AAAA,QACzE,QAAA,EAAU,QAAA;AAAA,QACV,SAAA,EAAU;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAGF,EAAA,uBACEU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uCACd,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MAGD,CAAC,4BACAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,WAAW,SAAA,GAAY,SAAA;AAAA,UAChC,IAAA,EAAK,MAAA;AAAA,UACL,OAAA,EAAS,gBAAA;AAAA,UACT,SAAA,EAAWC,GAAAA;AAAA,YACT,SAAA;AAAA,YACA,WAAW,EAAA,GAAK;AAAA,WAClB;AAAA,UACA,KAAA,EAAO,WAAW,0CAAA,GAA6C,sCAAA;AAAA,UAE9D,QAAA,EAAA,QAAA,mBACCD,cAAAA,CAACW,gBAAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA,mBAE1BX,cAAAA,CAACY,kBAAAA,EAAA,EAAO,WAAU,SAAA,EAAU;AAAA;AAAA;AAEhC,KAAA,EAEJ,CAAA;AAAA,oBAGAF,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACZ,QAAA,EAAA;AAAA,MAAA,eAAA,CAAgB,OAAO,KAAK,CAAA;AAAA,MAC5B,eAAA,CAAgB,SAAS,OAAO,CAAA;AAAA,MAChC,eAAA,CAAgB,UAAU,QAAQ,CAAA;AAAA,MAClC,eAAA,CAAgB,QAAQ,MAAM;AAAA,KAAA,EACjC,CAAA;AAAA,IAGC,aAAa,CAAC,QAAA,oBACbA,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mDAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,wBACtDA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACX,QAAA,EAAA,CAAC,IAAA,EAAM,KAAK,CAAA,CAAoB,GAAA,CAAI,CAAC,IAAA,KAAS;AAC9C,UAAA,MAAM,QAAA,GAAW,aAAa,IAAA,KAAS,IAAA;AACvC,UAAA,uBACEA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,WAAW,SAAA,GAAY,SAAA;AAAA,cAChC,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,cACpC,SAAA,EAAWC,GAAAA;AAAA,gBACT,8BAAA;AAAA,gBACA,CAAC,QAAA,IAAY;AAAA,eACf;AAAA,cAEC,QAAA,EAAA;AAAA,aAAA;AAAA,YAVI;AAAA,WAWP;AAAA,QAEJ,CAAC,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,sBAEAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA,QAAA,GACG,CAAA,EAAG,YAAA,CAAa,GAAG,CAAA,EAAG,YAAA,CAAa,IAAI,CAAA,CAAA,GACvC,CAAA,EAAG,YAAA,CAAa,GAAG,CAAA,CAAA,EAAI,YAAA,CAAa,KAAK,CAAA,CAAA,EAAI,YAAA,CAAa,MAAM,CAAA,CAAA,EAAI,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,IAAI,CAAA,CAAA,EAE/G;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEO,IAAM,WAAA,GAAca,YAAK,gBAAgB,CAAA;AASzC,SAAS,kBAAkB,MAAA,EAGE;AAClC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,WAAW,MAAA,CAAO;AAAA;AAAA;AACpB,GAEJ;AACF;ACnOA,IAAM,UAAUoC,kBAAA,EAAc;AAgB9B,SAAS,eAAA,CAAgB;AAAA,EACvB,OAAA;AAAA,EACA,KAAA,GAAQ,mBAAA;AAAA,EACR;AACF,CAAA,EAAoB;AAClB,EAAA,uBACEpC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cACb,QAAA,kBAAAU,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,OAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA,EAAU,qFAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAACqC,qBAAA,EAAA,EAAU,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,QAClC;AAAA;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAEO,IAAM,UAAA,GAAaxB,YAAK,eAAe,CAAA;AAU9C,SAAS,qBAAA,CACP,IAAA,EACA,WAAA,EACA,QAAA,EACM;AAEN,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,KAA2D;AAC7E,IAAA,IAAI,IAAA,CAAK,KAAA,EAAO,EAAA,KAAO,WAAA,EAAa;AAClC,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,KAAA,EAAO;AAAA,UACL,GAAG,QAAA;AAAA,UACH,EAAA,EAAI;AAAA;AAAA;AACN,OACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAGA,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AAGlD,EAAA,MAAM,eAAwF,EAAC;AAC/F,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,KAAA,MAAW,CAAC,UAAU,WAAW,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AAChE,MAAA,YAAA,CAAa,QAAQ,CAAA,GAAK,WAAA,CAAwE,GAAA,CAAI,UAAU,CAAA;AAAA,IAClH;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,OAAA,EAAS,cAAA;AAAA,IACT,KAAA,EAAO,OAAO,IAAA,CAAK,YAAY,EAAE,MAAA,GAAS,CAAA,GAAI,eAAe,IAAA,CAAK;AAAA,GACpE;AACF;AAiCO,SAAS,iBACd,MAAA,EACsB;AAEtB,EAAA,MAAM,iBAAA,GAAoB,CAAC,EAAE,QAAA,EAAS,KAA8B;AAClE,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAC1C,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAC1C,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,YAAY,CAAA;AAElD,IAAA,MAAM,WAAA,GAAcf,mBAAY,MAAM;AACpC,MAAA,IAAI,CAAC,YAAA,EAAc,KAAA,EAAO,EAAA,EAAI;AAC5B,QAAA,OAAA,CAAQ,KAAK,oCAAoC,CAAA;AACjD,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,GAAc,aAAa,KAAA,CAAM,EAAA;AAGvC,MAAA,MAAM,WAAA,GAAc,qBAAA;AAAA,QAClB,QAAA,CAAS,IAAA;AAAA,QACT,WAAA;AAAA,QACA,MAAA,CAAO;AAAA,OACT;AAGA,MAAA,QAAA,CAAS;AAAA,QACP,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH,GAAG,CAAC,QAAA,CAAS,IAAA,EAAM,QAAA,EAAU,YAAY,CAAC,CAAA;AAE1C,IAAA,uBACEE,cAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,WAAA;AAAA,QACT,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA,EAAU;AAAA;AAAA,KACZ;AAAA,EAEJ,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,CAAC,EAAE,QAAA,uBAAeA,cAAAA,CAAC,qBAAkB,QAAA,EAAoB;AAAA,GACnE;AACF;AC5KA,IAAM,MAAA,GAAyBsC,0BAAA,CAAA,IAAA;AAI/B,IAAM,YAAA,GAA+BA,0BAAA,CAAA,MAAA;AAIrC,IAAM,aAAA,GAAsBC,6BAG1B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BvC,cAAAA;AAAA,EAAiBsC,0BAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWrC,GAAAA;AAAA,MACT,wJAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD,CAAA;AACD,aAAA,CAAc,cAA8BqC,0BAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,IAAM,aAAA,GAAsBC,iBAAA,CAAA,UAAA,CAG1B,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpC7B,eAAAA,CAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,kBAAAV,eAAC,aAAA,EAAA,EAAc,CAAA;AAAA,kBACfU,eAAAA;AAAA,IAAiB4B,0BAAA,CAAA,OAAA;AAAA,IAAhB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAWrC,GAAAA;AAAA,QACT,+iBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDS,eAAAA,CAAiB4B,0BAAA,CAAA,KAAA,EAAhB,EAAsB,WAAU,+QAAA,EAC/B,QAAA,EAAA;AAAA,0BAAAtC,cAAAA,CAACgB,aAAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,0BACvBhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA,SAAA,EACjC;AAAA;AAAA;AAAA;AACF,CAAA,EACF,CACD,CAAA;AACD,aAAA,CAAc,cAA8BsC,0BAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,IAAM,0BAAgCC,iBAAA,CAAA,UAAA,CAOpC,CAAC,EAAE,SAAA,EAAW,UAAU,eAAA,GAAkB,KAAA,EAAO,eAAA,GAAkB,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACzF7B,gBAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,kBAAAV,eAAC,aAAA,EAAA,EAAc,CAAA;AAAA,kBACfU,eAAAA;AAAA,IAAiB4B,0BAAA,CAAA,OAAA;AAAA,IAAhB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAWrC,GAAAA;AAAA,QACT,qLAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAGJ,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAiBsC,0BAAA,CAAA,KAAA,EAAhB,EAAsB,SAAA,EAAU,WAC9B,QAAA,EAAA,eAAA,EACH,CAAA;AAAA,QACC,QAAA;AAAA,QACA,CAAC,eAAA,oBACA5B,gBAAiB4B,0BAAA,CAAA,KAAA,EAAhB,EAAsB,WAAU,+QAAA,EAC/B,QAAA,EAAA;AAAA,0BAAAtC,cAAAA,CAACgB,aAAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,0BACvBhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA,SAAA,EACjC;AAAA;AAAA;AAAA;AAEJ,CAAA,EACF,CACD,CAAA;AACD,uBAAA,CAAwB,WAAA,GAAc,yBAAA;AAEtC,IAAM,eAAe,CAAC;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACEA,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAWC,GAAAA;AAAA,MACT,oDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA;AAEF,YAAA,CAAa,WAAA,GAAc,cAAA;AAgB3B,IAAM,WAAA,GAAoBsC,6BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BvC,cAAAA;AAAA,EAAiBsC,0BAAA,CAAA,KAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWrC,GAAAA;AAAA,MACT,mDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD,CAAA;AACD,WAAA,CAAY,cAA8BqC,0BAAA,CAAA,KAAA,CAAM,WAAA;AAEhD,IAAM,iBAAA,GAA0BC,6BAG9B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BvC,cAAAA;AAAA,EAAiBsC,0BAAA,CAAA,WAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAWrC,GAAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,IACvD,GAAG;AAAA;AACN,CACD,CAAA;AACD,iBAAA,CAAkB,cAA8BqC,0BAAA,CAAA,WAAA,CAAY,WAAA;AC3I5D,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyC;AACvC,EAAA,uBACEtC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,GAAAA,CAAG,mCAAA,EAAqC,SAAS,CAAA;AAAA,MAC3D,GAAG;AAAA;AAAA,GACN;AAEJ;ACyDA,SAAS,eAAe,KAAA,EAAmC;AACzD,EAAA,IAAI,CAAC,OAAO,OAAO,SAAA;AACnB,EAAA,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AACjC,EAAA,IAAI,KAAA,GAAQ,OAAO,IAAA,EAAM,OAAO,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC5D,EAAA,OAAO,IAAI,KAAA,IAAS,IAAA,GAAO,IAAA,CAAA,EAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC9C;AAMA,SAAS,eAAA,CAAgB;AAAA,EACvB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,EAAoB;AAClB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIJ,gBAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAAA,CAAsB,EAAE,CAAA;AAC1D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,gBAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,gBAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,gBAAS,CAAC,CAAA;AAClC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,gBAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,gBAAoB,QAAQ,CAAA;AAC9D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAAA,CAAsB;AAAA,IAC1D,IAAA,EAAM,IAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,SAAA,EAAW,KAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACR,CAAA;AACD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAAA,CAAmB;AAAA,IACjD,GAAA,EAAK,EAAA;AAAA,IACL,OAAA,EAAS,KAAA;AAAA,IACT,KAAA,EAAO,IAAA;AAAA,IACP,aAAA,EAAe;AAAA,GAChB,CAAA;AAGD,EAAA,MAAM,aAAaC,kBAAAA,CAAY,OAAO,UAAA,GAAqB,EAAA,EAAI,UAAkB,CAAA,KAAM;AACrF,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,QACjC,KAAA,EAAO,IAAA;AAAA,QACP,IAAA,EAAM,QAAQ,QAAA,EAAS;AAAA,QACvB,IAAA,EAAM;AAAA,OACP,CAAA;AAGD,MAAA,MAAA,CAAO,GAAA,CAAI,6BAA6B,OAAO,CAAA;AAE/C,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAA,CAAO,GAAA,CAAI,wBAAwB,UAAU,CAAA;AAAA,MAC/C;AAEA,MAAA,MAAM,WAAW,MAAM,KAAA,CAAM,GAAG,WAAW,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AACvD,MAAA,IAAI,CAAC,QAAA,CAAS,EAAA,EAAI,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAEzD,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,MAAM,SAAsB,IAAA,CAAK,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,GAAA,MAAkC;AAAA,QAClF,IAAI,GAAA,CAAI,EAAA;AAAA,QACR,GAAA,EAAM,IAAI,GAAA,IAAkB,EAAA;AAAA,QAC5B,GAAA,EAAM,IAAI,GAAA,IAAkB,EAAA;AAAA,QAC5B,QAAA,EAAW,IAAI,QAAA,IAAuB,EAAA;AAAA,QACtC,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,QAAA,EAAW,IAAI,QAAA,IAAuB;AAAA,OACxC,CAAE,CAAA;AAEF,MAAA,IAAI,YAAY,CAAA,EAAG;AACjB,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,GAAG,KAAK,CAAC,CAAA;AAAA,MAC5C;AAEA,MAAA,UAAA,CAAW,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,IACtC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,yBAAyB,KAAK,CAAA;AAAA,IAC9C,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,EAAAC,iBAAU,MAAM;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAA,CAAQ,CAAC,CAAA;AACT,MAAA,UAAA,CAAW,aAAa,CAAC,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,UAAA,EAAY,WAAW,CAAC,CAAA;AAGpC,EAAAA,iBAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,OAAA,CAAQ,CAAC,CAAA;AACT,MAAA,UAAA,CAAW,aAAa,CAAC,CAAA;AAAA,IAC3B,GAAG,GAAG,CAAA;AAEN,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,WAAA,EAAa,MAAA,EAAQ,UAAU,CAAC,CAAA;AAGpC,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAoB;AACxC,IAAA,QAAA,CAAS;AAAA,MACP,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AACD,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAGA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA;AAGA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,WAAW,IAAA,GAAO,CAAA;AACxB,IAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,IAAA,UAAA,CAAW,aAAa,QAAQ,CAAA;AAAA,EAClC,CAAA;AAGA,EAAA,MAAM,gBAAA,GAAmBD,mBAAY,MAAM;AACzC,IAAA,cAAA,CAAe,CAAC,IAAA,KAAS;AACvB,MAAA,IAAI,IAAA,CAAK,OAAA,EAAS,GAAA,CAAI,eAAA,CAAgB,KAAK,OAAO,CAAA;AAClD,MAAA,OAAO,EAAE,MAAM,IAAA,EAAM,OAAA,EAAS,MAAM,SAAA,EAAW,KAAA,EAAO,OAAO,IAAA,EAAK;AAAA,IACpE,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,aAAA,GAAgBA,mBAAY,MAAM;AACtC,IAAA,WAAA,CAAY,EAAE,KAAK,EAAA,EAAI,OAAA,EAAS,OAAO,KAAA,EAAO,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,CAAA;AAAA,EAC5E,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,eAAA,GAAkBA,mBAAY,MAAM;AACxC,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,IAAA,EAAK;AAC9B,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,WAAA,CAAY,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,sBAAqB,CAAE,CAAA;AAChE,MAAA;AAAA,IACF;AAGA,IAAA,IAAI;AACF,MAAA,IAAI,IAAI,GAAG,CAAA;AAAA,IACb,CAAA,CAAA,MAAQ;AACN,MAAA,WAAA,CAAY,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,4BAA2B,CAAE,CAAA;AACtE,MAAA;AAAA,IACF;AAGA,IAAA,QAAA,CAAS;AAAA,MACP,EAAA,EAAI,CAAA,SAAA,EAAY,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,MAC1B,GAAA;AAAA,MACA,GAAA,EAAK;AAAA,KACN,CAAA;AACD,IAAA,SAAA,CAAU,KAAK,CAAA;AACf,IAAA,aAAA,EAAc;AAAA,EAChB,GAAG,CAAC,QAAA,CAAS,GAAA,EAAK,QAAA,EAAU,aAAa,CAAC,CAAA;AAG1C,EAAA,MAAM,oBAAA,GAAuBA,mBAAY,MAAM;AAC7C,IAAA,WAAA,CAAY,CAAC,UAAU,EAAE,GAAG,MAAM,aAAA,EAAe,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK,CAAE,CAAA;AAAA,EACvE,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,qBAAA,GAAwBA,mBAAY,MAAM;AAC9C,IAAA,WAAA,CAAY,CAAC,IAAA,MAAU;AAAA,MACrB,GAAG,IAAA;AAAA,MACH,aAAA,EAAe,KAAA;AAAA,MACf,KAAA,EAAO;AAAA,KACT,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,gBAAA,GAAmBA,kBAAAA,CAAY,CAAC,CAAA,KAA2C;AAC/E,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AACnC,MAAA,cAAA,CAAe,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,gCAA+B,CAAE,CAAA;AAC7E,MAAA;AAAA,IACF;AAGA,IAAA,cAAA,CAAe,CAAC,IAAA,KAAS;AACvB,MAAA,IAAI,IAAA,CAAK,OAAA,EAAS,GAAA,CAAI,eAAA,CAAgB,KAAK,OAAO,CAAA;AAClD,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AACxC,IAAA,cAAA,CAAe,EAAE,IAAA,EAAM,OAAA,EAAS,WAAW,KAAA,EAAO,KAAA,EAAO,MAAM,CAAA;AAAA,EACjE,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,YAAA,GAAeA,mBAAY,YAAY;AAC3C,IAAA,IAAI,CAAC,YAAY,IAAA,EAAM;AAEvB,IAAA,cAAA,CAAe,CAAC,UAAU,EAAE,GAAG,MAAM,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK,CAAE,CAAA;AAEpE,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,MAAA,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,WAAA,CAAY,IAAI,CAAA;AACxC,MAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,aAAa,EAAE,CAAA,CAAE,OAAA,CAAQ,OAAA,EAAS,GAAG,CAAA;AACnF,MAAA,QAAA,CAAS,MAAA,CAAO,OAAO,OAAO,CAAA;AAE9B,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,WAAA,EAAa;AAAA,QACxC,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM;AAAA,OACP,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK,CAAE,MAAM,OAAO,EAAE,OAAA,EAAS,eAAA,EAAgB,CAAE,CAAA;AAC9E,QAAA,MAAM,IAAI,MAAM,KAAA,CAAM,OAAA,IAAW,MAAM,MAAA,GAAS,CAAC,CAAA,EAAG,OAAA,IAAW,eAAe,CAAA;AAAA,MAChF;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,MAAM,GAAA,GAAM,KAAK,GAAA,IAAO,IAAA;AACxB,MAAA,QAAA,CAAS;AAAA,QACP,IAAI,GAAA,CAAI,EAAA;AAAA,QACR,KAAK,GAAA,CAAI,GAAA;AAAA,QACT,KAAK,GAAA,CAAI,GAAA;AAAA,QACT,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,QAAQ,GAAA,CAAI;AAAA,OACb,CAAA;AACD,MAAA,SAAA,CAAU,KAAK,CAAA;AACf,MAAA,gBAAA,EAAiB;AAAA,IACnB,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,CAAC,IAAA,MAAU;AAAA,QACxB,GAAG,IAAA;AAAA,QACH,SAAA,EAAW,KAAA;AAAA,QACX,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,OAClD,CAAE,CAAA;AAAA,IACJ;AAAA,EACF,GAAG,CAAC,WAAA,CAAY,MAAM,WAAA,EAAa,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAG9D,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA;AAAA,IACxB,CAAC,IAAA,KAAkB;AACjB,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,gBAAA,EAAiB;AACjB,QAAA,aAAA,EAAc;AACd,QAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,kBAAkB,aAAa;AAAA,GAClC;AAEA,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACZ,QAAA,EAAA;AAAA,IAAA,KAAA,oBACCV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,kDACd,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBAGFU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAEZ,QAAA,EAAA;AAAA,QAAA,KAAA,EAAO,GAAA,mBACNA,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EAEb,QAAA,EAAA;AAAA,0BAAAV,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAK,KAAA,CAAM,GAAA;AAAA,cACX,GAAA,EAAK,MAAM,GAAA,IAAO,EAAA;AAAA,cAClB,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,UACC,CAAC,4BACAA,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,YAAA;AAAA,cACT,SAAA,EAAU,2IAAA;AAAA,cACV,YAAA,EAAW,cAAA;AAAA,cAEX,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB,SAAA,EAEJ,CAAA,mBAEAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kGAAA,EACb,QAAA,kBAAAA,cAAAA,CAACwC,iBAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,CAAA,EACnD,CAAA;AAAA,QAID,CAAC,QAAA,oBACA9B,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,cAE5B,kBAAQ,cAAA,GAAiB;AAAA;AAAA,WAC5B;AAAA,UACC,yBACCA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,YAAA;AAAA,cACT,SAAA,EAAU,iEAAA;AAAA,cACX,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EAEJ;AAAA,OAAA,EAEJ,CAAA;AAAA,MAGC,OAAO,GAAA,oBACNU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yDAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAACW,gBAAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,CAAA;AAAA,wBACxCX,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAyB,KAAA,EAAO,KAAA,CAAM,GAAA,EACnD,QAAA,EAAA,KAAA,CAAM,GAAA,EACT;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,oBAGAA,eAAC,MAAA,EAAA,EAAO,IAAA,EAAM,QAAQ,YAAA,EAAc,iBAAA,EAClC,QAAA,kBAAAU,eAAAA,CAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,gBAAa,SAAA,EAAU,eAAA,EACtB,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,0BAAY,CAAA,EAC3B,CAAA;AAAA,sBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,YAAA,CAAa,QAAQ,CAAA;AAAA,YACpC,SAAA,EAAWC,GAAAA;AAAA,cACT,4DAAA;AAAA,cACA,SAAA,KAAc,WACV,6BAAA,GACA;AAAA,aACN;AAAA,YACD,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACAD,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,YAAA,CAAa,QAAQ,CAAA;AAAA,YACpC,SAAA,EAAWC,GAAAA;AAAA,cACT,4DAAA;AAAA,cACA,SAAA,KAAc,WACV,6BAAA,GACA;AAAA,aACN;AAAA,YACD,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACAD,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,YACjC,SAAA,EAAWC,GAAAA;AAAA,cACT,4DAAA;AAAA,cACA,SAAA,KAAc,QACV,6BAAA,GACA;AAAA,aACN;AAAA,YACD,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF,CAAA;AAAA,MAGC,cAAc,QAAA,oBACbS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAACyC,kBAAA,EAAA,EAAO,SAAA,EAAU,gEAAA,EAAiE,CAAA;AAAA,wBACnFzC,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,WAAA,EAAY,uBAAA;AAAA,YACZ,KAAA,EAAO,WAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC9C,SAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF,CAAA;AAAA,sBAIFA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAkB,OAAO,EAAE,SAAA,EAAW,oBAAA,EAAqB,EACvE,QAAA,EAAA,SAAA,KAAc,QAAA;AAAA;AAAA,QAEb,WAAW,SAAA,CAAU,MAAA,KAAW,oBAC9BA,cAAAA,CAAC,SAAI,SAAA,EAAU,wBAAA,EACZ,QAAA,EAAA,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,GAAA,CAAI,CAAC,GAAG,CAAA,qBACrBA,cAAAA,CAAC,QAAA,EAAA,EAAiB,WAAU,0BAAA,EAAA,EAAb,CAAwC,CACxD,CAAA,EACH,CAAA,GACE,UAAU,MAAA,KAAW,CAAA,mBACvBA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+DAAA,EAAgE,QAAA,EAAA,iBAAA,EAE/E,oBAEAU,eAAAA,CAAAyB,qBAAA,EACE,QAAA,EAAA;AAAA,0BAAAnC,cAAAA,CAAC,SAAI,SAAA,EAAU,wBAAA,EACZ,oBAAU,GAAA,CAAI,CAAC,yBACdU,eAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,cAChC,SAAA,EAAWT,GAAAA;AAAA,gBACT,gHAAA;AAAA,gBACA,KAAA,EAAO,EAAA,KAAO,IAAA,CAAK,EAAA,GAAK,oCAAA,GAAuC;AAAA,eACjE;AAAA,cAGA,QAAA,EAAA;AAAA,gCAAAD,cAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,KAAK,IAAA,CAAK,GAAA;AAAA,oBACV,GAAA,EAAK,IAAA,CAAK,GAAA,IAAO,IAAA,CAAK,QAAA,IAAY,EAAA;AAAA,oBAClC,SAAA,EAAU,4BAAA;AAAA,oBACV,OAAA,EAAQ;AAAA;AAAA,iBACV;AAAA,gBACC,IAAA,CAAK,uBACJA,cAAAA,CAAC,SAAI,SAAA,EAAU,8EAAA,EACZ,eAAK,GAAA,EACR;AAAA;AAAA,aAAA;AAAA,YAlBG,IAAA,CAAK;AAAA,WAqBb,CAAA,EACH,CAAA;AAAA,UAGC,2BACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BACb,QAAA,kBAAAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,OAAA,EAAS,cAAA;AAAA,cACT,QAAA,EAAU,OAAA;AAAA,cAET,QAAA,EAAA,OAAA,mBACCU,eAAAA,CAAAyB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,gCAAAnC,cAAAA,CAAC0C,mBAAA,EAAA,EAAQ,SAAA,EAAU,2BAAA,EAA4B,CAAA;AAAA,gBAAE;AAAA,eAAA,EAEnD,CAAA,GAEA;AAAA;AAAA,WAEJ,EACF;AAAA,SAAA,EAEJ;AAAA,UAEA,SAAA,KAAc,QAAA;AAAA;AAAA,wBAEhB1C,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACZ,QAAA,EAAA,WAAA,CAAY,OAAA,mBACXU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAEb,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2DAAA,EAEb,QAAA,kBAAAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAK,WAAA,CAAY,OAAA;AAAA,cACjB,GAAA,EAAI,SAAA;AAAA,cACJ,SAAA,EAAU;AAAA;AAAA,WACZ,EACF,CAAA;AAAA,0BAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,gBAAC,GAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAV,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,cAAO,GAAA;AAAA,cAAE,YAAY,IAAA,EAAM;AAAA,aAAA,EACpE,CAAA;AAAA,4BACAU,gBAAC,GAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAV,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,cAAQ,GAAA;AAAA,cAC1C,cAAA,CAAe,WAAA,CAAY,IAAA,EAAM,IAAI;AAAA,aAAA,EACxC;AAAA,WAAA,EACF,CAAA;AAAA,UAGC,YAAY,KAAA,oBACXU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+GAAA,EACb,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAAC2C,uBAAA,EAAA,EAAY,SAAA,EAAU,8BAAA,EAA+B,CAAA;AAAA,4BACtD3C,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,WAAA,CAAY,KAAA,EAAM;AAAA,WAAA,EAC3B,CAAA;AAAA,0BAIFU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,WAAA,CAAY,SAAA,EAClD,QAAA,EAAA,WAAA,CAAY,SAAA,mBACXU,eAAAA,CAAAyB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAAnC,cAAAA,CAAC0C,mBAAA,EAAA,EAAQ,SAAA,EAAU,2BAAA,EAA4B,CAAA;AAAA,cAAE;AAAA,aAAA,EAEnD,CAAA,mBAEAhC,eAAAA,CAAAyB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAAnC,cAAAA,CAAC4C,kBAAA,EAAA,EAAO,SAAA,EAAU,cAAA,EAAe,CAAA;AAAA,cAAE;AAAA,aAAA,EAErC,CAAA,EAEJ,CAAA;AAAA,4BACA5C,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,SAAA;AAAA,gBACR,OAAA,EAAS,gBAAA;AAAA,gBACT,UAAU,WAAA,CAAY,SAAA;AAAA,gBACvB,QAAA,EAAA;AAAA;AAAA;AAED,WAAA,EACF;AAAA,SAAA,EACF,CAAA,mBAEAU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAACwC,iBAAA,EAAA,EAAM,SAAA,EAAU,mCAAA,EAAoC,CAAA;AAAA,0BACrD9B,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,gBAAA,EACf,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAAC,UAAO,OAAA,EAAO,IAAA,EACb,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,0BAAY,CAAA,EACpB,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,SAAA;AAAA,gBACP,QAAA,EAAU,gBAAA;AAAA,gBACV,SAAA,EAAU;AAAA;AAAA;AACZ,WAAA,EACF,CAAA;AAAA,0BACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAqC,QAAA,EAAA,gCAAA,EAA8B,CAAA;AAAA,UAC/E,WAAA,CAAY,yBACXA,cAAAA,CAAC,SAAI,SAAA,EAAU,6FAAA,EACZ,sBAAY,KAAA,EACf;AAAA,SAAA,EAEJ,CAAA,EAEJ;AAAA,UACE,SAAA,KAAc,KAAA;AAAA;AAAA,wBAEhBA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kEACb,QAAA,kBAAAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAACW,gBAAAA,EAAA,EAAK,SAAA,EAAU,8CAAA,EAA+C,CAAA;AAAA,4BAC/DX,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAgC,QAAA,EAAA,4CAAA,EAE7C;AAAA,WAAA,EACF,CAAA;AAAA,0BAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,4BACpCA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,WAAA;AAAA,gBACH,IAAA,EAAK,KAAA;AAAA,gBACL,WAAA,EAAY,+BAAA;AAAA,gBACZ,OAAO,QAAA,CAAS,GAAA;AAAA,gBAChB,QAAA,EAAU,CAAC,CAAA,KACT,WAAA,CAAY,CAAC,IAAA,MAAU;AAAA,kBACrB,GAAG,IAAA;AAAA,kBACH,GAAA,EAAK,EAAE,MAAA,CAAO,KAAA;AAAA,kBACd,KAAA,EAAO,IAAA;AAAA,kBACP,aAAA,EAAe;AAAA,iBACjB,CAAE,CAAA;AAAA,gBAEJ,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,kBAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,oBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,oBAAA,eAAA,EAAgB;AAAA,kBAClB;AAAA,gBACF;AAAA;AAAA;AACF,WAAA,EACF,CAAA;AAAA,UAGC,QAAA,CAAS,OAAO,CAAC,QAAA,CAAS,yBACzBU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2DAAA,EAEb,QAAA,EAAA;AAAA,4BAAAV,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAK,QAAA,CAAS,GAAA;AAAA,gBACd,GAAA,EAAI,SAAA;AAAA,gBACJ,SAAA,EAAU,8BAAA;AAAA,gBACV,MAAA,EAAQ,oBAAA;AAAA,gBACR,OAAA,EAAS;AAAA;AAAA,aACX;AAAA,YACC,CAAC,QAAA,CAAS,aAAA,oBACTA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC0C,mBAAA,EAAA,EAAQ,SAAA,EAAU,8CAA6C,CAAA,EAClE;AAAA,WAAA,EAEJ,CAAA;AAAA,UAID,SAAS,KAAA,oBACRhC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+GAAA,EACb,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAAC2C,uBAAA,EAAA,EAAY,SAAA,EAAU,8BAAA,EAA+B,CAAA;AAAA,4BACtD3C,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,CAAS,KAAA,EAAM;AAAA,WAAA,EACxB,CAAA;AAAA,0BAIFU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,eAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,eAAA;AAAA,gBACT,QAAA,EAAU,CAAC,QAAA,CAAS,GAAA,IAAO,QAAA,CAAS,OAAA;AAAA,gBAEpC,QAAA,EAAA;AAAA,kCAAAV,cAAAA,CAACW,gBAAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe,CAAA;AAAA,kBAAE;AAAA;AAAA;AAAA,aAEnC;AAAA,YACC,QAAA,CAAS,uBACRX,cAAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,aAAA,EAAe,QAAA,EAAA,OAAA,EAElD;AAAA,WAAA,EAEJ;AAAA,SAAA,EACF,CAAA,EACF;AAAA,UACE,IAAA,EACN;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAGO,IAAM,UAAA,GAAaa,YAAK,eAAe,CAAA;AASvC,SAAS,iBAAiB,MAAA,EAGM;AACrC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,aAAa,MAAA,CAAO;AAAA;AAAA;AACtB,GAEJ;AACF;AChqBA,IAAM,gBAAA,GAAkC;AAAA,EACtC,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,KAAA,EAAO;AAAA,IACL,EAAE,OAAO,EAAE,GAAA,EAAK,WAAW,OAAA,EAAS,GAAA,EAAI,EAAG,QAAA,EAAU,CAAA,EAAE;AAAA,IACvD,EAAE,OAAO,EAAE,GAAA,EAAK,WAAW,OAAA,EAAS,GAAA,EAAI,EAAG,QAAA,EAAU,GAAA;AAAI,GAC3D;AAAA,EACA,WAAA,EAAa,QAAA;AAAA,EACb,cAAA,EAAgB;AAClB,CAAA;AASA,SAAS,sBAAsB,QAAA,EAAiC;AAC9D,EAAA,IAAI,CAAC,QAAA,CAAS,KAAA,IAAS,QAAA,CAAS,KAAA,CAAM,WAAW,CAAA,EAAG;AAClD,IAAA,OAAO,4CAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAG,QAAA,CAAS,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,QAAA,GAAW,EAAE,QAAQ,CAAA;AAC9E,EAAA,MAAM,QAAA,GAAW,WAAA,CACd,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA,IAAK,aAAA;AAC7C,IAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,CAAA,CAAA,CAAA;AAAA,EAClC,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,IAAI,QAAA,CAAS,SAAS,QAAA,EAAU;AAC9B,IAAA,MAAM,KAAA,GAAQ,SAAS,WAAA,IAAe,QAAA;AACtC,IAAA,MAAM,QAAA,GAAW,SAAS,cAAA,IAAkB,QAAA;AAC5C,IAAA,OAAO,CAAA,gBAAA,EAAmB,KAAK,CAAA,IAAA,EAAO,QAAQ,KAAK,QAAQ,CAAA,CAAA,CAAA;AAAA,EAC7D;AAEA,EAAA,OAAO,CAAA,gBAAA,EAAmB,QAAA,CAAS,KAAK,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAA,CAAA;AAC1D;AAgBA,SAAS,uBAAA,CAAwB;AAAA,EAC/B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,IAAIH,eAAAA,CAAS,IAAA,CAAK,MAAM,GAAG,CAAA;AAEvD,EAAA,MAAM,uBAAA,GAA0BC,kBAAAA;AAAA,IAC9B,CAAC,CAAA,KAA2C;AAC1C,MAAA,MAAM,MAAA,GAAS,EAAE,MAAA,CAAO,KAAA;AACxB,MAAA,WAAA,CAAY,MAAM,CAAA;AAClB,MAAA,aAAA,CAAc,OAAO,EAAE,GAAG,KAAK,KAAA,EAAO,GAAA,EAAK,QAAQ,CAAA;AAAA,IACrD,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,aAAa;AAAA,GACnC;AAEA,EAAA,MAAM,oBAAA,GAAuBA,kBAAAA;AAAA,IAC3B,CAAC,CAAA,KAA2C;AAC1C,MAAA,MAAM,KAAA,GAAQ,EAAE,MAAA,CAAO,KAAA;AACvB,MAAA,WAAA,CAAY,KAAK,CAAA;AAGjB,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AACpC,MAAA,IAAI,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAA,EAAG;AAClC,QAAA,aAAA,CAAc,KAAA,EAAO,EAAE,GAAG,IAAA,CAAK,KAAA,EAAO,GAAA,EAAK,CAAA,CAAA,EAAI,KAAA,CAAM,WAAA,EAAa,CAAA,CAAA,EAAI,CAAA;AAAA,MACxE;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,aAAa;AAAA,GACnC;AAEA,EAAA,MAAM,mBAAA,GAAsBA,kBAAAA;AAAA,IAC1B,CAAC,CAAA,KAA2C;AAC1C,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,CAAA;AAC9C,MAAA,aAAA,CAAc,OAAO,EAAE,GAAG,KAAK,KAAA,EAAO,OAAA,EAAS,YAAY,CAAA;AAAA,IAC7D,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,aAAa;AAAA,GACnC;AAEA,EAAA,MAAM,oBAAA,GAAuBA,kBAAAA;AAAA,IAC3B,CAAC,CAAA,KAA2C;AAC1C,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,CAAA;AAC/C,MAAA,gBAAA,CAAiB,KAAA,EAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAA,EAAK,WAAW,CAAC,CAAC,CAAA;AAAA,IACjE,CAAA;AAAA,IACA,CAAC,OAAO,gBAAgB;AAAA,GAC1B;AAEA,EAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA,IAAK,aAAA;AACpD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,GAAA;AAEtC,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAEb,QAAA,EAAA;AAAA,sBAAAV,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,KAAA,EAAO,KAAK,KAAA,CAAM,GAAA;AAAA,UAClB,QAAA,EAAU,uBAAA;AAAA,UACV,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAU,kHAAA;AAAA,UACV,KAAA,EAAO,EAAE,OAAA,EAAS,CAAA;AAAE;AAAA,OACtB;AAAA,sBAGAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,MAAA;AAAA,UACL,KAAA,EAAO,QAAA;AAAA,UACP,QAAA,EAAU,oBAAA;AAAA,UACV,WAAA,EAAY,SAAA;AAAA,UACZ,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA,OACZ;AAAA,sBAGAU,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,4EAAA;AAAA,UACV,KAAA,EAAO,CAAA,EAAG,YAAY,CAAA,IAAA,EAAO,OAAO,CAAA,SAAA,CAAA;AAAA,UAGpC,QAAA,EAAA;AAAA,4BAAAV,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,kBAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACL,eAAA,EACE,0NAAA;AAAA,kBACF,cAAA,EAAgB,SAAA;AAAA,kBAChB,kBAAA,EAAoB;AAAA;AACtB;AAAA,aACF;AAAA,4BAEAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAmB,KAAA,EAAO,EAAE,eAAA,EAAiB,YAAA,EAAa,EAAG;AAAA;AAAA;AAAA,OAC9E;AAAA,sBAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAiB,CAAA;AAAA,MAG/B,SAAA,IAAa,CAAC,QAAA,oBACbA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,QAAA,CAAS,KAAK,CAAA;AAAA,UAC7B,SAAA,EAAU,gGAAA;AAAA,UACV,KAAA,EAAM,aAAA;AAAA,UAEN,QAAA,kBAAAA,cAAAA,CAAC6C,kBAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAC9B,KAAA,EAEJ,CAAA;AAAA,oBAGAnC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,sBACvEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACb,QAAA,kBAAAA,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,GAAA,EAAI,GAAA;AAAA,UACJ,GAAA,EAAI,KAAA;AAAA,UACJ,OAAO,IAAA,CAAK,QAAA;AAAA,UACZ,QAAA,EAAU,oBAAA;AAAA,UACV,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA,OACZ,EACF,CAAA;AAAA,sBACAU,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,QAAA;AAAA,QAAS;AAAA,OAAA,EACjB;AAAA,KAAA,EACF,CAAA;AAAA,oBAGAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,sBACzEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACb,QAAA,kBAAAA,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,GAAA,EAAI,GAAA;AAAA,UACJ,GAAA,EAAI,KAAA;AAAA,UACJ,KAAA,EAAO,OAAA;AAAA,UACP,QAAA,EAAU,mBAAA;AAAA,UACV,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA,OACZ,EACF,CAAA;AAAA,sBACAU,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QAAQ;AAAA,OAAA,EACX;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,IAAM,kBAAA,GAAqBG,YAAK,uBAAuB,CAAA;AAMvD,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,QAAA,EAAU,UAAS,EAAwB;AAC/E,EAAA,MAAM,eAAe,KAAA,IAAS,gBAAA;AAG9B,EAAA,MAAM,gBAAA,GAAmBf,kBAAAA;AAAA,IACvB,CAAC,IAAA,KAA8B;AAC7B,MAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,IAAA,EAAM,CAAA;AAAA,IACpC,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA;AAAA,IACxB,CAAC,CAAA,KAA2C;AAC1C,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,CAAA;AACzC,MAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,uBAAA,GAA0BA,kBAAAA;AAAA,IAC9B,CAAC,KAAA,KAAgC;AAC/B,MAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,WAAA,EAAa,OAAO,CAAA;AAAA,IAClD,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,0BAAA,GAA6BA,kBAAAA;AAAA,IACjC,CAAC,QAAA,KAA8C;AAC7C,MAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,cAAA,EAAgB,UAAU,CAAA;AAAA,IACxD,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,qBAAA,GAAwBA,kBAAAA;AAAA,IAC5B,CAAC,OAAe,KAAA,KAAsB;AACpC,MAAA,MAAM,QAAA,GAAW,CAAC,GAAG,YAAA,CAAa,KAAK,CAAA;AACvC,MAAA,QAAA,CAAS,KAAK,CAAA,GAAI,EAAE,GAAG,QAAA,CAAS,KAAK,GAAG,KAAA,EAAM;AAC9C,MAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,UAAU,CAAA;AAAA,IAC/C,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,wBAAA,GAA2BA,kBAAAA;AAAA,IAC/B,CAAC,OAAe,QAAA,KAAqB;AACnC,MAAA,MAAM,QAAA,GAAW,CAAC,GAAG,YAAA,CAAa,KAAK,CAAA;AACvC,MAAA,QAAA,CAAS,KAAK,CAAA,GAAI,EAAE,GAAG,QAAA,CAAS,KAAK,GAAG,QAAA,EAAS;AACjD,MAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,UAAU,CAAA;AAAA,IAC/C,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,aAAA,GAAgBA,mBAAY,MAAM;AACtC,IAAA,MAAM,WAAA,GAAc,YAAA,CAAa,KAAA,CAAM,MAAA,GAAS,IAAI,EAAA,GAAK,CAAA;AACzD,IAAA,MAAM,OAAA,GAAwB;AAAA,MAC5B,KAAA,EAAO,EAAE,GAAA,EAAK,SAAA,EAAW,SAAS,GAAA,EAAI;AAAA,MACtC,QAAA,EAAU;AAAA,KACZ;AACA,IAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,CAAC,GAAG,YAAA,CAAa,KAAA,EAAO,OAAO,CAAA,EAAG,CAAA;AAAA,EACvE,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,MAAM,gBAAA,GAAmBA,kBAAAA;AAAA,IACvB,CAAC,KAAA,KAAkB;AACjB,MAAA,MAAM,QAAA,GAAW,aAAa,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,MAAM,KAAK,CAAA;AAChE,MAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,UAAU,CAAA;AAAA,IAC/C,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAEA,EAAA,MAAM,UAAA,GAAa,sBAAsB,YAAY,CAAA;AACrD,EAAA,MAAM,cAAA,GAAiB,YAAA,CAAa,KAAA,CAAM,MAAA,GAAS,CAAA;AAEnD,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAEb,QAAA,EAAA;AAAA,oBAAAV,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,qCAAA;AAAA,QACV,KAAA,EAAO,EAAE,UAAA,EAAY,UAAA;AAAW;AAAA,KAClC;AAAA,oBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,sBAC1DU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,YAAA,CAAa,IAAA,KAAS,QAAA,GAAW,SAAA,GAAY,SAAA;AAAA,YACtD,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,QAAQ,CAAA;AAAA,YACxC,QAAA,EAAU,QAAA;AAAA,YACV,SAAA,EAAU,kBAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,YAAA,CAAa,IAAA,KAAS,QAAA,GAAW,SAAA,GAAY,SAAA;AAAA,YACtD,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,QAAQ,CAAA;AAAA,YACxC,QAAA,EAAU,QAAA;AAAA,YACV,SAAA,EAAU,kBAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAGC,aAAa,IAAA,KAAS,QAAA,oBACrBU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,sBAC3DA,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,GAAA,EAAI,GAAA;AAAA,UACJ,GAAA,EAAI,KAAA;AAAA,UACJ,OAAO,YAAA,CAAa,KAAA;AAAA,UACpB,QAAA,EAAU,iBAAA;AAAA,UACV,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA,OACZ;AAAA,sBACAU,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yDAAA,EACb,QAAA,EAAA;AAAA,QAAA,YAAA,CAAa,KAAA;AAAA,QAAM;AAAA,OAAA,EACtB;AAAA,KAAA,EACF,CAAA;AAAA,IAID,aAAa,IAAA,KAAS,QAAA,oBACrBA,eAAAA,CAAAyB,qBAAA,EACE,QAAA,EAAA;AAAA,sBAAAzB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,wBAC3DU,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,aAAa,WAAA,IAAe,QAAA;AAAA,YACnC,aAAA,EAAe,CAACoC,MAAAA,KAAU,uBAAA,CAAwBA,MAA6B,CAAA;AAAA,YAC/E,QAAA,EAAU,QAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAA9C,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,sBACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,8BACAU,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAV,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,QAAA,EAAS,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,gCACjCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,WAAU,QAAA,EAAA,SAAA,EAAO;AAAA,eAAA,EACrC;AAAA;AAAA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBACAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,wBAC9DU,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,aAAa,cAAA,IAAkB,QAAA;AAAA,YACtC,aAAA,EAAe,CAACoC,MAAAA,KACd,0BAAA,CAA2BA,MAAwC,CAAA;AAAA,YAErE,QAAA,EAAU,QAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAA9C,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,sBACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,8BACAU,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAV,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,QAAA,EAAS,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,gCACjCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,OAAM,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,gCAC3BA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,UAAS,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,gCACjCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,QAAO,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,gCAC7BA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,SAAQ,QAAA,EAAA,OAAA,EAAK;AAAA,eAAA,EACjC;AAAA;AAAA;AAAA;AACF,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAIFU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,QAC3D,CAAC,4BACAU,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,aAAA;AAAA,YACT,SAAA,EAAU,kBAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAV,cAAAA,CAAC+C,gBAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA;AAEnC,OAAA,EAEJ,CAAA;AAAA,sBACA/C,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA,YAAA,CAAa,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBAC7BA,cAAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UAEC,IAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA,EAAW,cAAA;AAAA,UACX,aAAA,EAAe,qBAAA;AAAA,UACf,gBAAA,EAAkB,wBAAA;AAAA,UAClB,QAAA,EAAU,gBAAA;AAAA,UACV;AAAA,SAAA;AAAA,QAPK;AAAA,OASR,CAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,IAAM,cAAA,GAAiBa,YAAK,mBAAmB,CAAA;AC1ZtD,IAAMS,cAAAA,GAAiC;AAAA,EACrC,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,QAAA,EAAU,IAAA;AAAA,EACV,KAAA,EAAO;AACT,CAAA;AAEA,IAAM0B,iBAAAA,GAAkC;AAAA,EACtC,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,KAAA,EAAO;AAAA,IACL,EAAE,OAAO,EAAE,GAAA,EAAK,WAAW,OAAA,EAAS,GAAA,EAAI,EAAG,QAAA,EAAU,CAAA,EAAE;AAAA,IACvD,EAAE,OAAO,EAAE,GAAA,EAAK,WAAW,OAAA,EAAS,GAAA,EAAI,EAAG,QAAA,EAAU,GAAA;AAAI,GAC3D;AAAA,EACA,WAAA,EAAa,QAAA;AAAA,EACb,cAAA,EAAgB;AAClB,CAAA;AAEA,IAAM,aAAA,GAAsC;AAAA,EAC1C,KAAA,EAAO,IAAA;AAAA,EACP,IAAA,EAAM,OAAA;AAAA,EACN,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,WAAA;AAAA,EACR,UAAA,EAAY,QAAA;AAAA,EACZ,OAAA,EAAS,GAAA;AAAA,EACT,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,YAAA,GAA6B;AAAA,EACjC,OAAA,EAAS,KAAA;AAAA,EACT,SAAA,EAAW,WAAA;AAAA,EACX,YAAA,EAAc,GAAA;AAAA,EACd,UAAA,EAAY,CAAA;AAAA,EACZ,aAAA,EAAe,CAAA;AAAA,EACf,WAAA,EAAa;AACf,CAAA;AAEA,IAAM,eAAA,GAAqC;AAAA,EACzC,OAAA,EAAS,KAAA;AAAA,EACT,IAAA,EAAM,OAAA;AAAA,EACN,KAAA,EAAO,EAAE,GAAA,EAAK,SAAA,EAAW,SAAS,EAAA,EAAG;AAAA,EACrC,QAAA,EAAU;AACZ,CAAA;AAaA,SAAS,UAAU,EAAE,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,UAAS,EAAmB;AAC1E,EAAA,uBACEhD,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA,EAAWC,GAAAA;AAAA,QACT,qEAAA;AAAA,QACA,SACI,oCAAA,GACA,wEAAA;AAAA,QACJ,QAAA,IAAY;AAAA,OACd;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAUA,SAAS,iBAAA,CAAkB,EAAE,KAAA,EAAM,EAA2B;AAC5D,EAAA,MAAM,KAAA,GAAQ,qBAAqB,KAAK,CAAA;AACxC,EAAA,MAAM,YAAA,GAAe,0BAA0B,KAAK,CAAA;AACpD,EAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,KAAS,MAAA,IAAU,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,CAAA;AAE3E,EAAA,uBACES,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWT,GAAAA;AAAA,QACT,8DAAA;AAAA,QACA,CAAC,aAAA,IAAiB;AAAA,OACpB;AAAA,MAGC,QAAA,EAAA;AAAA,QAAA,aAAA,oBACCD,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,kBAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,eAAA,EACE,0NAAA;AAAA,cACF,cAAA,EAAgB,WAAA;AAAA,cAChB,kBAAA,EAAoB;AAAA;AACtB;AAAA,SACF;AAAA,QAID,iCACCA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,kBAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,GAAG,KAAA;AAAA,cACH,OAAA,EAAS,YAAA,KAAiB,MAAA,GAAY,YAAA,GAAe;AAAA;AACvD;AAAA,SACF;AAAA,QAGD,CAAC,aAAA,oBACAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yEAAwE,QAAA,EAAA,eAAA,EAEvF;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAaA,SAAS,kBAAkB,EAAE,KAAA,EAAO,QAAA,EAAU,QAAA,EAAU,aAAY,EAAsB;AACxF,EAAA,MAAM,iBAAA,GAAoBF,kBAAAA;AAAA,IACxB,CAAC,KAAA,KAAiC;AAChC,MAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GAClB;AAEA,EAAA,MAAM,gBAAA,GAAmBA,kBAAAA;AAAA,IACvB,CAAC,IAAA,KAAuC;AACtC,MAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GAClB;AAEA,EAAA,MAAM,oBAAA,GAAuBA,kBAAAA;AAAA,IAC3B,CAAC,QAAA,KAA+C;AAC9C,MAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,CAAA;AAAA,IACjC,CAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GAClB;AAEA,EAAA,MAAM,kBAAA,GAAqBA,kBAAAA;AAAA,IACzB,CAAC,MAAA,KAA2C;AAC1C,MAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,IAC/B,CAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GAClB;AAEA,EAAA,MAAM,sBAAA,GAAyBA,kBAAAA;AAAA,IAC7B,CAAC,UAAA,KAAmD;AAClD,MAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAA;AAAA,IACnC,CAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GAClB;AAEA,EAAA,MAAM,mBAAA,GAAsBA,kBAAAA;AAAA,IAC1B,CAAC,CAAA,KAA2C;AAC1C,MAAA,MAAMmD,QAAAA,GAAU,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,CAAA;AAC3C,MAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,OAAA,EAAAA,UAAS,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GAClB;AAEA,EAAA,MAAM,gBAAA,GAAmBnD,kBAAAA;AAAA,IACvB,CAAC,OAAA,KAAqB;AACpB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,IAAA,EAAK,EAAG,CAAA;AAAA,MACjE,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,QAAW,CAAA;AAAA,MACxC;AAAA,IACF,CAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GAClB;AAEA,EAAA,MAAM,yBAAA,GAA4BA,kBAAAA;AAAA,IAChC,CAAC,SAAA,KAAyC;AACxC,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,IAAQ,YAAA;AAClC,MAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,EAAE,GAAG,WAAA,EAAa,SAAA,EAAW,OAAA,EAAS,IAAA,EAAK,EAAG,CAAA;AAAA,IAC3E,CAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GAClB;AAEA,EAAA,MAAM,6BAAA,GAAgCA,kBAAAA;AAAA,IACpC,CAAC,CAAA,KAA2C;AAC1C,MAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,CAAA;AACjD,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,IAAQ,YAAA;AAClC,MAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,EAAE,GAAG,WAAA,EAAa,aAAA,EAAe,OAAA,EAAS,IAAA,EAAK,EAAG,CAAA;AAAA,IAC/E,CAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GAClB;AAEA,EAAA,MAAM,2BAAA,GAA8BA,kBAAAA;AAAA,IAClC,CAAC,CAAA,KAA2C;AAC1C,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,CAAA;AAC/C,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,IAAQ,YAAA;AAClC,MAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,EAAE,GAAG,WAAA,EAAa,WAAA,EAAa,OAAA,EAAS,IAAA,EAAK,EAAG,CAAA;AAAA,IAC7E,CAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GAClB;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,IAAW,GAAA;AACjC,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,IAAA,EAAM,OAAA,IAAW,KAAA;AAE3C,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAEb,QAAA,EAAA;AAAA,oBAAAV,cAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,QAAA,EAAU,iBAAA;AAAA,QACV,QAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,IAGC,MAAM,KAAA,oBACLU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uCAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,wBAC3EA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACb,QAAA,kBAAAA,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,GAAA,EAAI,GAAA;AAAA,YACJ,GAAA,EAAI,KAAA;AAAA,YACJ,KAAA,EAAO,OAAA;AAAA,YACP,QAAA,EAAU,mBAAA;AAAA,YACV,QAAA,EAAU,QAAA;AAAA,YACV,SAAA,EAAU;AAAA;AAAA,SACZ,EACF,CAAA;AAAA,wBACAU,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,UAAA,OAAA;AAAA,UAAQ;AAAA,SAAA,EACX;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,wBAC1DU,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,IAAA;AAAA,YACb,aAAA,EAAe,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAiC,CAAA;AAAA,YACxE,QAAA,EAAU,QAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAV,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,sBACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,8BACAU,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAV,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,OAAA,EAAQ,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,gCAC/BA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,WAAU,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,gCACnCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,QAAO,QAAA,EAAA,MAAA,EAAI;AAAA,eAAA,EAC/B;AAAA;AAAA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,wBAC9DU,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,QAAA;AAAA,YACb,aAAA,EAAe,CAAC,CAAA,KAAM,oBAAA,CAAqB,CAAqC,CAAA;AAAA,YAChF,QAAA,EAAU,QAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAV,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,sBACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,8BACAU,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAV,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,QAAA,EAAS,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,gCACjCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,OAAM,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,gCAC3BA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,UAAS,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,gCACjCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,QAAO,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,gCAC7BA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,SAAQ,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,gCAC/BA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,YAAW,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,gCACrCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,aAAY,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,gCACvCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,eAAc,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,gCAC3CA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,gBAAe,QAAA,EAAA,cAAA,EAAY;AAAA,eAAA,EAC/C;AAAA;AAAA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBAC5DU,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,MAAA;AAAA,YACb,aAAA,EAAe,CAAC,CAAA,KAAM,kBAAA,CAAmB,CAAmC,CAAA;AAAA,YAC5E,QAAA,EAAU,QAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAV,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,sBACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,8BACAU,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAV,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,WAAA,EAAY,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,gCACvCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,UAAS,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,gCACjCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,YAAW,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,gCACrCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,YAAW,QAAA,EAAA,UAAA,EAAQ;AAAA,eAAA,EACvC;AAAA;AAAA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,wBAChEU,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,UAAA;AAAA,YACb,aAAA,EAAe,CAAC,CAAA,KAAM,sBAAA,CAAuB,CAAuC,CAAA;AAAA,YACpF,QAAA,EAAU,QAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAV,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,sBACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,8BACAU,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAV,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,QAAA,EAAS,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,gCACjCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,SAAQ,QAAA,EAAA,OAAA,EAAK;AAAA,eAAA,EACjC;AAAA;AAAA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,wCAAA,EACf,QAAA,EAAA;AAAA,0BAAAV,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,WAAA;AAAA,cACT,eAAA,EAAiB,gBAAA;AAAA,cACjB,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,QAAA,EAAA,qBAAA,EAAmB;AAAA,SAAA,EACrE,CAAA;AAAA,QAEC,WAAA,oBACCU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EAEb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,4BACvEU,eAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,KAAA,CAAM,IAAA,EAAM,SAAA,IAAa,WAAA;AAAA,gBAChC,aAAA,EAAe,CAAC,CAAA,KAAM,yBAAA,CAA0B,CAA8B,CAAA;AAAA,gBAC9E,QAAA,EAAU,QAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAAV,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,8BACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,kCACAU,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,oCAAAV,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,QAAA,EAAS,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,oCACjCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,aAAY,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,oCACvCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,WAAU,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,oCACnCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,YAAW,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,oCACrCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,eAAc,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,oCAC3CA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,gBAAe,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,oCAC7CA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,kBAAiB,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,oCACjDA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,mBAAkB,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,oCACnDA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,eAAc,QAAA,EAAA,sBAAA,EAAoB;AAAA,mBAAA,EACtD;AAAA;AAAA;AAAA;AACF,WAAA,EACF,CAAA;AAAA,0BAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,4BACzEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACb,QAAA,kBAAAA,cAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,OAAA;AAAA,gBACL,GAAA,EAAI,GAAA;AAAA,gBACJ,GAAA,EAAI,KAAA;AAAA,gBACJ,KAAA,EAAO,KAAA,CAAM,IAAA,EAAM,aAAA,IAAiB,CAAA;AAAA,gBACpC,QAAA,EAAU,6BAAA;AAAA,gBACV,QAAA,EAAU,QAAA;AAAA,gBACV,SAAA,EAAU;AAAA;AAAA,aACZ,EACF,CAAA;AAAA,4BACAU,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,MAAM,aAAA,IAAiB,CAAA;AAAA,cAAE;AAAA,aAAA,EAClC;AAAA,WAAA,EACF,CAAA;AAAA,0BAGAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,4BACvEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACb,QAAA,kBAAAA,cAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,OAAA;AAAA,gBACL,GAAA,EAAI,GAAA;AAAA,gBACJ,GAAA,EAAI,KAAA;AAAA,gBACJ,KAAA,EAAO,KAAA,CAAM,IAAA,EAAM,WAAA,IAAe,GAAA;AAAA,gBAClC,QAAA,EAAU,2BAAA;AAAA,gBACV,QAAA,EAAU,QAAA;AAAA,gBACV,SAAA,EAAU;AAAA;AAAA,aACZ,EACF,CAAA;AAAA,4BACAU,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,MAAM,WAAA,IAAe,GAAA;AAAA,cAAI;AAAA,aAAA,EAClC;AAAA,WAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,IAAM,YAAA,GAAeG,YAAK,iBAAiB,CAAA;AAM3C,SAAS,oBAAA,CAAqB;AAAA,EAC5B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,WAAA,GAAc,IAAA;AAAA,EACd;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,eAAe,KAAA,IAASS,cAAAA;AAC9B,EAAA,MAAM,cAAc,YAAA,CAAa,IAAA;AAGjC,EAAA,MAAM,gBAAA,GAAmBxB,kBAAAA;AAAA,IACvB,CAAC,IAAA,KAAyB;AACxB,MAAA,MAAM,QAAA,GAA4B;AAAA,QAChC,GAAG,YAAA;AAAA,QACH;AAAA,OACF;AAGA,MAAA,IAAI,IAAA,KAAS,UAAA,IAAc,CAAC,QAAA,CAAS,QAAA,EAAU;AAC7C,QAAA,QAAA,CAAS,QAAA,GAAWkD,iBAAAA;AAAA,MACtB;AACA,MAAA,IAAI,IAAA,KAAS,OAAA,IAAW,CAAC,QAAA,CAAS,KAAA,EAAO;AACvC,QAAA,QAAA,CAAS,KAAA,GAAQ,aAAA;AAAA,MACnB;AAEA,MAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,iBAAA,GAAoBlD,kBAAAA;AAAA,IACxB,CAAC,KAAA,KAA6B;AAC5B,MAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,oBAAA,GAAuBA,kBAAAA;AAAA,IAC3B,CAAC,QAAA,KAA4B;AAC3B,MAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,QAAA,EAAU,CAAA;AAAA,IACxC,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA;AAAA,IACxB,CAAC,KAAA,KAAgC;AAC/B,MAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,mBAAA,GAAsBA,kBAAAA;AAAA,IAC1B,CAAC,OAAA,KAAqB;AACpB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,EAAE,GAAG,eAAA,EAAiB,OAAA,EAAS,IAAA,EAAK,EAAG,CAAA;AAAA,MAC9E,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,EAAE,GAAG,eAAA,EAAiB,OAAA,EAAS,KAAA,EAAM,EAAG,CAAA;AAAA,MAC/E;AAAA,IACF,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,uBAAA,GAA0BA,kBAAAA;AAAA,IAC9B,CAAC,IAAA,KAA+B;AAC9B,MAAA,MAAM,cAAA,GAAiB,aAAa,OAAA,IAAW,eAAA;AAC/C,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,OAAA,EAAS;AAAA,UACP,GAAG,cAAA;AAAA,UACH,IAAA;AAAA,UACA,OAAA,EAAS,IAAA;AAAA;AAAA,UAET,UACE,IAAA,KAAS,UAAA,IAAc,CAAC,cAAA,CAAe,QAAA,GAAWkD,oBAAmB,cAAA,CAAe;AAAA;AACxF,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,wBAAA,GAA2BlD,kBAAAA;AAAA,IAC/B,CAAC,KAAA,KAA6B;AAC5B,MAAA,MAAM,cAAA,GAAiB,aAAa,OAAA,IAAW,eAAA;AAC/C,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,SAAS,EAAE,GAAG,cAAA,EAAgB,KAAA,EAAO,SAAS,IAAA;AAAK,OACpD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,2BAAA,GAA8BA,kBAAAA;AAAA,IAClC,CAAC,QAAA,KAA4B;AAC3B,MAAA,MAAM,cAAA,GAAiB,aAAa,OAAA,IAAW,eAAA;AAC/C,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,SAAS,EAAE,GAAG,cAAA,EAAgB,QAAA,EAAU,SAAS,IAAA;AAAK,OACvD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,WAAA,GAAcA,mBAAY,MAAM;AACpC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,cAAA,GAAiB,YAAA,CAAa,OAAA,EAAS,OAAA,IAAW,KAAA;AACxD,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,OAAA,EAAS,IAAA,IAAQ,OAAA;AAElD,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAErE,KAAA,IAAS,CAAC,QAAA,oBACTA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,KAAA,EAAM,kBAAA;AAAA,UACN,SAAA,EAAU,yJAAA;AAAA,UAEV,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB,KAAA,EAEJ,CAAA;AAAA,oBAGAhB,cAAAA,CAAC,iBAAA,EAAA,EAAkB,KAAA,EAAO,YAAA,EAAc,CAAA;AAAA,oBAGxCU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,QAAQ,WAAA,KAAgB,MAAA;AAAA,UACxB,OAAA,EAAS,MAAM,gBAAA,CAAiB,MAAM,CAAA;AAAA,UACtC,QAAA,EAAU,QAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,sBACAA,cAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,QAAQ,WAAA,KAAgB,OAAA;AAAA,UACxB,OAAA,EAAS,MAAM,gBAAA,CAAiB,OAAO,CAAA;AAAA,UACvC,QAAA,EAAU,QAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,sBACAA,cAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,QAAQ,WAAA,KAAgB,UAAA;AAAA,UACxB,OAAA,EAAS,MAAM,gBAAA,CAAiB,UAAU,CAAA;AAAA,UAC1C,QAAA,EAAU,QAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,sBACAA,cAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,QAAQ,WAAA,KAAgB,OAAA;AAAA,UACxB,OAAA,EAAS,MAAM,gBAAA,CAAiB,OAAO,CAAA;AAAA,UACvC,QAAA,EAAU,QAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA;AAAA,oBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,QAAA,EAAA;AAAA,MAAA,WAAA,KAAgB,0BACfV,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uEAAsE,QAAA,EAAA,wBAAA,EAErF,CAAA;AAAA,MAGD,WAAA,KAAgB,2BACfA,cAAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,aAAa,KAAA,IAAS,IAAA;AAAA,UAC7B,QAAA,EAAU,iBAAA;AAAA,UACV,QAAA;AAAA,UACA,WAAA;AAAA,UACA,OAAA,EAAS;AAAA;AAAA,OACX;AAAA,MAGD,WAAA,KAAgB,8BACfA,cAAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,aAAa,QAAA,IAAY,IAAA;AAAA,UAChC,QAAA,EAAU,oBAAA;AAAA,UACV;AAAA;AAAA,OACF;AAAA,MAGD,gBAAgB,OAAA,oBACfU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,aAAa,KAAA,IAAS,aAAA;AAAA,YAC7B,QAAA,EAAU,iBAAA;AAAA,YACV,QAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,QAGC,aAAa,KAAA,EAAO,KAAA,oBACnBU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,wCAAA,EACf,QAAA,EAAA;AAAA,4BAAAV,cAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,cAAA;AAAA,gBACT,eAAA,EAAiB,mBAAA;AAAA,gBACjB,QAAA,EAAU;AAAA;AAAA,aACZ;AAAA,4BACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,QAAA,EAAA,gBAAA,EAAc;AAAA,WAAA,EAChE,CAAA;AAAA,UAEC,cAAA,oBACCU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EAEb,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACb,QAAA,EAAA;AAAA,8BAAAV,cAAAA;AAAA,gBAAC,SAAA;AAAA,gBAAA;AAAA,kBACC,QAAQ,WAAA,KAAgB,OAAA;AAAA,kBACxB,OAAA,EAAS,MAAM,uBAAA,CAAwB,OAAO,CAAA;AAAA,kBAC9C,QAAA,EAAU,QAAA;AAAA,kBACX,QAAA,EAAA;AAAA;AAAA,eAED;AAAA,8BACAA,cAAAA;AAAA,gBAAC,SAAA;AAAA,gBAAA;AAAA,kBACC,QAAQ,WAAA,KAAgB,UAAA;AAAA,kBACxB,OAAA,EAAS,MAAM,uBAAA,CAAwB,UAAU,CAAA;AAAA,kBACjD,QAAA,EAAU,QAAA;AAAA,kBACX,QAAA,EAAA;AAAA;AAAA;AAED,aAAA,EACF,CAAA;AAAA,YAGC,WAAA,KAAgB,0BACfA,cAAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,YAAA,CAAa,OAAA,EAAS,KAAA,IAAS,IAAA;AAAA,gBACtC,QAAA,EAAU,wBAAA;AAAA,gBACV,QAAA;AAAA,gBACA,WAAA,EAAa;AAAA;AAAA,gCAGfA,cAAAA;AAAA,cAAC,cAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,YAAA,CAAa,OAAA,EAAS,QAAA,IAAY,IAAA;AAAA,gBACzC,QAAA,EAAU,2BAAA;AAAA,gBACV;AAAA;AAAA;AACF,WAAA,EAEJ;AAAA,SAAA,EAEJ;AAAA,OAAA,EAEJ;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,IAAM,eAAA,GAAkBa,YAAK,oBAAoB,CAAA;AASjD,SAAS,qBAAA,CAAsB,MAAA,GAKlC,EAAC,EAAwC;AAC3C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB,cAAc,MAAA,CAAO;AAAA;AAAA;AACvB,GAEJ;AACF;AChtBA,IAAM,cAAA,GAAyF;AAAA;AAAA,EAE7F,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,OAAO,UAAA,EAAW;AAAA,EACtD,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,OAAO,UAAA,EAAW;AAAA,EAClD,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,OAAO,UAAA,EAAW;AAAA,EACxD,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,OAAO,UAAA,EAAW;AAAA,EAC1D,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,aAAA,EAAe,OAAO,UAAA,EAAW;AAAA;AAAA,EAEhE,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,OAAO,QAAA,EAAS;AAAA,EACpD,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,eAAA,EAAiB,OAAO,QAAA,EAAS;AAAA,EAClE,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,OAAO,QAAA,EAAS;AAAA,EACpD,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,OAAO,QAAA,EAAS;AAAA,EAC1D,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,YAAA,EAAc,OAAO,QAAA,EAAS;AAAA;AAAA,EAE5D,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,OAAO,MAAA,EAAO;AAAA,EACpD,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,OAAO,MAAA,EAAO;AAAA,EACtD,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,aAAA,EAAe,OAAO,MAAA,EAAO;AAAA;AAAA,EAE5D,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,OAAO,SAAA;AAC/C,CAAA;AAYA,SAAS,mBAAmB,EAAE,KAAA,EAAO,WAAA,GAAc,KAAA,EAAO,UAAS,EAA4B;AAC7F,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIH,gBAAS,WAAW,CAAA;AAEhD,EAAA,uBACEa,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,SAAA,CAAU,CAAC,MAAM,CAAA;AAAA,QAChC,SAAA,EAAU,oGAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CAAA,EAA6C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAClE,MAAA,mBACCA,cAAAA,CAACmB,uBAAAA,EAAA,EAAY,SAAA,EAAU,mCAAA,EAAoC,CAAA,mBAE3DnB,cAAAA,CAACkD,wBAAA,EAAA,EAAa,SAAA,EAAU,mCAAA,EAAoC;AAAA;AAAA;AAAA,KAEhE;AAAA,IACC,0BAAUlD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAS;AAAA,GAAA,EACtD,CAAA;AAEJ;AAYA,SAAS,UAAA,CAAW,EAAE,KAAA,EAAO,QAAA,EAAU,UAAS,EAAoB;AAClE,EAAA,MAAM,OAAA,GAA6B;AAAA,IACjC,UAAA;AAAA,IAAY,KAAA;AAAA,IAAO,WAAA;AAAA,IACnB,MAAA;AAAA,IAAQ,QAAA;AAAA,IAAU,OAAA;AAAA,IAClB,aAAA;AAAA,IAAe,QAAA;AAAA,IAAU;AAAA,GAC3B;AAEA,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,QAAA,CAAS,MAAM,CAAA;AAAA,MAC9B,QAAA;AAAA,MACA,SAAA,EAAWC,GAAAA;AAAA,QACT,0CAAA;AAAA,QACA,KAAA,KAAU,SACN,2BAAA,GACA,iEAAA;AAAA,QACJ,QAAA,IAAY;AAAA,OACd;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAAA,MAE9B,QAAA,kBAAAD,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAWC,GAAAA;AAAA,YACT,oCAAA;AAAA,YACA,KAAA,KAAU,SAAS,uBAAA,GAA0B;AAAA;AAC/C;AAAA;AACF,KAAA;AAAA,IAlBK;AAAA,GAoBR,CAAA,EACH,CAAA;AAEJ;AAiBA,SAAS,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,EAAA,EAAI,QAAA,EAAU,QAAA,EAAS,EAAmB;AACtG,EAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EACd,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,sBACAU,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA;AAAA,QAAA,KAAA;AAAA,QAAO;AAAA,OAAA,EAAK;AAAA,KAAA,EAC/D,CAAA;AAAA,oBACAV,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,OAAA;AAAA,QACL,GAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAChD,QAAA;AAAA,QACA,SAAA,EAAU;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAEJ;AAMA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,WAAA;AAAA,EACR,QAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,EAAwB;AACtB,EAAA,MAAM,eAAe,KAAA,IAAS,iBAAA;AAG9B,EAAA,MAAM,iBAAA,GAAoB,4BAAA,CAA6B,YAAA,CAAa,QAAA,IAAY,MAAM,CAAA;AACtF,EAAA,MAAM,uBAAuB,MAAA,CAAO,MAAA,CAAO,iBAAiB,CAAA,CAAE,KAAK,OAAO,CAAA;AAG1E,EAAA,MAAM,WAAA,GAAcF,kBAAAA;AAAA,IAClB,CAAiC,KAAQ,GAAA,KAA2B;AAClE,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,CAAC,GAAG,GAAG;AAAA,OACR,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,oBAAA,GAAuBA,kBAAAA;AAAA,IAC3B,CAAC,QAAA,KAAgC;AAC/B,MAAA,MAAM,aAAA,GAAgB,6BAA6B,QAAQ,CAAA;AAC3D,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,QAAA;AAAA;AAAA,QAEA,MAAA,EAAQ,YAAA,CAAa,MAAA,KAAW,MAAA,GAAS,gBAAgB,YAAA,CAAa;AAAA,OACvE,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,aAAA,GAAgBA,kBAAAA;AAAA,IACpB,CAAC,OAAA,KAA6D;AAC5D,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,OAAA,EAAS;AAAA,UACP,OAAA,EAAS,YAAA,CAAa,OAAA,EAAS,OAAA,IAAW,KAAA;AAAA,UAC1C,KAAA,EAAO,YAAA,CAAa,OAAA,EAAS,KAAA,IAAS,GAAA;AAAA,UACtC,SAAA,EAAW,YAAA,CAAa,OAAA,EAAS,SAAA,IAAa,SAAA;AAAA,UAC9C,GAAG,YAAA,CAAa,OAAA;AAAA,UAChB,GAAG;AAAA;AACL,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,WAAA,GAAcA,mBAAY,MAAM;AACpC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,mBAAmB,IAAA,CAAK,KAAA,CAAA,CAAO,YAAA,CAAa,gBAAA,IAAoB,OAAO,GAAG,CAAA;AAGhF,EAAA,MAAM,oBAAA,GAAuB,CAAC,IAAA,KAAoC;AAChE,IAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,MAAA;AAC5B,IAAA,OAAO,KACJ,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAA,IAAA,KAAQ,KAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CACxD,KAAK,GAAG,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qCAAA,EAAuC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC7D,KAAA,IAAS,CAAC,QAAA,oBACTA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAK,SAAA;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,SAAA,EAAU,8CAAA;AAAA,UACV,KAAA,EAAM,kBAAA;AAAA,UAEN,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB,KAAA,EAEJ,CAAA;AAAA,oBAGAN,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,WAAA,EAE7E,CAAA;AAAA,sBACAU,eAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,aAAa,QAAA,IAAY,MAAA;AAAA,UAChC,aAAA,EAAe,CAAC,CAAA,KAAM,oBAAA,CAAqB,CAAsB,CAAA;AAAA,UACjE,QAAA,EAAU,QAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,aAAA,EACvB,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAY,kBAAA,EACtB,QAAA,EAAA,oBAAA,CAAqB,YAAA,CAAa,QAAA,IAAY,MAAM,GACvD,CAAA,EACF,CAAA;AAAA,4BACAA,cAAAA,CAAC,aAAA,EAAA,EACE,QAAA,EAAA,oBAAA,CAAqB,IAAI,CAAC,EAAE,QAAA,EAAU,KAAA,EAAO,UAAU,UAAA,EAAW,EAAG,GAAA,qBACpEU,gBAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAV,cAAAA;AAAA,gBAAC,WAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAWC,GAAAA;AAAA,oBACT,6EAAA;AAAA,oBACA,yBAAA;AAAA,oBACA,MAAM,CAAA,IAAK;AAAA,mBACb;AAAA,kBAEC,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,cACC,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,qBACfD,cAAAA,CAAC,UAAA,EAAA,EAAsB,KAAA,EAAO,IAAA,EAC3B,QAAA,EAAA,oBAAA,CAAqB,IAAI,CAAA,EAAA,EADX,IAEjB,CACD;AAAA,aAAA,EAAA,EAde,QAelB,CACD,CAAA,EACH;AAAA;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,IAGC,YAAA,CAAa,YAAY,YAAA,CAAa,QAAA,KAAa,0BAClDU,eAAAA,CAAAyB,qBAAA,EAEE,QAAA,EAAA;AAAA,sBAAAzB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,UAAA;AAAA,YACN,KAAA,EAAO,aAAa,gBAAA,IAAoB,GAAA;AAAA,YACxC,GAAA,EAAK,GAAA;AAAA,YACL,GAAA,EAAK,GAAA;AAAA,YACL,IAAA,EAAM,EAAA;AAAA,YACN,IAAA,EAAK,IAAA;AAAA,YACL,QAAA,EAAU,CAAC,CAAA,KAAM,WAAA,CAAY,oBAAoB,CAAC,CAAA;AAAA,YAClD,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,cAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,OAAA;AAAA,YACN,KAAA,EAAO,aAAa,aAAA,IAAiB,CAAA;AAAA,YACrC,GAAA,EAAK,CAAA;AAAA,YACL,GAAA,EAAK,GAAA;AAAA,YACL,IAAA,EAAM,EAAA;AAAA,YACN,IAAA,EAAK,IAAA;AAAA,YACL,QAAA,EAAU,CAAC,CAAA,KAAM,WAAA,CAAY,iBAAiB,CAAC,CAAA;AAAA,YAC/C,QAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF,CAAA;AAAA,MAGC,oBAAA,oBACCU,eAAAA,CAAC,kBAAA,EAAA,EAAmB,OAAM,WAAA,EACvB,QAAA,EAAA;AAAA,QAAA,iBAAA,CAAkB,gCACjBV,cAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,UAAA;AAAA,YACN,KAAA,EAAO,aAAa,QAAA,IAAY,EAAA;AAAA,YAChC,GAAA,EAAK,CAAA;AAAA,YACL,GAAA,EAAK,GAAA;AAAA,YACL,IAAA,EAAM,CAAA;AAAA,YACN,IAAA,EAAK,IAAA;AAAA,YACL,QAAA,EAAU,CAAC,CAAA,KAAM,WAAA,CAAY,YAAY,CAAC,CAAA;AAAA,YAC1C,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,QAED,iBAAA,CAAkB,6BACjBA,cAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,YAAA;AAAA,YACN,OAAO,IAAA,CAAK,KAAA,CAAA,CAAO,YAAA,CAAa,SAAA,IAAa,OAAO,GAAG,CAAA;AAAA,YACvD,GAAA,EAAK,EAAA;AAAA,YACL,GAAA,EAAK,GAAA;AAAA,YACL,IAAA,EAAM,CAAA;AAAA,YACN,IAAA,EAAK,GAAA;AAAA,YACL,UAAU,CAAC,CAAA,KAAM,WAAA,CAAY,WAAA,EAAa,IAAI,GAAG,CAAA;AAAA,YACjD,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,QAED,iBAAA,CAAkB,8BACjBA,cAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,UAAA;AAAA,YACN,KAAA,EAAO,aAAa,WAAA,IAAe,EAAA;AAAA,YACnC,GAAA,EAAK,IAAA;AAAA,YACL,GAAA,EAAK,GAAA;AAAA,YACL,IAAA,EAAM,CAAA;AAAA,YACN,IAAA,EAAK,KAAA;AAAA,YACL,QAAA,EAAU,CAAC,CAAA,KAAM,WAAA,CAAY,eAAe,CAAC,CAAA;AAAA,YAC7C,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,QAED,iBAAA,CAAkB,4BACjBA,cAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,MAAA;AAAA,YACN,KAAA,EAAO,aAAa,UAAA,IAAc,CAAA;AAAA,YAClC,GAAA,EAAK,CAAA;AAAA,YACL,GAAA,EAAK,EAAA;AAAA,YACL,IAAA,EAAM,CAAA;AAAA,YACN,IAAA,EAAK,IAAA;AAAA,YACL,QAAA,EAAU,CAAC,CAAA,KAAM,WAAA,CAAY,cAAc,CAAC,CAAA;AAAA,YAC5C,QAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EAEJ,CAAA;AAAA,sBAIFA,cAAAA,CAAC,kBAAA,EAAA,EAAmB,KAAA,EAAM,kBAAA,EACxB,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,kBAAAA,cAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,aAAa,MAAA,IAAU,QAAA;AAAA,UAC9B,QAAA,EAAU,CAAC,CAAA,KAAM,WAAA,CAAY,UAAU,CAAC,CAAA;AAAA,UACxC,QAAA,EAAU;AAAA;AAAA,SAEd,CAAA,EACF,CAAA;AAAA,sBAGAU,eAAAA,CAAC,kBAAA,EAAA,EAAmB,KAAA,EAAM,QAAA,EACxB,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,aAAa,MAAA,IAAU,MAAA;AAAA,YAC9B,aAAA,EAAe,CAAC,CAAA,KAAM,WAAA,CAAY,UAAU,CAA2B,CAAA;AAAA,YACvE,QAAA,EAAU,QAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAV,cAAAA,CAAC,iBAAc,SAAA,EAAU,aAAA,EACvB,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAY,eAAA,EAAgB,CAAA,EAC3C,CAAA;AAAA,8BACAA,cAAAA,CAAC,aAAA,EAAA,EACE,QAAA,EAAA,CAAC,YAAY,QAAA,EAAU,MAAA,EAAQ,SAAS,CAAA,CAAE,IAAI,CAAC,KAAA,EAAO,GAAA,qBACrDU,gBAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAV,cAAAA;AAAA,kBAAC,WAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAWC,GAAAA;AAAA,sBACT,6EAAA;AAAA,sBACA,yBAAA;AAAA,sBACA,MAAM,CAAA,IAAK;AAAA,qBACb;AAAA,oBAEC,QAAA,EAAA;AAAA;AAAA,iBACH;AAAA,gBACC,cAAA,CAAe,OAAO,CAAA,CAAA,KAAK,CAAA,CAAE,UAAU,KAAK,CAAA,CAAE,IAAI,CAAC,GAAA,qBAClDD,cAAAA,CAAC,UAAA,EAAA,EAA2B,OAAO,GAAA,CAAI,KAAA,EACpC,cAAI,KAAA,EAAA,EADU,GAAA,CAAI,KAErB,CACD;AAAA,eAAA,EAAA,EAde,KAelB,CACD,CAAA,EACH;AAAA;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CAAyC,QAAA,EAAA,oDAAA,EAEtD;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAA,cAAAA,CAAC,kBAAA,EAAA,EAAmB,KAAA,EAAM,gBAAA,EAAiB,WAAA,EAAW,IAAA,EACpD,QAAA,kBAAAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,mBAAA;AAAA,cACH,OAAA,EAAS,aAAa,eAAA,IAAmB,IAAA;AAAA,cACzC,iBAAiB,CAAC,OAAA,KAAY,YAAY,iBAAA,EAAmB,CAAC,CAAC,OAAO,CAAA;AAAA,cACtE,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAA,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAQ,mBAAA,EAAoB,SAAA,EAAU,0BAAyB,QAAA,EAAA,mBAAA,EAEtE;AAAA,SAAA,EACF,CAAA;AAAA,QAEC,YAAA,CAAa,eAAA,oBACZU,eAAAA,CAAAyB,qBAAA,EACE,QAAA,EAAA;AAAA,0BAAAnC,cAAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,WAAA;AAAA,cACN,KAAA,EAAO,gBAAA;AAAA,cACP,GAAA,EAAK,CAAA;AAAA,cACL,GAAA,EAAK,GAAA;AAAA,cACL,IAAA,EAAM,CAAA;AAAA,cACN,IAAA,EAAK,GAAA;AAAA,cACL,UAAU,CAAC,CAAA,KAAM,WAAA,CAAY,kBAAA,EAAoB,IAAI,GAAG,CAAA;AAAA,cACxD,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAA0C,QAAA,EAAA,gDAAA,EAEvD,CAAA;AAAA,0BAEAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAV,cAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,cAAA;AAAA,gBACH,OAAA,EAAS,aAAa,WAAA,IAAe,IAAA;AAAA,gBACrC,iBAAiB,CAAC,OAAA,KAAY,YAAY,aAAA,EAAe,CAAC,CAAC,OAAO,CAAA;AAAA,gBAClE,QAAA,EAAU;AAAA;AAAA,aACZ;AAAA,4BACAA,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAQ,cAAA,EAAe,SAAA,EAAU,0BAAyB,QAAA,EAAA,mBAAA,EAEjE;AAAA,WAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EAEJ,CAAA,EACF,CAAA;AAAA,MAGC,WAAA,oBACCA,cAAAA,CAAC,kBAAA,EAAA,EAAmB,KAAA,EAAM,oBACxB,QAAA,kBAAAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,iBAAA;AAAA,cACH,OAAA,EAAS,YAAA,CAAa,OAAA,EAAS,OAAA,IAAW,KAAA;AAAA,cAC1C,eAAA,EAAiB,CAAC,OAAA,KAAY,aAAA,CAAc,EAAE,OAAA,EAAS,CAAC,CAAC,OAAA,EAAS,CAAA;AAAA,cAClE,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAA,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAQ,iBAAA,EAAkB,SAAA,EAAU,0BAAyB,QAAA,EAAA,gBAAA,EAEpE;AAAA,SAAA,EACF,CAAA;AAAA,QAEC,aAAa,OAAA,EAAS,OAAA,oBACrBU,eAAAA,CAAAyB,qBAAA,EACE,QAAA,EAAA;AAAA,0BAAAnC,cAAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,eAAA;AAAA,cACN,KAAA,EAAO,YAAA,CAAa,OAAA,EAAS,KAAA,IAAS,GAAA;AAAA,cACtC,GAAA,EAAK,EAAA;AAAA,cACL,GAAA,EAAK,GAAA;AAAA,cACL,IAAA,EAAM,EAAA;AAAA,cACN,IAAA,EAAK,IAAA;AAAA,cACL,UAAU,CAAC,CAAA,KAAM,cAAc,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,cAC3C,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BAEAA,cAAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,iBAAA;AAAA,cACN,KAAA,EAAO,YAAA,CAAa,OAAA,EAAS,QAAA,IAAY,GAAA;AAAA,cACzC,GAAA,EAAK,GAAA;AAAA,cACL,GAAA,EAAK,GAAA;AAAA,cACL,IAAA,EAAM,GAAA;AAAA,cACN,IAAA,EAAK,IAAA;AAAA,cACL,UAAU,CAAC,CAAA,KAAM,cAAc,EAAE,QAAA,EAAU,GAAG,CAAA;AAAA,cAC9C,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BAEAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,WAAA,EAE7E,CAAA;AAAA,4BACAU,eAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,YAAA,CAAa,OAAA,EAAS,SAAA,IAAa,SAAA;AAAA,gBAC1C,eAAe,CAAC,CAAA,KAAM,cAAc,EAAE,SAAA,EAAW,GAAuB,CAAA;AAAA,gBACxE,QAAA,EAAU,QAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAAV,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,eACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,kCACAU,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,oCAAAV,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,SAAA,EAAU,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,oCACnCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,WAAU,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,oCACnCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,UAAS,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,oCACtCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,SAAQ,QAAA,EAAA,YAAA,EAAU;AAAA,mBAAA,EACtC;AAAA;AAAA;AAAA;AACF,WAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EAEJ,CAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEO,IAAM,cAAA,GAAiBa,YAAK,mBAAmB,CAAA;AAwB/C,SAAS,oBAAA,CAAqB,MAAA,GAAqC,EAAC,EAAuC;AAChH,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,aAAa,MAAA,CAAO;AAAA;AAAA;AACtB,GAEJ;AACF;ACtjBA,IAAM,gBAAA,GAAoF;AAAA,EACxF,EAAA,EAAImD,sBAAA;AAAA,EACJ,EAAA,EAAIA,sBAAA;AAAA,EACJ,EAAA,EAAIC,kBAAA;AAAA,EACJ,EAAA,EAAIC,kBAAA;AAAA,EACJ,EAAA,EAAIC;AACN,CAAA;AAgBA,SAAS,aAAA,CAAc;AAAA,EACrB,UAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAMpB,KAAAA,GAAO,iBAAiB,UAAU,CAAA;AAExC,EAAA,uBACExB,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAO,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,QAAQ,CAAA,IAAA,CAAA,GAAS,KAAA;AAAA,MAChD,SAAA,EAAWT,GAAAA;AAAA,QACT,qHAAA;AAAA,QACA,WACI,oCAAA,GACA,wEAAA;AAAA,QACJ,QAAA,IAAY;AAAA,OACd;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAACkC,KAAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,wBAC9BlC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAoB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QAEzC,eAAe,CAAC,QAAA,oBACfA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,8DAAA,EAA+D;AAAA;AAAA;AAAA,GAEnF;AAEJ;AAMA,SAAS,oBAAA,CAAwB;AAAA,EAC/B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIH,gBAAqB,IAAI,CAAA;AAIzE,EAAA,MAAM,eAAA,GAAkBC,mBAAY,MAAgB;AAClD,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,YAAA,IAAgB,IAAA;AAGnC,IAAA,IAAI,qBAAqB,IAAA,EAAM;AAC7B,MAAA,OAAO,KAAA,CAAM,MAAM,YAAA,IAAgB,IAAA;AAAA,IACrC;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,gBAAgB,CAAA;AACvC,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,OAAO,QAAA;AAAA,IACT;AAGA,IAAA,MAAM,kBAAgC,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AACnE,IAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,OAAA,CAAQ,gBAAgB,CAAA;AAE5D,IAAA,KAAA,IAAS,IAAI,WAAA,GAAc,CAAA,EAAG,CAAA,GAAI,eAAA,CAAgB,QAAQ,CAAA,EAAA,EAAK;AAC7D,MAAA,MAAM,EAAA,GAAK,gBAAgB,CAAC,CAAA;AAC5B,MAAA,MAAM,GAAA,GAAM,MAAM,EAAE,CAAA;AACpB,MAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,QAAA,OAAO,GAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,YAAA,IAAgB,IAAA;AAAA,EACzB,CAAA,EAAG,CAAC,KAAA,EAAO,gBAAA,EAAkB,YAAY,CAAC,CAAA;AAG1C,EAAA,MAAM,WAAA,GAAcA,kBAAAA;AAAA,IAClB,CAAC,UAAA,KAAoC;AACnC,MAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,MAAA,IAAI,UAAA,KAAe,IAAA,EAAM,OAAO,KAAA,CAAM,EAAA,KAAO,MAAA;AAC7C,MAAA,OAAO,KAAA,CAAM,UAAU,CAAA,KAAM,MAAA;AAAA,IAC/B,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AAGA,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA;AAAA,IACxB,CAAC,QAAA,KAAuB;AACtB,MAAA,IAAI,qBAAqB,IAAA,EAAM;AAE7B,QAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,YAAA,KAAiB,MAAA,EAAW;AACnD,UAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,EAAA,EAAI,cAAoC,CAAA;AAAA,QAC/D,CAAA,MAAA,IAAW,aAAa,IAAA,EAAM;AAC5B,UAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,EAAA,EAAI,UAAgC,CAAA;AAAA,QAC3D;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,IAAI,aAAa,IAAA,EAAM;AAErB,UAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,KAAA,EAAM;AACjC,UAAA,OAAO,cAAc,gBAAgB,CAAA;AACrC,UAAA,QAAA,CAAS,aAAa,CAAA;AAAA,QACxB,CAAA,MAAO;AAEL,UAAA,MAAM,EAAA,GAAK,OAAO,EAAA,IAAM,YAAA;AACxB,UAAA,IAAI,OAAO,MAAA,EAAW;AACtB,UAAA,QAAA,CAAS;AAAA,YACP,GAAG,KAAA;AAAA,YACH,EAAA;AAAA,YACA,CAAC,gBAAgB,GAAG;AAAA,WACC,CAAA;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,QAAA,EAAU,gBAAA,EAAkB,YAAY;AAAA,GAClD;AAGA,EAAA,MAAM,mBAAA,GAAsBA,mBAAY,MAAM;AAC5C,IAAA,IAAI,gBAAA,KAAqB,IAAA,IAAQ,CAAC,KAAA,EAAO;AAEzC,IAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,KAAA,EAAM;AACjC,IAAA,OAAO,cAAc,gBAAgB,CAAA;AACrC,IAAA,QAAA,CAAS,aAAa,CAAA;AAAA,EACxB,CAAA,EAAG,CAAC,KAAA,EAAO,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAGtC,EAAA,MAAM,cAAA,GAAiBA,mBAAY,MAAM;AACvC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,EAAA,MAAM,uBAAuB,gBAAA,KAAqB,IAAA;AAClD,EAAA,MAAM,kBAAA,GAAqB,YAAY,gBAAgB,CAAA;AAGvD,EAAA,MAAM,gBAAgB,KAAA,GACjB,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA,CAAmB,MAAA,CAAO,CAAC,OAAO,KAAA,CAAM,EAAE,CAAA,KAAM,MAAS,EAAE,MAAA,GACnF,CAAA;AAEJ,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qCAAA,EAAuC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QAC7D,gBAAgB,CAAA,oBACfU,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,8DAAA,EACb,QAAA,EAAA;AAAA,UAAA,aAAA;AAAA,UAAc,WAAA;AAAA,UAAU,aAAA,KAAkB,IAAI,GAAA,GAAM;AAAA,SAAA,EACvD;AAAA,OAAA,EAEJ,CAAA;AAAA,MAED,KAAA,IAAS,CAAC,QAAA,oBACTV,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAK,SAAA;AAAA,UACL,OAAA,EAAS,cAAA;AAAA,UACT,SAAA,EAAU,8CAAA;AAAA,UACV,KAAA,EAAM,kBAAA;AAAA,UAEN,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB,KAAA,EAEJ,CAAA;AAAA,oBAGAhB,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCACZ,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,EAAA,qBAChBA,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QAEC,YAAY,EAAA,CAAG,GAAA;AAAA,QACf,OAAO,EAAA,CAAG,KAAA;AAAA,QACV,UAAU,EAAA,CAAG,QAAA;AAAA,QACb,QAAA,EAAU,qBAAqB,EAAA,CAAG,GAAA;AAAA,QAClC,WAAA,EAAa,WAAA,CAAY,EAAA,CAAG,GAAG,CAAA;AAAA,QAC/B,OAAA,EAAS,MAAM,mBAAA,CAAoB,EAAA,CAAG,GAAG,CAAA;AAAA,QACzC,QAAA,EAAU;AAAA,OAAA;AAAA,MAPL,EAAA,CAAG;AAAA,KASX,CAAA,EACH,CAAA;AAAA,oBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,UACE,QAAA,EAAA,gBAAA,KAAqB,IAAA,GACpB,kDAEAU,eAAAA,CAAAyB,qBAAA,EACG,QAAA,EAAA;AAAA,QAAA,WAAA,CAAY,KAAK,CAAC,EAAA,KAAO,EAAA,CAAG,GAAA,KAAQ,gBAAgB,CAAA,EAAG,QAAA;AAAA,QAAS,WAAA;AAAA,QAChE,CAAC,kBAAA,oBACAnC,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAA2B,QAAA,EAAA,uBAAA,EAAqB;AAAA,OAAA,EAEpE,CAAA,EAEJ,CAAA;AAAA,MAGC,oBAAA,IAAwB,kBAAA,IAAsB,CAAC,QAAA,oBAC9CA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,mBAAA;AAAA,UACT,SAAA,EAAU,+DAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EAEJ,CAAA;AAAA,oBAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCACZ,QAAA,EAAA,gBAAA,CAAiB;AAAA,MAChB,KAAA,EAAO,YAAA;AAAA,MACP,QAAA,EAAU,iBAAA;AAAA,MACV;AAAA,KACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,IAAM,eAAA,GAAkBa,YAAK,oBAAoB,CAAA;AAkCjD,SAAS,sBACd,MAAA,EACwC;AAExC,EAAA,MAAM,mBAAmB,MAAA,CAAO,UAAA,CAAW,EAAE,KAAA,EAAO,QAAW,CAAA;AAE/D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,cAAc,MAAA,CAAO,YAAA;AAAA,QACrB,gBAAA,EAAkB,CAAC,KAAA,KAAU;AAE3B,UAAA,IAAI,gBAAA,CAAiB,IAAA,KAAS,QAAA,IAAY,gBAAA,CAAiB,MAAA,EAAQ;AACjE,YAAA,OAAO,iBAAiB,MAAA,CAAO;AAAA,cAC7B,KAAA,EAAO,gBAAA;AAAA,cACP,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,UAAU,KAAA,CAAM,QAAA;AAAA,cAChB,UAAU,KAAA,CAAM,QAAA;AAAA,cAChB,IAAA,EAAM,kBAAA;AAAA,cACN,EAAA,EAAI;AAAA,aACL,CAAA;AAAA,UACH;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AAAA;AAAA;AACF,GAEJ;AACF;ACvUA,IAAMuD,iBAAAA,GAAoF;AAAA,EACxF,EAAA,EAAIJ,sBAAAA;AAAA,EACJ,EAAA,EAAIA,sBAAAA;AAAA,EACJ,EAAA,EAAIC,kBAAAA;AAAA,EACJ,EAAA,EAAIC,kBAAAA;AAAA,EACJ,EAAA,EAAIC;AACN,CAAA;AAeA,SAAS,gBAAA,CAAiB;AAAA,EACxB,UAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,UAAA,GAAaC,kBAAiB,UAAU,CAAA;AAE9C,EAAA,uBACE7C,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,EAAG,QAAA,GAAW,CAAA,EAAA,EAAK,QAAQ,CAAA,IAAA,CAAA,GAAS,EAAE,CAAA,EAAA,EAAK,SAAA,GAAY,SAAA,GAAY,QAAQ,CAAA,CAAA;AAAA,MAC1F,SAAA,EAAWT,GAAAA;AAAA,QACT,8GAAA;AAAA,QACA,YACI,yFAAA,GACA,yEAAA;AAAA,QACJ,QAAA,IAAY;AAAA,OACd;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,wBAChCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAA2B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAEjDA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACZ,sCACCA,cAAAA,CAACwD,eAAA,EAAA,EAAI,SAAA,EAAU,WAAU,CAAA,mBAEzBxD,eAACyD,kBAAA,EAAA,EAAO,SAAA,EAAU,WAAU,CAAA,EAEhC;AAAA;AAAA;AAAA,GACF;AAEJ;AAMA,SAAS,8BAAA,CAA+B;AAAA,EACtC,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAmC;AAEjC,EAAA,MAAM,aAAA,GAAgB3D,kBAAAA;AAAA,IACpB,CAAC,UAAA,KAAoC;AACnC,MAAA,MAAM,MAAM,KAAA,IAAS,kBAAA;AAErB,MAAA,OAAO,GAAA,CAAI,UAAU,CAAA,IAAK,IAAA;AAAA,IAC5B,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AAGA,EAAA,MAAM,gBAAA,GAAmBA,kBAAAA;AAAA,IACvB,CAAC,UAAA,KAA2B;AAC1B,MAAA,MAAM,cAAA,GAAiB,cAAc,UAAU,CAAA;AAC/C,MAAA,MAAM,QAAA,GAA4B;AAAA,QAChC,GAAI,KAAA,IAAS,kBAAA;AAAA,QACb,CAAC,UAAU,GAAG,CAAC;AAAA,OACjB;AACA,MAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,QAAA,EAAU,aAAa;AAAA,GACjC;AAGA,EAAA,MAAM,oBAAA,GAAuB,YAAY,IAAA,CAAK,CAAC,OAAO,CAAC,aAAA,CAAc,EAAA,CAAG,GAAG,CAAC,CAAA;AAE5E,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uCAAuC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAE/D,oBAAA,oBACCU,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gDAAA,EACd,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAACyD,kBAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,QAAE;AAAA,OAAA,EAEhC;AAAA,KAAA,EAEJ,CAAA;AAAA,oBAGAzD,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cACZ,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,EAAA,qBAChBA,cAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QAEC,YAAY,EAAA,CAAG,GAAA;AAAA,QACf,OAAO,EAAA,CAAG,KAAA;AAAA,QACV,UAAU,EAAA,CAAG,QAAA;AAAA,QACb,SAAA,EAAW,aAAA,CAAc,EAAA,CAAG,GAAG,CAAA;AAAA,QAC/B,OAAA,EAAS,MAAM,gBAAA,CAAiB,EAAA,CAAG,GAAG,CAAA;AAAA,QACtC,QAAA,EAAU;AAAA,OAAA;AAAA,MANL,EAAA,CAAG;AAAA,KAQX,CAAA,EACH,CAAA;AAAA,oBAGAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAgC,QAAA,EAAA,oEAAA,EAE7C;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,IAAM,yBAAA,GAA4Ba,YAAK,8BAA8B,CAAA;AAoBrE,SAAS,+BAAA,CACd,MAAA,GAAgD,EAAC,EACZ;AACrC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,yBAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd;AAAA;AAAA;AACF,GAEJ;AACF;AC9JA,IAAM,kBAAA,GAAsC;AAAA,EAC1C,IAAA,EAAM,WAAA;AAAA,EACN,SAAA,EAAW,QAAA;AAAA,EACX,UAAU,EAAE,KAAA,EAAO,MAAM,IAAA,EAAM,IAAA,EAAM,SAAS,IAAA;AAChD,CAAA;AAGA,IAAM,eAAA,GAAgC;AAAA,EACpC,GAAA,EAAK,CAAA;AAAA,EACL,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,CAAA;AAAA,EACR,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ;AACV,CAAA;AAmBA,IAAM,YAAA,GAA+B;AAAA,EACnC,SAAS,EAAC;AAAA,EACV,UAAA,EAAY,IAAA;AAAA,EACZ,aAAA,EAAe,IAAA;AAAA,EACf,UAAA,EAAY,IAAA;AAAA,EACZ,MAAA,EAAQ,IAAA;AAAA,EACR,MAAA,EAAQ,IAAA;AAAA,EACR,SAAA,EAAW,IAAA;AAAA,EACX,eAAA,EAAiB,IAAA;AAAA,EACjB,YAAA,EAAc,IAAA;AAAA,EACd,WAAA,EAAa,IAAA;AAAA,EACb,UAAA,EAAY;AACd,CAAA;AAEO,IAAM,eAAA,GAAmC;AAAA,EAC9C,KAAA,EAAO,WAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAc,CAAA;AAAA,IACzC,OAAA,EAAS;AAAA,MACP,IAAA,EAAM;AAAA,KACR;AAAA;AAAA,IAEA,UAAA,EAAY,+BAAA,CAAgC,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA;AAAA,IAEnE,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,oBAAoB,CAAA;AAAA,IAC/D,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,gBAAgB,CAAA;AAAA;AAAA,IAEnD,YAAY,qBAAA,CAAsB;AAAA,MAChC,KAAA,EAAO,yBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,qBAAA,CAAsB,MAAM,CAAA;AAAA,MACpD,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,IACD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA;AAAA,IAEtD,eAAA,EAAiB,qBAAA,CAAsB,EAAE,KAAA,EAAO,oBAAoB,CAAA;AAAA,IACpE,WAAA,EAAa,iBAAA,CAAkB,EAAE,KAAA,EAAO,gBAAgB,CAAA;AAAA;AAAA,IAExD,cAAc,qBAAA,CAAsB;AAAA,MAClC,KAAA,EAAO,4BAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,kBAAA,CAAmB,MAAM,CAAA;AAAA,MACjD,YAAA,EAAc;AAAA,KACf,CAAA;AAAA;AAAA,IAED,QAAQ,qBAAA,CAAsB;AAAA,MAC5B,KAAA,EAAO,qBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,iBAAA,CAAkB,MAAM,CAAA;AAAA,MAChD,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,IACD,eAAe,qBAAA,CAAsB;AAAA,MACnC,KAAA,EAAO,4BAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,kBAAA,CAAmB,MAAM,CAAA;AAAA,MACjD,YAAA,EAAc;AAAA,KACf;AAAA,GACH;AAAA,EACA,YAAA;AAAA,EACA,QAAQ,CAAC;AAAA,IACP,OAAA,EAAS0D,QAAAA;AAAA,IACT,UAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF,KAAM;AAGJ,IAAA,MAAM,QAAA,GAAWC,YAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACzC,IAAA,MAAM,UAAA,GAAa,wBAAwB,QAAQ,CAAA,CAAA;AACnD,IAAA,MAAM,UAAA,GAAa,wBAAwB,QAAQ,CAAA,CAAA;AAGnD,IAAA,MAAM,eAAyB,EAAC;AAGhC,IAAA,MAAM,qBAAA,GAAwB,qBAAqB,UAAU,CAAA;AAC7D,IAAA,MAAM,WAAA,GAAmC;AAAA,MACvC,GAAG;AAAA,KACL;AAGA,IAAA,MAAM,kBAAA,GAAqB,oBAAA;AAAA,MACzB,aAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,iBAAA,CAAkB,CAAC,CAAA,EAAE,CAAA;AAAA,MACxC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,kBAAA,CAAmB,UAAU,CAAA;AACxD,IAAA,IAAI,mBAAmB,aAAA,EAAe;AACpC,MAAA,YAAA,CAAa,IAAA,CAAK,mBAAmB,aAAa,CAAA;AAAA,IACpD;AAGA,IAAA,MAAM,iBAAA,GAAoB,iBAAiB,MAAM,CAAA;AACjD,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,MAAA,CAAO,MAAA,CAAO,aAAa,iBAAiB,CAAA;AAAA,IAC9C;AAGA,IAAA,MAAM,YAAA,GAAe,oBAAA;AAAA,MACnB,MAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,gBAAA,CAAiB,CAAC,CAAA,EAAE,CAAA;AAAA,MACtC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,YAAA,CAAa,UAAU,CAAA;AAClD,IAAA,IAAI,aAAa,aAAA,EAAe;AAC9B,MAAA,YAAA,CAAa,IAAA,CAAK,aAAa,aAAa,CAAA;AAAA,IAC9C;AAGA,IAAA,MAAM,qBAAA,GAAwB,qBAAqB,eAAe,CAAA;AAClE,IAAA,MAAM,WAAA,GAAmC;AAAA,MACvC,GAAG;AAAA,KACL;AAGA,IAAA,MAAM,gBAAA,GAAmB,oBAAA;AAAA,MACvB,UAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,gBAAA,CAAiB,UAAU,CAAA;AACtD,IAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,MAAA,YAAA,CAAa,IAAA,CAAK,iBAAiB,aAAa,CAAA;AAAA,IAClD;AAGA,IAAA,MAAM,kBAAA,GAAqB,oBAAA;AAAA,MACzB,YAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,iBAAA,CAAkB,CAAC,CAAA,EAAE,CAAA;AAAA,MACxC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,kBAAA,CAAmB,UAAU,CAAA;AACxD,IAAA,IAAI,mBAAmB,aAAA,EAAe;AACpC,MAAA,YAAA,CAAa,IAAA,CAAK,mBAAmB,aAAa,CAAA;AAAA,IACpD;AAGA,IAAA,MAAM,iBAAA,GAAoB,iBAAiB,WAAW,CAAA;AACtD,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,MAAA,CAAO,MAAA,CAAO,aAAa,iBAAiB,CAAA;AAAA,IAC9C;AAGA,IAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,UAAA,EAAY,UAAU,CAAA;AACjE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,YAAA,CAAa,KAAK,aAAa,CAAA;AAAA,IACjC;AAEA,IAAA,MAAM,cAAA,GAAiB,EAAA,CAAG,MAAA,EAAQ,UAAU,CAAA;AAG5C,IAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,GAAS,CAAA;AAGzD,IAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAE/C,IAAA,uBACEjD,eAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EACd,QAAA,EAAA;AAAA,MAAA,gBAAA,oBAAoBV,cAAAA,CAAC,OAAA,EAAA,EAAO,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,sBAC9CA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,UAAA,EAAY,KAAA,EAAO,WAAA,EAChC,QAAA,EAAA,cAAA,mBACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,cAAA,EAAgB,KAAA,EAAO,WAAA,EACrC,QAAA,kBAAAA,cAAAA,CAAC0D,QAAAA,EAAA,EAAQ,CAAA,EACX,CAAA,mBAEA1D,cAAAA,CAAC0D,QAAAA,EAAA,EAAQ,SAAA,EAAW,cAAA,EAAgB,KAAA,EAAO,aAAa,CAAA,EAE5D;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AC1MA,SAAS,wBAAA,CAAyB;AAAA,EAChC,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,iBAAA;AAAA,EACR,QAAA;AAAA,EACA,YAAA,GAAe;AACjB,CAAA,EAA6B;AAC3B,EAAA,MAAM,eAAe,KAAA,IAAS,YAAA;AAE9B,EAAA,MAAM,YAAA,GAAe5D,kBAAAA,CAAY,CAAC,cAAA,KAAmC;AACnE,IAAA,QAAA,CAAS,cAAc,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,WAAA,GAAcA,mBAAY,MAAM;AACpC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,EAAE,KAAA,EAAO,YAAA,EAAgC,IAAA,EAAM8D,qBAAA,EAAW,OAAO,OAAA,EAAQ;AAAA,IACzE,EAAE,KAAA,EAAO,QAAA,EAA4B,IAAA,EAAMC,uBAAA,EAAa,OAAO,QAAA,EAAS;AAAA,IACxE,EAAE,KAAA,EAAO,UAAA,EAA8B,IAAA,EAAMC,sBAAA,EAAY,OAAO,KAAA,EAAM;AAAA,IACtE,EAAE,KAAA,EAAO,eAAA,EAAmC,IAAA,EAAMC,2CAAA,EAAiC,OAAO,eAAA,EAAgB;AAAA,IAC1G,EAAE,KAAA,EAAO,cAAA,EAAkC,IAAA,EAAMC,0BAAA,EAAgB,OAAO,cAAA;AAAe,GACzF;AAEA,EAAA,uBACEtD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qCAAA,EACd,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MACC,KAAA,IAAS,CAAC,QAAA,oBACTA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAK,SAAA;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,SAAA,EAAU,8CAAA;AAAA,UACV,KAAA,EAAM,kBAAA;AAAA,UAEN,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB,KAAA,EAEJ,CAAA;AAAA,oBAEAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,WAAA,EAAa,IAAA,EAAMkC,KAAAA,EAAM,OAAM,KAAM;AAC1D,MAAA,MAAM,WAAW,YAAA,KAAiB,WAAA;AAClC,MAAA,uBACElC,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,WAAW,SAAA,GAAY,WAAA;AAAA,UAChC,IAAA,EAAK,MAAA;AAAA,UACL,OAAA,EAAS,MAAM,YAAA,CAAa,WAAW,CAAA;AAAA,UACvC,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAWC,GAAAA;AAAA,YACT,SAAA;AAAA,YACA,QAAA,IAAY;AAAA,WACd;AAAA,UACA,KAAA;AAAA,UAEA,QAAA,kBAAAD,cAAAA,CAACkC,KAAAA,EAAA,EAAK,WAAU,SAAA,EAAU;AAAA,SAAA;AAAA,QAZrB;AAAA,OAaP;AAAA,IAEJ,CAAC,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,IAAM,mBAAA,GAAsBrB,YAAK,wBAAwB,CAAA;AAMhE,SAAS,oBAAA,CAAqB;AAAA,EAC5B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,aAAA;AAAA,EACR,QAAA;AAAA,EACA,YAAA,GAAe;AACjB,CAAA,EAAyB;AACvB,EAAA,MAAM,eAAe,KAAA,IAAS,YAAA;AAE9B,EAAA,MAAM,YAAA,GAAef,kBAAAA,CAAY,CAAC,UAAA,KAA2B;AAC3D,IAAA,QAAA,CAAS,UAAU,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,WAAA,GAAcA,mBAAY,MAAM;AACpC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,EAAE,KAAA,EAAO,YAAA,EAA4B,IAAA,EAAMmE,8BAAA,EAAoB,OAAO,OAAA,EAAQ;AAAA,IAC9E,EAAE,KAAA,EAAO,QAAA,EAAwB,IAAA,EAAMC,+BAAA,EAAqB,OAAO,QAAA,EAAS;AAAA,IAC5E,EAAE,KAAA,EAAO,UAAA,EAA0B,IAAA,EAAMC,4BAAA,EAAkB,OAAO,KAAA,EAAM;AAAA,IACxE,EAAE,KAAA,EAAO,SAAA,EAAyB,IAAA,EAAMC,wBAAA,EAAc,OAAO,SAAA;AAAU,GACzE;AAEA,EAAA,uBACE1D,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qCAAA,EACd,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MACC,KAAA,IAAS,CAAC,QAAA,oBACTA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAK,SAAA;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,SAAA,EAAU,8CAAA;AAAA,UACV,KAAA,EAAM,kBAAA;AAAA,UAEN,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB,KAAA,EAEJ,CAAA;AAAA,oBAEAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,WAAA,EAAa,IAAA,EAAMkC,KAAAA,EAAM,OAAM,KAAM;AAC1D,MAAA,MAAM,WAAW,YAAA,KAAiB,WAAA;AAClC,MAAA,uBACElC,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,WAAW,SAAA,GAAY,WAAA;AAAA,UAChC,IAAA,EAAK,MAAA;AAAA,UACL,OAAA,EAAS,MAAM,YAAA,CAAa,WAAW,CAAA;AAAA,UACvC,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAWC,GAAAA;AAAA,YACT,SAAA;AAAA,YACA,QAAA,IAAY;AAAA,WACd;AAAA,UACA,KAAA;AAAA,UAEA,QAAA,kBAAAD,cAAAA,CAACkC,KAAAA,EAAA,EAAK,WAAU,SAAA,EAAU;AAAA,SAAA;AAAA,QAZrB;AAAA,OAaP;AAAA,IAEJ,CAAC,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,IAAM,eAAA,GAAkBrB,YAAK,oBAAoB,CAAA;AA0BjD,SAAS,yBAAA,CACd,MAAA,GAA0C,EAAC,EACP;AACpC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,cAAc,MAAA,CAAO;AAAA;AAAA;AACvB,GAEJ;AACF;AAYO,SAAS,qBAAA,CACd,MAAA,GAAsC,EAAC,EACP;AAChC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1BA,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,cAAc,MAAA,CAAO;AAAA;AAAA;AACvB,GAEJ;AACF;ACxNA,IAAM,gBAAA,GAA2C;AAAA,EAC/C,GAAA,EAAK,UAAA;AAAA,EACL,MAAA,EAAQ,UAAA;AAAA,EACR,aAAA,EAAe,kBAAA;AAAA,EACf,gBAAA,EAAkB;AACpB,CAAA;AAEA,IAAM,WAAA,GAAsC;AAAA,EAC1C,IAAA,EAAM,WAAA;AAAA,EACN,MAAA,EAAQ,aAAA;AAAA,EACR,cAAA,EAAgB;AAClB,CAAA;AAGA,IAAMqE,gBAAAA,GAAgC;AAAA,EACpC,GAAA,EAAK,CAAA;AAAA,EACL,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,CAAA;AAAA,EACR,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ;AACV,CAAA;AAEA,IAAMC,mBAAAA,GAAsC;AAAA,EAC1C,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,QAAA;AAAA,EACX,UAAU,EAAE,KAAA,EAAO,KAAK,IAAA,EAAM,GAAA,EAAK,SAAS,IAAA;AAC9C,CAAA;AAqBA,IAAMC,aAAAA,GAA0B;AAAA,EAC9B,SAAS,EAAC;AAAA,EACV,SAAA,EAAW,KAAA;AAAA,EACX,cAAA,EAAgB,IAAA;AAAA,EAChB,UAAA,EAAY,IAAA;AAAA,EACZ,GAAA,EAAK,EAAA;AAAA,EACL,IAAA,EAAM,MAAA;AAAA,EACN,UAAA,EAAY,IAAA;AAAA,EACZ,aAAA,EAAe,IAAA;AAAA,EACf,MAAA,EAAQ,IAAA;AAAA,EACR,UAAA,EAAY,IAAA;AAAA,EACZ,MAAA,EAAQ,IAAA;AAAA,EACR,SAAA,EAAW,IAAA;AAAA,EACX,UAAA,EAAY;AACd,CAAA;AAEO,IAAM,UAAA,GAA8B;AAAA,EACzC,KAAA,EAAO,MAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,eAAc,CAAA;AAAA,IACzC,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU,CAAC,SAAS;AAAA,KACtB;AAAA;AAAA,IAEA,UAAA,EAAY,+BAAA,CAAgC,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACnE,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,WAAA;AAAA,MACP,OAAA,EAAS;AAAA,QACP,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,QAC7B,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA;AAAS;AACrC,KACF;AAAA,IACA,cAAA,EAAgB,yBAAA,CAA0B,EAAE,KAAA,EAAO,mBAAmB,CAAA;AAAA,IACtE,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,eAAe,CAAA;AAAA,IAC1D,GAAA,EAAK;AAAA,MACH,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,UAAA;AAAA,MACP,GAAA,EAAK;AAAA,KACP;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,MAAA;AAAA,MACP,OAAA,EAAS;AAAA,QACP,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,MAAA,EAAO;AAAA,QAC9B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,QAAA;AAAS;AACjC,KACF;AAAA;AAAA,IAEA,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA;AAAA,IAEzD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA;AAAA,IAE7C,YAAY,qBAAA,CAAsB;AAAA,MAChC,KAAA,EAAO,yBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,qBAAA,CAAsB,MAAM,CAAA;AAAA,MACpD,YAAA,EAAcD;AAAA,KACf,CAAA;AAAA,IACD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA;AAAA,IAEtD,QAAQ,qBAAA,CAAsB;AAAA,MAC5B,KAAA,EAAO,qBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,iBAAA,CAAkB,MAAM,CAAA;AAAA,MAChD,YAAA,EAAcD;AAAA,KACf,CAAA;AAAA,IACD,eAAe,qBAAA,CAAsB;AAAA,MACnC,KAAA,EAAO,sBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,kBAAA,CAAmB,MAAM,CAAA;AAAA,MACjD,YAAA,EAAcA;AAAA,KACf;AAAA,GACH;AAAA,EACA,YAAA,EAAAE,aAAAA;AAAA,EACA,QAAQ,CAAC;AAAA,IACP,OAAA,EAASb,QAAAA;AAAA,IACT,SAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF,KAAM;AAGJ,IAAA,MAAM,QAAA,GAAWC,YAAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACzC,IAAA,MAAM,YAAA,GAAe,aAAa,QAAQ,CAAA,CAAA;AAC1C,IAAA,MAAM,YAAA,GAAe,qBAAqB,QAAQ,CAAA,CAAA;AAGlD,IAAA,MAAM,eAAyB,EAAC;AAGhC,IAAA,MAAM,gBAAA,GAAmB,qBAAqB,UAAU,CAAA;AAGxD,IAAA,MAAM,aAAA,GAAqC;AAAA,MACzC,GAAG;AAAA,KACL;AAGA,IAAA,MAAM,aAAA,GAAgB,oBAAA;AAAA,MACpB,aAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,iBAAA,CAAkB,CAAC,CAAA,EAAE,CAAA;AAAA,MACxC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe,aAAA,CAAc,UAAU,CAAA;AACrD,IAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,MAAA,YAAA,CAAa,IAAA,CAAK,cAAc,aAAa,CAAA;AAAA,IAC/C;AAGA,IAAA,MAAM,YAAA,GAAe,iBAAiB,MAAM,CAAA;AAC5C,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,CAAO,MAAA,CAAO,eAAe,YAAY,CAAA;AAAA,IAC3C;AAGA,IAAA,MAAM,YAAA,GAAe,oBAAA;AAAA,MACnB,MAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,gBAAA,CAAiB,CAAC,CAAA,EAAE,CAAA;AAAA,MACtC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe,YAAA,CAAa,UAAU,CAAA;AACpD,IAAA,IAAI,aAAa,aAAA,EAAe;AAC9B,MAAA,YAAA,CAAa,IAAA,CAAK,aAAa,aAAa,CAAA;AAAA,IAC9C;AAGA,IAAA,MAAM,gBAAA,GAAmB,oBAAA;AAAA,MACvB,UAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,UAAA,EAAY,YAAY,CAAA;AACnE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,YAAA,CAAa,KAAK,aAAa,CAAA;AAAA,IACjC;AAIA,IAAA,MAAM,cAAA,GAAiB,EAAA;AAAA,MACrB,0BAAA;AAAA,MACA,iBAAiB,SAAS,CAAA;AAAA,MAC1B,cAAA,IAAkB,kBAAkB,cAAc,CAAA;AAAA,MAClD,UAAA,IAAc,cAAc,UAAU,CAAA;AAAA,MACtC,YAAY,IAAI,CAAA;AAAA,MAChB,eAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,MAAM,aAAA,GAAqC;AAAA,MACzC,GAAA;AAAA,MACA,GAAG,gBAAA,CAAiB;AAAA,KACtB;AACA,IAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,MAAA,YAAA,CAAa,IAAA,CAAK,iBAAiB,aAAa,CAAA;AAAA,IAClD;AAGA,IAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAE/C,IAAA,uBACEjD,eAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EACd,QAAA,EAAA;AAAA,MAAA,gBAAA,oBAAoBV,cAAAA,CAAC,OAAA,EAAA,EAAO,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,sBAC9CA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,cAAc,KAAA,EAAO,aAAA,EACnC,QAAA,kBAAAA,cAAAA,CAAC0D,UAAA,EAAQ,SAAA,EAAW,cAAA,EAAgB,KAAA,EAAO,eAAe,CAAA,EAC5D;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AC3OA,IAAMW,gBAAAA,GAAgC;AAAA,EACpC,GAAA,EAAK,CAAA;AAAA,EACL,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,CAAA;AAAA,EACR,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ;AACV,CAAA;AAEA,IAAMC,mBAAAA,GAAsC;AAAA,EAC1C,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,QAAA;AAAA,EACX,UAAU,EAAE,KAAA,EAAO,KAAK,IAAA,EAAM,GAAA,EAAK,SAAS,IAAA;AAC9C,CAAA;AAkBA,IAAMC,aAAAA,GAA0B;AAAA,EAC9B,SAAS,EAAC;AAAA,EACV,UAAA,EAAY,CAAA;AAAA,EACZ,GAAA,EAAK,EAAA;AAAA,EACL,UAAA,EAAY,IAAA;AAAA,EACZ,aAAA,EAAe,IAAA;AAAA,EACf,UAAA,EAAY,IAAA;AAAA,EACZ,MAAA,EAAQ,IAAA;AAAA,EACR,MAAA,EAAQ,IAAA;AAAA,EACR,SAAA,EAAW,IAAA;AAAA,EACX,UAAA,EAAY;AACd,CAAA;AAEO,IAAM,UAAA,GAA8B;AAAA,EACzC,KAAA,EAAO,MAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,eAAc,CAAA;AAAA,IACzC,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU,CAAC,SAAS;AAAA,KACtB;AAAA;AAAA,IAEA,UAAA,EAAY,+BAAA,CAAgC,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACnE,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,mBAAA;AAAA,MACP,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAAA,IACA,GAAA,EAAK;AAAA,MACH,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,UAAA;AAAA,MACP,GAAA,EAAK;AAAA,KACP;AAAA;AAAA,IAEA,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA;AAAA,IAEzD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA;AAAA,IAE7C,YAAY,qBAAA,CAAsB;AAAA,MAChC,KAAA,EAAO,yBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,qBAAA,CAAsB,MAAM,CAAA;AAAA,MACpD,YAAA,EAAcD;AAAA,KACf,CAAA;AAAA,IACD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA;AAAA,IAEtD,QAAQ,qBAAA,CAAsB;AAAA,MAC5B,KAAA,EAAO,qBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,iBAAA,CAAkB,MAAM,CAAA;AAAA,MAChD,YAAA,EAAcD;AAAA,KACf,CAAA;AAAA,IACD,eAAe,qBAAA,CAAsB;AAAA,MACnC,KAAA,EAAO,sBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,kBAAA,CAAmB,MAAM,CAAA;AAAA,MACjD,YAAA,EAAcA;AAAA,KACf;AAAA,GACH;AAAA,EACA,YAAA,EAAAE,aAAAA;AAAA,EACA,QAAQ,CAAC;AAAA,IACP,OAAA,EAASb,QAAAA;AAAA,IACT,UAAA;AAAA,IACA,GAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF,KAAM;AAGJ,IAAA,MAAM,QAAA,GAAWC,YAAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACzC,IAAA,MAAM,YAAA,GAAe,aAAa,QAAQ,CAAA,CAAA;AAC1C,IAAA,MAAM,YAAA,GAAe,qBAAqB,QAAQ,CAAA,CAAA;AAGlD,IAAA,MAAM,eAAyB,EAAC;AAGhC,IAAA,MAAM,gBAAA,GAAmB,qBAAqB,UAAU,CAAA;AAGxD,IAAA,MAAM,aAAA,GAAqC;AAAA,MACzC,GAAG;AAAA,KACL;AAGA,IAAA,MAAM,aAAA,GAAgB,oBAAA;AAAA,MACpB,aAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,iBAAA,CAAkB,CAAC,CAAA,EAAE,CAAA;AAAA,MACxC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe,aAAA,CAAc,UAAU,CAAA;AACrD,IAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,MAAA,YAAA,CAAa,IAAA,CAAK,cAAc,aAAa,CAAA;AAAA,IAC/C;AAGA,IAAA,MAAM,YAAA,GAAe,iBAAiB,MAAM,CAAA;AAC5C,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,CAAO,MAAA,CAAO,eAAe,YAAY,CAAA;AAAA,IAC3C;AAGA,IAAA,MAAM,YAAA,GAAe,oBAAA;AAAA,MACnB,MAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,gBAAA,CAAiB,CAAC,CAAA,EAAE,CAAA;AAAA,MACtC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe,YAAA,CAAa,UAAU,CAAA;AACpD,IAAA,IAAI,aAAa,aAAA,EAAe;AAC9B,MAAA,YAAA,CAAa,IAAA,CAAK,aAAa,aAAa,CAAA;AAAA,IAC9C;AAGA,IAAA,MAAM,gBAAA,GAAmB,oBAAA;AAAA,MACvB,UAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,UAAA,EAAY,YAAY,CAAA;AACnE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,YAAA,CAAa,KAAK,aAAa,CAAA;AAAA,IACjC;AAGA,IAAA,MAAM,cAAA,GAAiB,EAAA;AAAA,MACrB,sBAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,MAAM,aAAA,GAAqC;AAAA,MACzC,GAAA;AAAA,MACA,GAAG,gBAAA,CAAiB;AAAA,KACtB;AACA,IAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,MAAA,YAAA,CAAa,IAAA,CAAK,iBAAiB,aAAa,CAAA;AAAA,IAClD;AAGA,IAAA,MAAM,UAAA,GAAkC;AAAA,MACtC,GAAG,aAAA;AAAA,MACH,aAAA,EAAe;AAAA,KACjB;AAGA,IAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAE/C,IAAA,uBACEjD,eAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EACd,QAAA,EAAA;AAAA,MAAA,gBAAA,oBAAoBV,cAAAA,CAAC,OAAA,EAAA,EAAO,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,sBAC9CU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,EAAc,OAAO,aAAA,EACnC,QAAA,EAAA;AAAA,wBAAAV,cAAAA;AAAA,UAAC0D,QAAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,cAAA;AAAA,YACX,KAAA,EAAO;AAAA;AAAA,SACT;AAAA,wBACA1D,eAAC,OAAA,EAAA,EAAO,QAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,CAAA,EAMN;AAAA,OAAA,EACJ;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AC1MA,IAAMqE,gBAAAA,GAAgC;AAAA,EACpC,GAAA,EAAK,CAAA;AAAA,EACL,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,CAAA;AAAA,EACR,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ;AACV,CAAA;AAEA,IAAMC,mBAAAA,GAAsC;AAAA,EAC1C,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,QAAA;AAAA,EACX,UAAU,EAAE,KAAA,EAAO,KAAK,IAAA,EAAM,GAAA,EAAK,SAAS,IAAA;AAC9C,CAAA;AAkBA,IAAMC,aAAAA,GAA6B;AAAA,EACjC,EAAA,EAAI,EAAA;AAAA,EACJ,SAAS,EAAC;AAAA,EACV,UAAA,EAAY,IAAA;AAAA,EACZ,SAAA,EAAW,KAAA;AAAA,EACX,aAAA,EAAe,IAAA;AAAA,EACf,UAAA,EAAY,IAAA;AAAA,EACZ,MAAA,EAAQ,IAAA;AAAA,EACR,MAAA,EAAQ,IAAA;AAAA,EACR,SAAA,EAAW,IAAA;AAAA,EACX,UAAA,EAAY;AACd,CAAA;AAEO,IAAM,aAAA,GAAiC;AAAA,EAC5C,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,eAAc,CAAA;AAAA,IACzC,EAAA,EAAI;AAAA,MACF,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM;AAAA,KACR;AAAA;AAAA,IAEA,UAAA,EAAY,+BAAA,CAAgC,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACnE,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,oBAAA;AAAA,MACP,OAAA,EAAS;AAAA,QACP,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,IAAA,EAAK;AAAA,QAC5B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,KAAA;AAAM;AAC9B,KACF;AAAA;AAAA,IAEA,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA;AAAA,IAEzD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA;AAAA,IAE7C,YAAY,qBAAA,CAAsB;AAAA,MAChC,KAAA,EAAO,yBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,qBAAA,CAAsB,MAAM,CAAA;AAAA,MACpD,YAAA,EAAcD;AAAA,KACf,CAAA;AAAA,IACD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA;AAAA,IAEtD,QAAQ,qBAAA,CAAsB;AAAA,MAC5B,KAAA,EAAO,qBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,iBAAA,CAAkB,MAAM,CAAA;AAAA,MAChD,YAAA,EAAcD;AAAA,KACf,CAAA;AAAA,IACD,eAAe,qBAAA,CAAsB;AAAA,MACnC,KAAA,EAAO,sBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,kBAAA,CAAmB,MAAM,CAAA;AAAA,MACjD,YAAA,EAAcA;AAAA,KACf;AAAA,GACH;AAAA,EACA,YAAA,EAAAE,aAAAA;AAAA,EACA,QAAQ,CAAC;AAAA,IACP,EAAA;AAAA,IACA,OAAA,EAASb,QAAAA;AAAA,IACT,UAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF,KAAM;AAGJ,IAAA,MAAM,QAAA,GAAWC,YAAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACzC,IAAA,MAAM,YAAA,GAAe,gBAAgB,QAAQ,CAAA,CAAA;AAC7C,IAAA,MAAM,YAAA,GAAe,wBAAwB,QAAQ,CAAA,CAAA;AAGrD,IAAA,MAAM,eAAyB,EAAC;AAGhC,IAAA,MAAM,gBAAA,GAAmB,qBAAqB,UAAU,CAAA;AAGxD,IAAA,MAAM,aAAA,GAAqC;AAAA,MACzC,GAAG;AAAA,KACL;AAGA,IAAA,MAAM,aAAA,GAAgB,oBAAA;AAAA,MACpB,aAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,iBAAA,CAAkB,CAAC,CAAA,EAAE,CAAA;AAAA,MACxC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe,aAAA,CAAc,UAAU,CAAA;AACrD,IAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,MAAA,YAAA,CAAa,IAAA,CAAK,cAAc,aAAa,CAAA;AAAA,IAC/C;AAGA,IAAA,MAAM,YAAA,GAAe,iBAAiB,MAAM,CAAA;AAC5C,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,CAAO,MAAA,CAAO,eAAe,YAAY,CAAA;AAAA,IAC3C;AAGA,IAAA,MAAM,YAAA,GAAe,oBAAA;AAAA,MACnB,MAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,gBAAA,CAAiB,CAAC,CAAA,EAAE,CAAA;AAAA,MACtC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe,YAAA,CAAa,UAAU,CAAA;AACpD,IAAA,IAAI,aAAa,aAAA,EAAe;AAC9B,MAAA,YAAA,CAAa,IAAA,CAAK,aAAa,aAAa,CAAA;AAAA,IAC9C;AAGA,IAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,UAAA,EAAY,YAAY,CAAA;AACnE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,YAAA,CAAa,KAAK,aAAa,CAAA;AAAA,IACjC;AAEA,IAAA,MAAM,cAAA,GAAiB,EAAA,CAAG,iBAAA,EAAmB,YAAY,CAAA;AAGzD,IAAA,MAAM,gBAAA,GAAmB,oBAAA;AAAA,MACvB,UAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,MAAA,YAAA,CAAa,IAAA,CAAK,iBAAiB,aAAa,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,cAAA,GAAiB,EAAA;AAAA,MACrB,eAAA;AAAA;AAAA,MAEA,CAAC,UAAA,IAAc,CAAC,SAAA,IAAa,6BAAA;AAAA,MAC7B;AAAA,KACF;AAGA,IAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAE/C,IAAA,uBACEjD,eAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EACd,QAAA,EAAA;AAAA,MAAA,gBAAA,oBAAoBV,cAAAA,CAAC,OAAA,EAAA,EAAO,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,sBAC9CA,cAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,IAAI,EAAA,IAAM,MAAA;AAAA,UACV,SAAA,EAAW,cAAA;AAAA,UACX,KAAA,EAAO,aAAA;AAAA,UAEP,QAAA,kBAAAA,eAAC0D,QAAAA,EAAA,EAAQ,WAAW,cAAA,EAAgB,KAAA,EAAO,iBAAiB,UAAA,EAAY;AAAA;AAAA;AAC1E,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AC5NA,IAAM,cAAA,GAAiB;AAAA,EACrB,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA;AAC3B,CAAA;AAGA,IAAM,SAAA,GAAoC;AAAA,EACxC,KAAA,EAAO,KAAA;AAAA,EACP,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS;AACX,CAAA;AAGA,IAAM,QAAA,GAAmC;AAAA,EACvC,KAAA,EAAO,KAAA;AAAA,EACP,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS;AACX,CAAA;AAQA,IAAMa,aAAAA,GAA4B;AAAA,EAChC,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,UAAA;AAAA,EACX,UAAA,EAAY;AACd,CAAA;AAEO,IAAM,YAAA,GAAgC;AAAA,EAC3C,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,eAAc,CAAA;AAAA;AAAA,IAEzC,UAAA,EAAY,+BAAA,CAAgC,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACnE,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,MAAA;AAAA,MACP,OAAA,EAAS;AAAA,KACX;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,WAAA;AAAA,MACP,OAAA,EAAS;AAAA,QACP,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA,EAAW;AAAA,QACvC,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,YAAA,EAAa;AAAA,QAC3C,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA;AAAO;AACjC;AACF,GACF;AAAA,EACA,YAAA,EAAAA,aAAAA;AAAA,EACA,QAAQ,CAAC,EAAE,IAAA,EAAM,SAAA,EAAW,YAAW,KAAM;AAG3C,IAAA,MAAM,QAAA,GAAWZ,YAAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACzC,IAAA,MAAM,YAAA,GAAe,eAAe,QAAQ,CAAA,CAAA;AAG5C,IAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,UAAA,EAAY,YAAY,CAAA;AAEnE,IAAA,MAAM,aAAa,MAAc;AAC/B,MAAA,MAAM,WAAA,GAAc,SAAA,CAAU,IAAI,CAAA,IAAK,KAAA;AACvC,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAI,CAAA,IAAK,KAAA;AAErC,MAAA,IAAI,cAAc,UAAA,EAAY;AAC5B,QAAA,OAAO,SAAS,WAAW,CAAA,OAAA,CAAA;AAAA,MAC7B;AACA,MAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,QAAA,OAAO,gBAAgB,UAAU,CAAA,OAAA,CAAA;AAAA,MACnC;AAEA,MAAA,OAAO,CAAA,MAAA,EAAS,WAAW,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAAA,IAC3C,CAAA;AAEA,IAAA,uBACEjD,eAAAA,CAAAyB,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,aAAA,oBAAiBnC,cAAAA,CAAC,OAAA,EAAA,EAAO,QAAA,EAAA,aAAA,EAAc,CAAA;AAAA,sBACxCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,YAAW,EAAG,YAAY,CAAA,EAAG,aAAA,EAAY,MAAA,EAAO;AAAA,KAAA,EACrE,CAAA;AAAA,EAEJ;AACF;ACpFA,IAAMwE,WAAUpC,kBAAAA,EAAc;AAyC9B,SAAS,cAAA,CACP,IAAA,EACA,WAAA,EACA,YAAA,EACW;AAEX,EAAA,IAAI,YAAA,EAAc,OAAO,OAAA,EAAS;AAChC,IAAA,MAAM,OAAA,GAAU,aAAa,KAAA,CAAM,OAAA;AACnC,IAAA,IAAI,MAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,SAAS,CAAA,EAAG;AAChD,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,IAAI,KAAK,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,EAAG;AAC/C,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,OAAA,EAAS;AAC/B,MAAA,MAAM,SAAA,GAAY,IAAA;AAClB,MAAA,IAAI,SAAA,CAAU,KAAA,EAAO,EAAA,KAAO,WAAA,EAAa;AACvC,QAAA,IAAI,SAAA,CAAU,OAAO,OAAA,IAAW,KAAA,CAAM,QAAQ,SAAA,CAAU,KAAA,CAAM,OAAO,CAAA,EAAG;AACtE,UAAA,IAAI,SAAA,CAAU,KAAA,CAAM,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AACtC,YAAA,OAAO,UAAU,KAAA,CAAM,OAAA;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAC;AACV;AAMA,SAASqC,sBAAAA,CACP,IAAA,EACA,WAAA,EACA,YAAA,EACM;AAEN,EAAA,MAAM,aAAA,GAAgB,CACpB,KAAA,KAC4D;AAC5D,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,MAAA,IAAI,IAAA,CAAK,KAAA,EAAO,EAAA,KAAO,WAAA,EAAa;AAClC,QAAA,OAAO;AAAA,UACL,GAAG,IAAA;AAAA,UACH,KAAA,EAAO;AAAA,YACL,GAAG,IAAA,CAAK,KAAA;AAAA,YACR,GAAG;AAAA;AACL,SACF;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,OAAO,OAAA,IAAW,KAAA,CAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,EAAG;AAC5D,QAAA,OAAO;AAAA,UACL,GAAG,IAAA;AAAA,UACH,KAAA,EAAO;AAAA,YACL,GAAG,IAAA,CAAK,KAAA;AAAA,YACR,OAAA,EAAS,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,OAAkE;AAAA;AACtG,SACF;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA;AAGA,EAAA,MAAM,iBAAiB,IAAA,CAAK,OAAA,GACxB,cAAc,IAAA,CAAK,OAAkE,IACrF,EAAC;AAGL,EAAA,MAAM,eAAwF,EAAC;AAC/F,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,KAAA,MAAW,CAAC,UAAU,WAAW,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AAChE,MAAA,YAAA,CAAa,QAAQ,CAAA,GAAI,aAAA;AAAA,QACvB;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,OAAA,EAAS,cAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACT;AACF;AAMA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,UAAA;AAAA,EACR,QAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI5E,eAAAA,CAAyB,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,gBAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,gBAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,gBAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAAA,CAAwB;AAAA,IACtD,QAAA,EAAU,KAAA;AAAA,IACV,IAAA,EAAM,EAAA;AAAA,IACN,WAAA,EAAa,EAAA;AAAA,IACb,QAAA,EAAU,EAAA;AAAA,IACV,MAAA,EAAQ,KAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACR,CAAA;AAGD,EAAA,MAAM,QAAA,GAAW2E,QAAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAC1C,EAAA,MAAM,QAAA,GAAWA,QAAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAC1C,EAAA,MAAM,YAAA,GAAeA,QAAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,YAAY,CAAA;AAClD,EAAA,MAAM,gBAAA,GAAmBA,QAAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,gBAAgB,CAAA;AAG1D,EAAA,MAAM,WAAA,GAAc,cAAc,KAAA,EAAO,EAAA;AAGzC,EAAA,MAAM,cAAA,GAAiB1E,mBAAY,YAAY;AAC7C,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,QACjC,KAAA,EAAO,KAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACP,CAAA;AAED,MAAA,MAAM,WAAW,MAAM,KAAA,CAAM,GAAG,WAAW,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AACvD,MAAA,IAAI,CAAC,QAAA,CAAS,EAAA,EAAI,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAE7D,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,MAAM,KAAA,GAAA,CAAyB,IAAA,CAAK,IAAA,IAAQ,EAAC,EAAG,GAAA;AAAA,QAC9C,CAAC,GAAA,MAAkC;AAAA,UACjC,IAAI,GAAA,CAAI,EAAA;AAAA,UACR,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,aAAa,GAAA,CAAI,WAAA;AAAA,UACjB,UAAU,GAAA,CAAI,QAAA;AAAA,UACd,SAAS,GAAA,CAAI,OAAA;AAAA,UACb,WAAW,GAAA,CAAI;AAAA,SACjB;AAAA,OACF;AAEA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,GAAG,CAAA;AAC9C,MAAA,QAAA,CAAS,0BAA0B,CAAA;AAAA,IACrC,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,EAAAC,iBAAU,MAAM;AACd,IAAA,cAAA,EAAe;AAAA,EACjB,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAGnB,EAAA,MAAM,oBAAA,GAAuBD,kBAAAA;AAAA,IAC3B,OAAO,UAAA,KAAuB;AAC5B,MAAA,IAAI,CAAC,WAAA,IAAe,CAAC,YAAA,EAAc;AAGnC,MAAA,MAAM,QAAA,GAAW,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA,KAAM,MAAA,CAAO,UAAU,CAAC,CAAA;AAC1E,MAAA,IAAI,CAAC,QAAA,EAAU;AAEf,MAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,MAAA,IAAI;AAEF,QAAA,MAAM,QAAA,GAAW,iBAAiB,WAAW,CAAA;AAE7C,QAAA,IAAI,QAAA,EAAU;AAGZ,UAAA,QAAA,CAAS;AAAA,YACP,IAAA,EAAM,SAAA;AAAA,YACN,kBAAkB,QAAA,CAAS,KAAA;AAAA,YAC3B,iBAAiB,QAAA,CAAS,IAAA;AAAA,YAC1B,IAAA,EAAM;AAAA,cACJ,MAAM,YAAA,CAAa,IAAA;AAAA,cACnB,KAAA,EAAO;AAAA,gBACL,GAAG,YAAA,CAAa,KAAA;AAAA,gBAChB,SAAS,QAAA,CAAS,OAAA;AAAA,gBAClB;AAAA;AACF;AACF,WACD,CAAA;AAAA,QACH,CAAA,MAAO;AAEL,UAAA,MAAM,WAAA,GAAc2E,sBAAAA;AAAA,YAClB,QAAA,CAAS,IAAA;AAAA,YACT,WAAA;AAAA,YACA,EAAE,OAAA,EAAS,QAAA,CAAS,OAAA,EAAS,UAAA;AAAuB,WACtD;AACA,UAAA,QAAA,CAAS;AAAA,YACP,IAAA,EAAM,SAAA;AAAA,YACN,IAAA,EAAM;AAAA,WACP,CAAA;AAAA,QACH;AAGA,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,GAAG,CAAA;AAC5C,QAAA,QAAA,CAAS,yBAAyB,CAAA;AAAA,MACpC,CAAA,SAAE;AACA,QAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,MAC1B;AAAA,IACF,CAAA;AAAA,IACA,CAAC,aAAa,YAAA,EAAc,SAAA,EAAW,kBAAkB,QAAA,CAAS,IAAA,EAAM,UAAU,QAAQ;AAAA,GAC5F;AAGA,EAAA,MAAM,mBAAA,GAAsB3E,mBAAY,MAAM;AAC5C,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAA,MAAM,oBAAA,GAAuBA,mBAAY,MAAM;AAC7C,IAAA,WAAA,CAAY,CAAC,IAAA,MAAU;AAAA,MACrB,GAAG,IAAA;AAAA,MACH,QAAA,EAAU,CAAC,IAAA,CAAK,QAAA;AAAA,MAChB,KAAA,EAAO;AAAA,KACT,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,mBAAA,GAAsBA,mBAAY,MAAM;AAC5C,IAAA,WAAA,CAAY;AAAA,MACV,QAAA,EAAU,KAAA;AAAA,MACV,IAAA,EAAM,EAAA;AAAA,MACN,WAAA,EAAa,EAAA;AAAA,MACb,QAAA,EAAU,EAAA;AAAA,MACV,MAAA,EAAQ,KAAA;AAAA,MACR,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,kBAAA,GAAqBA,mBAAY,YAAY;AACjD,IAAA,IAAI,CAAC,WAAA,EAAa;AAElB,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAA,EAAK;AAChC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,WAAA,CAAY,CAAC,IAAA,MAAU;AAAA,QACrB,GAAG,IAAA;AAAA,QACH,KAAA,EAAO;AAAA,OACT,CAAE,CAAA;AACF,MAAA;AAAA,IACF;AAEA,IAAA,WAAA,CAAY,CAAC,UAAU,EAAE,GAAG,MAAM,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK,CAAE,CAAA;AAE9D,IAAA,IAAI;AAEF,MAAA,MAAM,OAAA,GAAU,cAAA,CAAe,QAAA,CAAS,IAAA,EAAM,aAAa,YAAY,CAAA;AAEvE,MAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,QAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,MAC7E;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,WAAA,EAAa;AAAA,QACxC,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,IAAA;AAAA,UACA,WAAA,EAAa,QAAA,CAAS,WAAA,CAAY,IAAA,EAAK,IAAK,KAAA,CAAA;AAAA,UAC5C,QAAA,EAAU,QAAA,CAAS,QAAA,CAAS,IAAA,EAAK,IAAK,KAAA,CAAA;AAAA,UACtC;AAAA,SACD;AAAA,OACF,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AACxD,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,UAAU,OAAA,IAAW,SAAA,CAAU,MAAA,GAAS,CAAC,GAAG,OAAA,IAAW;AAAA,SACzD;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,MAAM,GAAA,GAAM,KAAK,GAAA,IAAO,IAAA;AAGxB,MAAA,MAAM,WAAA,GAA4B;AAAA,QAChC,IAAI,GAAA,CAAI,EAAA;AAAA,QACR,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,aAAa,GAAA,CAAI,WAAA;AAAA,QACjB,UAAU,GAAA,CAAI,QAAA;AAAA,QACd,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,WAAW,GAAA,CAAI;AAAA,OACjB;AAGA,MAAA,YAAA,CAAa,CAAC,IAAA,KAAS,CAAC,WAAA,EAAa,GAAG,IAAI,CAAC,CAAA;AAG7C,MAAA,mBAAA,EAAoB;AAGpB,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,QAAA,CAAS,YAAY,EAAE,CAAA;AAAA,MACzB,GAAG,EAAE,CAAA;AAAA,IACP,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,GAAG,CAAA;AAC3C,MAAA,WAAA,CAAY,CAAC,IAAA,MAAU;AAAA,QACrB,GAAG,IAAA;AAAA,QACH,MAAA,EAAQ,KAAA;AAAA,QACR,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU;AAAA,OAC9C,CAAE,CAAA;AAAA,IACJ;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,QAAA,CAAS,IAAA,EAAM,cAAc,WAAA,EAAa,QAAA,EAAU,QAAA,EAAU,mBAAmB,CAAC,CAAA;AAGnG,EAAyB,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA,KAAM,MAAA,CAAO,KAAK,CAAC;AAG7E,EAAA,MAAM,uBAAuB,SAAA,CAAU,MAAA;AAAA,IACrC,CAAC,KAAK,QAAA,KAAa;AACjB,MAAA,MAAM,QAAA,GAAW,SAAS,QAAA,IAAY,eAAA;AACtC,MAAA,IAAI,CAAC,GAAA,CAAI,QAAQ,CAAA,EAAG;AAClB,QAAA,GAAA,CAAI,QAAQ,IAAI,EAAC;AAAA,MACnB;AACA,MAAA,GAAA,CAAI,QAAQ,CAAA,CAAE,IAAA,CAAK,QAAQ,CAAA;AAC3B,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,KAAA,oBACCV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,6CACd,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBAIFU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAO,KAAA,IAAS,EAAA;AAAA,UAChB,QAAA,EAAU,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,KAAA,IAAS,oBAAA,CAAqB,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,UACtE,QAAA,EAAU,YAAY,OAAA,IAAW,eAAA;AAAA,UACjC,SAAA,EAAWT,GAAAA;AAAA,YACT,2EAAA;AAAA,YACA,qEAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAAC,YAAO,KAAA,EAAM,EAAA,EACX,oBAAU,YAAA,GAAe,eAAA,GAAkB,wBAAwB,mBAAA,EACtE,CAAA;AAAA,YACC,MAAA,CAAO,OAAA,CAAQ,oBAAoB,CAAA,CAAE,IAAI,CAAC,CAAC,QAAA,EAAU,KAAK,CAAA,qBACzDA,cAAAA,CAAC,UAAA,EAAA,EAAwB,OAAO,QAAA,EAC7B,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,QAAA,qBACVA,cAAAA,CAAC,QAAA,EAAA,EAAyB,OAAO,QAAA,CAAS,EAAA,EACvC,QAAA,EAAA,QAAA,CAAS,IAAA,EAAA,EADC,QAAA,CAAS,EAEtB,CACD,CAAA,EAAA,EALY,QAMf,CACD;AAAA;AAAA;AAAA,OACH;AAAA,MAEC,KAAA,IAAS,CAAC,QAAA,oBACTA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,OAAA,EAAS,mBAAA;AAAA,UACT,KAAA,EAAM,iBAAA;AAAA,UACN,SAAA,EAAU,6CAAA;AAAA,UAEV,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB,KAAA,EAEJ,CAAA;AAAA,IAGC,CAAC,QAAA,oBACAN,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,YAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,oBAAA;AAAA,UACT,SAAA,EAAU,gBAAA;AAAA,UACV,QAAA,EAAU,WAAW,QAAA,CAAS,MAAA;AAAA,UAE7B,QAAA,EAAA;AAAA,YAAA,QAAA,CAAS,QAAA,mBACRV,cAAAA,CAACoB,qBAAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU,CAAA,mBAE/BpB,cAAAA,CAAC0E,gBAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,YAE3B,QAAA,CAAS,WAAW,QAAA,GAAW;AAAA;AAAA;AAAA,OAClC;AAAA,MAEC,yBACChE,eAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,oBAAA,CAAqB,KAAK,CAAA;AAAA,UACzC,SAAA,EAAU,SAAA;AAAA,UACV,QAAA,EAAU,eAAA;AAAA,UAET,QAAA,EAAA;AAAA,YAAA,eAAA,mBACCV,cAAAA,CAAC0C,mBAAAA,EAAA,EAAQ,SAAA,EAAU,sBAAA,EAAuB,CAAA,mBAE1C1C,cAAAA,CAAC2E,oBAAA,EAAA,EAAS,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,YAC9B;AAAA;AAAA;AAAA;AAEJ,KAAA,EAEJ,CAAA;AAAA,IAID,SAAS,QAAA,oBACRjE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2DAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,eAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,eAAA,EAAgB,SAAA,EAAU,WAAU,QAAA,EAAA,iBAAA,EAEnD,CAAA;AAAA,wBACAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,eAAA;AAAA,YACH,WAAA,EAAY,6BAAA;AAAA,YACZ,OAAO,QAAA,CAAS,IAAA;AAAA,YAChB,QAAA,EAAU,CAAC,CAAA,KACT,WAAA,CAAY,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAM,CAAE,CAAA;AAAA,YAE3D,UAAU,QAAA,CAAS,MAAA;AAAA,YACnB,SAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF,CAAA;AAAA,sBAEAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,eAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,sBAAA,EAAuB,SAAA,EAAU,WAAU,QAAA,EAAA,aAAA,EAE1D,CAAA;AAAA,wBACAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,sBAAA;AAAA,YACH,WAAA,EAAY,yBAAA;AAAA,YACZ,OAAO,QAAA,CAAS,WAAA;AAAA,YAChB,QAAA,EAAU,CAAC,CAAA,KACT,WAAA,CAAY,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,WAAA,EAAa,CAAA,CAAE,MAAA,CAAO,OAAM,CAAE,CAAA;AAAA,YAElE,UAAU,QAAA,CAAS,MAAA;AAAA,YACnB,SAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF,CAAA;AAAA,sBAEAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,eAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,mBAAA,EAAoB,SAAA,EAAU,WAAU,QAAA,EAAA,UAAA,EAEvD,CAAA;AAAA,wBACAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,mBAAA;AAAA,YACH,WAAA,EAAY,yBAAA;AAAA,YACZ,OAAO,QAAA,CAAS,QAAA;AAAA,YAChB,QAAA,EAAU,CAAC,CAAA,KACT,WAAA,CAAY,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,OAAM,CAAE,CAAA;AAAA,YAE/D,UAAU,QAAA,CAAS,MAAA;AAAA,YACnB,SAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF,CAAA;AAAA,MAEC,SAAS,KAAA,oBACRU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+GAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC2C,uBAAAA,EAAA,EAAY,SAAA,EAAU,kCAAA,EAAmC,CAAA;AAAA,wBAC1D3C,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,CAAS,KAAA,EAAM;AAAA,OAAA,EACxB,CAAA;AAAA,sBAGFA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,kBAAA;AAAA,UACT,UAAU,QAAA,CAAS,MAAA;AAAA,UACnB,IAAA,EAAK,IAAA;AAAA,UACL,SAAA,EAAU,gBAAA;AAAA,UAET,QAAA,EAAA,QAAA,CAAS,MAAA,mBACRU,eAAAA,CAAAyB,qBAAA,EACE,QAAA,EAAA;AAAA,4BAAAnC,cAAAA,CAAC0C,mBAAAA,EAAA,EAAQ,SAAA,EAAU,sBAAA,EAAuB,CAAA;AAAA,YAAE;AAAA,WAAA,EAE9C,CAAA,mBAEAhC,eAAAA,CAAAyB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAnC,cAAAA,CAAC0E,gBAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,YAAE;AAAA,WAAA,EAE9B;AAAA;AAAA;AAEJ,KAAA,EACF,CAAA;AAAA,IAID,KAAA,oBACChE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+GAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC2C,uBAAAA,EAAA,EAAY,SAAA,EAAU,8BAAA,EAA+B,CAAA;AAAA,sBACtD3C,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACf;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAGO,IAAM,aAAA,GAAgBa,YAAK,kBAAkB,CAAA;AAmB7C,SAAS,oBAAoB,MAAA,EAGL;AAC7B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,aAAa,MAAA,CAAO;AAAA;AAAA;AACtB,GAEJ;AACF;ACpkBA,IAAMqE,gBAAAA,GAAgC;AAAA,EACpC,GAAA,EAAK,CAAA;AAAA,EACL,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,CAAA;AAAA,EACR,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ;AACV,CAAA;AAEA,IAAMC,mBAAAA,GAAsC;AAAA,EAC1C,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,QAAA;AAAA,EACX,UAAU,EAAE,KAAA,EAAO,KAAK,IAAA,EAAM,GAAA,EAAK,SAAS,IAAA;AAC9C,CAAA;AAyBA,IAAMC,aAAAA,GAA8B;AAAA,EAClC,SAAS,EAAC;AAAA,EACV,UAAA,EAAY,IAAA;AAAA,EACZ,UAAA,EAAY,IAAA;AAAA,EACZ,aAAA,EAAe,IAAA;AAAA,EACf,MAAA,EAAQ,IAAA;AAAA,EACR,UAAA,EAAY;AACd,CAAA;AAMO,IAAM,cAAA,GAAkC;AAAA,EAC7C,KAAA,EAAO,UAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,eAAc,CAAA;AAAA,IACzC,UAAA,EAAY,mBAAA,CAAoB,EAAE,KAAA,EAAO,YAAY,CAAA;AAAA,IACrD,OAAA,EAAS;AAAA,MACP,IAAA,EAAM;AAAA,KACR;AAAA;AAAA,IAEA,UAAA,EAAY,+BAAA,CAAgC,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA;AAAA,IAEnE,YAAY,qBAAA,CAAsB;AAAA,MAChC,KAAA,EAAO,yBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,qBAAA,CAAsB,MAAM,CAAA;AAAA,MACpD,YAAA,EAAcD;AAAA,KACf,CAAA;AAAA;AAAA,IAED,QAAQ,qBAAA,CAAsB;AAAA,MAC5B,KAAA,EAAO,qBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,iBAAA,CAAkB,MAAM,CAAA;AAAA,MAChD,YAAA,EAAcD;AAAA,KACf,CAAA;AAAA,IACD,eAAe,qBAAA,CAAsB;AAAA,MACnC,KAAA,EAAO,sBAAA;AAAA,MACP,UAAA,EAAY,CAAC,MAAA,KAAW,kBAAA,CAAmB,MAAM,CAAA;AAAA,MACjD,YAAA,EAAcA;AAAA,KACf;AAAA,GACH;AAAA,EACA,YAAA,EAAAE,aAAAA;AAAA,EACA,MAAA,EAAQ,CAAC,EAAE,OAAA,EAASb,UAAS,UAAA,EAAY,aAAA,EAAe,MAAA,EAAQ,UAAA,EAAW,KAAM;AAG/E,IAAA,MAAM,QAAA,GAAWC,YAAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACzC,IAAA,MAAM,YAAA,GAAe,iBAAiB,QAAQ,CAAA,CAAA;AAC9C,IAAA,MAAM,YAAA,GAAe,yBAAyB,QAAQ,CAAA,CAAA;AAGtD,IAAA,MAAM,eAAyB,EAAC;AAGhC,IAAA,MAAM,gBAAqC,EAAC;AAG5C,IAAA,MAAM,aAAA,GAAgB,oBAAA;AAAA,MACpB,aAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,iBAAA,CAAkB,CAAC,CAAA,EAAE,CAAA;AAAA,MACxC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe,aAAA,CAAc,UAAU,CAAA;AACrD,IAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,MAAA,YAAA,CAAa,IAAA,CAAK,cAAc,aAAa,CAAA;AAAA,IAC/C;AAGA,IAAA,MAAM,YAAA,GAAe,oBAAA;AAAA,MACnB,MAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,gBAAA,CAAiB,CAAC,CAAA,EAAE,CAAA;AAAA,MACtC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe,YAAA,CAAa,UAAU,CAAA;AACpD,IAAA,IAAI,aAAa,aAAA,EAAe;AAC9B,MAAA,YAAA,CAAa,IAAA,CAAK,aAAa,aAAa,CAAA;AAAA,IAC9C;AAGA,IAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,UAAA,EAAY,YAAY,CAAA;AACnE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,YAAA,CAAa,KAAK,aAAa,CAAA;AAAA,IACjC;AAGA,IAAA,MAAM,gBAAA,GAAmB,oBAAA;AAAA,MACvB,UAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,MAAA,YAAA,CAAa,IAAA,CAAK,iBAAiB,aAAa,CAAA;AAAA,IAClD;AAGA,IAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAI/C,IAAA,uBACEjD,eAAAA,CAAAyB,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,gBAAA,oBAAoBnC,cAAAA,CAAC,OAAA,EAAA,EAAO,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,sBAC9CA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,YAAY,CAAA;AAAA,UAC9C,OAAO,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAAE,MAAA,GAAS,IAAI,aAAA,GAAgB,MAAA;AAAA,UAE/D,QAAA,kBAAAA,eAAC0D,QAAAA,EAAA,EAAQ,WAAW,YAAA,EAAc,KAAA,EAAO,iBAAiB,UAAA,EAAY;AAAA;AAAA;AACxE,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AC/JA,IAAI,SAAA,GAAY,CAAA;AAChB,SAAS,gBAAA,GAA2B;AAClC,EAAA,OAAO,KAAK,EAAE,SAAA,EAAW,QAAA,CAAS,EAAE,CAAC,CAAA,EAAG,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAChF;AAyBA,IAAMa,aAAAA,GAA8B;AAAA,EAClC,SAAS,EAAC;AAAA,EACV,UAAA,EAAY,IAAA;AAAA,EACZ,UAAA,EAAY,IAAA;AAAA,EACZ,aAAA,EAAe,IAAA;AAAA,EACf,MAAA,EAAQ,IAAA;AAAA,EACR,UAAA,EAAY;AACd,CAAA;AAMO,IAAM,oBAAA,GAAwC;AAAA,EACnD,KAAA,EAAO,UAAA;AAAA,EACP,MAAA,EAAQ;AAAA;AAAA,IAEN,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM;AAAA;AACR,GACF;AAAA,EACA,YAAA,EAAAA,aAAAA;AAAA,EACA,MAAA,EAAQ,CAAC,EAAE,OAAA,EAASb,UAAS,UAAA,EAAY,aAAA,EAAe,MAAA,EAAQ,UAAA,EAAW,KAAM;AAE/E,IAAA,MAAM,WAAW,gBAAA,EAAiB;AAClC,IAAA,MAAM,YAAA,GAAe,iBAAiB,QAAQ,CAAA,CAAA;AAC9C,IAAA,MAAM,YAAA,GAAe,yBAAyB,QAAQ,CAAA,CAAA;AAGtD,IAAA,MAAM,eAAyB,EAAC;AAGhC,IAAA,MAAM,gBAAqC,EAAC;AAG5C,IAAA,MAAM,aAAA,GAAgB,oBAAA;AAAA,MACpB,aAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,iBAAA,CAAkB,CAAC,CAAA,EAAE,CAAA;AAAA,MACxC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe,aAAA,CAAc,UAAU,CAAA;AACrD,IAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,MAAA,YAAA,CAAa,IAAA,CAAK,cAAc,aAAa,CAAA;AAAA,IAC/C;AAGA,IAAA,MAAM,YAAA,GAAe,oBAAA;AAAA,MACnB,MAAA;AAAA,MACA,CAAC,CAAA,MAAO,EAAE,MAAA,EAAQ,gBAAA,CAAiB,CAAC,CAAA,EAAE,CAAA;AAAA,MACtC;AAAA,KACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe,YAAA,CAAa,UAAU,CAAA;AACpD,IAAA,IAAI,aAAa,aAAA,EAAe;AAC9B,MAAA,YAAA,CAAa,IAAA,CAAK,aAAa,aAAa,CAAA;AAAA,IAC9C;AAGA,IAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,UAAA,EAAY,YAAY,CAAA;AACnE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,YAAA,CAAa,KAAK,aAAa,CAAA;AAAA,IACjC;AAGA,IAAA,MAAM,gBAAA,GAAmB,oBAAA;AAAA,MACvB,UAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,MAAA,YAAA,CAAa,IAAA,CAAK,iBAAiB,aAAa,CAAA;AAAA,IAClD;AAGA,IAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAG/C,IAAA,MAAM,WAAA,GAAcA,QAAAA;AAIpB,IAAA,uBACEhD,eAAAA,CAAAyB,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,gBAAA,oBAAoBnC,cAAAA,CAAC,OAAA,EAAA,EAAO,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,sBAC9CA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,YAAY,CAAA;AAAA,UAC9C,OAAO,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAAE,MAAA,GAAS,IAAI,aAAA,GAAgB,MAAA;AAAA,UAE/D,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAW,YAAA,EAAc,KAAA,EAAO,iBAAiB,UAAA,EAAY;AAAA;AAAA;AAC5E,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AClHA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,WAAA;AAAA,EACR,QAAA;AAAA,EACA,YAAA,GAAe;AACjB,CAAA,EAAwB;AACtB,EAAA,MAAM,eAAe,KAAA,IAAS,YAAA;AAE9B,EAAA,MAAM,YAAA,GAAeF,kBAAAA,CAAY,CAAC,SAAA,KAAyB;AACzD,IAAA,QAAA,CAAS,SAAS,CAAA;AAAA,EACpB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,WAAA,GAAcA,mBAAY,MAAM;AACpC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,EAAE,KAAA,EAAO,MAAA,EAAqB,IAAA,EAAM8D,qBAAAA,EAAW,OAAO,YAAA,EAAa;AAAA,IACnE,EAAE,KAAA,EAAO,QAAA,EAAuB,IAAA,EAAMC,uBAAAA,EAAa,OAAO,cAAA,EAAe;AAAA,IACzE,EAAE,KAAA,EAAO,OAAA,EAAsB,IAAA,EAAMC,sBAAAA,EAAY,OAAO,aAAA;AAAc,GACxE;AAEA,EAAA,uBACEpD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qCAAA,EACd,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MACC,KAAA,IAAS,CAAC,QAAA,oBACTA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAK,SAAA;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,SAAA,EAAU,8CAAA;AAAA,UACV,KAAA,EAAM,kBAAA;AAAA,UAEN,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB,KAAA,EAEJ,CAAA;AAAA,oBAGAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cACZ,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,SAAA,EAAW,IAAA,EAAMkC,KAAAA,EAAM,OAAM,KAAM;AAC3D,MAAA,MAAM,WAAW,YAAA,KAAiB,SAAA;AAClC,MAAA,uBACElC,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,WAAW,SAAA,GAAY,WAAA;AAAA,UAChC,IAAA,EAAK,MAAA;AAAA,UACL,OAAA,EAAS,MAAM,YAAA,CAAa,SAAS,CAAA;AAAA,UACrC,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAWC,GAAAA;AAAA,YACT,SAAA;AAAA,YACA,QAAA,IAAY;AAAA,WACd;AAAA,UACA,KAAA;AAAA,UAEA,QAAA,kBAAAD,cAAAA,CAACkC,KAAAA,EAAA,EAAK,WAAU,SAAA,EAAU;AAAA,SAAA;AAAA,QAZrB;AAAA,OAaP;AAAA,IAEJ,CAAC,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,IAAM,cAAA,GAAiBrB,YAAK,mBAAmB,CAAA;AAqB/C,SAAS,oBAAA,CACd,MAAA,GAAqC,EAAC,EACP;AAC/B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,cAAc,MAAA,CAAO;AAAA;AAAA;AACvB,GAEJ;AACF;ACzGA,IAAMuE,aAAAA,GAA6B;AAAA,EACjC,IAAA,EAAM,cAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,UAAA,EAAY,IAAA;AAAA,EACZ,SAAA,EAAW,IAAA;AAAA,EACX,MAAA,EAAQ,IAAA;AAAA,EACR,aAAA,EAAe;AACjB,CAAA;AAEO,IAAM,aAAA,GAAiC;AAAA,EAC5C,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,eAAc,CAAA;AAAA,IACzC,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,KAAA,EAAO,iBAAA;AAAA,IACP,SAAA,EAAW,sBAAA,CAAuB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA,IACtD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA;AAAA,IAEtD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,IAC7C,aAAA,EAAe,kBAAA,CAAmB,EAAE,KAAA,EAAO,WAAW;AAAA,GACxD;AAAA,EACA,YAAA,EAAAA,aAAAA;AAAA,EACA,MAAA,EAAQ,CAAC,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAc,KAAM;AAC/F,IAAA,MAAM,MAAM,KAAA,IAAS,IAAA;AACrB,IAAA,MAAM,iBAAiB,SAAA,IAAa,MAAA;AACpC,IAAA,MAAM,OAAA,GAAU,EAAA;AAAA,MACd,eAAA,CAAgB,KAAK,CAAA,IAAK,eAAA,CAAgB,EAAA;AAAA,MAC1C,YAAA,CAAa,cAAc,CAAA,IAAK,YAAA,CAAa;AAAA,KAC/C;AAEA,IAAA,MAAM,gBAAA,GAAmB,UAAA,GAAa,oBAAA,CAAqB,UAAU,CAAA,GAAI,MAAA;AAEzE,IAAA,MAAM,KAAA,GAA6B;AAAA,MACjC,GAAG;AAAA,KACL;AACA,IAAA,MAAM,SAAA,GAAY,iBAAiB,MAAM,CAAA;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,CAAM,MAAA,GAAS,SAAA;AAAA,IACjB;AACA,IAAA,MAAM,UAAA,GAAa,kBAAkB,aAAa,CAAA;AAClD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,KAAA,CAAM,OAAA,GAAU,UAAA;AAAA,IAClB;AAEA,IAAA,MAAM,QAAA,GAAW,gBAAgB,SAAS,CAAA;AAC1C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,KAAA,CAAM,KAAA,GAAQ,QAAA;AAAA,IAChB;AAEA,IAAA,MAAM,iBAAiBK,oBAAA,CAAc,GAAA,EAAK,EAAE,SAAA,EAAW,SAAS,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,MAAA,IAAa,IAAI,CAAA;AAEhI,IAAA,uBACE5E,cAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EACd,QAAA,EAAA,cAAA,EACH,CAAA;AAAA,EAEJ;AACF;ACjEA,IAAMuE,aAAAA,GAA0B;AAAA,EAC9B,OAAA,EAAS,yBAAA;AAAA,EACT,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,UAAA,EAAY,IAAA;AAAA,EACZ,SAAA,EAAW,IAAA;AAAA,EACX,MAAA,EAAQ,IAAA;AAAA,EACR,aAAA,EAAe;AACjB,CAAA;AAEO,IAAM,UAAA,GAA8B;AAAA,EACzC,KAAA,EAAO,MAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,eAAc,CAAA;AAAA,IACzC,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,UAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,IAAA,EAAM,aAAA;AAAA,IACN,SAAA,EAAW,sBAAA,CAAuB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA,IACtD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA;AAAA,IAEtD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,IAC7C,aAAA,EAAe,kBAAA,CAAmB,EAAE,KAAA,EAAO,WAAW;AAAA,GACxD;AAAA,EACA,YAAA,EAAAA,aAAAA;AAAA,EACA,MAAA,EAAQ,CAAC,EAAE,OAAA,EAAS,IAAA,EAAM,SAAA,EAAW,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAc,KAAM;AACjG,IAAA,MAAM,gBAAA,GAAmB,UAAA,GAAa,oBAAA,CAAqB,UAAU,CAAA,GAAI,MAAA;AAEzE,IAAA,MAAM,KAAA,GAA6B;AAAA,MACjC,GAAG;AAAA,KACL;AACA,IAAA,MAAM,SAAA,GAAY,iBAAiB,MAAM,CAAA;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,CAAM,MAAA,GAAS,SAAA;AAAA,IACjB;AACA,IAAA,MAAM,UAAA,GAAa,kBAAkB,aAAa,CAAA;AAClD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,KAAA,CAAM,OAAA,GAAU,UAAA;AAAA,IAClB;AAEA,IAAA,MAAM,QAAA,GAAW,gBAAgB,SAAS,CAAA;AAC1C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,KAAA,CAAM,KAAA,GAAQ,QAAA;AAAA,IAChB;AAEA,IAAA,MAAM,iBAAiB,SAAA,IAAa,MAAA;AAEpC,IAAA,uBACEvE,cAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EACf,QAAA,kBAAAA,cAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,WAAA,CAAY,IAAI,CAAA,IAAK,WAAA,CAAY,IAAA;AAAA,UACjC,YAAA,CAAa,cAAc,CAAA,IAAK,YAAA,CAAa;AAAA,SAC/C;AAAA,QACA,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,GAAS,IAAI,KAAA,GAAQ,MAAA;AAAA,QAE9C,QAAA,EAAA;AAAA;AAAA,KACH,EACF,CAAA;AAAA,EAEJ;AACF;ACnEA,IAAMuE,cAAAA,GAA8B;AAAA,EAClC,OAAA,EAAS,mCAAA;AAAA,EACT,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,UAAA,EAAY,IAAA;AAAA,EACZ,SAAA,EAAW,IAAA;AAAA,EACX,MAAA,EAAQ,IAAA;AAAA,EACR,aAAA,EAAe;AACjB,CAAA;AAEO,IAAM,cAAA,GAAkC;AAAA,EAC7C,KAAA,EAAO,WAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,gBAAc,CAAA;AAAA,IACzC,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,UAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,SAAA,EAAW,sBAAA,CAAuB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA,IACtD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA;AAAA,IAEtD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,IAC7C,aAAA,EAAe,kBAAA,CAAmB,EAAE,KAAA,EAAO,WAAW;AAAA,GACxD;AAAA,EACA,YAAA,EAAAA,cAAAA;AAAA,EACA,MAAA,EAAQ,CAAC,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,UAAA,EAAY,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAc,KAAM;AAC3F,IAAA,MAAM,gBAAA,GAAmB,UAAA,GAAa,oBAAA,CAAqB,UAAU,CAAA,GAAI,MAAA;AAEzE,IAAA,MAAM,KAAA,GAA6B;AAAA,MACjC,GAAG;AAAA,KACL;AACA,IAAA,MAAM,SAAA,GAAY,iBAAiB,MAAM,CAAA;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,CAAM,MAAA,GAAS,SAAA;AAAA,IACjB;AACA,IAAA,MAAM,gBAAA,GAAmB,kBAAkB,aAAa,CAAA;AACxD,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,KAAA,CAAM,OAAA,GAAU,gBAAA;AAAA,IAClB;AAEA,IAAA,MAAM,QAAA,GAAW,gBAAgB,SAAS,CAAA;AAC1C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,KAAA,CAAM,KAAA,GAAQ,QAAA;AAAA,IAChB;AAEA,IAAA,MAAM,iBAAiB,SAAA,IAAa,MAAA;AACpC,IAAA,MAAM,cAAA,GAAiB,YAAA,CAAa,cAAc,CAAA,IAAK,YAAA,CAAa,IAAA;AAGpE,IAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,SAAA,EAAW;AACrC,MAAA,uBACEvE,cAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EACf,QAAA,kBAAAA,eAAC,SAAA,EAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,cAAc,CAAA,EAAG,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,QACtH,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BACb,QAAA,kBAAAA,cAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,kBAAAA,eAAC,IAAA,EAAA,EAAG,QAAA,EAAA,sBAAA,EAAoB,CAAA,EAAK,CAAA,EAClC,GACF,CAAA,EACF,CAAA;AAAA,IAEJ;AAEA,IAAA,uBACEA,eAAC,eAAA,EAAA,EAAgB,SAAA,EACf,0BAAAA,cAAAA,CAAC,SAAA,EAAA,EAAQ,WAAW,EAAA,CAAG,+BAAA,EAAiC,cAAc,CAAA,EAAG,KAAA,EAAO,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,MAAA,EACtH,QAAA,kBAAAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,yBAAA;AAAA,QACV,uBAAA,EAAyB,EAAE,MAAA,EAAQ,OAAA;AAAQ;AAAA,OAE/C,CAAA,EACF,CAAA;AAAA,EAEJ;AACF;AC7CA,IAAM,oBAAA,GAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAoB7B,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,EAAA,MAAM,OAAA,GAAU,+BAAA;AAChB,EAAA,IAAI,CAAC,QAAA,CAAS,cAAA,CAAe,OAAO,CAAA,EAAG;AACrC,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,IAAA,KAAA,CAAM,EAAA,GAAK,OAAA;AACX,IAAA,KAAA,CAAM,WAAA,GAAc,oBAAA;AACpB,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AAC/B,IAAA,OAAA,CAAQ,IAAI,iCAAiC,CAAA;AAAA,EAC/C;AAGA,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA;AACnD,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,IAAA,CAAK,CAAA,KAAA,KAAS;AAC7C,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,KAAA,CAAM,QAAA,IAAY,EAAE,CAAA,CAAE,IAAA;AAAA,QAAK,CAAA,IAAA,KAC3C,IAAA,CAAK,OAAA,EAAS,QAAA,CAAS,mBAAmB;AAAA,OAC5C;AAAA,IACF,CAAA,CAAA,MAAQ;AAAE,MAAA,OAAO,KAAA;AAAA,IAAM;AAAA,EACzB,CAAC,CAAA;AACD,EAAA,OAAA,CAAQ,GAAA,CAAI,6BAA6B,YAAY,CAAA;AACvD;AAMA,IAAM,SAAA,GAAY,mBAAA;AAClB,IAAM,cAAA,GAAiB,2BAAA;AACvB,IAAM,eAAA,GAAkB,yCAAA;AA0BxB,IAAM,QAAA,GAAW6E,eAAU,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,UAAA;AAAA,EAEN,UAAA,GAAa;AACX,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,CAAC,WAAW;AAAA,KACrB;AAAA,EACF,CAAA;AAAA,EAEA,mBAAA,GAAsB;AACpB,IAAA,OAAO;AAAA,MACL;AAAA,QACE,KAAA,EAAO,KAAK,OAAA,CAAQ,KAAA;AAAA,QACpB,UAAA,EAAY;AAAA,UACV,QAAA,EAAU;AAAA,YACR,OAAA,EAAS,IAAA;AAAA,YACT,WAAW,CAAA,OAAA,KAAW,OAAA,CAAQ,MAAM,QAAA,EAAU,OAAA,CAAQ,UAAU,EAAE,CAAA;AAAA,YAClE,YAAY,CAAA,UAAA,KAAc;AACxB,cAAA,IAAI,CAAC,WAAW,QAAA,EAAU;AACxB,gBAAA,OAAO,EAAC;AAAA,cACV;AACA,cAAA,OAAO;AAAA,gBACL,KAAA,EAAO,CAAA,WAAA,EAAc,UAAA,CAAW,QAAQ,CAAA;AAAA,eAC1C;AAAA,YACF;AAAA;AACF;AACF;AACF,KACF;AAAA,EACF,CAAA;AAAA,EAEA,WAAA,GAAc;AACZ,IAAA,OAAO;AAAA,MACL,aACE,CAAC,QAAA,KACD,CAAC,EAAE,OAAM,KAAM;AACb,QAAA,OAAO,KAAA,GAAQ,OAAA,CAAQ,WAAA,EAAa,EAAE,QAAA,EAAU,EAAE,GAAA,EAAI;AAAA,MACxD,CAAA;AAAA,MACF,aAAA,EACE,MACA,CAAC,EAAE,OAAM,KAAM;AACb,QAAA,OAAO,KAAA,EAAM,CACV,OAAA,CAAQ,WAAA,EAAa,EAAE,QAAA,EAAU,IAAA,EAAM,CAAA,CACvC,oBAAA,EAAqB,CACrB,GAAA,EAAI;AAAA,MACT;AAAA,KACJ;AAAA,EACF;AACF,CAAC,CAAA;AAOD,IAAM,WAAA,GAAc,EAAE,KAAA,EAAO,cAAiC,CAAA;AAE9D,IAAM,gBAAA,GAAmB;AAAA,EACvB;AAAA,IACE,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ;AAAA,MACN,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,MACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,MACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,MACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA;AAAW;AACtC,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ;AAAA,MACN,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ;AAAA,MACjC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,MACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,MACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,MACpC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,OAAA;AAAQ;AACnC,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAQ;AAAA,MACN,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,KAAA,EAAM;AAAA,MAC/B,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,QAAA,EAAS;AAAA,MAClC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ;AAAA,MACjC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ;AAAA,MACjC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,MAAA,EAAO;AAAA,MAChC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,QAAA,EAAS;AAAA,MAClC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,MAAA;AAAO;AAClC;AAEJ,CAAA;AAGA,IAAM,gBAAA,GAAmB;AAAA,EACvB,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,QAAA,EAAS;AAAA,EAClC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ;AAAA,EACjC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,MAAA,EAAO;AAAA,EAChC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,KAAA,EAAM;AAAA,EAC/B,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,QAAA,EAAS;AAAA,EAClC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,QAAA;AAC3B,CAAA;AAGA,IAAM,UAAA,GAAa;AAAA,EACjB,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,IAAI,MAAA,EAAO;AAAA,EAC5C,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,UAAA,EAAY,IAAI,MAAA,EAAO;AAAA,EAChD,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,IAAA,EAAM,IAAI,MAAA,EAAO;AAAA,EAC3C,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,UAAA,EAAY,IAAI,MAAA,EAAO;AAAA,EACjD,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,SAAA,EAAW,IAAI,MAAA,EAAO;AAAA,EAC/C,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,IAAI,MAAA,EAAO;AAAA,EAC3C,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,IAAI,MAAA,EAAO;AAAA,EAC9C,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW,IAAI,MAAA,EAAO;AAAA,EAC7C,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,IAAI,MAAA;AACrC,CAAA;AAGA,IAAM,eAAA,GAAkB,CAAC,IAAA,EAAM,KAAA,EAAO,IAAI,CAAA;AAM1C,SAAS,aAAA,CAAc;AAAA,EACrB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAMG;AACD,EAAA,uBACE7E,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAWC,GAAAA;AAAA,QACT,mEAAA;AAAA,QACA,cAAA;AAAA,QACA,QAAA,IAAY,aAAA;AAAA,QACZ,CAAC,QAAA,IAAY,gBAAA;AAAA,QACb;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIJ,gBAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,WAAA,GAAcD,cAAuB,IAAI,CAAA;AAE/C,EAAA,MAAM,QAAQE,kBAAAA,CAAY,MAAM,UAAU,KAAK,CAAA,EAAG,EAAE,CAAA;AAEpD,EAAAC,iBAAU,MAAM;AACd,IAAA,SAAS,mBAAmB,KAAA,EAAmB;AAI7C,MAAA,MAAM,gBAAgB,QAAA,CAAS,aAAA;AAC/B,MAAA,IAAI,aAAA,EAAe,OAAA,KAAY,OAAA,IAAY,aAAA,CAAmC,SAAS,OAAA,EAAS;AAC9F,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,WAAA,CAAY,WAAW,CAAC,WAAA,CAAY,QAAQ,QAAA,CAAS,KAAA,CAAM,MAAc,CAAA,EAAG;AAC9E,QAAA,SAAA,CAAU,KAAK,CAAA;AAAA,MACjB;AAAA,IACF;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AACzD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,kBAAkB,CAAA;AAAA,EAC3E,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEW,eAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,WAAA,EAAa,WAAU,wBAAA,EAC/B,QAAA,EAAA;AAAA,oBAAAV,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,SAAA,CAAU,CAAC,MAAM,CAAA;AAAA,QAChC,KAAA;AAAA,QACA,SAAA,EAAWC,GAAAA;AAAA,UACT,mEAAA;AAAA,UACA,cAAA;AAAA,UACA,QAAA,IAAY,aAAA;AAAA,UACZ,CAAC,QAAA,IAAY;AAAA,SACf;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,IACC,MAAA,oBACCD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uGAAA,EACZ,QAAA,EAAA,OAAO,QAAA,KAAa,UAAA,GAAa,QAAA,CAAS,KAAK,CAAA,GAAI,QAAA,EACtD;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAIG;AACD,EAAA,uBACEA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,SAAA,EAAW;AAAA;AAAA;AAAA,QAAA,EAGP,SAAS;AAAA,MAAA,CAAA;AAAA,MAGZ;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,aAAA,CAAc,EAAE,QAAA,EAAS,EAAkC;AAClE,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CACZ,QAAA,EACH,CAAA;AAEJ;AAEA,SAAS,iBAAA,GAAoB;AAC3B,EAAA,uBAAOA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EAAwB,CAAA;AAChD;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIH,gBAAS,EAAE,CAAA;AACjC,EAAA,MAAM,UAAA,GAAaD,cAAuB,IAAI,CAAA;AAE9C,EAAAG,iBAAU,MAAM;AACd,IAAA,SAAS,mBAAmB,KAAA,EAAmB;AAC7C,MAAA,IAAI,UAAA,CAAW,WAAW,CAAC,UAAA,CAAW,QAAQ,QAAA,CAAS,KAAA,CAAM,MAAc,CAAA,EAAG;AAC5E,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AAAA,IAC3D;AACA,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,kBAAkB,CAAA;AAAA,EAC3E,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAEpB,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAU,kGAAA;AAAA,MAEV,QAAA,kBAAAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,mCAAA,EAAoC,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,wBACxDA,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,WAAA,EAAY,qBAAA;AAAA,YACZ,KAAA,EAAO,GAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACtC,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,cAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,gBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,gBAAA,IAAI,GAAA,EAAK;AACP,kBAAA,SAAA,CAAU,GAAG,CAAA;AACb,kBAAA,MAAA,CAAO,EAAE,CAAA;AAAA,gBACX;AAAA,cACF;AAAA,YACF,CAAA;AAAA,YACA,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAS,MAAM;AACb,gBAAA,IAAI,GAAA,EAAK;AACP,kBAAA,SAAA,CAAU,GAAG,CAAA;AACb,kBAAA,MAAA,CAAO,EAAE,CAAA;AAAA,gBACX;AAAA,cACF,CAAA;AAAA,cACA,SAAA,EAAU,yEAAA;AAAA,cACX,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACAA,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAS,MAAM;AACb,gBAAA,YAAA,EAAa;AACb,gBAAA,MAAA,CAAO,EAAE,CAAA;AAAA,cACX,CAAA;AAAA,cACA,SAAA,EAAU,gEAAA;AAAA,cACX,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EACF;AAAA,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;AAQA,SAAS,sBAAA,GAAyB;AAChC,EAAA,OAAO;AAAA,IACL8E,4BAAW,SAAA,CAAU;AAAA,MACnB,OAAA,EAAS;AAAA,QACP,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC;AAAA,OAC3B;AAAA;AAAA,MAEA,QAAQ,EAAC;AAAA;AAAA,MAET,gBAAgB,EAAC;AAAA,MACjB,WAAW,EAAC;AAAA;AAAA;AAAA;AAAA,MAIZ,IAAA,EAAM;AAAA,QACJ,WAAA,EAAa,KAAA;AAAA,QACb,cAAA,EAAgB;AAAA,UACd,KAAA,EAAO;AAAA;AACT,OACF;AAAA,MACA,WAAW;AAAC,KACb,CAAA;AAAA,IACDC,2BAAU,SAAA,CAAU;AAAA,MAClB,KAAA,EAAO,CAAC,SAAA,EAAW,WAAW,CAAA;AAAA,MAC9B,UAAA,EAAY,CAAC,MAAA,EAAQ,QAAA,EAAU,SAAS,SAAS;AAAA,KAClD,CAAA;AAAA,IACDC,4BAAA;AAAA,IACAC,oBAAA;AAAA,IACAC,2BAAU,SAAA,CAAU;AAAA,MAClB,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,IACD,QAAA;AAAA,IACAC,4BAAA;AAAA,IACAC;AAAA,GACF;AACF;AAMA,SAAS,iBAAiB,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,UAAS,EAAqB;AAChF,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIvF,gBAAS,KAAK,CAAA;AAChE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,gBAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,gBAAS,KAAK,CAAA;AAIxD,EAAA,MAAM,WAAA,GAAcD,cAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAGtB,EAAA,MAAM,eAAeE,kBAAAA,CAAY,CAAC,EAAE,MAAA,EAAAuF,SAAO,KAAgD;AACzF,IAAA,IAAIA,OAAAA,EAAQ;AACV,MAAA,MAAM,IAAA,GAAOA,QAAO,OAAA,EAAQ;AAC5B,MAAA,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAKL,EAAA,MAAM,SAASC,eAAA,CAAU;AAAA,IACvB,YAAY,sBAAA,EAAuB;AAAA,IACnC,OAAA,EAAS,KAAA;AAAA,IACT,WAAA,EAAa;AAAA,MACX,UAAA,EAAY;AAAA,QACV,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,QAAA,EAAU,YAAA;AAAA,IACV,iBAAA,EAAmB,KAAA;AAAA,IACnB,2BAAA,EAA6B;AAAA,GAC9B,CAAA;AAKD,EAAA,MAAM,kBAAkBC,oBAAA,CAAe;AAAA,IACrC,MAAA;AAAA,IACA,QAAA,EAAU,CAAC,EAAE,MAAA,EAAQ,GAAE,KAAM;AAC3B,MAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA;AAAA,QACzB,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAAA,QAC7B,WAAA,EAAa,CAAA,CAAE,QAAA,CAAS,WAAW,CAAA;AAAA,QACnC,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAAA,QAC7B,MAAM,CAAA,CAAE,QAAA,CAAS,WAAW,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,QACxC,MAAM,CAAA,CAAE,QAAA,CAAS,WAAW,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,QACxC,MAAM,CAAA,CAAE,QAAA,CAAS,WAAW,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,QACxC,MAAM,CAAA,CAAE,QAAA,CAAS,WAAW,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,QACxC,MAAM,CAAA,CAAE,QAAA,CAAS,WAAW,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,QACxC,MAAM,CAAA,CAAE,QAAA,CAAS,WAAW,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,QACxC,YAAA,EAAc,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA;AAAA,QACrC,aAAA,EAAe,CAAA,CAAE,QAAA,CAAS,aAAa,CAAA;AAAA,QACvC,YAAA,EAAc,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA;AAAA,QACrC,aAAa,CAAA,CAAE,QAAA,CAAS,EAAE,SAAA,EAAW,QAAQ,CAAA;AAAA,QAC7C,eAAe,CAAA,CAAE,QAAA,CAAS,EAAE,SAAA,EAAW,UAAU,CAAA;AAAA,QACjD,cAAc,CAAA,CAAE,QAAA,CAAS,EAAE,SAAA,EAAW,SAAS,CAAA;AAAA,QAC/C,gBAAgB,CAAA,CAAE,QAAA,CAAS,EAAE,SAAA,EAAW,WAAW,CAAA;AAAA,QACnD,MAAA,EAAQ,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA;AAAA,QACzB,WAAA,EAAa,CAAA,CAAE,QAAA,CAAS,WAAW,CAAA;AAAA,QACnC,aAAA,EAAe,CAAA,CAAE,QAAA,CAAS,aAAa,CAAA;AAAA,QACvC,WAAA,EAAa,CAAA,CAAE,QAAA,CAAS,WAAW;AAAA,OACrC;AAAA,IACF;AAAA,GACD,CAAA;AAGD,EAAAxF,iBAAU,MAAM;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,QAAA,GAAW,OAAO,IAAA,CAAK,GAAA;AAC7B,MAAA,OAAA,CAAQ,IAAI,gCAAA,EAAkC;AAAA,QAC5C,WAAW,QAAA,CAAS,SAAA;AAAA,QACpB,SAAS,QAAA,CAAS,OAAA;AAAA,QAClB,KAAA,EAAO,QAAA,CAAS,aAAA,CAAc,IAAI,CAAA,KAAM;AAAA,OACzC,CAAA;AAED,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,IAAI,CAAA;AACtC,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,gBAAA,CAAiB,EAAE,CAAA;AACzC,QAAA,OAAA,CAAQ,IAAI,oCAAA,EAAsC;AAAA,UAChD,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,YAAY,MAAA,CAAO;AAAA,SACpB,CAAA;AAAA,MACH;AACA,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,IAAI,CAAA;AACtC,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,gBAAA,CAAiB,EAAE,CAAA;AACzC,QAAA,OAAA,CAAQ,IAAI,oCAAA,EAAsC;AAAA,UAChD,eAAe,MAAA,CAAO,aAAA;AAAA,UACtB,aAAa,MAAA,CAAO;AAAA,SACrB,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AAElB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,uBACEW,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCV,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,gDAAgD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAEzEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EAAkC,QAAA,EAAA,mBAAA,EAAiB,CAAA,EACpE;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,GAAA,KAAgB;AAC/B,IAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,eAAA,CAAgB,MAAM,CAAA,CAAE,OAAA,CAAQ,EAAE,IAAA,EAAM,GAAA,EAAK,EAAE,GAAA,EAAI;AAC1E,IAAA,oBAAA,CAAqB,KAAK,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,SAAA,GAAY,GAAA,EAAI;AACvC,IAAA,oBAAA,CAAqB,KAAK,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,uBACEU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACZ,QAAA,EAAA;AAAA,IAAA,KAAA,oBACCV,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,gDAAgD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAGzEU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EAEZ,QAAA,EAAA;AAAA,MAAA,CAAC,QAAA,oBACAA,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2DAAA,EAEb,QAAA,EAAA;AAAA,wBAAAV,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,GAAA,EAAI;AAAA,YACvD,UAAU,eAAA,EAAiB,MAAA;AAAA,YAC3B,KAAA,EAAM,MAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAACwF,gBAAA,EAAA,EAAK,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SAC9B;AAAA,wBACAxF,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,YAAA,EAAa,CAAE,GAAA,EAAI;AAAA,YACzD,UAAU,eAAA,EAAiB,QAAA;AAAA,YAC3B,KAAA,EAAM,QAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAACyF,kBAAA,EAAA,EAAO,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SAChC;AAAA,wBACAzF,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,eAAA,EAAgB,CAAE,GAAA,EAAI;AAAA,YAC5D,UAAU,eAAA,EAAiB,WAAA;AAAA,YAC3B,KAAA,EAAM,WAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAAC0F,qBAAA,EAAA,EAAU,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SACnC;AAAA,wBACA1F,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,YAAA,EAAa,CAAE,GAAA,EAAI;AAAA,YACzD,UAAU,eAAA,EAAiB,QAAA;AAAA,YAC3B,KAAA,EAAM,eAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAAC2F,yBAAA,EAAA,EAAc,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SACvC;AAAA,wBACA3F,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,iBAAA,EAAkB,CAAE,GAAA,EAAI;AAAA,YAC9D,UAAU,eAAA,EAAiB,aAAA;AAAA,YAC3B,KAAA,EAAM,aAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAAC4F,uBAAA,EAAA,EAAgB,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SACzC;AAAA,wBACA5F,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,eAAA,EAAgB,CAAE,GAAA,EAAI;AAAA,YAC5D,UAAU,eAAA,EAAiB,WAAA;AAAA,YAC3B,KAAA,EAAM,WAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAAC6F,qBAAA,EAAA,EAAc,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SACvC;AAAA,wBAEA7F,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,eAAA,EAAiB,CAAA;AAAA,wBAGjCA,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,OAAA,kBACEU,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,2BAAA,EACb,QAAA,EAAA;AAAA,cAAA,eAAA,EAAiB,IAAA,mBAAOV,cAAAA,CAAC8F,oBAAA,EAAA,EAAS,WAAW,SAAA,EAAW,CAAA,GACxD,eAAA,EAAiB,IAAA,mBAAO9F,cAAAA,CAAC+F,wBAAS,SAAA,EAAW,SAAA,EAAW,CAAA,GACxD,eAAA,EAAiB,IAAA,mBAAO/F,eAACgG,oBAAA,EAAA,EAAS,SAAA,EAAW,SAAA,EAAW,CAAA,GACxD,eAAA,EAAiB,IAAA,mBAAOhG,cAAAA,CAACiG,oBAAA,EAAA,EAAS,SAAA,EAAW,SAAA,EAAW,CAAA,GACxD,eAAA,EAAiB,uBAAOjG,cAAAA,CAACkG,oBAAA,EAAA,EAAS,SAAA,EAAW,SAAA,EAAW,CAAA,GACxD,iBAAiB,IAAA,mBAAOlG,cAAAA,CAACmG,oBAAA,EAAA,EAAS,SAAA,EAAW,SAAA,EAAW,oBACxDnG,cAAAA,CAACoG,mBAAA,EAAA,EAAQ,SAAA,EAAW,SAAA,EAAW,CAAA;AAAA,8BAChCpG,cAAAA,CAACmB,uBAAAA,EAAA,EAAY,WAAU,SAAA,EAAU;AAAA,aAAA,EACnC,CAAA;AAAA,YAEF,KAAA,EAAM,WAAA;AAAA,YACN,QAAA,EAAU,eAAA,EAAiB,IAAA,IAAQ,eAAA,EAAiB,IAAA,IAAQ,eAAA,EAAiB,IAAA,IAAQ,eAAA,EAAiB,IAAA,IAAQ,eAAA,EAAiB,IAAA,IAAQ,eAAA,EAAiB,IAAA;AAAA,YAEvJ,QAAA,EAAA,CAAC,KAAA,qBACAT,eAAAA,CAAAyB,qBAAA,EACE,QAAA,EAAA;AAAA,8BAAAzB,eAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,MAAM;AAAE,gBAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAAG,gBAAA,KAAA,EAAM;AAAA,cAAG,CAAA,EACnF,QAAA,EAAA;AAAA,gCAAAV,eAACoG,mBAAA,EAAA,EAAQ,SAAA,EAAWnG,GAAAA,CAAG,SAAA,EAAW,MAAM,CAAA,EAAG,CAAA;AAAA,gBAAE;AAAA,eAAA,EAE/C,CAAA;AAAA,8BACAD,eAAC,iBAAA,EAAA,EAAkB,CAAA;AAAA,8BACnBU,eAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,MAAM;AAAE,gBAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,GAAA,EAAI;AAAG,gBAAA,KAAA,EAAM;AAAA,cAAG,CAAA,EAChG,QAAA,EAAA;AAAA,gCAAAV,eAAC8F,oBAAA,EAAA,EAAS,SAAA,EAAW7F,GAAAA,CAAG,SAAA,EAAW,MAAM,CAAA,EAAG,CAAA;AAAA,gCAC5CD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAoB,QAAA,EAAA,WAAA,EAAS;AAAA,eAAA,EAC/C,CAAA;AAAA,8BACAU,eAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,MAAM;AAAE,gBAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,GAAA,EAAI;AAAG,gBAAA,KAAA,EAAM;AAAA,cAAG,CAAA,EAChG,QAAA,EAAA;AAAA,gCAAAV,eAAC+F,oBAAA,EAAA,EAAS,SAAA,EAAW9F,GAAAA,CAAG,SAAA,EAAW,MAAM,CAAA,EAAG,CAAA;AAAA,gCAC5CD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAsB,QAAA,EAAA,WAAA,EAAS;AAAA,eAAA,EACjD,CAAA;AAAA,8BACAU,eAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,MAAM;AAAE,gBAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,GAAA,EAAI;AAAG,gBAAA,KAAA,EAAM;AAAA,cAAG,CAAA,EAChG,QAAA,EAAA;AAAA,gCAAAV,eAACgG,oBAAA,EAAA,EAAS,SAAA,EAAW/F,GAAAA,CAAG,SAAA,EAAW,MAAM,CAAA,EAAG,CAAA;AAAA,gCAC5CD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAgB,QAAA,EAAA,WAAA,EAAS;AAAA,eAAA,EAC3C,CAAA;AAAA,8BACAU,eAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,MAAM;AAAE,gBAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,GAAA,EAAI;AAAG,gBAAA,KAAA,EAAM;AAAA,cAAG,CAAA,EAChG,QAAA,EAAA;AAAA,gCAAAV,eAACiG,oBAAA,EAAA,EAAS,SAAA,EAAWhG,GAAAA,CAAG,SAAA,EAAW,MAAM,CAAA,EAAG,CAAA;AAAA,gCAC5CD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,WAAA,EAAS;AAAA,eAAA,EACnD,CAAA;AAAA,8BACAU,eAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,MAAM;AAAE,gBAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,GAAA,EAAI;AAAG,gBAAA,KAAA,EAAM;AAAA,cAAG,CAAA,EAChG,QAAA,EAAA;AAAA,gCAAAV,eAACkG,oBAAA,EAAA,EAAS,SAAA,EAAWjG,GAAAA,CAAG,SAAA,EAAW,MAAM,CAAA,EAAG,CAAA;AAAA,gCAC5CD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,WAAA,EAAS;AAAA,eAAA,EACnD,CAAA;AAAA,8BACAU,eAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,MAAM;AAAE,gBAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,GAAA,EAAI;AAAG,gBAAA,KAAA,EAAM;AAAA,cAAG,CAAA,EAChG,QAAA,EAAA;AAAA,gCAAAV,eAACmG,oBAAA,EAAA,EAAS,SAAA,EAAWlG,GAAAA,CAAG,SAAA,EAAW,MAAM,CAAA,EAAG,CAAA;AAAA,gCAC5CD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAsC,QAAA,EAAA,WAAA,EAAS;AAAA,eAAA,EACjE;AAAA,aAAA,EACF;AAAA;AAAA,SAEJ;AAAA,wBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,eAAA,EAAiB,CAAA;AAAA,wBAGjCA,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,OAAA,kBAASA,cAAAA,CAACqG,uBAAA,EAAA,EAAY,WAAW,SAAA,EAAW,CAAA;AAAA,YAC5C,KAAA,EAAM,WAAA;AAAA,YAEL,QAAA,EAAA,CAAC,KAAA,qBACA3F,eAAAA,CAAAyB,qBAAA,EACE,QAAA,EAAA;AAAA,8BAAAnC,cAAAA,CAAC,iBAAc,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,8BACtBA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCACZ,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,qBACfA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBAEC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAS,MAAM;AACb,oBAAA,IAAI,KAAK,KAAA,EAAO;AACd,sBAAA,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,YAAY,IAAA,CAAK,KAAK,EAAE,GAAA,EAAI;AAAA,oBACrD,CAAA,MAAO;AACL,sBAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,aAAA,GAAgB,GAAA,EAAI;AAAA,oBAC7C;AACA,oBAAA,KAAA,EAAM;AAAA,kBACR,CAAA;AAAA,kBACA,SAAA,EAAU,oGAAA;AAAA,kBACV,OAAO,IAAA,CAAK,EAAA;AAAA,kBAEX,QAAA,EAAA,IAAA,CAAK;AAAA,iBAAA;AAAA,gBAbD,IAAA,CAAK;AAAA,eAeb,CAAA,EACH,CAAA;AAAA,8BACAA,eAAC,iBAAA,EAAA,EAAkB,CAAA;AAAA,8BACnBU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EACb,QAAA,EAAA;AAAA,gCAAAV,cAAAA,CAAC,iBAAc,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,gCAC1BU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,kCAAAV,cAAAA;AAAA,oBAAC,OAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,WAAA,EAAY,IAAA;AAAA,sBACZ,GAAA,EAAI,GAAA;AAAA,sBACJ,GAAA,EAAI,KAAA;AAAA,sBACJ,SAAA,EAAU,2GAAA;AAAA,sBACV,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,wBAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,0BAAA,MAAM,QAAQ,CAAA,CAAE,MAAA;AAChB,0BAAA,MAAM8C,SAAQ,KAAA,CAAM,KAAA;AACpB,0BAAA,MAAM,IAAA,GAAQ,KAAA,CAAM,kBAAA,EAA0C,KAAA,IAAS,IAAA;AACvE,0BAAA,IAAIA,MAAAA,EAAO;AACT,4BAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAY,CAAA,EAAGA,MAAK,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA,CAAE,GAAA,EAAI;AAC1D,4BAAA,KAAA,EAAM;AAAA,0BACR;AAAA,wBACF;AAAA,sBACF;AAAA;AAAA,mBACF;AAAA,kCACA9C,cAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,sGAAA;AAAA,sBACV,YAAA,EAAa,IAAA;AAAA,sBAEZ,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,CAAC,IAAA,qBACpBA,cAAAA,CAAC,QAAA,EAAA,EAAkB,KAAA,EAAO,IAAA,EAAO,QAAA,EAAA,IAAA,EAAA,EAApB,IAAyB,CACvC;AAAA;AAAA,mBACH;AAAA,kCACAA,cAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,wBAAA,MAAM,SAAA,GAAa,EAAE,MAAA,CAAuB,aAAA;AAC5C,wBAAA,MAAM,KAAA,GAAQ,SAAA,EAAW,aAAA,CAAc,OAAO,CAAA;AAC9C,wBAAA,MAAM,MAAA,GAAS,SAAA,EAAW,aAAA,CAAc,QAAQ,CAAA;AAChD,wBAAA,MAAM8C,SAAQ,KAAA,EAAO,KAAA;AACrB,wBAAA,MAAM,IAAA,GAAO,QAAQ,KAAA,IAAS,IAAA;AAC9B,wBAAA,IAAIA,MAAAA,EAAO;AACT,0BAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAY,CAAA,EAAGA,MAAK,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA,CAAE,GAAA,EAAI;AAC1D,0BAAA,KAAA,EAAM;AAAA,wBACR;AAAA,sBACF,CAAA;AAAA,sBACA,SAAA,EAAU,oEAAA;AAAA,sBACX,QAAA,EAAA;AAAA;AAAA;AAED,iBAAA,EACF;AAAA,eAAA,EACF;AAAA,aAAA,EACF;AAAA;AAAA,SAEJ;AAAA,wBAEA9C,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,eAAA,EAAiB,CAAA;AAAA,wBAGjCA,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,gBAAA,EAAiB,CAAE,GAAA,EAAI;AAAA,YAC7D,UAAU,eAAA,EAAiB,YAAA;AAAA,YAC3B,KAAA,EAAM,aAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAACsG,gBAAA,EAAA,EAAK,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SAC9B;AAAA,wBACAtG,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,iBAAA,EAAkB,CAAE,GAAA,EAAI;AAAA,YAC9D,UAAU,eAAA,EAAiB,aAAA;AAAA,YAC3B,KAAA,EAAM,eAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAACuG,uBAAA,EAAA,EAAY,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SACrC;AAAA,wBACAvG,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,gBAAA,EAAiB,CAAE,GAAA,EAAI;AAAA,YAC7D,UAAU,eAAA,EAAiB,YAAA;AAAA,YAC3B,KAAA,EAAM,YAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAACwG,iBAAA,EAAA,EAAM,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SAC/B;AAAA,wBAEAxG,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,eAAA,EAAiB,CAAA;AAAA,wBAGjCA,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,OAAM,CAAE,YAAA,CAAa,MAAM,CAAA,CAAE,GAAA,EAAI;AAAA,YAC/D,UAAU,eAAA,EAAiB,WAAA;AAAA,YAC3B,KAAA,EAAM,YAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAAC4D,qBAAAA,EAAA,EAAU,WAAW,SAAA,EAAW;AAAA;AAAA,SACnC;AAAA,wBACA5D,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,OAAM,CAAE,YAAA,CAAa,QAAQ,CAAA,CAAE,GAAA,EAAI;AAAA,YACjE,UAAU,eAAA,EAAiB,aAAA;AAAA,YAC3B,KAAA,EAAM,cAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAAC6D,uBAAAA,EAAA,EAAY,WAAW,SAAA,EAAW;AAAA;AAAA,SACrC;AAAA,wBACA7D,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,OAAM,CAAE,YAAA,CAAa,OAAO,CAAA,CAAE,GAAA,EAAI;AAAA,YAChE,UAAU,eAAA,EAAiB,YAAA;AAAA,YAC3B,KAAA,EAAM,aAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAAC8D,sBAAAA,EAAA,EAAW,WAAW,SAAA,EAAW;AAAA;AAAA,SACpC;AAAA,wBACA9D,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,OAAM,CAAE,YAAA,CAAa,SAAS,CAAA,CAAE,GAAA,EAAI;AAAA,YAClE,UAAU,eAAA,EAAiB,cAAA;AAAA,YAC3B,KAAA,EAAM,SAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAACyG,wBAAA,EAAA,EAAa,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SACtC;AAAA,wBAEAzG,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,eAAA,EAAiB,CAAA;AAAA,wBAGjCU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,MAAM,oBAAA,CAAqB,CAAC,iBAAiB,CAAA;AAAA,cACtD,UAAU,eAAA,EAAiB,MAAA;AAAA,cAC3B,KAAA,EAAM,UAAA;AAAA,cAEN,QAAA,kBAAAA,cAAAA,CAACW,gBAAAA,EAAA,EAAK,WAAW,SAAA,EAAW;AAAA;AAAA,WAC9B;AAAA,0BACAX,cAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,MAAA,EAAQ,iBAAA;AAAA,cACR,OAAA,EAAS,MAAM,oBAAA,CAAqB,KAAK,CAAA;AAAA,cACzC,SAAA,EAAW,OAAA;AAAA,cACX,YAAA,EAAc;AAAA;AAAA;AAChB,SAAA,EACF,CAAA;AAAA,wBAGAA,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,OAAA,kBAASA,cAAAA,CAAC0G,mBAAA,EAAA,EAAQ,WAAW,SAAA,EAAW,CAAA;AAAA,YACxC,KAAA,EAAM,YAAA;AAAA,YAEL,QAAA,EAAA,CAAC,KAAA,qBACAhG,eAAAA,CAAAyB,qBAAA,EAEE,QAAA,EAAA;AAAA,8BAAAzB,eAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,MAAM;AAAE,gBAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,UAAA,GAAa,GAAA,EAAI;AAAG,gBAAA,KAAA,EAAM;AAAA,cAAG,CAAA,EACjF,QAAA,EAAA;AAAA,gCAAAV,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,2DAAA;AAAA,oBACV,KAAA,EAAO,EAAE,UAAA,EAAY,gDAAA;AAAiD;AAAA,iBACxE;AAAA,gBACC,WAAA,CAAY;AAAA,eAAA,EACf,CAAA;AAAA,8BACAA,eAAC,iBAAA,EAAA,EAAkB,CAAA;AAAA,cAGlB,iBAAiB,GAAA,CAAI,CAAC,QAAA,qBACrBU,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAV,cAAAA,CAAC,aAAA,EAAA,EAAe,QAAA,EAAA,QAAA,CAAS,KAAA,EAAM,CAAA;AAAA,gCAC/BA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACZ,mBAAS,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACpBA,cAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBAEC,IAAA,EAAK,QAAA;AAAA,oBACL,SAAS,MAAM;AAAE,sBAAA,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,SAAS,KAAA,CAAM,GAAG,EAAE,GAAA,EAAI;AAAG,sBAAA,KAAA,EAAM;AAAA,oBAAG,CAAA;AAAA,oBAC5E,SAAA,EAAU,yGAAA;AAAA,oBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,CAAM,GAAA,EAAI;AAAA,oBACpC,OAAO,KAAA,CAAM;AAAA,mBAAA;AAAA,kBALR,KAAA,CAAM;AAAA,iBAOd,CAAA,EACH;AAAA,eAAA,EAAA,EAbQ,QAAA,CAAS,KAcnB,CACD,CAAA;AAAA,8BAEDA,eAAC,iBAAA,EAAA,EAAkB,CAAA;AAAA,8BAGnBU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EACb,QAAA,EAAA;AAAA,gCAAAV,cAAAA,CAAC,iBAAc,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,gCAC3BU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,kCAAAV,cAAAA;AAAA,oBAAC,OAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,OAAA;AAAA,sBAEL,KAAA,EAAO,MAAA,CAAO,aAAA,CAAc,WAAW,EAAE,KAAA,IAAS,SAAA;AAAA,sBAElD,OAAA,EAAS,CAAC,CAAA,KAAM,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,QAAA,CAAU,CAAA,CAAE,MAAA,CAA4B,KAAK,EAAE,GAAA,EAAI;AAAA,sBAE1F,SAAA,EAAU,2DAAA;AAAA,sBACV,KAAA,EAAM;AAAA;AAAA,mBACR;AAAA,kCACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,gBAAA,EAAc;AAAA,iBAAA,EACxD;AAAA,eAAA,EACF;AAAA,aAAA,EACF;AAAA;AAAA,SAEJ;AAAA,wBAGAA,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,OAAA,kBAASA,cAAAA,CAAC2G,uBAAA,EAAA,EAAY,WAAW,SAAA,EAAW,CAAA;AAAA,YAC5C,KAAA,EAAM,WAAA;AAAA,YACN,UAAU,eAAA,EAAiB,WAAA;AAAA,YAE1B,QAAA,EAAA,CAAC,KAAA,qBACAjG,eAAAA,CAAAyB,qBAAA,EACE,QAAA,EAAA;AAAA,8BAAAnC,cAAAA,CAAC,SAAI,SAAA,EAAU,4BAAA,EACZ,2BAAiB,GAAA,CAAI,CAAC,0BACrBA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBAEC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAS,MAAM;AAAE,oBAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,eAAA,CAAgB,EAAE,KAAA,EAAO,KAAA,CAAM,GAAA,EAAK,CAAA,CAAE,GAAA,EAAI;AAAG,oBAAA,KAAA,EAAM;AAAA,kBAAG,CAAA;AAAA,kBAC9F,SAAA,EAAU,yGAAA;AAAA,kBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,CAAM,GAAA,EAAI;AAAA,kBACpC,OAAO,KAAA,CAAM;AAAA,iBAAA;AAAA,gBALR,KAAA,CAAM;AAAA,eAOd,CAAA,EACH,CAAA;AAAA,8BACAA,cAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,MAAM;AAAE,gBAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,cAAA,GAAiB,GAAA,EAAI;AAAG,gBAAA,KAAA,EAAM;AAAA,cAAG,GAAG,QAAA,EAAA,kBAAA,EAE1F;AAAA,aAAA,EACF;AAAA;AAAA,SAEJ;AAAA,wBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,eAAA,EAAiB,CAAA;AAAA,wBAGjCA,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,iBAAA,EAAkB,CAAE,GAAA,EAAI;AAAA,YAC9D,KAAA,EAAM,iBAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAAC4G,iBAAA,EAAA,EAAM,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SAC/B;AAAA,wBACA5G,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,YAAA,EAAa,CAAE,GAAA,EAAI;AAAA,YACzD,KAAA,EAAM,0BAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAAC6G,0BAAA,EAAA,EAAe,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SACxC;AAAA,wBAEA7G,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,eAAA,EAAiB,CAAA;AAAA,wBAGjCA,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,EAAc,CAAE,UAAA,EAAW,CAAE,GAAA,EAAI;AAAA,YACvE,KAAA,EAAM,kBAAA;AAAA,YAEN,QAAA,kBAAAA,cAAAA,CAAC8G,4BAAA,EAAA,EAAiB,SAAA,EAAW,SAAA,EAAW;AAAA;AAAA,SAC1C;AAAA,wBAGApG,eAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,SAAS,MAAM;AACb,cAAA,IAAI,UAAA,EAAY;AACd,gBAAA,MAAA,CAAO,QAAA,CAAS,WAAW,aAAa,CAAA;AACxC,gBAAA,QAAA,CAAS,aAAa,CAAA;AAAA,cACxB,CAAA,MAAO;AACL,gBAAA,gBAAA,CAAiB,MAAA,CAAO,SAAS,CAAA;AAAA,cACnC;AACA,cAAA,aAAA,CAAc,CAAC,UAAU,CAAA;AAAA,YAC3B,CAAA;AAAA,YACA,KAAA,EAAM,aAAA;AAAA,YACN,SAAA,EAAWT,GAAAA;AAAA,cACT,yFAAA;AAAA,cACA,UAAA,IAAc,aAAA;AAAA,cACd,CAAC,UAAA,IAAc;AAAA,aACjB;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAD,cAAAA,CAAC+G,gBAAA,EAAA,EAAK,SAAA,EAAW,SAAA,EAAW,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA;AAEhC,OAAA,EACF,CAAA;AAAA,MAID,6BACC/G,cAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,aAAA;AAAA,UACP,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,YAAA,gBAAA,CAAiB,CAAA,CAAE,OAAO,KAAK,CAAA;AAC/B,YAAA,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACzB,CAAA;AAAA,UACA,SAAA,EAAU,iFAAA;AAAA,UACV,WAAA,EAAY;AAAA;AAAA,OACd,mBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BACb,QAAA,kBAAAA,cAAAA,CAACgH,mBAAA,EAAA,EAAc,MAAA,EAAgB,CAAA,EACjC;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAIO,IAAM,WAAA,GAAcnG,YAAK,gBAAgB,CAAA;ACjhCzC,SAAS,YAAY,EAAE,MAAA,EAAQ,SAAS,KAAA,EAAO,QAAA,EAAU,OAAM,EAAqB;AACzF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIhB,gBAAS,KAAK,CAAA;AAGlD,EAAAE,iBAAU,MAAM;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AAGlB,EAAAA,iBAAU,MAAM;AACd,IAAA,SAAS,cAAc,CAAA,EAAkB;AACvC,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,IAAY,MAAA,EAAQ;AAChC,QAAA,YAAA,EAAa;AAAA,MACf;AAAA,IACF;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAClD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EACpE,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,UAAA,GAAaD,mBAAY,MAAM;AACnC,IAAA,QAAA,CAAS,UAAU,CAAA;AACnB,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA,EAAG,CAAC,UAAA,EAAY,QAAA,EAAU,OAAO,CAAC,CAAA;AAElC,EAAA,MAAM,YAAA,GAAeA,mBAAY,MAAM;AACrC,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA,EAAG,CAAC,KAAA,EAAO,OAAO,CAAC,CAAA;AAGnB,EAAA,MAAM,mBAAA,GAAsBA,kBAAAA;AAAA,IAC1B,CAAC,CAAA,KAAwB;AACvB,MAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe;AAChC,QAAA,YAAA,EAAa;AAAA,MACf;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,uBACEE,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,mBAAA;AAAA,MACT,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,CAAA;AAAA,QACP,eAAA,EAAiB,oBAAA;AAAA,QACjB,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,MAAA,EAAQ,KAAA;AAAA,QACR,OAAA,EAAS;AAAA,OACX;AAAA,MAEA,QAAA,kBAAAU,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,eAAA,EAAiB,OAAA;AAAA,YACjB,YAAA,EAAc,KAAA;AAAA,YACd,KAAA,EAAO,MAAA;AAAA,YACP,QAAA,EAAU,OAAA;AAAA,YACV,MAAA,EAAQ,MAAA;AAAA,YACR,SAAA,EAAW,OAAA;AAAA,YACX,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,QAAA;AAAA,YACf,SAAA,EAAW;AAAA,WACb;AAAA,UAGA,QAAA,EAAA;AAAA,4BAAAA,eAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,OAAA,EAAS,WAAA;AAAA,kBACT,YAAA,EAAc,mBAAA;AAAA,kBACd,OAAA,EAAS,MAAA;AAAA,kBACT,UAAA,EAAY,QAAA;AAAA,kBACZ,cAAA,EAAgB,eAAA;AAAA,kBAChB,UAAA,EAAY;AAAA,iBACd;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,QAAQ,CAAA,EAAG,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,SAAA,EAAU,EACzE,mBAAS,cAAA,EACZ,CAAA;AAAA,kCACAA,cAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAS,YAAA;AAAA,sBACT,KAAA,EAAO;AAAA,wBACL,OAAA,EAAS,KAAA;AAAA,wBACT,UAAA,EAAY,aAAA;AAAA,wBACZ,MAAA,EAAQ,MAAA;AAAA,wBACR,YAAA,EAAc,KAAA;AAAA,wBACd,MAAA,EAAQ,SAAA;AAAA,wBACR,KAAA,EAAO,SAAA;AAAA,wBACP,OAAA,EAAS,MAAA;AAAA,wBACT,UAAA,EAAY,QAAA;AAAA,wBACZ,cAAA,EAAgB;AAAA,uBAClB;AAAA,sBACA,KAAA,EAAM,aAAA;AAAA,sBAEN,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,MAAM,EAAA,EAAI;AAAA;AAAA;AACf;AAAA;AAAA,aACF;AAAA,4BAGAhB,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,IAAA,EAAM,CAAA;AAAA,kBACN,QAAA,EAAU,MAAA;AAAA,kBACV,OAAA,EAAS,WAAA;AAAA,kBACT,SAAA,EAAW;AAAA,iBACb;AAAA,gBAEA,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAO,UAAA,EAAY,UAAU,aAAA,EAAe;AAAA;AAAA,aAC3D;AAAA,4BAGAU,eAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,OAAA,EAAS,WAAA;AAAA,kBACT,SAAA,EAAW,mBAAA;AAAA,kBACX,OAAA,EAAS,MAAA;AAAA,kBACT,cAAA,EAAgB,UAAA;AAAA,kBAChB,GAAA,EAAK,MAAA;AAAA,kBACL,UAAA,EAAY;AAAA,iBACd;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAV,cAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAS,YAAA;AAAA,sBACT,KAAA,EAAO;AAAA,wBACL,OAAA,EAAS,WAAA;AAAA,wBACT,eAAA,EAAiB,aAAA;AAAA,wBACjB,KAAA,EAAO,SAAA;AAAA,wBACP,MAAA,EAAQ,mBAAA;AAAA,wBACR,YAAA,EAAc,KAAA;AAAA,wBACd,MAAA,EAAQ,SAAA;AAAA,wBACR,QAAA,EAAU,MAAA;AAAA,wBACV,UAAA,EAAY;AAAA,uBACd;AAAA,sBACD,QAAA,EAAA;AAAA;AAAA,mBAED;AAAA,kCACAA,cAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAS,UAAA;AAAA,sBACT,KAAA,EAAO;AAAA,wBACL,OAAA,EAAS,WAAA;AAAA,wBACT,eAAA,EAAiB,SAAA;AAAA,wBACjB,KAAA,EAAO,OAAA;AAAA,wBACP,MAAA,EAAQ,MAAA;AAAA,wBACR,YAAA,EAAc,KAAA;AAAA,wBACd,MAAA,EAAQ,SAAA;AAAA,wBACR,QAAA,EAAU,MAAA;AAAA,wBACV,UAAA,EAAY;AAAA,uBACd;AAAA,sBACD,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA;AACF;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;ACnKA,SAAS,qBAAA,CAAsB,EAAE,KAAA,EAAO,QAAA,EAAU,OAAM,EAA0B;AAChF,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIH,gBAAS,KAAK,CAAA;AAEpD,EAAA,uBACEa,gBAAC,KAAA,EAAA,EAEC,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,eAAA;AAAA,UAChB,YAAA,EAAc;AAAA,SAChB;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,KAAA,oBACCV,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,MAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,KAAA,EAAO;AAAA,eACT;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BAEFU,eAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,cAClC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,SAAA;AAAA,gBACT,eAAA,EAAiB,aAAA;AAAA,gBACjB,KAAA,EAAO,SAAA;AAAA,gBACP,MAAA,EAAQ,mBAAA;AAAA,gBACR,YAAA,EAAc,KAAA;AAAA,gBACd,MAAA,EAAQ,SAAA;AAAA,gBACR,QAAA,EAAU,MAAA;AAAA,gBACV,OAAA,EAAS,MAAA;AAAA,gBACT,UAAA,EAAY,QAAA;AAAA,gBACZ,GAAA,EAAK,KAAA;AAAA,gBACL,UAAA,EAAY;AAAA,eACd;AAAA,cACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,gBAAA,CAAA,CAAE,aAAA,CAAc,MAAM,eAAA,GAAkB,SAAA;AACxC,gBAAA,CAAA,CAAE,aAAA,CAAc,MAAM,WAAA,GAAc,SAAA;AAAA,cACtC,CAAA;AAAA,cACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,gBAAA,CAAA,CAAE,aAAA,CAAc,MAAM,eAAA,GAAkB,aAAA;AACxC,gBAAA,CAAA,CAAE,aAAA,CAAc,MAAM,WAAA,GAAc,SAAA;AAAA,cACtC,CAAA;AAAA,cACA,KAAA,EAAM,yBAAA;AAAA,cAEN,QAAA,EAAA;AAAA,gCAAAV,cAAAA,CAACiH,qBAAA,EAAA,EAAU,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,gBAAE;AAAA;AAAA;AAAA;AAEzB;AAAA;AAAA,KACF;AAAA,oBAGAjH,cAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAO,KAAA,IAAS,IAAI,QAAA,EAAoB,CAAA;AAAA,oBAGrDA,cAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,WAAA;AAAA,QACR,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,QACnC,OAAO,KAAA,IAAS,EAAA;AAAA,QAChB,QAAA;AAAA,QACA,KAAA,EAAM;AAAA;AAAA;AACR,GAAA,EACF,CAAA;AAEJ;AAEO,IAAM,gBAAA,GAAmBa,YAAK,qBAAqB,CAAA;AAKnD,SAAS,sBAAA,CAAuB,MAAA,GAA6B,EAAC,EAAwB;AAC3F,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,UAAS,qBACzBb,cAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAO,KAAA,IAAS,EAAA,EAAI,QAAA,EAAoB,KAAA,EAAO,OAAO,KAAA,EAAO;AAAA,GAEnF;AACF;ACtEA,IAAMuE,cAAAA,GAAoC;AAAA,EACxC,OAAA,EAAS,kCAAA;AAAA,EACT,UAAA,EAAY,IAAA;AAAA,EACZ,MAAA,EAAQ,IAAA;AAAA,EACR,aAAA,EAAe;AACjB,CAAA;AAUA,SAAS,cAAA,CAAe;AAAA,EACtB,OAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAwB;AAEtB,EAAA,MAAM,KAAA,GAAQ2C,eAAQ,MAAM;AAC1B,IAAA,MAAM,IAAyB,EAAC;AAEhC,IAAA,MAAM,gBAAA,GAAmB,UAAA,GAAa,oBAAA,CAAqB,UAAU,CAAA,GAAI,MAAA;AACzE,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,MAAA,CAAO,MAAA,CAAO,GAAG,gBAAgB,CAAA;AAAA,IACnC;AAEA,IAAA,MAAM,SAAA,GAAY,iBAAiB,MAAM,CAAA;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,CAAA,CAAE,MAAA,GAAS,SAAA;AAAA,IACb;AAEA,IAAA,MAAM,gBAAA,GAAmB,kBAAkB,aAAa,CAAA;AACxD,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,CAAA,CAAE,OAAA,GAAU,gBAAA;AAAA,IACd;AAEA,IAAA,OAAO,OAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,GAAS,IAAI,CAAA,GAAI,MAAA;AAAA,EACzC,CAAA,EAAG,CAAC,UAAA,EAAY,MAAA,EAAQ,aAAa,CAAC,CAAA;AAGtC,EAAA,uBACElH,cAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,0BAAA,EAA2B,OAC5C,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAA0B,uBAAA,EAAyB,EAAE,MAAA,EAAQ,OAAA,IAAW,CAAA,EACzF,CAAA;AAEJ;AAMO,IAAM,oBAAA,GAAwC;AAAA,EACnD,KAAA,EAAO,WAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAuE,gBAAc,CAAA;AAAA,IACzC,OAAA,EAAS,sBAAA,CAAuB,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,IACpD,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,IAC7C,aAAA,EAAe,kBAAA,CAAmB,EAAE,KAAA,EAAO,WAAW;AAAA,GACxD;AAAA,EACA,YAAA,EAAAA,cAAAA;AAAA,EACA,MAAA,EAAQ,CAAC,KAAA,qBACPvE,cAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,IAAI,KAAA,CAAM;AAAA;AAAA;AAGhB;AC5CA,IAAM,gBAAA,GAAgF;AAAA,EACpF,EAAE,KAAA,EAAO,UAAA,EAAY,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EACpC,EAAE,KAAA,EAAO,KAAA,EAAO,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EAC/B,EAAE,KAAA,EAAO,WAAA,EAAa,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EACrC,EAAE,KAAA,EAAO,MAAA,EAAQ,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EAChC,EAAE,KAAA,EAAO,QAAA,EAAU,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EAClC,EAAE,KAAA,EAAO,OAAA,EAAS,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EACjC,EAAE,KAAA,EAAO,aAAA,EAAe,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EACvC,EAAE,KAAA,EAAO,QAAA,EAAU,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EAClC,EAAE,KAAA,EAAO,cAAA,EAAgB,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA;AACxC,CAAA;AAEA,SAASmH,WAAAA,CAAW,EAAE,KAAA,EAAO,QAAA,EAAU,UAAS,EAAoB;AAClE,EAAA,uBACEnH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACZ,QAAA,EAAA,gBAAA,CAAiB,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,MAAA,EAAO,KAAM;AAC3C,IAAA,MAAM,WAAW,KAAA,KAAU,MAAA;AAC3B,IAAA,uBACEA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,QAAA,CAAS,MAAM,CAAA;AAAA,QAC9B,QAAA;AAAA,QACA,SAAA,EAAWC,GAAAA;AAAA,UACT,0CAAA;AAAA,UACA,WACI,2BAAA,GACA,2EAAA;AAAA,UACJ,QAAA,IAAY;AAAA,SACd;AAAA,QACA,KAAA,EAAO,MAAA;AAAA,QAEP,QAAA,kBAAAD,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWC,GAAAA;AAAA,cACT,oCAAA;AAAA,cACA,WAAW,uBAAA,GAA0B;AAAA;AACvC;AAAA;AACF,OAAA;AAAA,MAlBK;AAAA,KAmBP;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;AAiBA,SAAS,WAAA,CAAY;AAAA,EACnB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA,GAAO,CAAA;AAAA,EACP,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,GAAO;AACT,CAAA,EAAqB;AACnB,EAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA;AAAA,IAAA,KAAA,oBACCA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EACd,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,sBACAU,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,QAAA,KAAA;AAAA,QAAO;AAAA,OAAA,EACV;AAAA,KAAA,EACF,CAAA;AAAA,oBAEFV,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,OAAA;AAAA,QACL,GAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAChD,QAAA;AAAA,QACA,SAAA,EAAWC,GAAAA;AAAA,UACT,+DAAA;AAAA,UACA,gBAAA;AAAA,UACA,QAAA,IAAY;AAAA;AACd;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAMA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,IAAIJ,eAAAA,CAAS,KAAA,EAAO,YAAY,KAAK,CAAA;AAG7D,EAAA,MAAM,eAAe,KAAA,IAAS,iBAAA;AAG9B,EAAA,MAAM,YAAA,GAAeC,kBAAAA;AAAA,IACnB,CAAiC,KAAQ,QAAA,KAAgC;AACvE,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,CAAC,GAAG,GAAG;AAAA,OACR,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA;AAAA,IACxB,CAAC,MAA2B,QAAA,KAAqB;AAC/C,MAAA,IAAI,aAAa,WAAA,EAAa;AAC5B,QAAA,QAAA,CAAS;AAAA,UACP,GAAG,YAAA;AAAA,UACH,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,QAAA,CAAS;AAAA,UACP,GAAG,YAAA;AAAA,UACH,CAAC,IAAI,GAAG;AAAA,SACT,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,qBAAA,GAAwBA,mBAAY,MAAM;AAC9C,IAAA,IAAI,CAAC,aAAa,WAAA,EAAa;AAE7B,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,WAAA,EAAa,IAAA;AAAA,QACb,QAAQ,YAAA,CAAa;AAAA,OACtB,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,WAAA,EAAa;AAAA,OACd,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,MAAM,cAAA,GAAiBA,kBAAAA;AAAA,IACrB,CAAC,OAAA,KAAqB;AACpB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,YAAA;AAAA,QACH,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GACzB;AAGA,EAAA,MAAM,WAAA,GAAcA,mBAAY,MAAM;AACpC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAA,MAAM,aAAA,GAAgB,mBAAA,CAAoB,YAAY,CAAA,IAAK,EAAC;AAE5D,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACCV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uCAAuC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAE/D,KAAA,IAAS,CAAC,QAAA,oBACTA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAK,SAAA;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,SAAA,EAAU,8CAAA;AAAA,UACV,KAAA,EAAM,iBAAA;AAAA,UAEN,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB,KAAA,EAEJ,CAAA;AAAA,oBAGAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qGACb,QAAA,kBAAAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,mJAAA;AAAA,QACV,KAAA,EAAO,aAAA;AAAA,QACR,QAAA,EAAA;AAAA;AAAA,KAED,EACF,CAAA;AAAA,oBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAACoH,oBAAA,EAAA,EAAS,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,wBACpDpH,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uBAAsB,QAAA,EAAA,QAAA,EAAM;AAAA,OAAA,EAC/C,CAAA;AAAA,sBACAA,cAAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,OAAO,YAAA,CAAa,MAAA;AAAA,UACpB,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,UAAU,CAAC,CAAA;AAAA,UACzC,GAAA,EAAK,IAAA;AAAA,UACL,GAAA,EAAK,GAAA;AAAA,UACL,QAAA,EAAU,QAAA;AAAA,UACV,IAAA,EAAK;AAAA;AAAA;AACP,KAAA,EACF,CAAA;AAAA,oBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAACiH,qBAAAA,EAAA,EAAU,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,0BACrDjH,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uBAAsB,QAAA,EAAA,OAAA,EAAK;AAAA,SAAA,EAC9C,CAAA;AAAA,QACC,CAAC,4BACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,YAAA,CAAa,WAAA,GAAc,SAAA,GAAY,SAAA;AAAA,YAChD,IAAA,EAAK,SAAA;AAAA,YACL,OAAA,EAAS,qBAAA;AAAA,YACT,SAAA,EAAU,SAAA;AAAA,YACV,KAAA,EACE,YAAA,CAAa,WAAA,GACT,+BAAA,GACA,6BAAA;AAAA,YAGL,QAAA,EAAA,YAAA,CAAa,WAAA,mBACZA,cAAAA,CAACW,kBAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA,mBAE1BX,cAAAA,CAACY,kBAAAA,EAAA,EAAO,WAAU,SAAA,EAAU;AAAA;AAAA;AAEhC,OAAA,EAEJ,CAAA;AAAA,sBAEAF,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWT,GAAAA,CAAG,cAAc,YAAA,CAAa,WAAA,GAAc,aAAA,GAAgB,aAAa,CAAA,EACvF,QAAA,EAAA;AAAA,wBAAAD,cAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,YAAA,CAAa,WAAA,GAAc,OAAA,GAAU,SAAA;AAAA,YAC5C,OAAO,YAAA,CAAa,MAAA;AAAA,YACpB,QAAA,EAAU,CAAC,CAAA,KAAM,iBAAA,CAAkB,UAAU,CAAC,CAAA;AAAA,YAC9C,GAAA,EAAK,GAAA;AAAA,YACL,GAAA,EAAK,CAAA;AAAA,YACL,IAAA,EAAM,GAAA;AAAA,YACN,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,QACC,CAAC,YAAA,CAAa,WAAA,oBACbA,cAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,SAAA;AAAA,YACN,OAAO,YAAA,CAAa,MAAA;AAAA,YACpB,QAAA,EAAU,CAAC,CAAA,KAAM,iBAAA,CAAkB,UAAU,CAAC,CAAA;AAAA,YAC9C,GAAA,EAAK,GAAA;AAAA,YACL,GAAA,EAAK,CAAA;AAAA,YACL,IAAA,EAAM,GAAA;AAAA,YACN,QAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EAEJ;AAAA,KAAA,EACF,CAAA;AAAA,oBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,sBAC3CU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,QAAA;AAAA,YACN,OAAO,YAAA,CAAa,KAAA;AAAA,YACpB,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,SAAS,CAAC,CAAA;AAAA,YACxC,GAAA,EAAK,GAAA;AAAA,YACL,GAAA,EAAK,EAAA;AAAA,YACL,QAAA,EAAU,QAAA;AAAA,YACV,IAAA,EAAK;AAAA;AAAA,SACP;AAAA,wBACAA,cAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,QAAA;AAAA,YACN,OAAO,YAAA,CAAa,KAAA;AAAA,YACpB,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,SAAS,CAAC,CAAA;AAAA,YACxC,GAAA,EAAK,GAAA;AAAA,YACL,GAAA,EAAK,EAAA;AAAA,YACL,QAAA,EAAU,QAAA;AAAA,YACV,IAAA,EAAK;AAAA;AAAA;AACP,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,wBAChDU,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAO,YAAA,CAAa,aAAA;AAAA,YACpB,aAAA,EAAe,CAAC,CAAA,KAAM,YAAA,CAAa,iBAAiB,CAAkB,CAAA;AAAA,YACtE,QAAA,EAAU,QAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAV,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,oBACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,8BACAU,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAV,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,IAAA,EAAK,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,gCACzBA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,OAAM,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,gCAC3BA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,KAAI,QAAA,EAAA,GAAA,EAAC;AAAA,eAAA,EACzB;AAAA;AAAA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBACAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,GAAA,EAE7E,CAAA;AAAA,0BACAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAO,YAAA,CAAa,UAAA;AAAA,cACpB,QAAA,EAAU,CAAC,CAAA,KACT,YAAA,CAAa,YAAA,EAAc,WAAW,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,IAAK,CAAC,CAAA;AAAA,cAE5D,QAAA,EAAU,QAAA;AAAA,cACV,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,wBACAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,GAAA,EAE7E,CAAA;AAAA,0BACAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAO,YAAA,CAAa,UAAA;AAAA,cACpB,QAAA,EAAU,CAAC,CAAA,KACT,YAAA,CAAa,YAAA,EAAc,WAAW,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,IAAK,CAAC,CAAA;AAAA,cAE5D,QAAA,EAAU,QAAA;AAAA,cACV,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,sBACvDU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA;AAAA,UAACmH,WAAAA;AAAA,UAAA;AAAA,YACC,OAAO,YAAA,CAAa,MAAA;AAAA,YACpB,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,UAAU,CAAC,CAAA;AAAA,YACzC,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAnH,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAAA,EACb,uBAAa,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA,EACvC;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,SAAA,CAAU,CAAC,MAAM,CAAA;AAAA,UAChC,SAAA,EAAU,8FAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAV,cAAAA,CAACqH,eAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,8BAC/CrH,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAqC,QAAA,EAAA,eAAA,EAAa;AAAA,aAAA,EACrE,CAAA;AAAA,YACC,MAAA,mBACCA,cAAAA,CAACmB,uBAAAA,EAAA,EAAY,SAAA,EAAU,+BAAA,EAAgC,CAAA,mBAEvDnB,cAAAA,CAACkD,wBAAAA,EAAA,EAAa,WAAU,+BAAA,EAAgC;AAAA;AAAA;AAAA,OAE5D;AAAA,MAEC,MAAA,oBACCxC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sCAAA,EAEb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,UAAA;AAAA,cACH,SAAS,YAAA,CAAa,QAAA;AAAA,cACtB,eAAA,EAAiB,CAAC,OAAA,KAChB,cAAA,CAAe,YAAY,IAAI,CAAA;AAAA,cAEjC,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,UAAA;AAAA,cACR,SAAA,EAAU,8CAAA;AAAA,cACX,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EACF,CAAA;AAAA,QAEC,YAAA,CAAa,QAAA,oBACZU,eAAAA,CAAAyB,qBAAA,EAEE,QAAA,EAAA;AAAA,0BAAAzB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,4BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,kBAAA,EAE7E,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,GAAA,EAAK,GAAA;AAAA,gBACL,GAAA,EAAK,GAAA;AAAA,gBACL,KAAA,EAAO,aAAa,WAAA,IAAe,GAAA;AAAA,gBACnC,QAAA,EAAU,CAAC,CAAA,KACT,YAAA,CAAa,aAAA,EAAe,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,EAAE,CAAA,IAAK,GAAI,CAAA;AAAA,gBAElE,QAAA,EAAU,QAAA;AAAA,gBACV,SAAA,EAAU;AAAA;AAAA;AACZ,WAAA,EACF,CAAA;AAAA,0BAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,4BAAAV,cAAAA;AAAA,cAAC,WAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,UAAA;AAAA,gBACN,KAAA,EAAO,aAAa,OAAA,IAAW,CAAA;AAAA,gBAC/B,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,WAAW,CAAC,CAAA;AAAA,gBAC1C,GAAA,EAAK,IAAA;AAAA,gBACL,GAAA,EAAK,GAAA;AAAA,gBACL,QAAA,EAAU,QAAA;AAAA,gBACV,IAAA,EAAK;AAAA;AAAA,aACP;AAAA,4BACAA,cAAAA;AAAA,cAAC,WAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,UAAA;AAAA,gBACN,KAAA,EAAO,aAAa,OAAA,IAAW,CAAA;AAAA,gBAC/B,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,WAAW,CAAC,CAAA;AAAA,gBAC1C,GAAA,EAAK,IAAA;AAAA,gBACL,GAAA,EAAK,GAAA;AAAA,gBACL,QAAA,EAAU,QAAA;AAAA,gBACV,IAAA,EAAK;AAAA;AAAA;AACP,WAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EAEJ;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,IAAM,cAAA,GAAiBa,YAAK,mBAAmB,CAAA;AAS/C,SAAS,qBAAqB,MAAA,EAEE;AACrC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd;AAAA;AAAA;AACF,GAEJ;AACF;AC7eA,IAAMuE,cAAAA,GAA2B;AAAA,EAC/B,KAAA,EAAO,IAAA;AAAA,EACP,GAAA,EAAK,EAAA;AAAA,EACL,WAAA,EAAa,MAAA;AAAA,EACb,IAAA,EAAM,EAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,MAAA,EAAQ,IAAA;AAAA,EACR,MAAA,EAAQ,IAAA;AAAA,EACR,UAAA,EAAY,IAAA;AAAA,EACZ,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,aAAA,EAAe,IAAA;AAAA,EACf,UAAA,EAAY;AACd,CAAA;AAEO,IAAM,WAAA,GAA+B;AAAA,EAC1C,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,gBAAc,CAAA;AAAA,IACzC,KAAA,EAAO,gBAAA,CAAiB,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,IAC1C,GAAA,EAAK;AAAA,MACH,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA;AAAA,IAEA,UAAA,EAAY,+BAAA,CAAgC,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACnE,WAAA,EAAa,gBAAA;AAAA,IACb,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,iBAAA;AAAA,MACP,OAAA,EAAS;AAAA,QACP,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,IAAA,EAAK;AAAA,QAC5B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,KAAA;AAAM;AAC9B,KACF;AAAA,IACA,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,IAC7C,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,WAAW,oBAAA,CAAqB,EAAE,OAAO,WAAA,EAAa,YAAA,EAAc,UAAU,CAAA;AAAA,IAC9E,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA,IACtD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA;AAAA,IAEtD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,IAC7C,aAAA,EAAe,kBAAA,CAAmB,EAAE,KAAA,EAAO,WAAW;AAAA,GACxD;AAAA,EACA,YAAA,EAAAA,cAAAA;AAAA,EACA,QAAQ,CAAC,EAAE,KAAA,EAAO,GAAA,EAAK,aAAa,IAAA,EAAM,YAAA,EAAc,UAAA,EAAY,SAAA,EAAW,QAAQ,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAW,aAAA,EAAe,YAAW,KAAM;AAGnJ,IAAA,MAAM,QAAA,GAAWZ,YAAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACzC,IAAA,MAAM,YAAA,GAAe,cAAc,QAAQ,CAAA,CAAA;AAG3C,IAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,UAAA,EAAY,YAAY,CAAA;AACnE,IAAA,MAAM,gBAAA,GAAmB,qBAAqB,UAAU,CAAA;AAExD,IAAA,MAAM,KAAA,GAA6B;AAAA,MACjC,GAAG;AAAA,KACL;AACA,IAAA,MAAM,SAAA,GAAY,iBAAiB,MAAM,CAAA;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,CAAM,MAAA,GAAS,SAAA;AAAA,IACjB;AACA,IAAA,MAAM,UAAA,GAAa,kBAAkB,aAAa,CAAA;AAClD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,KAAA,CAAM,OAAA,GAAU,UAAA;AAAA,IAClB;AACA,IAAA,MAAM,YAAA,GAAe,iBAAiB,MAAM,CAAA;AAC5C,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,CAAO,MAAA,CAAO,OAAO,YAAY,CAAA;AAAA,IACnC;AACA,IAAA,MAAM,eAAA,GAAkB,oBAAoB,SAAS,CAAA;AACrD,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,MAAA,CAAO,MAAA,CAAO,OAAO,eAAe,CAAA;AAAA,IACtC;AAEA,IAAA,MAAM,iBAAiB,SAAA,IAAa,QAAA;AACpC,IAAA,MAAM,gBAAA,GAAmB,EAAA;AAAA,MACvB,MAAA;AAAA,MACA,mBAAmB,MAAA,IAAU,eAAA;AAAA,MAC7B,mBAAmB,QAAA,IAAY,gBAAA;AAAA,MAC/B,mBAAmB,OAAA,IAAW;AAAA,KAChC;AAGA,IAAA,IAAI,CAAC,OAAO,GAAA,EAAK;AACf,MAAA,uBACEjD,eAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EACd,QAAA,EAAA;AAAA,QAAA,aAAA,oBAAiBV,cAAAA,CAAC,OAAA,EAAA,EAAO,QAAA,EAAA,aAAA,EAAc,CAAA;AAAA,wBACxCA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,WAAA,EAAa,YAAY,CAAA,EAAG,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,GAAS,IAAI,KAAA,GAAQ,MAAA,EAC5F,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,gBAAA,EACd,QAAA,kBAAAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,6GAAA;AAAA,cACA,cAAA,CAAe,WAAW,CAAA,IAAK;AAAA,aACjC;AAAA,YAEA,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,mBAAA,EAAiB;AAAA;AAAA,WAE7D,CAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,IAEJ;AAKA,IAAA,MAAM,YAAA,GAAe,gBAAgB,MAAA,mBACnCA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAEb,QAAA,kBAAAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAK,KAAA,CAAM,GAAA;AAAA,QACX,GAAA,EAAK,GAAA,IAAO,KAAA,CAAM,GAAA,IAAO,EAAA;AAAA,QACzB,SAAA,EAAU;AAAA;AAAA,KACZ,EACF,CAAA,mBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,4CAAA,EAA8C,cAAA,CAAe,WAAW,CAAC,CAAA,EAE1F,QAAA,kBAAAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAK,KAAA,CAAM,GAAA;AAAA,QACX,GAAA,EAAK,GAAA,IAAO,KAAA,CAAM,GAAA,IAAO,EAAA;AAAA,QACzB,SAAA,EAAU;AAAA;AAAA,KACZ,EACF,CAAA;AAGF,IAAA,MAAM,OAAA,GAAU,uBACdA,cAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,IAAA;AAAA,QACN,MAAA,EAAQ,eAAe,QAAA,GAAW,MAAA;AAAA,QAClC,GAAA,EAAK,eAAe,qBAAA,GAAwB,MAAA;AAAA,QAC5C,SAAA,EAAU,2CAAA;AAAA,QAET,QAAA,EAAA;AAAA;AAAA,KACH,GAEA,YAAA;AAGF,IAAA,uBACEU,eAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EACd,QAAA,EAAA;AAAA,MAAA,aAAA,oBAAiBV,cAAAA,CAAC,OAAA,EAAA,EAAO,QAAA,EAAA,aAAA,EAAc,CAAA;AAAA,sBACxCA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,WAAA,EAAa,YAAY,CAAA,EAAG,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,MAAA,EAC5F,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,gBAAA,EAAmB,QAAA,EAAA,OAAA,EAAQ,CAAA,EAC7C;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AC9JA,IAAMsB,cAAAA,GAA2B;AAAA,EAC/B,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,eAAA,GAAqD;AAAA,EACzD,MAAA,EAAQ,EAAA;AAAA,EACR,QAAA,EAAU,EAAA;AAAA,EACV,QAAA,EAAU,CAAA;AAAA,EACV,QAAA,EAAU,EAAA;AAAA,EACV,IAAA,EAAM;AACR,CAAA;AAMA,SAAS,cAAA,CAAe;AAAA,EACtB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,MAAA;AAAA,EACR,QAAA;AAAA,EACA,UAAA,GAAa,IAAA;AAAA,EACb,YAAA,GAAe;AACjB,CAAA,EAAmB;AACjB,EAAA,MAAM,eAAe,KAAA,IAASA,cAAAA;AAG9B,EAAA,MAAM,gBAAA,GAAmBxB,kBAAAA,CAAY,CAAC,IAAA,KAAmB;AACvD,IAAA,IAAI,SAAS,QAAA,EAAU;AAErB,MAAA,QAAA,CAAS;AAAA,QACP,IAAA;AAAA,QACA,GAAG;AAAA,OACJ,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,EAAE,MAAM,CAAA;AAAA,IACnB;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAA,MAAM,iBAAA,GAAoBA,kBAAAA,CAAY,CACpC,KAAA,EACA,GAAA,KACG;AACH,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,YAAA;AAAA,MACH,CAAC,KAAK,GAAG;AAAA,KACV,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,MAAM,gBAAA,GAAmBA,kBAAAA,CAAY,CAAC,IAAA,KAAmB;AACvD,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,YAAA;AAAA,MACH;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAA,MAAM,WAAA,GAAcA,mBAAY,MAAM;AACpC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,EAAE,IAAA,EAAM,IAAA,EAAkB,KAAA,EAAO,IAAA,EAAK;AAAA,IACtC,EAAE,IAAA,EAAM,SAAA,EAAuB,KAAA,EAAO,SAAA,EAAU;AAAA,IAChD,EAAE,IAAA,EAAM,IAAA,EAAkB,KAAA,EAAO,IAAA,EAAK;AAAA,IACtC,EAAE,IAAA,EAAM,QAAA,EAAsB,KAAA,EAAO,QAAA;AAAS,GAChD;AAEA,EAAA,uBACEY,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qCAAA,EACd,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MACC,KAAA,IAAS,CAAC,QAAA,oBACTA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAK,SAAA;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,SAAA,EAAU,8CAAA;AAAA,UACV,KAAA,EAAM,kBAAA;AAAA,UAEN,QAAA,kBAAAA,cAAAA,CAACgB,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB,KAAA,EAEJ,CAAA;AAAA,oBAGAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,EAAU,KAAM;AAC3C,MAAA,MAAM,QAAA,GAAW,aAAa,IAAA,KAAS,IAAA;AACvC,MAAA,uBACEA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,WAAW,SAAA,GAAY,WAAA;AAAA,UAChC,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,UACpC,QAAA,EAAU,QAAA;AAAA,UACV,SAAA,EAAWC,GAAAA;AAAA,YACT,SAAA;AAAA,YACA,QAAA,IAAY;AAAA,WACd;AAAA,UAEC,QAAA,EAAA;AAAA,SAAA;AAAA,QAXI;AAAA,OAYP;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,IAGC,aAAa,IAAA,KAAS,QAAA,oBACrBS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sCAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,yEAAA,EAA0E,QAAA,EAAA,OAAA,EAE3F,CAAA;AAAA,wBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACX,QAAA,EAAA,CAAC,IAAA,EAAM,KAAK,CAAA,CAAiB,GAAA,CAAI,CAAC,IAAA,KAAS;AAC3C,UAAA,MAAM,QAAA,GAAA,CAAY,YAAA,CAAa,IAAA,IAAQ,IAAA,MAAU,IAAA;AACjD,UAAA,uBACEA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,WAAW,SAAA,GAAY,SAAA;AAAA,cAChC,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,cACpC,QAAA,EAAU,QAAA;AAAA,cACV,SAAA,EAAWC,GAAAA;AAAA,gBACT,4BAAA;AAAA,gBACA,QAAA,IAAY;AAAA,eACd;AAAA,cAEC,QAAA,EAAA;AAAA,aAAA;AAAA,YAXI;AAAA,WAYP;AAAA,QAEJ,CAAC,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,UAAA,oBACCA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,QAAA,EAE7E,CAAA;AAAA,0BACAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,GAAA,EAAK,CAAA;AAAA,cACL,KAAA,EAAO,YAAA,CAAa,MAAA,IAAU,eAAA,CAAgB,MAAA;AAAA,cAC9C,QAAA,EAAU,CAAC,CAAA,KAAM,iBAAA,CAAkB,QAAA,EAAU,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,EAAE,CAAA,IAAK,CAAC,CAAA;AAAA,cAC9E,QAAA,EAAU,QAAA;AAAA,cACV,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,QAGD,YAAA,oBACCU,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,WAAA,EAE7E,CAAA;AAAA,0BACAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,GAAA,EAAK,CAAA;AAAA,cACL,KAAA,EAAO,YAAA,CAAa,QAAA,IAAY,eAAA,CAAgB,QAAA;AAAA,cAChD,QAAA,EAAU,CAAC,CAAA,KAAM,iBAAA,CAAkB,UAAA,EAAY,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,EAAE,CAAA,IAAK,CAAC,CAAA;AAAA,cAChF,QAAA,EAAU,QAAA;AAAA,cACV,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,wBAGFU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,WAAA,EAE7E,CAAA;AAAA,0BACAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,GAAA,EAAK,CAAA;AAAA,cACL,KAAA,EAAO,YAAA,CAAa,QAAA,IAAY,eAAA,CAAgB,QAAA;AAAA,cAChD,QAAA,EAAU,CAAC,CAAA,KAAM,iBAAA,CAAkB,UAAA,EAAY,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,EAAE,CAAA,IAAK,CAAC,CAAA;AAAA,cAChF,QAAA,EAAU,QAAA;AAAA,cACV,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,wBAEAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2DAAA,EAA4D,QAAA,EAAA,WAAA,EAE7E,CAAA;AAAA,0BACAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,GAAA,EAAK,CAAA;AAAA,cACL,KAAA,EAAO,YAAA,CAAa,QAAA,IAAY,eAAA,CAAgB,QAAA;AAAA,cAChD,QAAA,EAAU,CAAC,CAAA,KAAM,iBAAA,CAAkB,UAAA,EAAY,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,EAAE,CAAA,IAAK,CAAC,CAAA;AAAA,cAChF,QAAA,EAAU,QAAA;AAAA,cACV,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wEAAA,EACZ,QAAA,EAAA;AAAA,QAAA,UAAA,IAAc,CAAA,GAAA,EAAM,aAAa,MAAA,IAAU,eAAA,CAAgB,MAAM,CAAA,EAAG,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAAA,QAC7F,UAAA,IAAc,KAAA;AAAA,QACd,MAAM,YAAA,CAAa,QAAA,IAAY,eAAA,CAAgB,QAAQ,GAAG,YAAA,CAAa,IAAA,IAAQ,IAAI,CAAA,CAAA,EAAI,aAAa,QAAA,IAAY,eAAA,CAAgB,QAAQ,CAAA,EAAG,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAAA,QACpK,YAAA,IAAgB,YAAY,YAAA,CAAa,QAAA,IAAY,gBAAgB,QAAQ,CAAA,EAAG,YAAA,CAAa,IAAA,IAAQ,IAAI,CAAA;AAAA,OAAA,EAC5G;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEO,IAAM,SAAA,GAAYG,YAAK,cAAc,CAAA;AAYrC,SAAS,eAAe,IAAA,EAAqE;AAClG,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,UAAU,OAAO,MAAA;AAE5C,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,IAAA;AAC1B,EAAA,MAAM,QAA6B,EAAC;AAEpC,EAAA,IAAI,IAAA,CAAK,UAAU,IAAA,EAAM;AACvB,IAAA,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,MAAM,GAAG,IAAI,CAAA,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,IAAQ,IAAA,CAAK,YAAY,IAAA,EAAM;AAClD,IAAA,MAAM,EAAA,GAAK,KAAK,QAAA,IAAY,CAAA;AAC5B,IAAA,MAAM,EAAA,GAAK,KAAK,QAAA,IAAY,CAAA;AAC5B,IAAA,KAAA,CAAM,OAAA,GAAU,GAAG,EAAE,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,GAAG,IAAI,CAAA,CAAA;AAAA,EAC3C;AAEA,EAAA,IAAI,IAAA,CAAK,YAAY,IAAA,EAAM;AACzB,IAAA,KAAA,CAAM,QAAA,GAAW,CAAA,EAAG,IAAA,CAAK,QAAQ,GAAG,IAAI,CAAA,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,OAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,GAAS,IAAI,KAAA,GAAQ,MAAA;AACjD;AAMO,SAAS,cAAA,CAAe,MAAoC,OAAA,EAAyC;AAC1G,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,OAAA,CAAQ,OAAA,IAAW,EAAA;AACrC,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,QAAA,EAAU,OAAO,EAAA;AACnC,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,IAAK,QAAQ,OAAA,IAAW,EAAA;AAClD;AAsBO,SAAS,eAAA,CACd,MAAA,GAAgC,EAAC,EACF;AAC/B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,CAAC,EAAE,OAAO,QAAA,EAAU,QAAA,uBAC1Bb,cAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,cAAc,MAAA,CAAO;AAAA;AAAA;AACvB,GAEJ;AACF;AC/SA,IAAM,UAAA,GAAqC;AAAA,EACzC,EAAA,EAAI,kBAAA;AAAA,EACJ,OAAA,EAAS,WAAA;AAAA,EACT,EAAA,EAAI;AACN,CAAA;AAEA,IAAM,mBAAA,GAA8C;AAAA,EAClD,IAAA,EAAM,WAAA;AAAA,EACN,MAAA,EAAQ,aAAA;AAAA,EACR,KAAA,EAAO;AACT,CAAA;AAEA,IAAMuE,cAAAA,GAA4B;AAAA,EAChC,IAAA,EAAM,UAAA;AAAA,EACN,IAAA,EAAM,EAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,IAAA,EAAM,IAAA;AAAA,EACN,YAAA,EAAc,IAAA;AAAA,EACd,MAAA,EAAQ,IAAA;AAAA,EACR,qBAAA,EAAuB,IAAA;AAAA,EACvB,eAAA,EAAiB,IAAA;AAAA,EACjB,YAAA,EAAc,IAAA;AAAA,EACd,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,aAAA,EAAe;AACjB,CAAA;AAEO,IAAM,YAAA,GAAgC;AAAA,EAC3C,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,gBAAc,CAAA;AAAA,IACzC,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,OAAA,EAAS,kBAAA;AAAA,IACT,IAAA,EAAM,eAAA,CAAgB,EAAE,KAAA,EAAO,QAAQ,CAAA;AAAA,IACvC,YAAA,EAAc;AAAA,MACZ,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,iBAAA;AAAA,MACP,OAAA,EAAS;AAAA,QACP,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,QAC3B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA;AAAM;AAC/B,KACF;AAAA,IACA,uBAAuB,sBAAA,CAAuB,EAAE,OAAO,mBAAA,EAAqB,WAAA,EAAa,MAAM,CAAA;AAAA,IAC/F,iBAAiB,sBAAA,CAAuB,EAAE,OAAO,mBAAA,EAAqB,WAAA,EAAa,MAAM,CAAA;AAAA,IACzF,YAAA,EAAc,iBAAA,CAAkB,EAAE,KAAA,EAAO,iBAAiB,CAAA;AAAA,IAC1D,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA,IACtD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA,IACtD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA;AAAA,IAEtD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,IAC7C,aAAA,EAAe,kBAAA,CAAmB,EAAE,KAAA,EAAO,WAAW;AAAA,GACxD;AAAA,EACA,YAAA,EAAAA,cAAAA;AAAA,EACA,QAAQ,CAAC,EAAE,IAAA,EAAM,IAAA,EAAM,SAAS,IAAA,EAAM,YAAA,EAAc,SAAA,EAAW,MAAA,EAAQ,uBAAuB,eAAA,EAAiB,YAAA,EAAc,SAAA,EAAW,SAAA,EAAW,eAAc,KAAM;AAErK,IAAA,MAAM,sBAAsB,qBAAA,EAAuB,GAAA;AACnD,IAAA,MAAM,qBAAqB,eAAA,EAAiB,GAAA;AAC5C,IAAA,MAAM,gBAAA,GAAmB,aAAA;AACzB,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,KAAS,QAAA;AAGrC,IAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,uBAAA,EAAyB,OAAA,EAAS,SAAS,CAAA;AAGpF,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,UAAU,CAAA;AAGnD,IAAA,MAAM,aAAA,GAAgB,EAAA;AAAA,MACpB,uEAAA;AAAA,MACA,uDAAuD,kBAAkB,CAAA,CAAA;AAAA,MACzE,kDAAA;AAAA;AAAA,MAEA,CAAC,mBAAA,IAAuB,CAAC,kBAAA,IAAsB,cAAA;AAAA;AAAA,MAE/C,mBAAA,IAAuB,CAAC,kBAAA,IAAsB,kBAAA;AAAA;AAAA,MAE9C,CAAC,gBAAA,IAAoB,CAAC,aAAA,IAAiB,WAAA;AAAA;AAAA,MAEvC,CAAC,cAAc,MAAA,IAAU;AAAA,KAC3B;AAGA,IAAA,MAAM,cAAmC,EAAC;AAG1C,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,WAAA,CAAY,eAAA,GAAkB,gBAAgB,qBAAqB,CAAA;AAAA,IACrE;AAGA,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,WAAA,CAAY,KAAA,GAAQ,gBAAgB,eAAe,CAAA;AAAA,IACrD;AAGA,IAAA,MAAM,YAAA,GAAe,iBAAiB,YAAY,CAAA;AAClD,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,CAAO,MAAA,CAAO,aAAa,YAAY,CAAA;AAAA,IACzC;AAGA,IAAA,MAAM,gBAAA,GAAmB,eAAe,IAAI,CAAA;AAC5C,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,MAAA,CAAO,MAAA,CAAO,aAAa,gBAAgB,CAAA;AAAA,IAC7C;AAGA,IAAA,MAAM,UAAA,GAAa,kBAAkB,aAAa,CAAA;AAClD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,WAAA,CAAY,OAAA,GAAU,UAAA;AAAA,IACxB;AAGA,IAAA,MAAM,eAAA,GAAkB,oBAAoB,SAAS,CAAA;AACrD,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,MAAA,CAAO,MAAA,CAAO,aAAa,eAAe,CAAA;AAAA,IAC5C;AAEA,IAAA,MAAM,aAAA,GAAgB,uBACpBvE,cAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,IAAA;AAAA,QACN,MAAA,EAAQ,YAAA,KAAiB,KAAA,GAAQ,QAAA,GAAW,MAAA;AAAA,QAC5C,GAAA,EAAK,YAAA,KAAiB,KAAA,GAAQ,qBAAA,GAAwB,MAAA;AAAA,QACtD,SAAA,EAAW,aAAA;AAAA,QACX,KAAA,EAAO,WAAA;AAAA,QAEN,QAAA,EAAA;AAAA;AAAA,KACH,mBAEAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,SAAA,EAAW,aAAA,EAAe,KAAA,EAAO,WAAA,EACpD,QAAA,EAAA,IAAA,EACH,CAAA;AAGF,IAAA,MAAM,eAAoC,EAAC;AAC3C,IAAA,MAAM,SAAA,GAAY,iBAAiB,MAAM,CAAA;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,YAAA,CAAa,MAAA,GAAS,SAAA;AAAA,IACxB;AAGA,IAAA,MAAM,iBAAiB,SAAA,IAAa,MAAA;AAEpC,IAAA,uBACEA,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,SAAA,EAAW,mBAAA,CAAoB,cAAc,CAAA,IAAK,mBAAA,CAAoB,IAAA;AAAA,QACtE,KAAA,EAAO,YAAA;AAAA,QAEN,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;ACjKA,IAAMuE,cAAAA,GAA0B;AAAA,EAC9B,KAAA,EAAO,IAAA;AAAA,EACP,OAAA,EAAS,cAAA;AAAA,EACT,IAAA,EAAM,kCAAA;AAAA,EACN,IAAA,EAAM,EAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,MAAA,EAAQ,IAAA;AAAA,EACR,MAAA,EAAQ,IAAA;AAAA,EACR,UAAA,EAAY,IAAA;AAAA,EACZ,MAAA,EAAQ,IAAA;AAAA,EACR,UAAA,EAAY,IAAA;AAAA,EACZ,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,aAAA,EAAe;AACjB,CAAA;AAEO,IAAM,UAAA,GAA8B;AAAA,EACzC,KAAA,EAAO,MAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,gBAAc,CAAA;AAAA,IACzC,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,OAAA;AAAA,MACP,YAAA,EAAc;AAAA,QACZ,EAAA,EAAI,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,UAAA,EAAW;AAAA,QACtC,GAAA,EAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,KAAA,EAAM;AAAA,QAClC,GAAA,EAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,UAAA;AAAW;AACzC,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,UAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,iBAAA;AAAA,MACP,OAAA,EAAS;AAAA,QACP,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,IAAA,EAAK;AAAA,QAC5B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,KAAA;AAAM;AAC9B,KACF;AAAA,IACA,MAAA,EAAQ,WAAA;AAAA,IACR,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,IAC7C,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA,IACtD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA,IACtD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA;AAAA,IAEtD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,IAC7C,aAAA,EAAe,kBAAA,CAAmB,EAAE,KAAA,EAAO,WAAW;AAAA,GACxD;AAAA,EACA,YAAA,EAAAA,cAAAA;AAAA,EACA,QAAQ,CAAC,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,UAAA,EAAY,YAAY,SAAA,EAAW,MAAA,EAAQ,QAAQ,SAAA,EAAW,SAAA,EAAW,eAAc,KAAM;AAExJ,IAAA,MAAM,eAAA,GAAkB,MAAA,EAAQ,MAAA,IAAU,MAAA,CAAO,MAAA,GAAS,CAAA;AAC1D,IAAA,MAAM,WAAA,GAAc,EAAA;AAAA,MAClB,wCAAA;AAAA,MACA,CAAC,eAAA,IAAmB,YAAA;AAAA,MACpB,SAAA,CAAU,MAAM,CAAA,IAAK,EAAA;AAAA,MACrB,IAAA,IAAQ;AAAA,KACV;AAGA,IAAA,MAAM,eAAoC,EAAC;AAC3C,IAAA,MAAM,SAAA,GAAY,iBAAiB,MAAM,CAAA;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,YAAA,CAAa,MAAA,GAAS,SAAA;AAAA,IACxB;AACA,IAAA,MAAM,gBAAA,GAAmB,qBAAqB,UAAU,CAAA;AACxD,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,MAAA,CAAO,MAAA,CAAO,cAAc,gBAAgB,CAAA;AAAA,IAC9C;AACA,IAAA,MAAM,eAAA,GAAkB,oBAAoB,SAAS,CAAA;AACrD,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,MAAA,CAAO,MAAA,CAAO,cAAc,eAAe,CAAA;AAAA,IAC7C;AAGA,IAAA,MAAM,iBAAiB,SAAA,IAAa,MAAA;AACpC,IAAA,MAAM,gBAAA,GAAmB,EAAA;AAAA,MACvB,MAAA;AAAA,MACA,mBAAmB,MAAA,IAAU,eAAA;AAAA,MAC7B,mBAAmB,QAAA,IAAY,gBAAA;AAAA,MAC/B,mBAAmB,OAAA,IAAW;AAAA,KAChC;AAGA,IAAA,MAAM,gBAAA,GAAmB,qBAAqB,UAAU,CAAA;AACxD,IAAA,MAAM,SAAA,GAAiC;AAAA,MACrC,GAAG;AAAA,KACL;AAGA,IAAA,MAAM,YAAA,GAAe,iBAAiB,MAAM,CAAA;AAC5C,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,CAAO,MAAA,CAAO,WAAW,YAAY,CAAA;AAAA,IACvC;AAEA,IAAA,MAAM,UAAA,GAAa,kBAAkB,aAAa,CAAA;AAClD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,SAAA,CAAU,OAAA,GAAU,UAAA;AAAA,IACtB;AAEA,IAAA,MAAM,8BACJ7D,eAAAA,CAAC,SAAI,SAAA,EAAW,WAAA,EAAa,OAAO,SAAA,EAEjC,QAAA,EAAA;AAAA,MAAA,KAAA,EAAO,sBACNV,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAEb,QAAA,kBAAAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAK,KAAA,CAAM,GAAA;AAAA,UACX,GAAA,EAAK,KAAA,CAAM,GAAA,IAAO,OAAA,IAAW,EAAA;AAAA,UAC7B,SAAA,EAAU;AAAA;AAAA,OACZ,EACF,CAAA,mBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+DAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,sBAAQ,CAAA,EAClD,CAAA;AAAA,sBAIFU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EACZ,QAAA,EAAA;AAAA,QAAA,OAAA,oBACCV,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,8CAA8C,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,QAErE,wBAAQA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAA,IAAA,EAAK;AAAA,OAAA,EAC9D;AAAA,KAAA,EACF,CAAA;AAGF,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,uBACEA,eAAC,eAAA,EAAA,EAAgB,SAAA,EACf,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,gBAAA,EACd,QAAA,kBAAAA,cAAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAQ,eAAe,QAAA,GAAW,MAAA;AAAA,UAClC,GAAA,EAAK,eAAe,qBAAA,GAAwB,MAAA;AAAA,UAC5C,SAAA,EAAU,OAAA;AAAA,UACV,KAAA,EAAO,YAAA;AAAA,UAEN,QAAA,EAAA;AAAA;AAAA,SAEL,CAAA,EACF,CAAA;AAAA,IAEJ;AAEA,IAAA,uBACEA,cAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EACf,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,gBAAA,EACd,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,YAAA,EAAe,QAAA,EAAA,WAAA,EAAY,GACzC,CAAA,EACF,CAAA;AAAA,EAEJ;AACF;ACnLA,IAAMuE,cAAAA,GAA6B;AAAA,EACjC,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,MAAA,EAAQ,IAAA;AAAA,EACR,UAAA,EAAY,IAAA;AAAA,EACZ,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,aAAA,EAAe;AACjB,CAAA;AAEO,IAAM,aAAA,GAAiC;AAAA,EAC5C,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,gBAAc,CAAA;AAAA,IACzC,KAAA,EAAO,iBAAA;AAAA,IACP,KAAA,EAAO,sBAAA,CAAuB,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,IAChD,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA,IACtD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA;AAAA,IAEtD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,IAC7C,aAAA,EAAe,kBAAA,CAAmB,EAAE,KAAA,EAAO,WAAW;AAAA,GACxD;AAAA,EACA,YAAA,EAAAA,cAAAA;AAAA,EACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,KAAA,EAAO,YAAY,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAW,aAAA,EAAc,KAAM;AACrF,IAAA,MAAM,gBAAA,GAAmB,qBAAqB,UAAU,CAAA;AAExD,IAAA,MAAM,YAAA,GAAoC;AAAA,MACxC,GAAG;AAAA,KACL;AACA,IAAA,MAAM,SAAA,GAAY,iBAAiB,MAAM,CAAA;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,YAAA,CAAa,MAAA,GAAS,SAAA;AAAA,IACxB;AACA,IAAA,MAAM,UAAA,GAAa,kBAAkB,aAAa,CAAA;AAClD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,YAAA,CAAa,OAAA,GAAU,UAAA;AAAA,IACzB;AACA,IAAA,MAAM,eAAA,GAAkB,oBAAoB,SAAS,CAAA;AACrD,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,MAAA,CAAO,MAAA,CAAO,cAAc,eAAe,CAAA;AAAA,IAC7C;AAGA,IAAA,MAAM,WAAA,GAAc,gBAAgB,KAAK,CAAA;AACzC,IAAA,MAAM,OAAA,GAA2C,WAAA,GAC7C,EAAE,WAAA,EAAa,aAAY,GAC3B,MAAA;AAEJ,IAAA,uBACEvE,cAAAA,CAAC,eAAA,EAAA,EAAgB,WACf,QAAA,kBAAAA,cAAAA,CAAC,SAAI,SAAA,EAAU,MAAA,EAAO,KAAA,EAAO,MAAA,CAAO,KAAK,YAAY,CAAA,CAAE,SAAS,CAAA,GAAI,YAAA,GAAe,QACjF,QAAA,kBAAAA,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,wBAAA;AAAA,UACA,eAAA,CAAgB,KAAK,CAAA,IAAK,eAAA,CAAgB;AAAA,SAC5C;AAAA,QACA,KAAA,EAAO;AAAA;AAAA,OAEX,CAAA,EACF,CAAA;AAAA,EAEJ;AACF;AC/CA,SAAS,aAAA,CAAc;AAAA,EACrB,IAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,YAAiC,YAAA,GAAe,EAAE,KAAA,EAAO,YAAA,KAAiB,EAAC;AAEjF,EAAA,uBACEU,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,QAAA;AAAA,QACT,SAAA,EAAU,2HAAA;AAAA,QACV,KAAA,EAAO,SAAA;AAAA,QAEP,QAAA,EAAA;AAAA,0BAAAV,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,0BAClBA,cAAAA;AAAA,YAACmB,uBAAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,oDAAA;AAAA,gBACA,MAAA,IAAU;AAAA;AACZ;AAAA;AACF;AAAA;AAAA,KACF;AAAA,oBACAnB,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,6CAAA;AAAA,UACA,SAAS,4BAAA,GAA+B;AAAA,SAC1C;AAAA,QAEA,QAAA,kBAAAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,iCAAA;AAAA,YACV,KAAA,EAAO,YAAA,GAAe,EAAE,KAAA,EAAO,cAAa,GAAI,MAAA;AAAA,YAE/C,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACR;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAGA,SAAS,iBAAA,CAAkB;AAAA,EACzB,KAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA2B;AAEzB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIH,gBAAsB,MAAM;AAC5D,IAAA,MAAM,WAAA,uBAAkB,GAAA,EAAY;AACpC,IAAA,KAAA,EAAO,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC9B,MAAA,IAAI,KAAK,WAAA,EAAa;AACpB,QAAA,WAAA,CAAY,IAAI,KAAK,CAAA;AAAA,MACvB;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,WAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAkB;AACtC,IAAA,YAAA,CAAa,CAAC,IAAA,KAAS;AACrB,MAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,IAAI,CAAA;AAC3B,MAAA,IAAI,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,EAAG;AACrB,QAAA,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,IAAI,CAAC,aAAA,EAAe;AAClB,UAAA,MAAA,CAAO,KAAA,EAAM;AAAA,QACf;AACA,QAAA,MAAA,CAAO,IAAI,KAAK,CAAA;AAAA,MAClB;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,gBAAgB,SAAS,CAAA;AAC9C,EAAA,MAAM,gBAAA,GAAmB,qBAAqB,UAAU,CAAA;AAGxD,EAAA,MAAM,gBAAA,GAAmB,yDAAA;AAEzB,EAAA,MAAM,gBAAA,GAAmB,qBAAqB,UAAU,CAAA;AAExD,EAAA,MAAM,cAAA,GAAsC,oBAAoB,MAAA,CAAO,IAAA,CAAK,gBAAgB,CAAA,CAAE,MAAA,GAAS,CAAA,GACnG,gBAAA,GACA,EAAC;AAEL,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,GAAG;AAAA,GACL;AACA,EAAA,MAAM,SAAA,GAAY,iBAAiB,MAAM,CAAA;AACzC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,KAAA,CAAM,MAAA,GAAS,SAAA;AAAA,EACjB;AACA,EAAA,MAAM,UAAA,GAAa,kBAAkB,aAAa,CAAA;AAClD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,KAAA,CAAM,OAAA,GAAU,UAAA;AAAA,EAClB;AACA,EAAA,MAAM,eAAA,GAAkB,oBAAoB,SAAS,CAAA;AACrD,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,MAAA,CAAO,MAAA,CAAO,OAAO,eAAe,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAChC,IAAA,uBACEG,cAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EACf,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAAO,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,MAAA,EACnE,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,kBAAkB,KAAA,EAAO,cAAA,EACvC,QAAA,kBAAAA,cAAAA,CAAC,SAAI,SAAA,EAAU,uCAAA,EAAwC,QAAA,EAAA,8CAAA,EAEvD,CAAA,EACF,GACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EACf,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAAO,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,MAAA,EACnE,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,gBAAA,EAAkB,KAAA,EAAO,cAAA,EACtC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,0BAChBA,cAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MAEC,IAAA;AAAA,MACA,MAAA,EAAQ,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA;AAAA,MAC3B,QAAA,EAAU,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,MAClC;AAAA,KAAA;AAAA,IAJK;AAAA,GAMR,CAAA,EACH,CAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAcA,IAAMuE,cAAAA,GAA+B;AAAA,EACnC,KAAA,EAAO;AAAA,IACL;AAAA,MACE,KAAA,EAAO,eAAA;AAAA,MACP,OAAA,EAAS,8DAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACf;AAAA,IACA;AAAA,MACE,KAAA,EAAO,kBAAA;AAAA,MACP,OAAA,EAAS,8CAAA;AAAA,MACT,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,aAAA,EAAe,KAAA;AAAA,EACf,SAAA,EAAW,IAAA;AAAA,EACX,MAAA,EAAQ,IAAA;AAAA,EACR,UAAA,EAAY,IAAA;AAAA,EACZ,UAAA,EAAY,IAAA;AAAA,EACZ,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,aAAA,EAAe;AACjB,CAAA;AAEO,IAAM,eAAA,GAAmC;AAAA,EAC9C,KAAA,EAAO,WAAA;AAAA,EACP,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,gBAAA,CAAiB,EAAE,YAAA,EAAAA,gBAAc,CAAA;AAAA,IACzC,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,OAAA;AAAA,MACP,WAAA,EAAa;AAAA,QACX,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,MAAA;AAAA,UACN,KAAA,EAAO;AAAA,SACT;AAAA,QACA,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,UAAA;AAAA,UACN,KAAA,EAAO;AAAA,SACT;AAAA,QACA,WAAA,EAAa;AAAA,UACX,IAAA,EAAM,OAAA;AAAA,UACN,KAAA,EAAO,cAAA;AAAA,UACP,OAAA,EAAS;AAAA,YACP,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,IAAA,EAAK;AAAA,YAC5B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,KAAA;AAAM;AAC9B;AACF,OACF;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,KAAA,EAAO,gBAAA;AAAA,QACP,OAAA,EAAS,EAAA;AAAA,QACT,WAAA,EAAa;AAAA,OACf;AAAA,MACA,cAAA,EAAgB,CAAC,IAAA,KAA4B,IAAA,CAAK,KAAA,IAAS;AAAA,KAC7D;AAAA,IACA,aAAA,EAAe;AAAA,MACb,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,qBAAA;AAAA,MACP,OAAA,EAAS;AAAA,QACP,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,IAAA,EAAK;AAAA,QAC5B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,KAAA;AAAM;AAC9B,KACF;AAAA,IACA,SAAA,EAAW,sBAAA,CAAuB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,UAAA,EAAY,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,IACzD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA,IACtD,SAAA,EAAW,oBAAA,CAAqB,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA;AAAA,IAEtD,MAAA,EAAQ,iBAAA,CAAkB,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,IAC7C,aAAA,EAAe,kBAAA,CAAmB,EAAE,KAAA,EAAO,WAAW;AAAA,GACxD;AAAA,EACA,YAAA,EAAAA,cAAAA;AAAA,EACA,MAAA,EAAQ,CAAC,KAAA,qBACPvE,cAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,eAAe,KAAA,CAAM;AAAA;AAAA;AAG3B","file":"index.js","sourcesContent":["/**\n * Shared Puck Field Definitions\n *\n * Reusable field configurations and CSS utility maps for Puck components.\n * These ensure consistency across all components.\n */\n\nimport type { Field } from '@measured/puck'\nimport type React from 'react'\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Combines class names, filtering out falsy values\n * A simple alternative to clsx/classnames for bundling purposes\n */\nexport function cn(...classes: (string | boolean | undefined | null)[]): string {\n return classes.filter(Boolean).join(' ')\n}\n\n// =============================================================================\n// Custom Style Types\n// =============================================================================\n\nexport interface ColorValue {\n hex: string\n opacity?: number\n}\n\nexport interface PaddingValue {\n top: number\n right: number\n bottom: number\n left: number\n unit: 'px' | 'rem' | 'em' | '%'\n /** Whether all sides are linked (sync together). Defaults to true if not set. */\n linked?: boolean\n}\n\nexport interface BorderValue {\n style: 'none' | 'solid' | 'dashed' | 'dotted'\n width: number\n color: ColorValue | null\n radius: number\n sides: {\n top: boolean\n right: boolean\n bottom: boolean\n left: boolean\n }\n}\n\nexport interface WidthValue {\n mode: 'full' | 'contained' | 'custom'\n maxWidth: number\n unit: 'px' | 'rem' | '%' | 'vw'\n alignment: 'left' | 'center' | 'right'\n}\n\n// =============================================================================\n// Dimensions Types (Enhanced Width + Height)\n// =============================================================================\n\nexport type DimensionsUnit = 'px' | 'rem' | '%' | 'vw' | 'vh'\nexport type DimensionsMode = 'full' | 'contained' | 'custom'\nexport type ContentAlignment = 'left' | 'center' | 'right'\n\n/**\n * Represents a single dimension constraint (min or max for width or height)\n */\nexport interface DimensionConstraint {\n value: number\n unit: DimensionsUnit\n enabled: boolean\n}\n\n/**\n * Full dimensions configuration value - replaces/extends WidthValue\n * Supports min/max constraints for both width and height\n */\nexport interface DimensionsValue {\n /** Width mode: full (100%), contained (centered max-width), or custom */\n mode: DimensionsMode\n /** Content alignment within the container */\n alignment: ContentAlignment\n /** Minimum width constraint (optional) */\n minWidth?: DimensionConstraint | null\n /** Maximum width constraint (required for backward compat) */\n maxWidth: DimensionConstraint\n /** Minimum height constraint (optional) */\n minHeight?: DimensionConstraint | null\n /** Maximum height constraint (optional) */\n maxHeight?: DimensionConstraint | null\n /** UI state: whether advanced mode is expanded */\n advancedMode?: boolean\n}\n\n/**\n * Type guard to detect legacy WidthValue format\n */\nexport function isLegacyWidthValue(value: unknown): value is WidthValue {\n if (!value || typeof value !== 'object') return false\n const v = value as Record<string, unknown>\n return (\n typeof v.maxWidth === 'number' &&\n typeof v.unit === 'string' &&\n typeof v.mode === 'string' &&\n !('minWidth' in v) &&\n !('minHeight' in v) &&\n !('maxHeight' in v)\n )\n}\n\n/**\n * Migrate legacy WidthValue to new DimensionsValue format\n */\nexport function migrateWidthValue(legacy: WidthValue): DimensionsValue {\n return {\n mode: legacy.mode,\n alignment: legacy.alignment,\n maxWidth: {\n value: legacy.maxWidth,\n unit: legacy.unit,\n enabled: true,\n },\n advancedMode: false,\n }\n}\n\n// =============================================================================\n// Background Types\n// =============================================================================\n\nexport interface GradientStop {\n color: ColorValue\n position: number // 0-100%\n}\n\nexport interface GradientValue {\n type: 'linear' | 'radial'\n angle: number // 0-360 for linear\n stops: GradientStop[]\n radialShape?: 'circle' | 'ellipse'\n radialPosition?: 'center' | 'top' | 'bottom' | 'left' | 'right'\n}\n\n/**\n * Gradient mask for fading images to transparent\n */\nexport interface GradientMask {\n enabled: boolean\n direction:\n | 'to-top'\n | 'to-bottom'\n | 'to-left'\n | 'to-right'\n | 'to-top-left'\n | 'to-top-right'\n | 'to-bottom-left'\n | 'to-bottom-right'\n | 'from-center' // Radial gradient from center outward\n startOpacity: number // 0-100, typically 100 (fully visible)\n endOpacity: number // 0-100, typically 0 (fully transparent)\n startPosition: number // 0-100%, where fade begins\n endPosition: number // 0-100%, where fade ends\n}\n\nexport interface BackgroundImageValue {\n media: import('./MediaField').MediaReference | null\n size: 'cover' | 'contain' | 'auto'\n position:\n | 'center'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n repeat: 'no-repeat' | 'repeat' | 'repeat-x' | 'repeat-y'\n attachment: 'scroll' | 'fixed'\n /** Overall image opacity 0-100 (default 100) */\n opacity?: number\n /** Gradient mask for fade to transparent effect */\n mask?: GradientMask\n}\n\n/**\n * Overlay layer for images (Divi-style)\n * Renders a color or gradient on top of the background image\n */\nexport interface BackgroundOverlay {\n enabled: boolean\n type: 'solid' | 'gradient'\n solid?: ColorValue | null\n gradient?: GradientValue | null\n}\n\nexport interface BackgroundValue {\n type: 'none' | 'solid' | 'gradient' | 'image'\n solid?: ColorValue | null\n gradient?: GradientValue | null\n image?: BackgroundImageValue | null\n /** Overlay layer, only used when type === 'image' */\n overlay?: BackgroundOverlay | null\n}\n\n// =============================================================================\n// Visibility Field\n// =============================================================================\n\nexport const visibilityField: Field = {\n type: 'select',\n label: 'Visibility',\n options: [\n { label: 'Always Visible', value: 'always' },\n { label: 'Authenticated Users Only', value: 'authenticatedOnly' },\n { label: 'Guests Only', value: 'guestOnly' },\n ],\n}\n\n// =============================================================================\n// Button Style Field\n// =============================================================================\n\nexport const buttonStyleField: Field = {\n type: 'select',\n label: 'Button Style',\n options: [\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Outline', value: 'outline' },\n { label: 'Ghost', value: 'ghost' },\n { label: 'Link', value: 'link' },\n ],\n}\n\n// =============================================================================\n// Button Variant Field\n// =============================================================================\n\nexport const buttonVariantField: Field = {\n type: 'select',\n label: 'Button Variant',\n options: [\n { label: 'Default', value: 'default' },\n { label: 'Destructive', value: 'destructive' },\n { label: 'Outline', value: 'outline' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Ghost', value: 'ghost' },\n { label: 'Link', value: 'link' },\n ],\n}\n\n// =============================================================================\n// Button Size Field\n// =============================================================================\n\nexport const buttonSizeField: Field = {\n type: 'select',\n label: 'Size',\n options: [\n { label: 'Small', value: 'sm' },\n { label: 'Default', value: 'default' },\n { label: 'Large', value: 'lg' },\n { label: 'Icon', value: 'icon' },\n ],\n}\n\n// =============================================================================\n// Background Color Field (Preset Palette)\n// =============================================================================\n\nexport const backgroundColorField: Field = {\n type: 'select',\n label: 'Background Color',\n options: [\n { label: 'None', value: 'none' },\n { label: 'Background', value: 'background' },\n { label: 'Card', value: 'card' },\n { label: 'Muted', value: 'muted' },\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Accent', value: 'accent' },\n ],\n}\n\n// =============================================================================\n// Text Color Field (Preset Palette)\n// =============================================================================\n\nexport const textColorField: Field = {\n type: 'select',\n label: 'Text Color',\n options: [\n { label: 'Theme (Auto)', value: 'default' },\n { label: 'Foreground', value: 'foreground' },\n { label: 'Muted', value: 'muted-foreground' },\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary-foreground' },\n ],\n}\n\n// =============================================================================\n// Gap/Spacing Field\n// =============================================================================\n\nexport const gapField: Field = {\n type: 'select',\n label: 'Gap',\n options: [\n { label: 'None', value: 'none' },\n { label: 'Extra Small', value: 'xs' },\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n { label: 'Extra Large', value: 'xl' },\n { label: '2XL', value: '2xl' },\n ],\n}\n\n// =============================================================================\n// Shadow Field\n// =============================================================================\n\nexport const shadowField: Field = {\n type: 'select',\n label: 'Shadow',\n options: [\n { label: 'None', value: 'none' },\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n { label: 'Extra Large', value: 'xl' },\n { label: '2XL', value: '2xl' },\n ],\n}\n\n// =============================================================================\n// Spacer Height Field\n// =============================================================================\n\nexport const spacerHeightField: Field = {\n type: 'select',\n label: 'Height',\n options: [\n { label: 'Extra Small (8px)', value: 'xs' },\n { label: 'Small (16px)', value: 'sm' },\n { label: 'Medium (32px)', value: 'md' },\n { label: 'Large (48px)', value: 'lg' },\n { label: 'Extra Large (64px)', value: 'xl' },\n { label: '2XL (96px)', value: '2xl' },\n { label: '3XL (128px)', value: '3xl' },\n ],\n}\n\n// =============================================================================\n// Heading Level Field\n// =============================================================================\n\nexport const headingLevelField: Field = {\n type: 'select',\n label: 'Heading Level',\n options: [\n { label: 'H1', value: 'h1' },\n { label: 'H2', value: 'h2' },\n { label: 'H3', value: 'h3' },\n { label: 'H4', value: 'h4' },\n { label: 'H5', value: 'h5' },\n { label: 'H6', value: 'h6' },\n ],\n}\n\n// =============================================================================\n// Text Size Field\n// =============================================================================\n\nexport const textSizeField: Field = {\n type: 'select',\n label: 'Text Size',\n options: [\n { label: 'Extra Small', value: 'xs' },\n { label: 'Small', value: 'sm' },\n { label: 'Base', value: 'base' },\n { label: 'Large', value: 'lg' },\n { label: 'Extra Large', value: 'xl' },\n { label: '2XL', value: '2xl' },\n ],\n}\n\n// =============================================================================\n// Aspect Ratio Field\n// =============================================================================\n\nexport const aspectRatioField: Field = {\n type: 'select',\n label: 'Aspect Ratio',\n options: [\n { label: 'Auto', value: 'auto' },\n { label: 'Square (1:1)', value: 'square' },\n { label: 'Video (16:9)', value: 'video' },\n { label: 'Portrait (3:4)', value: 'portrait' },\n { label: 'Landscape (4:3)', value: 'landscape' },\n { label: 'Wide (21:9)', value: 'wide' },\n ],\n}\n\n// =============================================================================\n// Divider Style Field\n// =============================================================================\n\nexport const dividerStyleField: Field = {\n type: 'select',\n label: 'Style',\n options: [\n { label: 'Solid', value: 'solid' },\n { label: 'Dashed', value: 'dashed' },\n { label: 'Dotted', value: 'dotted' },\n ],\n}\n\n// =============================================================================\n// Border Radius Field\n// =============================================================================\n\nexport const borderRadiusField: Field = {\n type: 'select',\n label: 'Border Radius',\n options: [\n { label: 'None', value: 'none' },\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n { label: 'Extra Large', value: 'xl' },\n { label: '2XL', value: '2xl' },\n { label: 'Full', value: 'full' },\n ],\n}\n\n// =============================================================================\n// Columns Count Field\n// =============================================================================\n\nexport const columnsCountField: Field = {\n type: 'select',\n label: 'Columns',\n options: [\n { label: '1 Column', value: '1' },\n { label: '2 Columns', value: '2' },\n { label: '3 Columns', value: '3' },\n { label: '4 Columns', value: '4' },\n { label: '5 Columns', value: '5' },\n { label: '6 Columns', value: '6' },\n ],\n}\n\n// =============================================================================\n// Flex Direction Field\n// =============================================================================\n\nexport const flexDirectionField: Field = {\n type: 'select',\n label: 'Direction',\n options: [\n { label: 'Row (Horizontal)', value: 'row' },\n { label: 'Column (Vertical)', value: 'column' },\n { label: 'Row Reverse', value: 'row-reverse' },\n { label: 'Column Reverse', value: 'column-reverse' },\n ],\n}\n\n// =============================================================================\n// Flex Wrap Field\n// =============================================================================\n\nexport const flexWrapField: Field = {\n type: 'select',\n label: 'Wrap',\n options: [\n { label: 'No Wrap', value: 'nowrap' },\n { label: 'Wrap', value: 'wrap' },\n { label: 'Wrap Reverse', value: 'wrap-reverse' },\n ],\n}\n\n// =============================================================================\n// CSS Class Mappings\n// =============================================================================\n\n/**\n * Maps alignment values to Tailwind classes\n */\nexport const alignmentMap: Record<string, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n}\n\n/**\n * Maps background color values to Tailwind classes\n */\nexport const bgColorMap: Record<string, string> = {\n none: '',\n background: 'bg-background',\n card: 'bg-card',\n muted: 'bg-muted',\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n accent: 'bg-accent',\n}\n\n/**\n * Maps text color values to Tailwind classes\n */\nexport const textColorMap: Record<string, string> = {\n default: 'text-inherit',\n foreground: 'text-foreground',\n 'muted-foreground': 'text-muted-foreground',\n primary: 'text-primary',\n 'secondary-foreground': 'text-secondary-foreground',\n}\n\n/**\n * Maps gap values to Tailwind classes\n */\nexport const gapMap: Record<string, string> = {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n}\n\n/**\n * Maps shadow values to Tailwind classes\n */\nexport const shadowMap: Record<string, string> = {\n none: '',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n '2xl': 'shadow-2xl',\n}\n\n/**\n * Maps spacer height values to Tailwind classes\n */\nexport const spacerHeightMap: Record<string, string> = {\n xs: 'h-2',\n sm: 'h-4',\n md: 'h-8',\n lg: 'h-12',\n xl: 'h-16',\n '2xl': 'h-24',\n '3xl': 'h-32',\n}\n\n/**\n * Maps heading level to Tailwind classes\n */\nexport const headingLevelMap: Record<string, string> = {\n h1: 'text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight',\n h2: 'text-3xl md:text-4xl font-bold tracking-tight',\n h3: 'text-2xl md:text-3xl font-semibold',\n h4: 'text-xl md:text-2xl font-semibold',\n h5: 'text-lg md:text-xl font-medium',\n h6: 'text-base md:text-lg font-medium',\n}\n\n/**\n * Maps text size to Tailwind classes\n */\nexport const textSizeMap: Record<string, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n base: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n}\n\n/**\n * Maps aspect ratio to Tailwind classes\n */\nexport const aspectRatioMap: Record<string, string> = {\n auto: '',\n square: 'aspect-square',\n video: 'aspect-video',\n portrait: 'aspect-[3/4]',\n landscape: 'aspect-[4/3]',\n wide: 'aspect-[21/9]',\n}\n\n/**\n * Maps divider style to Tailwind classes\n */\nexport const dividerStyleMap: Record<string, string> = {\n solid: 'border-solid',\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n}\n\n/**\n * Maps border radius to Tailwind classes\n */\nexport const borderRadiusMap: Record<string, string> = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full',\n}\n\n/**\n * Maps columns count to Tailwind grid classes (responsive)\n */\nexport const columnsCountMap: Record<string, string> = {\n '1': 'grid-cols-1',\n '2': 'grid-cols-1 md:grid-cols-2',\n '3': 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',\n '4': 'grid-cols-1 md:grid-cols-2 lg:grid-cols-4',\n '5': 'grid-cols-2 md:grid-cols-3 lg:grid-cols-5',\n '6': 'grid-cols-2 md:grid-cols-3 lg:grid-cols-6',\n}\n\n/**\n * Maps flex direction to Tailwind classes\n */\nexport const flexDirectionMap: Record<string, string> = {\n row: 'flex-row',\n column: 'flex-col',\n 'row-reverse': 'flex-row-reverse',\n 'column-reverse': 'flex-col-reverse',\n}\n\n/**\n * Maps justify content to Tailwind classes\n * Supports both short (start) and full (flex-start) values\n */\nexport const justifyContentMap: Record<string, string> = {\n start: 'justify-start',\n 'flex-start': 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n 'flex-end': 'justify-end',\n between: 'justify-between',\n 'space-between': 'justify-between',\n around: 'justify-around',\n 'space-around': 'justify-around',\n evenly: 'justify-evenly',\n 'space-evenly': 'justify-evenly',\n}\n\n/**\n * Maps align items to Tailwind classes\n * Supports both short (start) and full (flex-start) values\n */\nexport const alignItemsMap: Record<string, string> = {\n start: 'items-start',\n 'flex-start': 'items-start',\n center: 'items-center',\n end: 'items-end',\n 'flex-end': 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n}\n\n/**\n * Maps self-alignment to Tailwind classes (for grid/flex item alignment)\n * Used by components like TextImageSplit for vertical self-alignment\n */\nexport const selfAlignmentMap: Record<string, string> = {\n start: 'self-start',\n 'flex-start': 'self-start',\n center: 'self-center',\n end: 'self-end',\n 'flex-end': 'self-end',\n stretch: 'self-stretch',\n auto: 'self-auto',\n}\n\n/**\n * Maps flex wrap to Tailwind classes\n */\nexport const flexWrapMap: Record<string, string> = {\n nowrap: 'flex-nowrap',\n wrap: 'flex-wrap',\n 'wrap-reverse': 'flex-wrap-reverse',\n}\n\n// =============================================================================\n// Custom Style Value Utilities\n// =============================================================================\n\n/**\n * Convert hex color to RGB components\n */\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const clean = hex.replace(/^#/, '')\n if (clean.length !== 6) return null\n\n const r = parseInt(clean.substring(0, 2), 16)\n const g = parseInt(clean.substring(2, 4), 16)\n const b = parseInt(clean.substring(4, 6), 16)\n\n if (isNaN(r) || isNaN(g) || isNaN(b)) return null\n\n return { r, g, b }\n}\n\n/**\n * Convert ColorValue to CSS rgba string\n */\nexport function colorValueToCSS(color: ColorValue | null | undefined): string | undefined {\n if (!color?.hex) return undefined\n\n const rgb = hexToRgb(color.hex)\n if (!rgb) return color.hex\n\n const opacity = (color.opacity ?? 100) / 100\n\n if (opacity === 1) {\n return color.hex\n }\n\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})`\n}\n\n/**\n * Convert PaddingValue to CSS padding string\n */\nexport function paddingValueToCSS(padding: PaddingValue | null | undefined): string | undefined {\n if (!padding) return undefined\n\n const { top, right, bottom, left, unit } = padding\n\n if (top === right && right === bottom && bottom === left) {\n return `${top}${unit}`\n }\n\n if (top === bottom && left === right) {\n return `${top}${unit} ${right}${unit}`\n }\n\n if (left === right) {\n return `${top}${unit} ${right}${unit} ${bottom}${unit}`\n }\n\n return `${top}${unit} ${right}${unit} ${bottom}${unit} ${left}${unit}`\n}\n\n/**\n * Convert PaddingValue to CSS margin string (same structure, different property)\n */\nexport function marginValueToCSS(margin: PaddingValue | null | undefined): string | undefined {\n if (!margin) return undefined\n\n const { top, right, bottom, left, unit } = margin\n\n if (top === right && right === bottom && bottom === left) {\n return `${top}${unit}`\n }\n\n if (top === bottom && left === right) {\n return `${top}${unit} ${right}${unit}`\n }\n\n if (left === right) {\n return `${top}${unit} ${right}${unit} ${bottom}${unit}`\n }\n\n return `${top}${unit} ${right}${unit} ${bottom}${unit} ${left}${unit}`\n}\n\n/**\n * Convert BorderValue to CSS properties object\n */\nexport function borderValueToCSS(border: BorderValue | null | undefined): React.CSSProperties | undefined {\n if (!border || border.style === 'none') return undefined\n\n const color = colorValueToCSS(border.color) || '#000000'\n const style: React.CSSProperties = {}\n\n if (border.sides.top) {\n style.borderTopWidth = `${border.width}px`\n style.borderTopStyle = border.style\n style.borderTopColor = color\n }\n\n if (border.sides.right) {\n style.borderRightWidth = `${border.width}px`\n style.borderRightStyle = border.style\n style.borderRightColor = color\n }\n\n if (border.sides.bottom) {\n style.borderBottomWidth = `${border.width}px`\n style.borderBottomStyle = border.style\n style.borderBottomColor = color\n }\n\n if (border.sides.left) {\n style.borderLeftWidth = `${border.width}px`\n style.borderLeftStyle = border.style\n style.borderLeftColor = color\n }\n\n if (border.radius > 0) {\n style.borderRadius = `${border.radius}px`\n }\n\n return Object.keys(style).length > 0 ? style : undefined\n}\n\n/**\n * Convert WidthValue to CSS properties object\n */\nexport function widthValueToCSS(width: WidthValue | null | undefined): React.CSSProperties | undefined {\n if (!width) return undefined\n\n const style: React.CSSProperties = {}\n\n if (width.mode === 'full') {\n style.width = '100%'\n style.maxWidth = '100%'\n } else {\n style.maxWidth = `${width.maxWidth}${width.unit}`\n style.width = '100%'\n }\n\n switch (width.alignment) {\n case 'left':\n style.marginLeft = '0'\n style.marginRight = 'auto'\n break\n case 'center':\n style.marginLeft = 'auto'\n style.marginRight = 'auto'\n break\n case 'right':\n style.marginLeft = 'auto'\n style.marginRight = '0'\n break\n }\n\n return style\n}\n\n/**\n * Convert DimensionsValue to CSS properties object\n * Handles both legacy WidthValue and new DimensionsValue formats\n */\nexport function dimensionsValueToCSS(\n dimensions: DimensionsValue | WidthValue | null | undefined\n): React.CSSProperties | undefined {\n if (!dimensions) return undefined\n\n // Handle legacy WidthValue format\n if (isLegacyWidthValue(dimensions)) {\n return widthValueToCSS(dimensions)\n }\n\n const dim = dimensions as DimensionsValue\n const style: React.CSSProperties = {}\n\n // Width handling based on mode\n if (dim.mode === 'full') {\n style.width = '100%'\n style.maxWidth = '100%'\n } else {\n style.width = '100%'\n\n // Max Width (required)\n if (dim.maxWidth?.enabled !== false && dim.maxWidth?.value > 0) {\n style.maxWidth = `${dim.maxWidth.value}${dim.maxWidth.unit}`\n }\n\n // Min Width (optional)\n if (dim.minWidth?.enabled && dim.minWidth.value > 0) {\n style.minWidth = `${dim.minWidth.value}${dim.minWidth.unit}`\n }\n }\n\n // Height handling (applies to all modes)\n if (dim.minHeight?.enabled && dim.minHeight.value > 0) {\n style.minHeight = `${dim.minHeight.value}${dim.minHeight.unit}`\n }\n\n if (dim.maxHeight?.enabled && dim.maxHeight.value > 0) {\n style.maxHeight = `${dim.maxHeight.value}${dim.maxHeight.unit}`\n }\n\n // Alignment (via margin)\n switch (dim.alignment) {\n case 'left':\n style.marginLeft = '0'\n style.marginRight = 'auto'\n break\n case 'center':\n style.marginLeft = 'auto'\n style.marginRight = 'auto'\n break\n case 'right':\n style.marginLeft = 'auto'\n style.marginRight = '0'\n break\n }\n\n return style\n}\n\n/**\n * Get human-readable summary of dimensions\n */\nexport function getDimensionsSummary(dim: DimensionsValue | null | undefined): string {\n if (!dim) return 'auto'\n\n if (dim.mode === 'full') return '100%'\n\n const parts: string[] = []\n\n if (dim.maxWidth?.enabled && dim.maxWidth.value > 0) {\n parts.push(`max: ${dim.maxWidth.value}${dim.maxWidth.unit}`)\n }\n\n if (dim.minWidth?.enabled && dim.minWidth.value > 0) {\n parts.push(`min: ${dim.minWidth.value}${dim.minWidth.unit}`)\n }\n\n if (dim.maxHeight?.enabled && dim.maxHeight.value > 0) {\n parts.push(`h-max: ${dim.maxHeight.value}${dim.maxHeight.unit}`)\n }\n\n if (dim.minHeight?.enabled && dim.minHeight.value > 0) {\n parts.push(`h-min: ${dim.minHeight.value}${dim.minHeight.unit}`)\n }\n\n return parts.length > 0 ? parts.join(' | ') : 'auto'\n}\n\n/**\n * Combined style generator for layout components\n */\nexport function getCustomStyleObject(options: {\n backgroundColor?: ColorValue | null\n textColor?: ColorValue | null\n padding?: PaddingValue | null\n margin?: PaddingValue | null\n border?: BorderValue | null\n width?: WidthValue | null\n}): React.CSSProperties {\n const style: React.CSSProperties = {}\n\n const bgColor = colorValueToCSS(options.backgroundColor)\n if (bgColor) {\n style.backgroundColor = bgColor\n }\n\n const txtColor = colorValueToCSS(options.textColor)\n if (txtColor) {\n style.color = txtColor\n }\n\n const paddingCSS = paddingValueToCSS(options.padding)\n if (paddingCSS) {\n style.padding = paddingCSS\n }\n\n const marginCSS = marginValueToCSS(options.margin)\n if (marginCSS) {\n style.margin = marginCSS\n }\n\n const borderCSS = borderValueToCSS(options.border)\n if (borderCSS) {\n Object.assign(style, borderCSS)\n }\n\n const widthCSS = widthValueToCSS(options.width)\n if (widthCSS) {\n Object.assign(style, widthCSS)\n }\n\n return style\n}\n\n/**\n * Convert GradientValue to CSS gradient string\n */\nexport function gradientValueToCSS(gradient: GradientValue | null | undefined): string {\n if (!gradient?.stops || gradient.stops.length === 0) {\n return 'transparent'\n }\n\n // Sort stops by position\n const sortedStops = [...gradient.stops].sort((a, b) => a.position - b.position)\n\n // Convert stops to CSS format\n const stopsCSS = sortedStops\n .map((stop) => {\n const color = colorValueToCSS(stop.color) || 'transparent'\n return `${color} ${stop.position}%`\n })\n .join(', ')\n\n if (gradient.type === 'radial') {\n const shape = gradient.radialShape || 'circle'\n const position = gradient.radialPosition || 'center'\n return `radial-gradient(${shape} at ${position}, ${stopsCSS})`\n }\n\n // Linear gradient\n return `linear-gradient(${gradient.angle}deg, ${stopsCSS})`\n}\n\n/**\n * Convert position value to CSS background-position\n */\nfunction positionToCSS(\n position: BackgroundImageValue['position'] | undefined\n): string {\n const positionMap: Record<NonNullable<BackgroundImageValue['position']>, string> = {\n center: 'center',\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right',\n 'top-left': 'top left',\n 'top-right': 'top right',\n 'bottom-left': 'bottom left',\n 'bottom-right': 'bottom right',\n }\n return position ? positionMap[position] || 'center' : 'center'\n}\n\n/**\n * Convert GradientMask direction to CSS gradient direction\n */\nfunction maskDirectionToCSS(direction: GradientMask['direction']): string {\n const directionMap: Record<GradientMask['direction'], string> = {\n 'to-top': 'to top',\n 'to-bottom': 'to bottom',\n 'to-left': 'to left',\n 'to-right': 'to right',\n 'to-top-left': 'to top left',\n 'to-top-right': 'to top right',\n 'to-bottom-left': 'to bottom left',\n 'to-bottom-right': 'to bottom right',\n 'from-center': 'radial', // Not used for linear, handled separately in maskToCSS\n }\n return directionMap[direction] || 'to bottom'\n}\n\n/**\n * Convert GradientMask to CSS mask-image string\n */\nfunction maskToCSS(mask: GradientMask): string {\n const startAlpha = (mask.startOpacity ?? 100) / 100\n const endAlpha = (mask.endOpacity ?? 0) / 100\n\n // Handle radial gradient for \"from-center\"\n if (mask.direction === 'from-center') {\n return `radial-gradient(circle at center, rgba(0,0,0,${startAlpha}) ${mask.startPosition}%, rgba(0,0,0,${endAlpha}) ${mask.endPosition}%)`\n }\n\n // Linear gradient for directional fades\n const direction = maskDirectionToCSS(mask.direction)\n return `linear-gradient(${direction}, rgba(0,0,0,${startAlpha}) ${mask.startPosition}%, rgba(0,0,0,${endAlpha}) ${mask.endPosition}%)`\n}\n\n/**\n * Result of background CSS conversion\n * Includes both styles and metadata for consumer components\n */\nexport interface BackgroundCSSResult {\n /** CSS properties to apply directly */\n styles: React.CSSProperties\n /** Image opacity (0-1) - consumer should apply via wrapper if needed */\n imageOpacity?: number\n}\n\n/**\n * Convert BackgroundValue to CSS properties object\n * Returns both styles and metadata for advanced features like image opacity\n */\nexport function backgroundValueToCSS(\n bg: BackgroundValue | null | undefined\n): React.CSSProperties {\n if (!bg || bg.type === 'none') {\n return {}\n }\n\n const style: React.CSSProperties = {}\n\n switch (bg.type) {\n case 'solid':\n if (bg.solid?.hex) {\n style.backgroundColor = colorValueToCSS(bg.solid)\n }\n break\n\n case 'gradient':\n if (bg.gradient && bg.gradient.stops && bg.gradient.stops.length > 0) {\n style.background = gradientValueToCSS(bg.gradient)\n }\n break\n\n case 'image':\n if (bg.image?.media?.url) {\n const imageUrl = bg.image.media.url\n const size = bg.image.size || 'cover'\n const position = positionToCSS(bg.image.position)\n const repeat = bg.image.repeat || 'no-repeat'\n const attachment = bg.image.attachment || 'scroll'\n\n // Check if overlay is enabled\n if (bg.overlay?.enabled) {\n // Layer overlay on top of image using CSS multiple backgrounds\n // Use only backgroundImage to avoid shorthand/longhand conflicts\n const overlayCSS =\n bg.overlay.type === 'solid'\n ? colorValueToCSS(bg.overlay.solid)\n : gradientValueToCSS(bg.overlay.gradient)\n\n // CSS background layering: first layer is on top\n // For solid color overlay, we need to use a gradient to make it a proper layer\n if (bg.overlay.type === 'solid' && overlayCSS) {\n style.backgroundImage = `linear-gradient(${overlayCSS}, ${overlayCSS}), url(${imageUrl})`\n } else {\n style.backgroundImage = `${overlayCSS}, url(${imageUrl})`\n }\n // Use comma-separated values for each layer\n style.backgroundSize = `auto, ${size}`\n style.backgroundPosition = `center, ${position}`\n style.backgroundRepeat = `no-repeat, ${repeat}`\n style.backgroundAttachment = `scroll, ${attachment}`\n } else {\n // No overlay, just the image\n style.backgroundImage = `url(${imageUrl})`\n style.backgroundSize = size\n style.backgroundPosition = position\n style.backgroundRepeat = repeat\n style.backgroundAttachment = attachment\n }\n\n // Apply gradient mask if enabled\n if (bg.image.mask?.enabled) {\n const maskCSS = maskToCSS(bg.image.mask)\n style.maskImage = maskCSS\n // Webkit prefix for Safari support\n ;(style as Record<string, string>).WebkitMaskImage = maskCSS\n }\n }\n break\n }\n\n return style\n}\n\n/**\n * Get image opacity from BackgroundValue (for consumer wrapper components)\n * Returns undefined if no image or opacity is 100%\n */\nexport function getBackgroundImageOpacity(\n bg: BackgroundValue | null | undefined\n): number | undefined {\n if (!bg || bg.type !== 'image' || !bg.image) return undefined\n const opacity = bg.image.opacity ?? 100\n return opacity < 100 ? opacity / 100 : undefined\n}\n\n/**\n * Check if any custom style values are set\n */\nexport function hasCustomStyles(options: {\n backgroundColor?: ColorValue | null\n textColor?: ColorValue | null\n padding?: PaddingValue | null\n margin?: PaddingValue | null\n border?: BorderValue | null\n width?: WidthValue | null\n}): boolean {\n return !!(\n options.backgroundColor?.hex ||\n options.textColor?.hex ||\n options.padding ||\n options.margin ||\n (options.border && options.border.style !== 'none') ||\n options.width\n )\n}\n\n// =============================================================================\n// Transform Types\n// =============================================================================\n\nexport type TransformOrigin =\n | 'center'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n\nexport interface TransformValue {\n rotate: number // -360 to 360\n scaleX: number // 0.1 to 3\n scaleY: number // 0.1 to 3\n scaleLocked: boolean // When true, X and Y sync\n skewX: number // -45 to 45\n skewY: number // -45 to 45\n translateX: number\n translateY: number\n translateUnit: 'px' | 'rem' | '%'\n origin: TransformOrigin\n\n // Optional 3D\n enable3D: boolean\n perspective?: number // 100-2000px\n rotateX?: number // -180 to 180\n rotateY?: number // -180 to 180\n}\n\n/**\n * Default transform value\n */\nexport const DEFAULT_TRANSFORM: TransformValue = {\n rotate: 0,\n scaleX: 1,\n scaleY: 1,\n scaleLocked: true,\n skewX: 0,\n skewY: 0,\n translateX: 0,\n translateY: 0,\n translateUnit: 'px',\n origin: 'center',\n enable3D: false,\n perspective: 1000,\n rotateX: 0,\n rotateY: 0,\n}\n\n/**\n * Convert TransformOrigin to CSS transform-origin value\n */\nfunction transformOriginToCSS(origin: TransformOrigin): string {\n const originMap: Record<TransformOrigin, string> = {\n center: 'center',\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right',\n 'top-left': 'top left',\n 'top-right': 'top right',\n 'bottom-left': 'bottom left',\n 'bottom-right': 'bottom right',\n }\n return originMap[origin] || 'center'\n}\n\n/**\n * Convert TransformValue to CSS properties object\n */\nexport function transformValueToCSS(\n transform: TransformValue | null | undefined\n): React.CSSProperties | undefined {\n if (!transform) return undefined\n\n const style: React.CSSProperties = {}\n const transforms: string[] = []\n\n // Handle 3D perspective\n if (transform.enable3D && transform.perspective) {\n style.perspective = `${transform.perspective}px`\n }\n\n // Build transform string\n // Translate\n if (transform.translateX !== 0 || transform.translateY !== 0) {\n transforms.push(\n `translate(${transform.translateX}${transform.translateUnit}, ${transform.translateY}${transform.translateUnit})`\n )\n }\n\n // Rotate (2D)\n if (transform.rotate !== 0) {\n transforms.push(`rotate(${transform.rotate}deg)`)\n }\n\n // 3D rotations\n if (transform.enable3D) {\n if (transform.rotateX && transform.rotateX !== 0) {\n transforms.push(`rotateX(${transform.rotateX}deg)`)\n }\n if (transform.rotateY && transform.rotateY !== 0) {\n transforms.push(`rotateY(${transform.rotateY}deg)`)\n }\n }\n\n // Scale\n if (transform.scaleX !== 1 || transform.scaleY !== 1) {\n if (transform.scaleX === transform.scaleY) {\n transforms.push(`scale(${transform.scaleX})`)\n } else {\n transforms.push(`scale(${transform.scaleX}, ${transform.scaleY})`)\n }\n }\n\n // Skew\n if (transform.skewX !== 0 || transform.skewY !== 0) {\n if (transform.skewX !== 0 && transform.skewY !== 0) {\n transforms.push(`skew(${transform.skewX}deg, ${transform.skewY}deg)`)\n } else if (transform.skewX !== 0) {\n transforms.push(`skewX(${transform.skewX}deg)`)\n } else {\n transforms.push(`skewY(${transform.skewY}deg)`)\n }\n }\n\n // Apply transform if we have any\n if (transforms.length > 0) {\n style.transform = transforms.join(' ')\n }\n\n // Transform origin\n if (transform.origin !== 'center') {\n style.transformOrigin = transformOriginToCSS(transform.origin)\n }\n\n // Add transform-style for 3D\n if (transform.enable3D) {\n style.transformStyle = 'preserve-3d'\n }\n\n return Object.keys(style).length > 0 ? style : undefined\n}\n\n// =============================================================================\n// Responsive Field Types\n// =============================================================================\n\nexport type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\n/**\n * Responsive value that can have different values at different breakpoints.\n * XS (extra small) is required, other breakpoints are optional overrides.\n */\nexport interface ResponsiveValue<T> {\n xs: T\n sm?: T\n md?: T\n lg?: T\n xl?: T\n}\n\n/**\n * Breakpoint configuration with labels and pixel values\n */\nexport const BREAKPOINTS: Array<{\n key: Breakpoint\n label: string\n minWidth: number | null\n}> = [\n { key: 'xs', label: 'XS', minWidth: null },\n { key: 'sm', label: 'SM', minWidth: 640 },\n { key: 'md', label: 'MD', minWidth: 768 },\n { key: 'lg', label: 'LG', minWidth: 1024 },\n { key: 'xl', label: 'XL', minWidth: 1280 },\n]\n\n// =============================================================================\n// Responsive CSS Helpers\n// =============================================================================\n\n/**\n * Type guard to check if a value is a ResponsiveValue (has breakpoint structure)\n */\nexport function isResponsiveValue<T>(value: unknown): value is ResponsiveValue<T> {\n if (!value || typeof value !== 'object') return false\n return 'xs' in value\n}\n\n/**\n * Converts a camelCase property name to kebab-case CSS property\n */\nfunction camelToKebab(str: string): string {\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)\n}\n\n/**\n * Converts React.CSSProperties to a CSS string for use in style tags\n */\nexport function cssPropertiesToString(styles: React.CSSProperties): string {\n return Object.entries(styles)\n .filter(([, value]) => value !== undefined && value !== null && value !== '')\n .map(([key, value]) => `${camelToKebab(key)}: ${value}`)\n .join('; ')\n}\n\n/**\n * Result of converting a responsive value to CSS\n */\nexport interface ResponsiveCSSResult {\n /** Base styles to apply as inline styles */\n baseStyles: React.CSSProperties\n /** CSS media queries to render in a <style> tag */\n mediaQueryCSS: string\n}\n\n/**\n * Converts a ResponsiveValue to CSS with media queries.\n * Works with any value type that has a CSS converter function.\n *\n * @param value - The responsive or non-responsive value\n * @param converter - Function to convert the value type to CSSProperties\n * @param uniqueId - Unique class name for targeting in media queries\n * @returns Object with baseStyles (inline) and mediaQueryCSS (for <style> tag)\n *\n * @example\n * ```tsx\n * const { baseStyles, mediaQueryCSS } = responsiveValueToCSS(\n * dimensions,\n * dimensionsValueToCSS,\n * 'container-abc123'\n * )\n *\n * return (\n * <>\n * {mediaQueryCSS && <style>{mediaQueryCSS}</style>}\n * <div className=\"container-abc123\" style={baseStyles}>...</div>\n * </>\n * )\n * ```\n */\nexport function responsiveValueToCSS<T>(\n value: ResponsiveValue<T> | T | null | undefined,\n converter: (v: T) => React.CSSProperties | undefined,\n uniqueId: string\n): ResponsiveCSSResult {\n // Handle null/undefined\n if (value === null || value === undefined) {\n return { baseStyles: {}, mediaQueryCSS: '' }\n }\n\n // If not responsive (single value), return as base styles only\n if (!isResponsiveValue<T>(value)) {\n const styles = converter(value as T)\n return {\n baseStyles: styles || {},\n mediaQueryCSS: '',\n }\n }\n\n // Generate media queries for each breakpoint\n const mediaQueries: string[] = []\n let baseStyles: React.CSSProperties = {}\n\n BREAKPOINTS.forEach((bp) => {\n const bpValue = value[bp.key]\n if (bpValue === undefined) return\n\n const cssProps = converter(bpValue)\n if (!cssProps) return\n\n if (bp.key === 'xs') {\n baseStyles = cssProps\n } else {\n const styleString = cssPropertiesToString(cssProps)\n if (styleString) {\n mediaQueries.push(\n `@media (min-width: ${bp.minWidth}px) { .${uniqueId} { ${styleString} } }`\n )\n }\n }\n })\n\n return { baseStyles, mediaQueryCSS: mediaQueries.join('\\n') }\n}\n\n/**\n * Visibility value for show/hide per breakpoint\n */\nexport interface VisibilityValue {\n /** XS (extra small) visibility - true = visible, false = hidden (default: true) */\n xs: boolean\n /** Small screens (640px+) */\n sm?: boolean\n /** Override for medium screens (768px+) */\n md?: boolean\n /** Override for large screens (1024px+) */\n lg?: boolean\n /** Override for extra large screens (1280px+) */\n xl?: boolean\n}\n\n/**\n * Default visibility value (visible at all breakpoints)\n */\nexport const DEFAULT_VISIBILITY: VisibilityValue = {\n xs: true,\n sm: true,\n md: true,\n lg: true,\n xl: true,\n}\n\n/**\n * Converts a VisibilityValue to CSS with display: none media queries.\n * Each breakpoint is independent - generates targeted media queries for hidden breakpoints.\n *\n * @param visibility - The visibility settings per breakpoint\n * @param uniqueId - Unique class name for targeting in media queries\n * @returns CSS media queries string for hiding at specific breakpoints\n */\nexport function visibilityValueToCSS(\n visibility: VisibilityValue | null | undefined,\n uniqueId: string\n): string {\n if (!visibility) return ''\n\n const mediaQueries: string[] = []\n\n // Breakpoint min-widths for range calculations\n const breakpointWidths: Record<Breakpoint, number | null> = {\n xs: null, // 0px\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n }\n\n // Get next breakpoint's min-width for max-width calculation\n const getNextBreakpointWidth = (bp: Breakpoint): number | null => {\n const order: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl']\n const index = order.indexOf(bp)\n if (index === -1 || index === order.length - 1) return null\n return breakpointWidths[order[index + 1]]\n }\n\n // XS (0 to 639px)\n if (visibility.xs === false) {\n const nextWidth = getNextBreakpointWidth('xs')\n if (nextWidth) {\n mediaQueries.push(`@media (max-width: ${nextWidth - 1}px) { .${uniqueId} { display: none; } }`)\n } else {\n mediaQueries.push(`.${uniqueId} { display: none; }`)\n }\n }\n\n // Other breakpoints (sm, md, lg, xl)\n BREAKPOINTS.slice(1).forEach((bp) => {\n if (visibility[bp.key] === false) {\n const minWidth = breakpointWidths[bp.key]\n const maxWidth = getNextBreakpointWidth(bp.key)\n\n if (minWidth && maxWidth) {\n // Range query (e.g., sm: 640-767px)\n mediaQueries.push(\n `@media (min-width: ${minWidth}px) and (max-width: ${maxWidth - 1}px) { .${uniqueId} { display: none; } }`\n )\n } else if (minWidth) {\n // Last breakpoint (xl: 1280px+)\n mediaQueries.push(\n `@media (min-width: ${minWidth}px) { .${uniqueId} { display: none; } }`\n )\n }\n }\n })\n\n return mediaQueries.join('\\n')\n}\n\n// =============================================================================\n// Animation Types\n// =============================================================================\n\n/** Standard CSS easing functions */\nexport type EasingFunction = 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out'\n\n/** Advanced easing with spring/bounce effects via cubic-bezier approximations */\nexport type AdvancedEasingFunction =\n | EasingFunction\n | 'spring'\n | 'spring-gentle'\n | 'bounce'\n | 'bounce-in'\n | 'bounce-out'\n | 'back-in'\n | 'back-out'\n | 'back-in-out'\n | 'elastic'\n\n/** Map advanced easing to CSS cubic-bezier values */\nexport const EASING_CSS_MAP: Record<AdvancedEasingFunction, string> = {\n linear: 'linear',\n ease: 'ease',\n 'ease-in': 'ease-in',\n 'ease-out': 'ease-out',\n 'ease-in-out': 'ease-in-out',\n spring: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n 'spring-gentle': 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\n 'bounce-in': 'cubic-bezier(0.6, -0.28, 0.735, 0.045)',\n 'bounce-out': 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n 'back-in': 'cubic-bezier(0.6, -0.28, 0.735, 0.045)',\n 'back-out': 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n 'back-in-out': 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\n elastic: 'cubic-bezier(0.68, -0.6, 0.32, 1.6)',\n}\n\n/** Transform origin for animations (3x3 grid) */\nexport type AnimationOrigin =\n | 'center'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n\n/** Stagger direction for child animations */\nexport type StaggerDirection = 'forward' | 'reverse' | 'center' | 'edges'\n\n/** Configuration for staggered child animations */\nexport interface StaggerConfig {\n enabled: boolean\n /** Delay between each child element (ms) */\n delay: number\n /** Maximum total delay to prevent very long animations */\n maxDelay?: number\n /** Direction of stagger effect */\n direction: StaggerDirection\n}\n\n/** Animation categories for UI organization */\nexport type AnimationCategory =\n | 'fade'\n | 'scale'\n | 'slide'\n | 'blur'\n | 'rotate'\n | 'bounce'\n | 'flip'\n | 'zoom'\n\n/**\n * Extended entrance animation presets (27 total)\n * Organized by category for the UI dropdown\n */\nexport type EntranceAnimation =\n // None\n | 'none'\n // Fade (6)\n | 'fade-in'\n | 'fade-up'\n | 'fade-down'\n | 'fade-left'\n | 'fade-right'\n | 'fade-scale'\n // Scale (4)\n | 'scale-in'\n | 'scale-up'\n | 'scale-down'\n | 'scale-out'\n // Slide (4)\n | 'slide-up'\n | 'slide-down'\n | 'slide-left'\n | 'slide-right'\n // Blur (3)\n | 'blur-in'\n | 'blur-up'\n | 'blur-down'\n // Rotate (3)\n | 'rotate-in'\n | 'rotate-up'\n | 'rotate-down'\n // Bounce (3)\n | 'bounce-in'\n | 'bounce-up'\n | 'bounce-down'\n // Flip (2)\n | 'flip-x'\n | 'flip-y'\n // Zoom (2)\n | 'zoom-in'\n | 'zoom-out'\n\n/**\n * Animation presets organized by category for UI\n */\nexport const ANIMATION_CATEGORIES: Array<{\n category: AnimationCategory | 'none'\n label: string\n animations: EntranceAnimation[]\n}> = [\n { category: 'none', label: 'None', animations: ['none'] },\n { category: 'fade', label: 'Fade', animations: ['fade-in', 'fade-up', 'fade-down', 'fade-left', 'fade-right', 'fade-scale'] },\n { category: 'scale', label: 'Scale', animations: ['scale-in', 'scale-up', 'scale-down', 'scale-out'] },\n { category: 'slide', label: 'Slide', animations: ['slide-up', 'slide-down', 'slide-left', 'slide-right'] },\n { category: 'blur', label: 'Blur', animations: ['blur-in', 'blur-up', 'blur-down'] },\n { category: 'rotate', label: 'Rotate', animations: ['rotate-in', 'rotate-up', 'rotate-down'] },\n { category: 'bounce', label: 'Bounce', animations: ['bounce-in', 'bounce-up', 'bounce-down'] },\n { category: 'flip', label: 'Flip', animations: ['flip-x', 'flip-y'] },\n { category: 'zoom', label: 'Zoom', animations: ['zoom-in', 'zoom-out'] },\n]\n\nexport interface AnimationValue {\n mode: 'preset' | 'custom'\n\n // Preset mode\n entrance?: EntranceAnimation\n entranceDuration?: number // ms\n entranceDelay?: number // ms\n\n // Intensity controls (context-aware based on animation type)\n /** Distance for translate animations (8-200px) */\n distance?: number\n /** Starting scale for scale animations (0.1-2) */\n scaleFrom?: number\n /** Rotation angle for rotate animations (-180 to 180deg) */\n rotateAngle?: number\n /** Blur amount for blur animations (0-50px) */\n blurAmount?: number\n\n // Transform origin (affects scale/rotate)\n origin?: AnimationOrigin\n\n // Advanced easing\n easing?: AdvancedEasingFunction\n\n // Stagger for child elements\n stagger?: StaggerConfig\n\n // Custom transition mode\n duration?: number // 0-2000ms\n delay?: number // 0-2000ms\n\n // Scroll trigger\n triggerOnScroll?: boolean\n triggerThreshold?: number // 0-1\n triggerOnce?: boolean\n /** Margin around viewport for earlier/later triggering (e.g., \"0px 0px -100px 0px\") */\n triggerMargin?: string\n}\n\n// =============================================================================\n// Animation CSS Utilities\n// =============================================================================\n\n/**\n * Convert AnimationOrigin to CSS transform-origin value\n */\nfunction animationOriginToCSS(origin: AnimationOrigin | undefined): string {\n if (!origin) return 'center'\n const originMap: Record<AnimationOrigin, string> = {\n center: 'center',\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right',\n 'top-left': 'top left',\n 'top-right': 'top right',\n 'bottom-left': 'bottom left',\n 'bottom-right': 'bottom right',\n }\n return originMap[origin] || 'center'\n}\n\n/**\n * Convert AnimationValue to CSS transition property (for custom mode)\n * Returns undefined for preset mode - use getEntranceAnimationStyles instead\n */\nexport function animationValueToCSS(anim: AnimationValue | null): React.CSSProperties | undefined {\n if (!anim || anim.mode !== 'custom') return undefined\n\n const duration = anim.duration ?? 300\n const delay = anim.delay ?? 0\n const easing = anim.easing ?? 'ease'\n const easingCSS = EASING_CSS_MAP[easing] || 'ease'\n\n return {\n transition: `all ${duration}ms ${easingCSS} ${delay}ms`,\n transitionProperty: 'opacity, transform, filter, background-color, color, border-color, box-shadow',\n }\n}\n\n/**\n * Get initial and animate styles for entrance animations\n * Returns inline CSS style objects that work without Tailwind compilation\n * Supports all 27 animation presets with customizable intensity\n */\nexport function getEntranceAnimationStyles(anim: AnimationValue | null): {\n initial: React.CSSProperties\n animate: React.CSSProperties\n duration: number\n delay: number\n easing: string\n origin: string\n} {\n const defaultResult = {\n initial: {} as React.CSSProperties,\n animate: {} as React.CSSProperties,\n duration: 500,\n delay: 0,\n easing: 'ease',\n origin: 'center',\n }\n\n if (!anim || anim.mode !== 'preset' || anim.entrance === 'none') {\n return defaultResult\n }\n\n const duration = anim.entranceDuration ?? 500\n const delay = anim.entranceDelay ?? 0\n const easing = EASING_CSS_MAP[anim.easing ?? 'ease'] || 'ease'\n const origin = animationOriginToCSS(anim.origin)\n\n // Intensity values with defaults\n const distance = anim.distance ?? 24 // px\n const scaleFrom = anim.scaleFrom ?? 0.9\n const rotateAngle = anim.rotateAngle ?? 15 // degrees\n const blurAmount = anim.blurAmount ?? 8 // px\n\n // Build animation styles based on preset\n const entrance = anim.entrance ?? 'none'\n\n let initial: React.CSSProperties = {}\n let animate: React.CSSProperties = {}\n\n switch (entrance) {\n // ==================== FADE (6) ====================\n case 'fade-in':\n initial = { opacity: 0 }\n animate = { opacity: 1 }\n break\n\n case 'fade-up':\n initial = { opacity: 0, transform: `translateY(${distance}px)` }\n animate = { opacity: 1, transform: 'translateY(0)' }\n break\n\n case 'fade-down':\n initial = { opacity: 0, transform: `translateY(-${distance}px)` }\n animate = { opacity: 1, transform: 'translateY(0)' }\n break\n\n case 'fade-left':\n initial = { opacity: 0, transform: `translateX(${distance}px)` }\n animate = { opacity: 1, transform: 'translateX(0)' }\n break\n\n case 'fade-right':\n initial = { opacity: 0, transform: `translateX(-${distance}px)` }\n animate = { opacity: 1, transform: 'translateX(0)' }\n break\n\n case 'fade-scale':\n initial = { opacity: 0, transform: `scale(${scaleFrom})` }\n animate = { opacity: 1, transform: 'scale(1)' }\n break\n\n // ==================== SCALE (4) ====================\n case 'scale-in':\n initial = { opacity: 0, transform: `scale(${scaleFrom})` }\n animate = { opacity: 1, transform: 'scale(1)' }\n break\n\n case 'scale-up':\n initial = { opacity: 0, transform: `scale(${scaleFrom}) translateY(${distance}px)` }\n animate = { opacity: 1, transform: 'scale(1) translateY(0)' }\n break\n\n case 'scale-down':\n initial = { opacity: 0, transform: `scale(${scaleFrom}) translateY(-${distance}px)` }\n animate = { opacity: 1, transform: 'scale(1) translateY(0)' }\n break\n\n case 'scale-out':\n // Scales from larger to normal\n initial = { opacity: 0, transform: `scale(${2 - scaleFrom})` }\n animate = { opacity: 1, transform: 'scale(1)' }\n break\n\n // ==================== SLIDE (4) ====================\n case 'slide-up':\n initial = { transform: `translateY(${distance}px)` }\n animate = { transform: 'translateY(0)' }\n break\n\n case 'slide-down':\n initial = { transform: `translateY(-${distance}px)` }\n animate = { transform: 'translateY(0)' }\n break\n\n case 'slide-left':\n initial = { transform: `translateX(${distance}px)` }\n animate = { transform: 'translateX(0)' }\n break\n\n case 'slide-right':\n initial = { transform: `translateX(-${distance}px)` }\n animate = { transform: 'translateX(0)' }\n break\n\n // ==================== BLUR (3) ====================\n case 'blur-in':\n initial = { opacity: 0, filter: `blur(${blurAmount}px)` }\n animate = { opacity: 1, filter: 'blur(0)' }\n break\n\n case 'blur-up':\n initial = { opacity: 0, filter: `blur(${blurAmount}px)`, transform: `translateY(${distance}px)` }\n animate = { opacity: 1, filter: 'blur(0)', transform: 'translateY(0)' }\n break\n\n case 'blur-down':\n initial = { opacity: 0, filter: `blur(${blurAmount}px)`, transform: `translateY(-${distance}px)` }\n animate = { opacity: 1, filter: 'blur(0)', transform: 'translateY(0)' }\n break\n\n // ==================== ROTATE (3) ====================\n case 'rotate-in':\n initial = { opacity: 0, transform: `rotate(${rotateAngle}deg) scale(${scaleFrom})` }\n animate = { opacity: 1, transform: 'rotate(0) scale(1)' }\n break\n\n case 'rotate-up':\n initial = { opacity: 0, transform: `rotate(${rotateAngle}deg) translateY(${distance}px)` }\n animate = { opacity: 1, transform: 'rotate(0) translateY(0)' }\n break\n\n case 'rotate-down':\n initial = { opacity: 0, transform: `rotate(-${rotateAngle}deg) translateY(-${distance}px)` }\n animate = { opacity: 1, transform: 'rotate(0) translateY(0)' }\n break\n\n // ==================== BOUNCE (3) ====================\n // These use spring/bounce easing by default for the effect\n case 'bounce-in':\n initial = { opacity: 0, transform: `scale(${scaleFrom * 0.8})` }\n animate = { opacity: 1, transform: 'scale(1)' }\n break\n\n case 'bounce-up':\n initial = { opacity: 0, transform: `translateY(${distance * 1.5}px)` }\n animate = { opacity: 1, transform: 'translateY(0)' }\n break\n\n case 'bounce-down':\n initial = { opacity: 0, transform: `translateY(-${distance * 1.5}px)` }\n animate = { opacity: 1, transform: 'translateY(0)' }\n break\n\n // ==================== FLIP (2) ====================\n // Flip uses perspective in transform for proper 3D effect\n // Starts from -90deg (tilted back) so the flip motion is visible\n case 'flip-x':\n initial = {\n transform: 'perspective(1000px) rotateX(-90deg)',\n opacity: 0.2,\n backfaceVisibility: 'hidden',\n }\n animate = {\n transform: 'perspective(1000px) rotateX(0deg)',\n opacity: 1,\n backfaceVisibility: 'hidden',\n }\n break\n\n case 'flip-y':\n initial = {\n transform: 'perspective(1000px) rotateY(-90deg)',\n opacity: 0.2,\n backfaceVisibility: 'hidden',\n }\n animate = {\n transform: 'perspective(1000px) rotateY(0deg)',\n opacity: 1,\n backfaceVisibility: 'hidden',\n }\n break\n\n // ==================== ZOOM (2) ====================\n case 'zoom-in':\n // Starts small, zooms to full size\n initial = { opacity: 0, transform: `scale(${scaleFrom * 0.5})` }\n animate = { opacity: 1, transform: 'scale(1)' }\n break\n\n case 'zoom-out':\n // Starts large, zooms down to full size\n initial = { opacity: 0, transform: `scale(${2.5 - scaleFrom})` }\n animate = { opacity: 1, transform: 'scale(1)' }\n break\n\n default:\n break\n }\n\n return {\n initial,\n animate,\n duration,\n delay,\n easing,\n origin,\n }\n}\n\n/**\n * Get default easing for animation category\n * Bounce animations default to bounce easing, etc.\n */\nexport function getDefaultEasingForAnimation(entrance: EntranceAnimation): AdvancedEasingFunction {\n if (entrance.startsWith('bounce-')) return 'bounce'\n if (entrance.startsWith('flip-')) return 'back-out'\n if (entrance.startsWith('zoom-')) return 'ease-out'\n return 'ease'\n}\n\n/**\n * Get CSS custom properties for animation timing\n * Useful for CSS-only animations with custom properties\n */\nexport function getAnimationCSSVariables(anim: AnimationValue | null): Record<string, string> {\n if (!anim) return {}\n\n const isPreset = anim.mode === 'preset'\n const duration = isPreset ? (anim.entranceDuration ?? 500) : (anim.duration ?? 300)\n const delay = isPreset ? (anim.entranceDelay ?? 0) : (anim.delay ?? 0)\n const easing = anim.easing ?? 'ease'\n const easingCSS = EASING_CSS_MAP[easing] || 'ease'\n\n return {\n '--animation-duration': `${duration}ms`,\n '--animation-delay': `${delay}ms`,\n '--animation-easing': easingCSS,\n }\n}\n\n/**\n * Generate stagger delay for a specific child index\n * Accounts for direction (forward, reverse, center, edges)\n */\nexport function getStaggerDelay(config: StaggerConfig, index: number, totalChildren: number): number {\n if (!config.enabled || totalChildren <= 1) return 0\n\n let effectiveIndex: number\n\n switch (config.direction) {\n case 'forward':\n effectiveIndex = index\n break\n case 'reverse':\n effectiveIndex = totalChildren - 1 - index\n break\n case 'center': {\n // Center starts from middle, animates outward\n const center = (totalChildren - 1) / 2\n effectiveIndex = Math.abs(index - center)\n break\n }\n case 'edges': {\n // Edges starts from outside, animates inward\n const center = (totalChildren - 1) / 2\n effectiveIndex = center - Math.abs(index - center)\n break\n }\n default:\n effectiveIndex = index\n }\n\n const delay = effectiveIndex * config.delay\n\n // Cap at max delay if specified\n if (config.maxDelay && delay > config.maxDelay) {\n return config.maxDelay\n }\n\n return delay\n}\n\n/**\n * Generate CSS styles for staggered children\n * Returns an object with CSS custom properties for each child\n */\nexport function generateStaggerStyles(\n config: StaggerConfig | undefined,\n totalChildren: number\n): React.CSSProperties[] {\n if (!config?.enabled || totalChildren <= 1) {\n return Array(totalChildren).fill({})\n }\n\n return Array.from({ length: totalChildren }, (_, i) => {\n const delay = getStaggerDelay(config, i, totalChildren)\n return {\n '--stagger-delay': `${delay}ms`,\n transitionDelay: `${delay}ms`,\n } as React.CSSProperties\n })\n}\n\n/**\n * Check which intensity controls are relevant for an animation type\n */\nexport function getRelevantIntensityControls(entrance: EntranceAnimation): {\n showDistance: boolean\n showScale: boolean\n showRotate: boolean\n showBlur: boolean\n} {\n const hasTranslate = [\n 'fade-up', 'fade-down', 'fade-left', 'fade-right',\n 'scale-up', 'scale-down',\n 'slide-up', 'slide-down', 'slide-left', 'slide-right',\n 'blur-up', 'blur-down',\n 'rotate-up', 'rotate-down',\n 'bounce-up', 'bounce-down',\n ].includes(entrance)\n\n const hasScale = [\n 'fade-scale',\n 'scale-in', 'scale-up', 'scale-down', 'scale-out',\n 'rotate-in',\n 'bounce-in',\n 'zoom-in', 'zoom-out',\n ].includes(entrance)\n\n const hasRotate = [\n 'rotate-in', 'rotate-up', 'rotate-down',\n ].includes(entrance)\n\n const hasBlur = [\n 'blur-in', 'blur-up', 'blur-down',\n ].includes(entrance)\n\n return {\n showDistance: hasTranslate,\n showScale: hasScale,\n showRotate: hasRotate,\n showBlur: hasBlur,\n }\n}\n\n/**\n * Default animation value\n */\nexport const DEFAULT_ANIMATION: AnimationValue = {\n mode: 'preset',\n entrance: 'none',\n entranceDuration: 500,\n entranceDelay: 0,\n distance: 24,\n scaleFrom: 0.9,\n rotateAngle: 15,\n blurAmount: 8,\n origin: 'center',\n easing: 'ease',\n triggerOnScroll: true,\n triggerThreshold: 0.1,\n triggerOnce: true,\n}\n\n// =============================================================================\n// Layout Components Disallow List (prevent recursion in slots)\n// =============================================================================\n\nexport const layoutComponentsDisallow = [\n 'Container',\n 'Flex',\n 'Grid',\n 'Section',\n]\n\n","'use client'\n\n/**\n * useScrollAnimation - Hook for scroll-triggered animations\n *\n * Uses IntersectionObserver to detect when an element enters the viewport.\n * Perfect for triggering entrance animations, lazy loading, or scroll-based effects.\n */\n\nimport { useRef, useState, useEffect, useCallback } from 'react'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseScrollAnimationOptions {\n /**\n * Whether to trigger animation on scroll into view.\n * If false, isInView will always be true.\n * @default true\n */\n triggerOnScroll?: boolean\n\n /**\n * Threshold for intersection (0-1).\n * 0 = trigger as soon as any pixel is visible.\n * 1 = trigger only when fully visible.\n * @default 0.1\n */\n threshold?: number\n\n /**\n * Whether to only trigger once.\n * If true, hasAnimated will stay true after first trigger.\n * @default true\n */\n once?: boolean\n\n /**\n * Root margin for intersection observer.\n * Allows triggering before/after the element enters the viewport.\n * @example \"-50px\" // Trigger 50px before entering viewport\n * @example \"100px 0px\" // 100px top/bottom, 0px left/right\n * @default \"0px\"\n */\n rootMargin?: string\n\n /**\n * Delay in milliseconds before setting isInView to true.\n * Useful for staggering animations.\n * @default 0\n */\n delay?: number\n}\n\nexport interface UseScrollAnimationResult<T extends HTMLElement = HTMLElement> {\n /**\n * Ref to attach to the element you want to observe\n */\n ref: React.RefObject<T | null>\n\n /**\n * Whether the element is currently in view\n */\n isInView: boolean\n\n /**\n * Whether the element has ever been in view\n * (useful for once-only animations)\n */\n hasAnimated: boolean\n\n /**\n * Manually reset the animation state\n */\n reset: () => void\n}\n\n// =============================================================================\n// Hook Implementation\n// =============================================================================\n\nexport function useScrollAnimation<T extends HTMLElement = HTMLElement>(\n options: UseScrollAnimationOptions = {}\n): UseScrollAnimationResult<T> {\n const {\n triggerOnScroll = true,\n threshold = 0.1,\n once = true,\n rootMargin = '0px',\n delay = 0,\n } = options\n\n const ref = useRef<T | null>(null)\n // Always start with isInView: false to allow initial → animate transition\n const [isInView, setIsInView] = useState(false)\n const [hasAnimated, setHasAnimated] = useState(false)\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const hasMountedRef = useRef(false)\n\n // Reset function\n const reset = useCallback(() => {\n setIsInView(false)\n setHasAnimated(false)\n hasMountedRef.current = false\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n }, [])\n\n useEffect(() => {\n // If not triggering on scroll, animate immediately after mount\n // Use requestAnimationFrame to ensure the initial state is rendered first\n if (!triggerOnScroll) {\n // Skip if already mounted (prevents re-triggering on re-renders)\n if (hasMountedRef.current) return\n hasMountedRef.current = true\n\n // Use double RAF to ensure browser has painted initial state\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => {\n setIsInView(true)\n setHasAnimated(true)\n }, delay)\n } else {\n setIsInView(true)\n setHasAnimated(true)\n }\n })\n })\n return\n }\n\n // If once mode and already animated, skip observer setup\n if (once && hasAnimated) {\n return\n }\n\n const element = ref.current\n if (!element) return\n\n // Check if IntersectionObserver is available (SSR safety)\n if (typeof IntersectionObserver === 'undefined') {\n setIsInView(true)\n setHasAnimated(true)\n return\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n const [entry] = entries\n const inView = entry.isIntersecting\n\n if (inView) {\n if (delay > 0) {\n // Apply delay before setting isInView\n timeoutRef.current = setTimeout(() => {\n setIsInView(true)\n setHasAnimated(true)\n }, delay)\n } else {\n setIsInView(true)\n setHasAnimated(true)\n }\n\n // If once mode, disconnect observer after triggering\n if (once) {\n observer.disconnect()\n }\n } else if (!once) {\n // Only update isInView to false if not in once mode\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n setIsInView(false)\n }\n },\n {\n threshold,\n rootMargin,\n }\n )\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n }\n }, [triggerOnScroll, threshold, once, rootMargin, delay, hasAnimated])\n\n return {\n ref,\n isInView,\n hasAnimated,\n reset,\n }\n}\n","'use client'\n\n/**\n * AnimatedWrapper - Client component for scroll-triggered animations\n *\n * Wraps children with animation support using IntersectionObserver.\n * Handles both preset entrance animations and custom transitions.\n * Supports 27 animation presets with customizable intensity, easing, and origin.\n */\n\nimport type { ReactNode, CSSProperties, ElementType } from 'react'\nimport { useScrollAnimation } from '../hooks/useScrollAnimation'\nimport {\n getEntranceAnimationStyles,\n animationValueToCSS,\n type AnimationValue,\n} from '../fields/shared'\n\nexport interface AnimatedWrapperProps {\n /** Animation configuration from the component */\n animation: AnimationValue | null | undefined\n /** Child content to animate */\n children: ReactNode\n /** Additional CSS classes */\n className?: string\n /** Inline styles */\n style?: CSSProperties\n /** HTML element to render as (default: 'div') */\n as?: ElementType\n}\n\n/**\n * Wraps children with scroll-triggered animation support.\n *\n * For preset animations: Applies initial/animate inline styles\n * when element enters viewport.\n *\n * For custom animations: Applies CSS transition properties.\n *\n * If no animation is set, renders children without a wrapper div.\n */\nexport function AnimatedWrapper({\n animation,\n children,\n className,\n style,\n as: Component = 'div',\n}: AnimatedWrapperProps) {\n // Check if animation should be applied\n const hasAnimation = animation && (\n (animation.mode === 'preset' && animation.entrance && animation.entrance !== 'none') ||\n animation.mode === 'custom'\n )\n\n // If no animation, render children directly without wrapper\n if (!hasAnimation) {\n // If there's a className or style, we still need to wrap\n if (className || style) {\n return <Component className={className} style={style}>{children}</Component>\n }\n return <>{children}</>\n }\n\n // Use the scroll animation hook\n const { ref, isInView } = useScrollAnimation({\n triggerOnScroll: animation.triggerOnScroll ?? true,\n threshold: animation.triggerThreshold ?? 0.1,\n once: animation.triggerOnce ?? true,\n rootMargin: animation.triggerMargin,\n })\n\n // Handle preset entrance animations\n if (animation.mode === 'preset') {\n const { initial, animate, duration, delay, easing, origin } = getEntranceAnimationStyles(animation)\n\n // Apply initial or animate styles based on visibility\n const animationStyles = isInView ? animate : initial\n\n // Build transition string with all relevant properties\n const transitionProperties = [\n `opacity ${duration}ms ${easing} ${delay}ms`,\n `transform ${duration}ms ${easing} ${delay}ms`,\n `filter ${duration}ms ${easing} ${delay}ms`,\n ].join(', ')\n\n return (\n <Component\n ref={ref}\n className={className}\n style={{\n ...style,\n ...animationStyles,\n transition: transitionProperties,\n transformOrigin: origin,\n }}\n >\n {children}\n </Component>\n )\n }\n\n // Handle custom transition mode\n const customStyles = animationValueToCSS(animation)\n\n return (\n <Component\n ref={ref}\n className={className}\n style={{\n ...style,\n ...customStyles,\n // Apply opacity for visibility-based transitions\n opacity: isInView ? 1 : 0,\n }}\n >\n {children}\n </Component>\n )\n}\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-8 px-3 text-xs\",\n lg: \"h-11 px-8\",\n icon: \"h-10 w-10 p-2\",\n \"icon-sm\": \"h-8 w-8 p-1.5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../../lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","'use client'\n\n/**\n * PaddingField - Custom Puck field for 4-sided padding/margin control\n *\n * This component provides:\n * - 4 number inputs for top/right/bottom/left\n * - Link/unlink toggle button (when linked, all values sync)\n * - Unit selector (px, rem)\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { Link, Unlink } from 'lucide-react'\nimport type { PaddingValue } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype SpacingUnit = 'px' | 'rem' | 'em' | '%'\n\ninterface PaddingFieldProps {\n value: PaddingValue | null\n onChange: (value: PaddingValue | null) => void\n label?: string\n readOnly?: boolean\n showUnits?: boolean\n}\n\n// =============================================================================\n// Default Value\n// =============================================================================\n\nconst DEFAULT_VALUE: PaddingValue = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n unit: 'px',\n linked: true,\n}\n\n// =============================================================================\n// PaddingField Component\n// =============================================================================\n\nfunction PaddingFieldInner({\n value,\n onChange,\n label,\n readOnly,\n showUnits = true,\n}: PaddingFieldProps) {\n // Use default if no value\n const currentValue = value || DEFAULT_VALUE\n\n // Use explicit linked state from value, default to true if not set\n const isLinked = currentValue.linked ?? true\n\n // Handle individual side change\n const handleSideChange = useCallback((\n side: 'top' | 'right' | 'bottom' | 'left',\n newValue: number\n ) => {\n if (isLinked) {\n // When linked, update all sides\n onChange({\n ...currentValue,\n top: newValue,\n right: newValue,\n bottom: newValue,\n left: newValue,\n linked: true,\n })\n } else {\n // When unlinked, update only the specific side\n onChange({\n ...currentValue,\n [side]: newValue,\n linked: false,\n })\n }\n }, [currentValue, onChange, isLinked])\n\n // Handle link toggle\n const handleLinkToggle = useCallback(() => {\n if (isLinked) {\n // Unlinking - keep current values but mark as unlinked\n onChange({\n ...currentValue,\n linked: false,\n })\n } else {\n // Linking - set all sides to the top value and mark as linked\n onChange({\n ...currentValue,\n top: currentValue.top,\n right: currentValue.top,\n bottom: currentValue.top,\n left: currentValue.top,\n linked: true,\n })\n }\n }, [currentValue, onChange, isLinked])\n\n // Handle unit change\n const handleUnitChange = useCallback((unit: SpacingUnit) => {\n onChange({\n ...currentValue,\n unit,\n })\n }, [currentValue, onChange])\n\n // Render a single side input - compact horizontal layout\n const renderSideInput = (\n side: 'top' | 'right' | 'bottom' | 'left',\n sideLabel: string\n ) => (\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-[10px] text-muted-foreground uppercase tracking-wide w-6 text-right flex-shrink-0\">\n {sideLabel.charAt(0)}\n </Label>\n <Input\n type=\"number\"\n min={0}\n value={currentValue[side]}\n onChange={(e) => handleSideChange(side, parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n className=\"h-7 text-center text-sm font-mono w-full px-1 py-0\"\n />\n </div>\n )\n\n return (\n <div className=\"puck-field flex flex-col gap-3\">\n {/* Header with label and link toggle */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n )}\n {/* Link/Unlink toggle button */}\n {!readOnly && (\n <Button\n type=\"button\"\n variant={isLinked ? 'default' : 'outline'}\n size=\"icon\"\n onClick={handleLinkToggle}\n className={cn(\n \"h-7 w-7\",\n isLinked ? \"\" : \"text-muted-foreground\"\n )}\n title={isLinked ? 'Click to unlink (set sides individually)' : 'Click to link (all sides same value)'}\n >\n {isLinked ? (\n <Link className=\"h-4 w-4\" />\n ) : (\n <Unlink className=\"h-4 w-4\" />\n )}\n </Button>\n )}\n </div>\n\n {/* Compact 2x2 grid layout */}\n <div className=\"bg-muted/50 rounded-md grid grid-cols-2 gap-2 p-2\">\n {renderSideInput('top', 'Top')}\n {renderSideInput('right', 'Right')}\n {renderSideInput('bottom', 'Bottom')}\n {renderSideInput('left', 'Left')}\n </div>\n\n {/* Unit selector and summary */}\n {showUnits && !readOnly && (\n <div className=\"flex items-center justify-between flex-wrap gap-2\">\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground\">Unit:</Label>\n <div className=\"flex gap-1\">\n {(['px', 'rem'] as SpacingUnit[]).map((unit) => {\n const isActive = currentValue.unit === unit\n return (\n <Button\n key={unit}\n type=\"button\"\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handleUnitChange(unit)}\n className={cn(\n \"text-xs font-mono h-7 px-2.5\",\n !isActive && \"text-muted-foreground\"\n )}\n >\n {unit}\n </Button>\n )\n })}\n </div>\n </div>\n {/* Current value summary */}\n <span className=\"text-xs text-muted-foreground font-mono\">\n {isLinked\n ? `${currentValue.top}${currentValue.unit}`\n : `${currentValue.top} ${currentValue.right} ${currentValue.bottom} ${currentValue.left}${currentValue.unit}`\n }\n </span>\n </div>\n )}\n </div>\n )\n}\n\nexport const PaddingField = memo(PaddingFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for padding/spacing\n */\nexport function createPaddingField(config: {\n label?: string\n showUnits?: boolean\n}): CustomField<PaddingValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <PaddingField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showUnits={config.showUnits}\n />\n ),\n }\n}\n","/**\n * Default Theme Values\n *\n * These defaults ensure backwards compatibility - components render\n * identically to before theming was introduced when no theme is provided.\n */\n\nimport type {\n ButtonVariantStyles,\n BackgroundStyles,\n ColorPreset,\n ResolvedTheme,\n} from './types'\n\n/**\n * Default button variant styles\n * Uses semantic Tailwind classes that map to CSS variables (--primary, --secondary, etc.)\n * This allows consuming apps to customize colors via their theme CSS variables.\n */\nexport const DEFAULT_BUTTON_VARIANTS: ButtonVariantStyles = {\n default: { classes: 'bg-primary text-primary-foreground hover:bg-primary/90' },\n secondary: { classes: 'bg-secondary text-secondary-foreground hover:bg-secondary/80' },\n outline: { classes: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground' },\n ghost: { classes: 'bg-transparent hover:bg-accent hover:text-accent-foreground' },\n destructive: { classes: 'bg-destructive text-destructive-foreground hover:bg-destructive/90' },\n link: { classes: 'text-primary underline-offset-4 hover:underline bg-transparent' },\n}\n\n/**\n * Default CTA button variant styles\n * Uses semantic Tailwind classes that map to CSS variables.\n */\nexport const DEFAULT_CTA_BUTTON_VARIANTS: ButtonVariantStyles = {\n primary: { classes: 'bg-primary text-primary-foreground hover:bg-primary/90' },\n secondary: { classes: 'bg-secondary text-secondary-foreground hover:bg-secondary/80' },\n outline: { classes: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground' },\n ghost: { classes: 'bg-transparent hover:bg-accent hover:text-accent-foreground' },\n link: { classes: 'text-primary underline-offset-4 hover:underline bg-transparent' },\n}\n\n/**\n * Default CTA background styles\n * Uses semantic Tailwind classes that map to CSS variables.\n */\nexport const DEFAULT_CTA_BACKGROUND_STYLES: BackgroundStyles = {\n default: 'bg-muted',\n dark: 'bg-foreground text-background',\n light: 'bg-background',\n}\n\n/**\n * Default color picker presets\n * Matches DEFAULT_PRESETS from ColorPickerField.tsx\n */\nexport const DEFAULT_COLOR_PRESETS: ColorPreset[] = [\n { hex: '#ffffff', label: 'White' },\n { hex: '#f9fafb', label: 'Gray 50' },\n { hex: '#f3f4f6', label: 'Gray 100' },\n { hex: '#1f2937', label: 'Gray 800' },\n { hex: '#111827', label: 'Gray 900' },\n { hex: '#000000', label: 'Black' },\n { hex: '#3b82f6', label: 'Blue' },\n { hex: '#10b981', label: 'Green' },\n { hex: '#f59e0b', label: 'Amber' },\n { hex: '#ef4444', label: 'Red' },\n]\n\n/**\n * Default focus ring color class\n * Uses semantic ring color from CSS variables\n */\nexport const DEFAULT_FOCUS_RING = 'focus:ring-ring'\n\n/**\n * Complete default theme\n * Used when no ThemeProvider is present or no theme config is provided\n */\nexport const DEFAULT_THEME: ResolvedTheme = {\n buttonVariants: DEFAULT_BUTTON_VARIANTS,\n ctaButtonVariants: DEFAULT_CTA_BUTTON_VARIANTS,\n ctaBackgroundStyles: DEFAULT_CTA_BACKGROUND_STYLES,\n colorPresets: DEFAULT_COLOR_PRESETS,\n focusRingColor: DEFAULT_FOCUS_RING,\n}\n","/**\n * Theme Resolution Utilities\n *\n * Functions for merging user-provided theme config with defaults\n * and safely accessing theme values.\n */\n\nimport type {\n ThemeConfig,\n ResolvedTheme,\n ButtonVariantStyles,\n BackgroundStyles,\n} from './types'\nimport {\n DEFAULT_BUTTON_VARIANTS,\n DEFAULT_CTA_BUTTON_VARIANTS,\n DEFAULT_CTA_BACKGROUND_STYLES,\n DEFAULT_COLOR_PRESETS,\n DEFAULT_FOCUS_RING,\n DEFAULT_THEME,\n} from './defaults'\n\n/**\n * Merges user-provided theme config with defaults to create a fully resolved theme\n */\nexport function resolveTheme(config?: ThemeConfig): ResolvedTheme {\n if (!config) return DEFAULT_THEME\n\n return {\n buttonVariants: mergeVariants(DEFAULT_BUTTON_VARIANTS, config.buttonVariants),\n ctaButtonVariants: mergeVariants(DEFAULT_CTA_BUTTON_VARIANTS, config.ctaButtonVariants),\n ctaBackgroundStyles: mergeBackgroundStyles(\n DEFAULT_CTA_BACKGROUND_STYLES,\n config.ctaBackgroundStyles\n ),\n colorPresets: resolveColorPresets(config),\n focusRingColor: config.focusRingColor ?? DEFAULT_FOCUS_RING,\n }\n}\n\n/**\n * Merges variant overrides with defaults\n */\nfunction mergeVariants(\n defaults: ButtonVariantStyles,\n overrides?: Partial<ButtonVariantStyles>\n): ButtonVariantStyles {\n if (!overrides) return defaults\n\n const result: ButtonVariantStyles = { ...defaults }\n for (const key of Object.keys(overrides)) {\n const override = overrides[key]\n if (override) {\n result[key] = override\n }\n }\n return result\n}\n\n/**\n * Merges background style overrides with defaults\n */\nfunction mergeBackgroundStyles(\n defaults: BackgroundStyles,\n overrides?: Partial<BackgroundStyles>\n): BackgroundStyles {\n if (!overrides) return defaults\n return { ...defaults, ...overrides }\n}\n\n/**\n * Resolves color presets based on config\n */\nfunction resolveColorPresets(config: ThemeConfig) {\n if (!config.colorPresets) {\n return DEFAULT_COLOR_PRESETS\n }\n\n if (config.extendColorPresets) {\n return [...DEFAULT_COLOR_PRESETS, ...config.colorPresets]\n }\n\n return config.colorPresets\n}\n\n/**\n * Safely gets variant classes from a variant styles object\n *\n * @param variants - The button variant styles object\n * @param variant - The variant key to look up\n * @param fallback - Fallback variant key if the requested variant doesn't exist\n * @returns The CSS classes string for the variant\n */\nexport function getVariantClasses(\n variants: ButtonVariantStyles,\n variant: string,\n fallback = 'default'\n): string {\n const config = variants[variant]\n if (config?.classes) {\n return config.classes\n }\n\n const fallbackConfig = variants[fallback]\n return fallbackConfig?.classes ?? ''\n}\n\n/**\n * Safely gets background style classes\n *\n * @param styles - The background styles object\n * @param style - The style key to look up\n * @param fallback - Fallback style key if the requested style doesn't exist\n * @returns The CSS classes string for the background\n */\nexport function getBackgroundClasses(\n styles: BackgroundStyles,\n style: string,\n fallback = 'default'\n): string {\n return styles[style] ?? styles[fallback] ?? ''\n}\n","'use client'\n\n/**\n * Theme Context\n *\n * React context for distributing theme configuration to Puck components.\n * The useTheme() hook returns defaults when no provider is present,\n * ensuring backwards compatibility.\n */\n\nimport { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport type { ThemeConfig, ThemeContextValue, ResolvedTheme } from './types'\nimport { DEFAULT_THEME } from './defaults'\nimport { resolveTheme } from './utils'\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\n\nexport interface ThemeProviderProps {\n children: ReactNode\n /** Theme configuration to apply */\n theme?: ThemeConfig\n}\n\n/**\n * Provides theme configuration to descendant Puck components\n *\n * @example\n * ```tsx\n * <ThemeProvider theme={{\n * buttonVariants: {\n * default: { classes: 'bg-primary text-white hover:bg-primary/90' }\n * }\n * }}>\n * <PageRenderer data={data} />\n * </ThemeProvider>\n * ```\n */\nexport function ThemeProvider({ children, theme }: ThemeProviderProps) {\n const resolvedTheme = useMemo(() => resolveTheme(theme), [theme])\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n theme: resolvedTheme,\n }),\n [resolvedTheme]\n )\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n}\n\n/**\n * Hook to access the current theme\n *\n * Returns DEFAULT_THEME if no ThemeProvider is present,\n * ensuring components work standalone for backwards compatibility.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const theme = useTheme()\n * const buttonClasses = getVariantClasses(theme.buttonVariants, 'primary')\n * return <button className={buttonClasses}>Click me</button>\n * }\n * ```\n */\nexport function useTheme(): ResolvedTheme {\n const context = useContext(ThemeContext)\n // Return defaults if no provider - ensures backwards compatibility\n return context?.theme ?? DEFAULT_THEME\n}\n\n/**\n * Gets the default theme for server components\n *\n * Use this when you need theme values in a server component\n * where hooks cannot be used.\n */\nexport function getDefaultTheme(): ResolvedTheme {\n return DEFAULT_THEME\n}\n\n/**\n * Hook to check if a ThemeProvider is present\n *\n * Useful for conditional logic based on whether theming is configured.\n */\nexport function useHasThemeProvider(): boolean {\n const context = useContext(ThemeContext)\n return context !== null\n}\n","'use client'\n\n/**\n * ColorPickerField - Custom Puck field for selecting colors with opacity\n *\n * This component provides a color picker with:\n * - Native color input for visual picking\n * - Hex input for direct entry\n * - Opacity slider (0-100%)\n * - Preview swatch\n * - Optional preset color swatches\n */\n\nimport React, { useState, useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { X } from 'lucide-react'\nimport type { ColorValue } from './shared'\nimport { useTheme } from '../theme'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface ColorPickerFieldProps {\n value: ColorValue | null\n onChange: (value: ColorValue | null) => void\n label?: string\n readOnly?: boolean\n showOpacity?: boolean\n presets?: Array<{ hex: string; label: string }>\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Validates and normalizes a hex color string\n */\nfunction normalizeHex(hex: string): string {\n let clean = hex.replace(/^#/, '')\n\n if (clean.length === 3) {\n clean = clean.split('').map(c => c + c).join('')\n }\n\n if (!/^[0-9A-Fa-f]{6}$/.test(clean)) {\n return ''\n }\n\n return `#${clean.toLowerCase()}`\n}\n\n/**\n * Converts hex + opacity to rgba CSS string\n */\nexport function colorToRgba(hex: string, opacity: number): string {\n const clean = hex.replace(/^#/, '')\n const r = parseInt(clean.substring(0, 2), 16)\n const g = parseInt(clean.substring(2, 4), 16)\n const b = parseInt(clean.substring(4, 6), 16)\n return `rgba(${r}, ${g}, ${b}, ${opacity / 100})`\n}\n\n// =============================================================================\n// ColorPickerField Component\n// =============================================================================\n\nfunction ColorPickerFieldInner({\n value,\n onChange,\n label,\n readOnly,\n showOpacity = true,\n presets,\n}: ColorPickerFieldProps) {\n // Use theme presets if none provided\n const theme = useTheme()\n const resolvedPresets = presets ?? theme.colorPresets\n const [hexInput, setHexInput] = useState(value?.hex || '')\n\n const handleColorChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newHex = e.target.value\n onChange({\n hex: newHex,\n opacity: value?.opacity ?? 100,\n })\n setHexInput(newHex)\n }, [onChange, value?.opacity])\n\n const handleHexInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target.value\n setHexInput(input)\n\n const normalized = normalizeHex(input)\n if (normalized) {\n onChange({\n hex: normalized,\n opacity: value?.opacity ?? 100,\n })\n }\n }, [onChange, value?.opacity])\n\n const handleHexInputBlur = useCallback(() => {\n if (value?.hex) {\n setHexInput(value.hex)\n }\n }, [value?.hex])\n\n const handleOpacityChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newOpacity = parseInt(e.target.value, 10)\n if (value?.hex) {\n onChange({\n hex: value.hex,\n opacity: newOpacity,\n })\n }\n }, [onChange, value?.hex])\n\n const handlePresetClick = useCallback((preset: { hex: string; label: string }) => {\n onChange({\n hex: preset.hex,\n opacity: value?.opacity ?? 100,\n })\n setHexInput(preset.hex)\n }, [onChange, value?.opacity])\n\n const handleClear = useCallback(() => {\n onChange(null)\n setHexInput('')\n }, [onChange])\n\n const previewColor = value?.hex\n ? colorToRgba(value.hex, value.opacity ?? 100)\n : 'transparent'\n\n return (\n <div className=\"puck-field space-y-3\">\n {label && (\n <Label className=\"block text-foreground\">\n {label}\n </Label>\n )}\n\n {/* Color picker and hex input row */}\n <div className=\"flex items-center gap-3\">\n {/* Native color picker */}\n <div className=\"relative\">\n <input\n type=\"color\"\n value={value?.hex || '#000000'}\n onChange={handleColorChange}\n disabled={readOnly}\n className=\"w-10 h-10 rounded-md border border-input cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n style={{ padding: 0 }}\n />\n </div>\n\n {/* Hex input */}\n <div className=\"flex-1\">\n <Input\n type=\"text\"\n value={hexInput}\n onChange={handleHexInputChange}\n onBlur={handleHexInputBlur}\n placeholder=\"#000000\"\n disabled={readOnly}\n className=\"font-mono text-sm\"\n />\n </div>\n\n {/* Preview swatch with checkerboard for transparency */}\n <div\n className=\"w-10 h-10 rounded-md border border-input flex-shrink-0 relative overflow-hidden\"\n title={value?.hex ? `${value.hex} at ${value.opacity ?? 100}% opacity` : 'No color selected'}\n >\n {/* Checkerboard background (always visible for transparency) */}\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundImage:\n 'linear-gradient(45deg, #d0d0d0 25%, transparent 25%), linear-gradient(-45deg, #d0d0d0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #d0d0d0 75%), linear-gradient(-45deg, transparent 75%, #d0d0d0 75%)',\n backgroundSize: '8px 8px',\n backgroundPosition: '0 0, 0 4px, 4px -4px, -4px 0px',\n backgroundColor: '#f0f0f0',\n }}\n />\n {/* Color overlay */}\n <div\n className=\"absolute inset-0\"\n style={{ backgroundColor: previewColor }}\n />\n </div>\n\n {/* Clear button */}\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n title=\"Clear color\"\n className=\"flex items-center justify-center w-8 h-8 rounded border-none bg-transparent cursor-pointer text-muted-foreground flex-shrink-0 hover:bg-accent hover:text-destructive\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n\n {/* Opacity slider */}\n {showOpacity && value?.hex && (\n <div className=\"space-y-1\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs text-muted-foreground\">Opacity</Label>\n <span className=\"text-xs text-muted-foreground font-mono\">{value.opacity ?? 100}%</span>\n </div>\n {/* Custom opacity slider with checkerboard + color gradient */}\n <div className=\"relative h-3 rounded-md overflow-hidden border border-input\">\n {/* Checkerboard background */}\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundImage:\n 'linear-gradient(45deg, #d0d0d0 25%, transparent 25%), linear-gradient(-45deg, #d0d0d0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #d0d0d0 75%), linear-gradient(-45deg, transparent 75%, #d0d0d0 75%)',\n backgroundSize: '8px 8px',\n backgroundPosition: '0 0, 0 4px, 4px -4px, -4px 0px',\n backgroundColor: '#f0f0f0',\n }}\n />\n {/* Color gradient from transparent to solid */}\n <div\n className=\"absolute inset-0\"\n style={{\n background: `linear-gradient(to right, transparent 0%, ${value.hex} 100%)`,\n }}\n />\n {/* Range input overlay */}\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={value.opacity ?? 100}\n onChange={handleOpacityChange}\n disabled={readOnly}\n className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer disabled:cursor-not-allowed\"\n style={{ margin: 0 }}\n />\n {/* Thumb indicator */}\n <div\n className=\"absolute top-0 bottom-0 w-1 bg-white border border-gray-400 rounded-sm shadow-sm pointer-events-none\"\n style={{\n left: `calc(${value.opacity ?? 100}% - 2px)`,\n }}\n />\n </div>\n </div>\n )}\n\n {/* Preset swatches */}\n {resolvedPresets.length > 0 && !readOnly && (\n <div>\n <Label className=\"block text-xs mt-1 mb-2 text-muted-foreground\">\n Presets\n </Label>\n <div className=\"flex flex-wrap gap-1.5\">\n {resolvedPresets.map((preset) => {\n const isSelected = value?.hex?.toLowerCase() === preset.hex.toLowerCase()\n return (\n <button\n key={preset.hex}\n type=\"button\"\n onClick={() => handlePresetClick(preset)}\n className={cn(\n \"w-6 h-6 rounded cursor-pointer p-0 outline-none border\",\n isSelected\n ? \"border-2 border-ring ring-2 ring-ring ring-offset-2 ring-offset-background\"\n : \"border-border\"\n )}\n style={{ backgroundColor: preset.hex }}\n title={preset.label}\n />\n )\n })}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport const ColorPickerField = memo(ColorPickerFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for color selection\n */\nexport function createColorPickerField(config: {\n label?: string\n showOpacity?: boolean\n presets?: Array<{ hex: string; label: string }>\n}): CustomField<ColorValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <ColorPickerField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showOpacity={config.showOpacity}\n presets={config.presets}\n />\n ),\n }\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\nimport { cn } from \"../../lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","'use client'\n\n/**\n * BorderField - Custom Puck field for border styling\n *\n * This component provides:\n * - Border width input (px)\n * - Border color picker (reuses ColorPickerField)\n * - Border radius input\n * - Border style selector (solid, dashed, dotted, none)\n * - Per-side toggles (top, right, bottom, left)\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n X,\n ArrowUp,\n ArrowRight,\n ArrowDown,\n ArrowLeft,\n} from 'lucide-react'\nimport { ColorPickerField } from './ColorPickerField'\nimport type { BorderValue, ColorValue } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../components/ui/select'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype BorderStyle = 'none' | 'solid' | 'dashed' | 'dotted'\n\ninterface BorderFieldProps {\n value: BorderValue | null\n onChange: (value: BorderValue | null) => void\n label?: string\n readOnly?: boolean\n}\n\n// =============================================================================\n// Default Value\n// =============================================================================\n\nconst DEFAULT_VALUE: BorderValue = {\n width: 1,\n color: { hex: '#e5e7eb', opacity: 100 }, // gray-200\n radius: 0,\n style: 'solid',\n sides: {\n top: true,\n right: true,\n bottom: true,\n left: true,\n },\n}\n\n// =============================================================================\n// Border Style Options\n// =============================================================================\n\nconst BORDER_STYLES: Array<{ value: BorderStyle; label: string }> = [\n { value: 'solid', label: 'Solid' },\n { value: 'dashed', label: 'Dashed' },\n { value: 'dotted', label: 'Dotted' },\n { value: 'none', label: 'None' },\n]\n\n// =============================================================================\n// BorderField Component\n// =============================================================================\n\nfunction BorderFieldInner({\n value,\n onChange,\n label,\n readOnly,\n}: BorderFieldProps) {\n // Use default if no value\n const currentValue = value || DEFAULT_VALUE\n\n // Handle width change\n const handleWidthChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newWidth = parseInt(e.target.value, 10) || 0\n onChange({\n ...currentValue,\n width: Math.max(0, newWidth),\n })\n }, [currentValue, onChange])\n\n // Handle color change\n const handleColorChange = useCallback((newColor: ColorValue | null) => {\n onChange({\n ...currentValue,\n color: newColor || { hex: '#000000', opacity: 100 },\n })\n }, [currentValue, onChange])\n\n // Handle radius change\n const handleRadiusChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newRadius = parseInt(e.target.value, 10) || 0\n onChange({\n ...currentValue,\n radius: Math.max(0, newRadius),\n })\n }, [currentValue, onChange])\n\n // Handle style change\n const handleStyleChange = useCallback((newStyle: BorderStyle) => {\n onChange({\n ...currentValue,\n style: newStyle,\n })\n }, [currentValue, onChange])\n\n // Handle side toggle\n const handleSideToggle = useCallback((side: 'top' | 'right' | 'bottom' | 'left') => {\n onChange({\n ...currentValue,\n sides: {\n ...currentValue.sides,\n [side]: !currentValue.sides[side],\n },\n })\n }, [currentValue, onChange])\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n // Check if all sides are enabled\n const allSidesEnabled = currentValue.sides.top &&\n currentValue.sides.right &&\n currentValue.sides.bottom &&\n currentValue.sides.left\n\n return (\n <div className=\"puck-field space-y-4\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n )}\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Clear border\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Border preview */}\n <div\n className=\"h-16 bg-muted/50 rounded flex items-center justify-center\"\n style={{\n borderWidth: currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n borderStyle: currentValue.style,\n borderColor: currentValue.color?.hex || '#000000',\n borderRadius: `${currentValue.radius}px`,\n borderTopWidth: currentValue.sides.top && currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n borderRightWidth: currentValue.sides.right && currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n borderBottomWidth: currentValue.sides.bottom && currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n borderLeftWidth: currentValue.sides.left && currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n opacity: (currentValue.color?.opacity ?? 100) / 100,\n }}\n >\n <span className=\"text-xs text-muted-foreground\">Preview</span>\n </div>\n\n {/* Width and Style row */}\n <div className=\"grid grid-cols-2 gap-3\">\n {/* Width */}\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">Width (px)</Label>\n <Input\n type=\"number\"\n min={0}\n max={20}\n value={currentValue.width}\n onChange={handleWidthChange}\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n\n {/* Style */}\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">Style</Label>\n <Select\n value={currentValue.style}\n onValueChange={(val) => handleStyleChange(val as BorderStyle)}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue placeholder=\"Select style\" />\n </SelectTrigger>\n <SelectContent>\n {BORDER_STYLES.map((style) => (\n <SelectItem key={style.value} value={style.value}>\n {style.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {/* Radius */}\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">Radius (px)</Label>\n <Input\n type=\"number\"\n min={0}\n max={100}\n value={currentValue.radius}\n onChange={handleRadiusChange}\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n\n {/* Color */}\n <div className=\"space-y-1\">\n <ColorPickerField\n value={currentValue.color}\n onChange={handleColorChange}\n label=\"Color\"\n readOnly={readOnly}\n showOpacity={true}\n presets={[\n { hex: '#000000', label: 'Black' },\n { hex: '#374151', label: 'Gray 700' },\n { hex: '#6b7280', label: 'Gray 500' },\n { hex: '#d1d5db', label: 'Gray 300' },\n { hex: '#e5e7eb', label: 'Gray 200' },\n { hex: '#3b82f6', label: 'Blue' },\n { hex: '#ef4444', label: 'Red' },\n ]}\n />\n </div>\n\n {/* Per-side toggles */}\n {!readOnly && (\n <div className=\"space-y-2\">\n <Label className=\"text-xs text-muted-foreground\">Sides</Label>\n <div className=\"flex items-center justify-center gap-2\">\n <Button\n type=\"button\"\n variant={currentValue.sides.top ? 'default' : 'outline'}\n size=\"icon\"\n onClick={() => handleSideToggle('top')}\n className={cn(\n \"h-8 w-8\",\n currentValue.sides.top && \"bg-primary hover:bg-primary/90\"\n )}\n title=\"Top border\"\n >\n <ArrowUp className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant={currentValue.sides.right ? 'default' : 'outline'}\n size=\"icon\"\n onClick={() => handleSideToggle('right')}\n className={cn(\n \"h-8 w-8\",\n currentValue.sides.right && \"bg-primary hover:bg-primary/90\"\n )}\n title=\"Right border\"\n >\n <ArrowRight className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant={currentValue.sides.bottom ? 'default' : 'outline'}\n size=\"icon\"\n onClick={() => handleSideToggle('bottom')}\n className={cn(\n \"h-8 w-8\",\n currentValue.sides.bottom && \"bg-primary hover:bg-primary/90\"\n )}\n title=\"Bottom border\"\n >\n <ArrowDown className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant={currentValue.sides.left ? 'default' : 'outline'}\n size=\"icon\"\n onClick={() => handleSideToggle('left')}\n className={cn(\n \"h-8 w-8\",\n currentValue.sides.left && \"bg-primary hover:bg-primary/90\"\n )}\n title=\"Left border\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n </div>\n <p className=\"text-[10px] text-muted-foreground text-center\">\n {allSidesEnabled ? 'All sides' : 'Custom sides'}\n </p>\n </div>\n )}\n </div>\n )\n}\n\nexport const BorderField = memo(BorderFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for border styling\n */\nexport function createBorderField(config: {\n label?: string\n}): CustomField<BorderValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <BorderField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n />\n ),\n }\n}\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n onCheckedChange?: (checked: boolean) => void\n}\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, onCheckedChange, onChange, ...props }, ref) => {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e)\n onCheckedChange?.(e.target.checked)\n }\n\n return (\n <input\n type=\"checkbox\"\n className={cn(\n 'h-4 w-4 shrink-0 rounded border border-primary ring-offset-background',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'accent-primary cursor-pointer',\n className\n )}\n ref={ref}\n onChange={handleChange}\n {...props}\n />\n )\n }\n)\nCheckbox.displayName = 'Checkbox'\n\nexport { Checkbox }\n","'use client'\n\n/**\n * DimensionsField - Unified Puck field for width and height constraints\n *\n * This component provides:\n * - Width mode selector (Full, Contained, Custom)\n * - Min/max width controls\n * - Min/max height controls\n * - Content alignment (left, center, right)\n * - Progressive disclosure (simple vs advanced mode)\n * - Preset quick-select buttons for common widths\n */\n\nimport React, { useCallback, memo, useState } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n X,\n AlignStartHorizontal,\n AlignCenterHorizontal,\n AlignEndHorizontal,\n MoveHorizontal,\n Square,\n SlidersHorizontal,\n ChevronDown,\n ChevronUp,\n} from 'lucide-react'\nimport type {\n DimensionsValue,\n DimensionConstraint,\n DimensionsUnit,\n DimensionsMode,\n ContentAlignment,\n} from './shared'\nimport { getDimensionsSummary } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { Checkbox } from '../components/ui/checkbox'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface DimensionsFieldProps {\n value: DimensionsValue | null\n onChange: (value: DimensionsValue | null) => void\n label?: string\n readOnly?: boolean\n /** Show height controls (default: true) */\n showHeightControls?: boolean\n /** Show min controls in advanced mode (default: true) */\n showMinControls?: boolean\n /** Start with advanced mode expanded (default: false) */\n defaultAdvancedMode?: boolean\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\nconst DEFAULT_VALUE: DimensionsValue = {\n mode: 'contained',\n alignment: 'center',\n maxWidth: {\n value: 1200,\n unit: 'px',\n enabled: true,\n },\n advancedMode: false,\n}\n\nconst WIDTH_PRESETS = [\n { label: 'Narrow', value: 680 },\n { label: 'Medium', value: 960 },\n { label: 'Wide', value: 1200 },\n { label: 'XL', value: 1440 },\n]\n\nconst WIDTH_UNITS: DimensionsUnit[] = ['px', 'rem', '%', 'vw']\nconst HEIGHT_UNITS: DimensionsUnit[] = ['px', 'rem', '%', 'vh']\n\n// =============================================================================\n// ConstraintInput Sub-component\n// =============================================================================\n\ninterface ConstraintInputProps {\n label: string\n constraint: DimensionConstraint | null | undefined\n onChange: (constraint: DimensionConstraint) => void\n onToggle: (enabled: boolean) => void\n units: DimensionsUnit[]\n disabled?: boolean\n placeholder?: string\n}\n\nfunction ConstraintInput({\n label,\n constraint,\n onChange,\n onToggle,\n units,\n disabled,\n placeholder = '0',\n}: ConstraintInputProps) {\n const isEnabled = constraint?.enabled ?? false\n const value = constraint?.value ?? 0\n const unit = constraint?.unit ?? 'px'\n\n const handleValueChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseInt(e.target.value, 10) || 0\n onChange({\n value: newValue,\n unit,\n enabled: isEnabled,\n })\n },\n [unit, isEnabled, onChange]\n )\n\n const handleUnitChange = useCallback(\n (newUnit: DimensionsUnit) => {\n onChange({\n value,\n unit: newUnit,\n enabled: isEnabled,\n })\n },\n [value, isEnabled, onChange]\n )\n\n const handleToggle = useCallback(\n (checked: boolean) => {\n onToggle(checked)\n },\n [onToggle]\n )\n\n return (\n <div className=\"flex items-center gap-2\">\n <label className=\"flex items-center gap-2 cursor-pointer min-w-[90px]\">\n <Checkbox\n checked={isEnabled}\n onCheckedChange={handleToggle}\n disabled={disabled}\n />\n <span className=\"text-xs text-muted-foreground\">{label}</span>\n </label>\n\n <Input\n type=\"number\"\n min={0}\n value={isEnabled ? value : ''}\n onChange={handleValueChange}\n disabled={disabled || !isEnabled}\n placeholder={placeholder}\n className=\"h-7 text-xs font-mono flex-1 min-w-[60px]\"\n />\n\n <div className=\"flex gap-0.5 flex-shrink-0\">\n {units.map((u) => (\n <Button\n key={u}\n type=\"button\"\n variant={unit === u && isEnabled ? 'default' : 'ghost'}\n size=\"sm\"\n onClick={() => handleUnitChange(u)}\n disabled={disabled || !isEnabled}\n className={cn(\n 'text-[10px] font-mono h-7 px-2.5',\n unit === u && isEnabled && 'bg-primary hover:bg-primary/90'\n )}\n >\n {u}\n </Button>\n ))}\n </div>\n </div>\n )\n}\n\n// =============================================================================\n// DimensionsField Component\n// =============================================================================\n\nfunction DimensionsFieldInner({\n value,\n onChange,\n label,\n readOnly,\n showHeightControls = true,\n showMinControls = true,\n defaultAdvancedMode = false,\n}: DimensionsFieldProps) {\n // Use default if no value\n const currentValue = value || DEFAULT_VALUE\n\n // Local state for advanced mode toggle\n const [advancedMode, setAdvancedMode] = useState(\n currentValue.advancedMode ?? defaultAdvancedMode\n )\n\n // Handle mode change\n const handleModeChange = useCallback(\n (mode: DimensionsMode) => {\n if (mode === 'full') {\n onChange({\n ...currentValue,\n mode,\n alignment: 'center',\n })\n } else {\n onChange({\n ...currentValue,\n mode,\n })\n }\n },\n [currentValue, onChange]\n )\n\n // Handle max width value change\n const handleMaxWidthChange = useCallback(\n (constraint: DimensionConstraint) => {\n onChange({\n ...currentValue,\n maxWidth: constraint,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle max width toggle\n const handleMaxWidthToggle = useCallback(\n (enabled: boolean) => {\n onChange({\n ...currentValue,\n maxWidth: {\n ...currentValue.maxWidth,\n enabled,\n },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle min width change\n const handleMinWidthChange = useCallback(\n (constraint: DimensionConstraint) => {\n onChange({\n ...currentValue,\n minWidth: constraint,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle min width toggle\n const handleMinWidthToggle = useCallback(\n (enabled: boolean) => {\n onChange({\n ...currentValue,\n minWidth: enabled\n ? { value: currentValue.minWidth?.value ?? 0, unit: currentValue.minWidth?.unit ?? 'px', enabled: true }\n : { ...currentValue.minWidth!, enabled: false },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle min height change\n const handleMinHeightChange = useCallback(\n (constraint: DimensionConstraint) => {\n onChange({\n ...currentValue,\n minHeight: constraint,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle min height toggle\n const handleMinHeightToggle = useCallback(\n (enabled: boolean) => {\n onChange({\n ...currentValue,\n minHeight: enabled\n ? { value: currentValue.minHeight?.value ?? 0, unit: currentValue.minHeight?.unit ?? 'px', enabled: true }\n : currentValue.minHeight ? { ...currentValue.minHeight, enabled: false } : null,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle max height change\n const handleMaxHeightChange = useCallback(\n (constraint: DimensionConstraint) => {\n onChange({\n ...currentValue,\n maxHeight: constraint,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle max height toggle\n const handleMaxHeightToggle = useCallback(\n (enabled: boolean) => {\n onChange({\n ...currentValue,\n maxHeight: enabled\n ? { value: currentValue.maxHeight?.value ?? 0, unit: currentValue.maxHeight?.unit ?? 'px', enabled: true }\n : currentValue.maxHeight ? { ...currentValue.maxHeight, enabled: false } : null,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle alignment change\n const handleAlignmentChange = useCallback(\n (alignment: ContentAlignment) => {\n onChange({\n ...currentValue,\n alignment,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle preset selection\n const handlePresetSelect = useCallback(\n (presetValue: number) => {\n onChange({\n ...currentValue,\n mode: 'contained',\n maxWidth: {\n value: presetValue,\n unit: 'px',\n enabled: true,\n },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n // Handle advanced mode toggle\n const handleAdvancedToggle = useCallback(() => {\n const newAdvancedMode = !advancedMode\n setAdvancedMode(newAdvancedMode)\n // Persist to value - must be outside setState callback to avoid setState during render\n onChange({\n ...currentValue,\n advancedMode: newAdvancedMode,\n })\n }, [advancedMode, currentValue, onChange])\n\n // Mode labels\n const modeConfig = [\n { mode: 'full' as DimensionsMode, icon: MoveHorizontal, label: 'Full', title: 'Full width (100%)' },\n { mode: 'contained' as DimensionsMode, icon: Square, label: 'Contain', title: 'Contained (centered with max-width)' },\n { mode: 'custom' as DimensionsMode, icon: SlidersHorizontal, label: 'Custom', title: 'Custom width settings' },\n ]\n\n const alignmentConfig = [\n { alignment: 'left' as ContentAlignment, icon: AlignStartHorizontal, title: 'Align left' },\n { alignment: 'center' as ContentAlignment, icon: AlignCenterHorizontal, title: 'Align center' },\n { alignment: 'right' as ContentAlignment, icon: AlignEndHorizontal, title: 'Align right' },\n ]\n\n const showWidthControls = currentValue.mode !== 'full'\n const hasHeightConstraints = showHeightControls && (advancedMode || currentValue.minHeight?.enabled || currentValue.maxHeight?.enabled)\n\n return (\n <div className=\"puck-field space-y-3\">\n {/* Header with label and clear */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">{label}</Label>\n )}\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Width Mode Selector */}\n <div className=\"flex flex-wrap gap-1\">\n {modeConfig.map(({ mode, icon: Icon, label: modeLabel, title }) => {\n const isActive = currentValue.mode === mode\n return (\n <Button\n key={mode}\n type=\"button\"\n variant={isActive ? 'default' : 'secondary'}\n size=\"sm\"\n onClick={() => handleModeChange(mode)}\n disabled={readOnly}\n className={cn('text-xs gap-1', isActive && 'bg-primary hover:bg-primary/90')}\n title={title}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n {modeLabel}\n </Button>\n )\n })}\n </div>\n\n {/* Width Controls */}\n {showWidthControls && (\n <div className=\"space-y-3 p-3 bg-muted/50 rounded-md\">\n {/* Preset Quick Selects */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Presets\n </Label>\n <div className=\"flex flex-wrap gap-1\">\n {WIDTH_PRESETS.map((preset) => {\n const isActive =\n currentValue.maxWidth.value === preset.value &&\n currentValue.maxWidth.unit === 'px' &&\n currentValue.maxWidth.enabled\n return (\n <Button\n key={preset.value}\n type=\"button\"\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handlePresetSelect(preset.value)}\n disabled={readOnly}\n className={cn('text-xs h-7 px-3', isActive && 'bg-primary hover:bg-primary/90')}\n >\n {preset.label}\n </Button>\n )\n })}\n </div>\n </div>\n\n {/* Simple Mode: Just Max Width */}\n {!advancedMode && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Max Width\n </Label>\n <div className=\"flex items-center flex-wrap gap-2\">\n <Input\n type=\"number\"\n min={0}\n value={currentValue.maxWidth.value}\n onChange={(e) =>\n handleMaxWidthChange({\n ...currentValue.maxWidth,\n value: parseInt(e.target.value, 10) || 0,\n })\n }\n disabled={readOnly}\n className=\"h-8 text-sm font-mono flex-1 min-w-[80px]\"\n />\n <div className=\"flex flex-shrink-0 gap-1\">\n {WIDTH_UNITS.map((unit) => {\n const isActive = currentValue.maxWidth.unit === unit\n return (\n <Button\n key={unit}\n type=\"button\"\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() =>\n handleMaxWidthChange({\n ...currentValue.maxWidth,\n unit,\n })\n }\n disabled={readOnly}\n className={cn(\n 'text-xs font-mono h-8 px-3',\n isActive && 'bg-primary hover:bg-primary/90'\n )}\n >\n {unit}\n </Button>\n )\n })}\n </div>\n </div>\n </div>\n )}\n\n {/* Advanced Mode */}\n {advancedMode && (\n <div className=\"space-y-4\">\n {/* Width Constraints */}\n <div className=\"space-y-2\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Width Constraints\n </Label>\n <div className=\"space-y-2 pl-1\">\n {showMinControls && (\n <ConstraintInput\n label=\"Min Width\"\n constraint={currentValue.minWidth}\n onChange={handleMinWidthChange}\n onToggle={handleMinWidthToggle}\n units={WIDTH_UNITS}\n disabled={readOnly}\n />\n )}\n <ConstraintInput\n label=\"Max Width\"\n constraint={currentValue.maxWidth}\n onChange={handleMaxWidthChange}\n onToggle={handleMaxWidthToggle}\n units={WIDTH_UNITS}\n disabled={readOnly}\n />\n </div>\n </div>\n\n {/* Height Constraints */}\n {showHeightControls && (\n <div className=\"space-y-2\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Height Constraints\n </Label>\n <div className=\"space-y-2 pl-1\">\n {showMinControls && (\n <ConstraintInput\n label=\"Min Height\"\n constraint={currentValue.minHeight}\n onChange={handleMinHeightChange}\n onToggle={handleMinHeightToggle}\n units={HEIGHT_UNITS}\n disabled={readOnly}\n />\n )}\n <ConstraintInput\n label=\"Max Height\"\n constraint={currentValue.maxHeight}\n onChange={handleMaxHeightChange}\n onToggle={handleMaxHeightToggle}\n units={HEIGHT_UNITS}\n disabled={readOnly}\n />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Height Constraints for Full Mode (still allow height constraints) */}\n {!showWidthControls && showHeightControls && advancedMode && (\n <div className=\"space-y-2 p-3 bg-muted/50 rounded-md\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Height Constraints\n </Label>\n <div className=\"space-y-2 pl-1\">\n {showMinControls && (\n <ConstraintInput\n label=\"Min Height\"\n constraint={currentValue.minHeight}\n onChange={handleMinHeightChange}\n onToggle={handleMinHeightToggle}\n units={HEIGHT_UNITS}\n disabled={readOnly}\n />\n )}\n <ConstraintInput\n label=\"Max Height\"\n constraint={currentValue.maxHeight}\n onChange={handleMaxHeightChange}\n onToggle={handleMaxHeightToggle}\n units={HEIGHT_UNITS}\n disabled={readOnly}\n />\n </div>\n </div>\n )}\n\n {/* Footer: Alignment + Summary + Advanced Toggle */}\n <div className=\"flex items-center justify-between flex-wrap gap-2\">\n {/* Alignment */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground flex-shrink-0\">Align:</Label>\n <div className=\"flex gap-1\">\n {alignmentConfig.map(({ alignment, icon: Icon, title }) => {\n const isActive = currentValue.alignment === alignment\n const isDisabled = readOnly || currentValue.mode === 'full'\n return (\n <Button\n key={alignment}\n type=\"button\"\n variant={isActive ? 'default' : 'secondary'}\n size=\"icon\"\n onClick={() => handleAlignmentChange(alignment)}\n disabled={isDisabled}\n className={cn('h-8 w-8', isActive && 'bg-primary hover:bg-primary/90')}\n title={title}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </Button>\n )\n })}\n </div>\n </div>\n\n {/* Value Summary */}\n <span className=\"text-xs text-muted-foreground font-mono\">\n {getDimensionsSummary(currentValue)}\n </span>\n </div>\n\n {/* Advanced Toggle */}\n {(showHeightControls || showMinControls) && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleAdvancedToggle}\n disabled={readOnly}\n className=\"w-full text-xs text-muted-foreground hover:text-foreground\"\n >\n {advancedMode ? (\n <>\n <ChevronUp className=\"h-3.5 w-3.5 mr-1\" />\n Hide Advanced\n </>\n ) : (\n <>\n <ChevronDown className=\"h-3.5 w-3.5 mr-1\" />\n Show Advanced\n </>\n )}\n </Button>\n )}\n </div>\n )\n}\n\nexport const DimensionsField = memo(DimensionsFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateDimensionsFieldConfig {\n label?: string\n /** Show height controls (default: true) */\n showHeightControls?: boolean\n /** Show min controls in advanced mode (default: true) */\n showMinControls?: boolean\n /** Start with advanced mode expanded (default: false) */\n defaultAdvancedMode?: boolean\n}\n\n/**\n * Creates a Puck field configuration for dimensions control\n */\nexport function createDimensionsField(\n config: CreateDimensionsFieldConfig = {}\n): CustomField<DimensionsValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <DimensionsField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showHeightControls={config.showHeightControls}\n showMinControls={config.showMinControls}\n defaultAdvancedMode={config.defaultAdvancedMode}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * MarginField - Custom Puck field for component margin/spacing control\n *\n * Similar to PaddingField but specifically for outer margin.\n * Provides:\n * - 4 number inputs for top/right/bottom/left\n * - Link/unlink toggle button (when linked, all values sync)\n * - Unit selector (px, rem)\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { Link, Unlink } from 'lucide-react'\nimport type { PaddingValue } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// Re-use PaddingValue type for margin (same structure)\nexport type MarginValue = PaddingValue\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype SpacingUnit = 'px' | 'rem' | 'em' | '%'\n\ninterface MarginFieldProps {\n value: MarginValue | null\n onChange: (value: MarginValue | null) => void\n label?: string\n readOnly?: boolean\n showUnits?: boolean\n}\n\n// =============================================================================\n// Default Value\n// =============================================================================\n\nconst DEFAULT_VALUE: MarginValue = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n unit: 'px',\n linked: true,\n}\n\n// =============================================================================\n// MarginField Component\n// =============================================================================\n\nfunction MarginFieldInner({\n value,\n onChange,\n label,\n readOnly,\n showUnits = true,\n}: MarginFieldProps) {\n // Use default if no value\n const currentValue = value || DEFAULT_VALUE\n\n // Use explicit linked state from value, default to true if not set\n const isLinked = currentValue.linked ?? true\n\n // Handle individual side change\n const handleSideChange = useCallback((\n side: 'top' | 'right' | 'bottom' | 'left',\n newValue: number\n ) => {\n if (isLinked) {\n // When linked, update all sides\n onChange({\n ...currentValue,\n top: newValue,\n right: newValue,\n bottom: newValue,\n left: newValue,\n linked: true,\n })\n } else {\n // When unlinked, update only the specific side\n onChange({\n ...currentValue,\n [side]: newValue,\n linked: false,\n })\n }\n }, [currentValue, onChange, isLinked])\n\n // Handle link toggle\n const handleLinkToggle = useCallback(() => {\n if (isLinked) {\n // Unlinking - keep current values but mark as unlinked\n onChange({\n ...currentValue,\n linked: false,\n })\n } else {\n // Linking - set all sides to the top value and mark as linked\n onChange({\n ...currentValue,\n top: currentValue.top,\n right: currentValue.top,\n bottom: currentValue.top,\n left: currentValue.top,\n linked: true,\n })\n }\n }, [currentValue, onChange, isLinked])\n\n // Handle unit change\n const handleUnitChange = useCallback((unit: SpacingUnit) => {\n onChange({\n ...currentValue,\n unit,\n })\n }, [currentValue, onChange])\n\n // Render a single side input - compact horizontal layout\n const renderSideInput = (\n side: 'top' | 'right' | 'bottom' | 'left',\n sideLabel: string\n ) => (\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-[10px] text-muted-foreground uppercase tracking-wide w-6 text-right flex-shrink-0\">\n {sideLabel.charAt(0)}\n </Label>\n <Input\n type=\"number\"\n min={0}\n value={currentValue[side]}\n onChange={(e) => handleSideChange(side, parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n className=\"h-7 text-center text-sm font-mono w-full px-1 py-0\"\n />\n </div>\n )\n\n return (\n <div className=\"puck-field flex flex-col gap-3\">\n {/* Header with label and link toggle */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n )}\n {/* Link/Unlink toggle button */}\n {!readOnly && (\n <Button\n type=\"button\"\n variant={isLinked ? 'default' : 'outline'}\n size=\"icon\"\n onClick={handleLinkToggle}\n className={cn(\n \"h-7 w-7\",\n isLinked ? \"\" : \"text-muted-foreground\"\n )}\n title={isLinked ? 'Click to unlink (set sides individually)' : 'Click to link (all sides same value)'}\n >\n {isLinked ? (\n <Link className=\"h-4 w-4\" />\n ) : (\n <Unlink className=\"h-4 w-4\" />\n )}\n </Button>\n )}\n </div>\n\n {/* Compact 2x2 grid layout */}\n <div className=\"bg-muted/50 rounded-md grid grid-cols-2 gap-2 p-2\">\n {renderSideInput('top', 'Top')}\n {renderSideInput('right', 'Right')}\n {renderSideInput('bottom', 'Bottom')}\n {renderSideInput('left', 'Left')}\n </div>\n\n {/* Unit selector and summary */}\n {showUnits && !readOnly && (\n <div className=\"flex items-center justify-between flex-wrap gap-2\">\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground\">Unit:</Label>\n <div className=\"flex gap-1\">\n {(['px', 'rem'] as SpacingUnit[]).map((unit) => {\n const isActive = currentValue.unit === unit\n return (\n <Button\n key={unit}\n type=\"button\"\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handleUnitChange(unit)}\n className={cn(\n \"text-xs font-mono h-7 px-2.5\",\n !isActive && \"text-muted-foreground\"\n )}\n >\n {unit}\n </Button>\n )\n })}\n </div>\n </div>\n {/* Current value summary */}\n <span className=\"text-xs text-muted-foreground font-mono\">\n {isLinked\n ? `${currentValue.top}${currentValue.unit}`\n : `${currentValue.top} ${currentValue.right} ${currentValue.bottom} ${currentValue.left}${currentValue.unit}`\n }\n </span>\n </div>\n )}\n </div>\n )\n}\n\nexport const MarginField = memo(MarginFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for margin/spacing\n */\nexport function createMarginField(config: {\n label?: string\n showUnits?: boolean\n}): CustomField<MarginValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <MarginField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showUnits={config.showUnits}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * ResetField - Custom Puck field for resetting component to defaults\n *\n * This field renders a reset button that clears all customizations\n * and restores the component to its default state.\n *\n * Uses Puck's usePuck hook and dispatch to properly update component data.\n */\n\nimport React, { memo, useCallback } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { createUsePuck } from '@measured/puck'\nimport type { Data } from '@measured/puck'\nimport { RefreshCw } from 'lucide-react'\nimport { Button } from '../components/ui/button'\n\n// Create usePuck hook for accessing editor state\nconst usePuck = createUsePuck()\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface ResetFieldProps {\n onClick: () => void\n label?: string\n disabled?: boolean\n}\n\n// =============================================================================\n// ResetField Component\n// =============================================================================\n\nfunction ResetFieldInner({\n onClick,\n label = 'Reset to defaults',\n disabled,\n}: ResetFieldProps) {\n return (\n <div className=\"puck-field\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={onClick}\n disabled={disabled}\n className=\"w-full text-muted-foreground hover:text-destructive hover:bg-destructive/10 gap-1.5\"\n >\n <RefreshCw className=\"h-3.5 w-3.5\" />\n {label}\n </Button>\n </div>\n )\n}\n\nexport const ResetField = memo(ResetFieldInner)\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Recursively update a component's props in Puck data structure\n * Handles both root content and nested zones/slots\n */\nfunction updateComponentInData(\n data: Data,\n componentId: string,\n newProps: Record<string, unknown>\n): Data {\n // Helper to update a single item\n const updateItem = (item: { type: string; props: Record<string, unknown> }) => {\n if (item.props?.id === componentId) {\n return {\n ...item,\n props: {\n ...newProps,\n id: componentId, // Always preserve the ID\n },\n }\n }\n return item\n }\n\n // Update root content array\n const updatedContent = data.content.map(updateItem)\n\n // Update zones (for nested components in slots)\n const updatedZones: Record<string, Array<{ type: string; props: Record<string, unknown> }>> = {}\n if (data.zones) {\n for (const [zoneName, zoneContent] of Object.entries(data.zones)) {\n updatedZones[zoneName] = (zoneContent as Array<{ type: string; props: Record<string, unknown> }>).map(updateItem)\n }\n }\n\n return {\n ...data,\n content: updatedContent,\n zones: Object.keys(updatedZones).length > 0 ? updatedZones : data.zones,\n }\n}\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateResetFieldConfig<T> {\n /** Label for the reset button */\n label?: string\n /** Default props to reset to */\n defaultProps: T\n}\n\n/**\n * Creates a Puck field configuration for a reset button\n *\n * Place this as the first field in a component to add a reset button\n * at the top of the property panel.\n *\n * @example\n * ```ts\n * const defaultProps = { text: 'Click Me', variant: 'default' }\n *\n * const ButtonConfig: ComponentConfig = {\n * fields: {\n * _reset: createResetField({ defaultProps }),\n * text: { type: 'text', label: 'Button Text' },\n * // ... other fields\n * },\n * defaultProps,\n * }\n * ```\n */\nexport function createResetField<T extends object>(\n config: CreateResetFieldConfig<T>\n): CustomField<unknown> {\n // We need to create a wrapper component to use the usePuck hook\n const ResetFieldWrapper = ({ readOnly }: { readOnly?: boolean }) => {\n const appState = usePuck((s) => s.appState)\n const dispatch = usePuck((s) => s.dispatch)\n const selectedItem = usePuck((s) => s.selectedItem)\n\n const handleReset = useCallback(() => {\n if (!selectedItem?.props?.id) {\n console.warn('ResetField: No selected item found')\n return\n }\n\n const componentId = selectedItem.props.id as string\n\n // Update the component's props in the data\n const updatedData = updateComponentInData(\n appState.data,\n componentId,\n config.defaultProps as unknown as Record<string, unknown>\n )\n\n // Dispatch the data update\n dispatch({\n type: 'setData',\n data: updatedData,\n })\n }, [appState.data, dispatch, selectedItem])\n\n return (\n <ResetField\n onClick={handleReset}\n label={config.label}\n disabled={readOnly}\n />\n )\n }\n\n return {\n type: 'custom',\n render: ({ readOnly }) => <ResetFieldWrapper readOnly={readOnly} />,\n }\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\nimport { cn } from \"../../lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 flex flex-col w-full max-w-4xl translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-lg max-h-[85vh] overflow-hidden p-6\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogContentFullscreen = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n hideCloseButton?: boolean\n /** Accessible title for screen readers (visually hidden) */\n accessibleTitle?: string\n }\n>(({ className, children, hideCloseButton = false, accessibleTitle = \"Dialog\", ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 flex flex-col bg-background duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n >\n {/* Visually hidden title for screen reader accessibility */}\n <DialogPrimitive.Title className=\"sr-only\">\n {accessibleTitle}\n </DialogPrimitive.Title>\n {children}\n {!hideCloseButton && (\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContentFullscreen.displayName = \"DialogContentFullscreen\"\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogContentFullscreen,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","import { cn } from \"../../lib/utils\"\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","'use client'\n\n/**\n * MediaField - Custom Puck field for selecting Payload CMS media\n *\n * This component provides a media picker that integrates with Payload's\n * media collection, allowing users to browse and select images.\n */\n\nimport React, { useState, useEffect, useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { Image, X, Search, Loader2, Upload, AlertCircle, Link } from 'lucide-react'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '../components/ui/dialog'\nimport { Skeleton } from '../components/ui/skeleton'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface MediaReference {\n id: string | number\n url: string\n alt?: string\n width?: number\n height?: number\n}\n\ninterface MediaFieldProps {\n value: MediaReference | null\n onChange: (value: MediaReference | null) => void\n label?: string\n readOnly?: boolean\n apiEndpoint?: string\n}\n\ninterface MediaItem {\n id: string | number\n url: string\n alt?: string\n filename?: string\n width?: number\n height?: number\n mimeType?: string\n}\n\ntype DialogTab = 'browse' | 'upload' | 'url'\n\ninterface UploadState {\n file: File | null\n preview: string | null\n uploading: boolean\n error: string | null\n}\n\ninterface UrlState {\n url: string\n loading: boolean\n error: string | null\n previewLoaded: boolean\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\nfunction formatFileSize(bytes: number | undefined): string {\n if (!bytes) return 'Unknown'\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\n// =============================================================================\n// MediaField Component\n// =============================================================================\n\nfunction MediaFieldInner({\n value,\n onChange,\n label,\n readOnly,\n apiEndpoint = '/api/media',\n}: MediaFieldProps) {\n const [isOpen, setIsOpen] = useState(false)\n const [mediaList, setMediaList] = useState<MediaItem[]>([])\n const [loading, setLoading] = useState(false)\n const [searchQuery, setSearchQuery] = useState('')\n const [page, setPage] = useState(1)\n const [hasMore, setHasMore] = useState(true)\n const [activeTab, setActiveTab] = useState<DialogTab>('browse')\n const [uploadState, setUploadState] = useState<UploadState>({\n file: null,\n preview: null,\n uploading: false,\n error: null,\n })\n const [urlState, setUrlState] = useState<UrlState>({\n url: '',\n loading: false,\n error: null,\n previewLoaded: false,\n })\n\n // Fetch media from Payload API\n const fetchMedia = useCallback(async (searchTerm: string = '', pageNum: number = 1) => {\n setLoading(true)\n try {\n const params = new URLSearchParams({\n limit: '24',\n page: pageNum.toString(),\n sort: '-createdAt',\n })\n\n // Filter by images only\n params.set('where[mimeType][contains]', 'image')\n\n if (searchTerm) {\n params.set('where[alt][contains]', searchTerm)\n }\n\n const response = await fetch(`${apiEndpoint}?${params}`)\n if (!response.ok) throw new Error('Failed to fetch media')\n\n const data = await response.json()\n const items: MediaItem[] = (data.docs || []).map((doc: Record<string, unknown>) => ({\n id: doc.id as string | number,\n url: (doc.url as string) || '',\n alt: (doc.alt as string) || '',\n filename: (doc.filename as string) || '',\n width: doc.width as number | undefined,\n height: doc.height as number | undefined,\n mimeType: (doc.mimeType as string) || '',\n }))\n\n if (pageNum === 1) {\n setMediaList(items)\n } else {\n setMediaList((prev) => [...prev, ...items])\n }\n\n setHasMore(data.hasNextPage || false)\n } catch (error) {\n console.error('Error fetching media:', error)\n } finally {\n setLoading(false)\n }\n }, [apiEndpoint])\n\n // Load media when dialog opens\n useEffect(() => {\n if (isOpen) {\n setPage(1)\n fetchMedia(searchQuery, 1)\n }\n }, [isOpen, fetchMedia, searchQuery])\n\n // Handle search with debounce\n useEffect(() => {\n if (!isOpen) return\n\n const timer = setTimeout(() => {\n setPage(1)\n fetchMedia(searchQuery, 1)\n }, 300)\n\n return () => clearTimeout(timer)\n }, [searchQuery, isOpen, fetchMedia])\n\n // Handle media selection\n const handleSelect = (item: MediaItem) => {\n onChange({\n id: item.id,\n url: item.url,\n alt: item.alt,\n width: item.width,\n height: item.height,\n })\n setIsOpen(false)\n }\n\n // Handle remove\n const handleRemove = () => {\n onChange(null)\n }\n\n // Load more\n const handleLoadMore = () => {\n const nextPage = page + 1\n setPage(nextPage)\n fetchMedia(searchQuery, nextPage)\n }\n\n // Reset upload state and cleanup object URL\n const resetUploadState = useCallback(() => {\n setUploadState((prev) => {\n if (prev.preview) URL.revokeObjectURL(prev.preview)\n return { file: null, preview: null, uploading: false, error: null }\n })\n }, [])\n\n // Reset URL state\n const resetUrlState = useCallback(() => {\n setUrlState({ url: '', loading: false, error: null, previewLoaded: false })\n }, [])\n\n // Handle URL submission\n const handleUrlSubmit = useCallback(() => {\n const url = urlState.url.trim()\n if (!url) {\n setUrlState((prev) => ({ ...prev, error: 'Please enter a URL' }))\n return\n }\n\n // Basic URL validation\n try {\n new URL(url)\n } catch {\n setUrlState((prev) => ({ ...prev, error: 'Please enter a valid URL' }))\n return\n }\n\n // Use the URL directly (external image)\n onChange({\n id: `external-${Date.now()}`,\n url: url,\n alt: '',\n })\n setIsOpen(false)\n resetUrlState()\n }, [urlState.url, onChange, resetUrlState])\n\n // Handle URL preview load\n const handleUrlPreviewLoad = useCallback(() => {\n setUrlState((prev) => ({ ...prev, previewLoaded: true, error: null }))\n }, [])\n\n // Handle URL preview error\n const handleUrlPreviewError = useCallback(() => {\n setUrlState((prev) => ({\n ...prev,\n previewLoaded: false,\n error: 'Unable to load image from this URL',\n }))\n }, [])\n\n // Handle file selection\n const handleFileSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (!file) return\n\n if (!file.type.startsWith('image/')) {\n setUploadState((prev) => ({ ...prev, error: 'Only image files are allowed' }))\n return\n }\n\n // Cleanup previous preview URL\n setUploadState((prev) => {\n if (prev.preview) URL.revokeObjectURL(prev.preview)\n return prev\n })\n\n const preview = URL.createObjectURL(file)\n setUploadState({ file, preview, uploading: false, error: null })\n }, [])\n\n // Handle upload\n const handleUpload = useCallback(async () => {\n if (!uploadState.file) return\n\n setUploadState((prev) => ({ ...prev, uploading: true, error: null }))\n\n try {\n const formData = new FormData()\n formData.append('file', uploadState.file)\n const altText = uploadState.file.name.replace(/\\.[^/.]+$/, '').replace(/[-_]/g, ' ')\n formData.append('alt', altText)\n\n const response = await fetch(apiEndpoint, {\n method: 'POST',\n body: formData,\n })\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: 'Upload failed' }))\n throw new Error(error.message || error.errors?.[0]?.message || 'Upload failed')\n }\n\n const data = await response.json()\n const doc = data.doc || data\n onChange({\n id: doc.id,\n url: doc.url,\n alt: doc.alt,\n width: doc.width,\n height: doc.height,\n })\n setIsOpen(false)\n resetUploadState()\n } catch (error) {\n setUploadState((prev) => ({\n ...prev,\n uploading: false,\n error: error instanceof Error ? error.message : 'Upload failed',\n }))\n }\n }, [uploadState.file, apiEndpoint, onChange, resetUploadState])\n\n // Handle dialog close\n const handleDialogClose = useCallback(\n (open: boolean) => {\n setIsOpen(open)\n if (!open) {\n resetUploadState()\n resetUrlState()\n setActiveTab('browse')\n }\n },\n [resetUploadState, resetUrlState]\n )\n\n return (\n <div className=\"puck-field\">\n {label && (\n <Label className=\"block text-sm font-medium text-foreground mb-2\">\n {label}\n </Label>\n )}\n\n <div className=\"space-y-2\">\n <div className=\"flex items-start gap-4\">\n {/* Preview */}\n {value?.url ? (\n <div className=\"relative group\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={value.url}\n alt={value.alt || ''}\n className=\"w-24 h-24 object-cover rounded-md border border-border\"\n />\n {!readOnly && (\n <button\n type=\"button\"\n onClick={handleRemove}\n className=\"absolute -top-2 -right-2 p-1 bg-destructive text-destructive-foreground rounded-full opacity-0 group-hover:opacity-100 transition-opacity\"\n aria-label=\"Remove image\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n ) : (\n <div className=\"w-24 h-24 bg-muted rounded-md border border-dashed border-input flex items-center justify-center\">\n <Image className=\"h-8 w-8 text-muted-foreground\" />\n </div>\n )}\n\n {/* Actions */}\n {!readOnly && (\n <div className=\"flex flex-col gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setIsOpen(true)}\n >\n {value ? 'Change Image' : 'Select Image'}\n </Button>\n {value && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleRemove}\n className=\"text-destructive hover:text-destructive hover:bg-destructive/10\"\n >\n Remove\n </Button>\n )}\n </div>\n )}\n </div>\n\n {/* Current URL display */}\n {value?.url && (\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Link className=\"h-3 w-3 flex-shrink-0\" />\n <span className=\"truncate max-w-[280px]\" title={value.url}>\n {value.url}\n </span>\n </div>\n )}\n </div>\n\n {/* Media Picker Dialog */}\n <Dialog open={isOpen} onOpenChange={handleDialogClose}>\n <DialogContent>\n <DialogHeader className=\"flex-shrink-0\">\n <DialogTitle>Select Media</DialogTitle>\n </DialogHeader>\n\n {/* Tab Bar */}\n <div className=\"flex border-b border-border -mt-2 flex-shrink-0\">\n <button\n type=\"button\"\n onClick={() => setActiveTab('browse')}\n className={cn(\n 'px-4 py-2 text-sm font-medium border-b-2 transition-colors',\n activeTab === 'browse'\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n >\n Browse Library\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveTab('upload')}\n className={cn(\n 'px-4 py-2 text-sm font-medium border-b-2 transition-colors',\n activeTab === 'upload'\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n >\n Upload New\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveTab('url')}\n className={cn(\n 'px-4 py-2 text-sm font-medium border-b-2 transition-colors',\n activeTab === 'url'\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n >\n From URL\n </button>\n </div>\n\n {/* Search (browse tab only) */}\n {activeTab === 'browse' && (\n <div className=\"relative flex-shrink-0\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400\" />\n <Input\n type=\"text\"\n placeholder=\"Search by alt text...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-10\"\n />\n </div>\n )}\n\n {/* Content Area - explicit max height for reliable scrolling */}\n <div className=\"overflow-y-auto\" style={{ maxHeight: 'calc(85vh - 180px)' }}>\n {activeTab === 'browse' ? (\n /* Browse Tab - Media Grid */\n loading && mediaList.length === 0 ? (\n <div className=\"grid grid-cols-4 gap-4\">\n {[...Array(8)].map((_, i) => (\n <Skeleton key={i} className=\"aspect-square rounded-md\" />\n ))}\n </div>\n ) : mediaList.length === 0 ? (\n <div className=\"flex items-center justify-center h-full text-muted-foreground\">\n No images found\n </div>\n ) : (\n <>\n <div className=\"grid grid-cols-4 gap-4\">\n {mediaList.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleSelect(item)}\n className={cn(\n 'relative aspect-square overflow-hidden rounded-md border-2 transition-all hover:border-primary hover:shadow-md',\n value?.id === item.id ? 'border-primary ring-2 ring-ring/30' : 'border-border'\n )}\n >\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={item.url}\n alt={item.alt || item.filename || ''}\n className=\"w-full h-full object-cover\"\n loading=\"lazy\"\n />\n {item.alt && (\n <div className=\"absolute bottom-0 left-0 right-0 bg-black/60 text-white text-xs p-1 truncate\">\n {item.alt}\n </div>\n )}\n </button>\n ))}\n </div>\n\n {/* Load More */}\n {hasMore && (\n <div className=\"flex justify-center mt-4\">\n <Button\n variant=\"outline\"\n onClick={handleLoadMore}\n disabled={loading}\n >\n {loading ? (\n <>\n <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />\n Loading...\n </>\n ) : (\n 'Load More'\n )}\n </Button>\n </div>\n )}\n </>\n )\n ) : activeTab === 'upload' ? (\n /* Upload Tab */\n <div className=\"flex flex-col items-center justify-center h-full min-h-[300px]\">\n {uploadState.preview ? (\n <div className=\"w-full max-w-md space-y-4\">\n {/* Preview */}\n <div className=\"relative aspect-video bg-muted rounded-lg overflow-hidden\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={uploadState.preview}\n alt=\"Preview\"\n className=\"w-full h-full object-contain\"\n />\n </div>\n\n {/* Metadata */}\n <div className=\"text-sm text-muted-foreground space-y-1\">\n <p>\n <span className=\"font-medium\">Filename:</span> {uploadState.file?.name}\n </p>\n <p>\n <span className=\"font-medium\">Size:</span>{' '}\n {formatFileSize(uploadState.file?.size)}\n </p>\n </div>\n\n {/* Error */}\n {uploadState.error && (\n <div className=\"p-3 bg-destructive/10 border border-destructive/30 rounded-md text-destructive text-sm flex items-start gap-2\">\n <AlertCircle className=\"h-4 w-4 flex-shrink-0 mt-0.5\" />\n <span>{uploadState.error}</span>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex gap-2\">\n <Button onClick={handleUpload} disabled={uploadState.uploading}>\n {uploadState.uploading ? (\n <>\n <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />\n Uploading...\n </>\n ) : (\n <>\n <Upload className=\"h-4 w-4 mr-2\" />\n Upload & Select\n </>\n )}\n </Button>\n <Button\n variant=\"outline\"\n onClick={resetUploadState}\n disabled={uploadState.uploading}\n >\n Cancel\n </Button>\n </div>\n </div>\n ) : (\n <div className=\"text-center\">\n <Image className=\"h-16 w-16 text-muted mx-auto mb-4\" />\n <label className=\"cursor-pointer\">\n <Button asChild>\n <span>Select Image</span>\n </Button>\n <input\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileSelect}\n className=\"hidden\"\n />\n </label>\n <p className=\"mt-2 text-sm text-muted-foreground\">Select an image file to upload</p>\n {uploadState.error && (\n <div className=\"mt-4 p-3 bg-destructive/10 border border-destructive/30 rounded-md text-destructive text-sm\">\n {uploadState.error}\n </div>\n )}\n </div>\n )}\n </div>\n ) : activeTab === 'url' ? (\n /* URL Tab */\n <div className=\"flex flex-col items-center justify-center h-full min-h-[300px]\">\n <div className=\"w-full max-w-md space-y-4\">\n <div className=\"text-center mb-6\">\n <Link className=\"h-12 w-12 text-muted-foreground mx-auto mb-2\" />\n <p className=\"text-sm text-muted-foreground\">\n Enter an image URL from an external source\n </p>\n </div>\n\n {/* URL Input */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"image-url\">Image URL</Label>\n <Input\n id=\"image-url\"\n type=\"url\"\n placeholder=\"https://example.com/image.jpg\"\n value={urlState.url}\n onChange={(e) =>\n setUrlState((prev) => ({\n ...prev,\n url: e.target.value,\n error: null,\n previewLoaded: false,\n }))\n }\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n handleUrlSubmit()\n }\n }}\n />\n </div>\n\n {/* Preview */}\n {urlState.url && !urlState.error && (\n <div className=\"relative aspect-video bg-muted rounded-lg overflow-hidden\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={urlState.url}\n alt=\"Preview\"\n className=\"w-full h-full object-contain\"\n onLoad={handleUrlPreviewLoad}\n onError={handleUrlPreviewError}\n />\n {!urlState.previewLoaded && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-muted\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n )}\n </div>\n )}\n\n {/* Error */}\n {urlState.error && (\n <div className=\"p-3 bg-destructive/10 border border-destructive/30 rounded-md text-destructive text-sm flex items-start gap-2\">\n <AlertCircle className=\"h-4 w-4 flex-shrink-0 mt-0.5\" />\n <span>{urlState.error}</span>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex gap-2\">\n <Button\n onClick={handleUrlSubmit}\n disabled={!urlState.url || urlState.loading}\n >\n <Link className=\"h-4 w-4 mr-2\" />\n Use This URL\n </Button>\n {urlState.url && (\n <Button variant=\"outline\" onClick={resetUrlState}>\n Clear\n </Button>\n )}\n </div>\n </div>\n </div>\n ) : null}\n </div>\n </DialogContent>\n </Dialog>\n </div>\n )\n}\n\n// Memoize to prevent unnecessary re-renders\nexport const MediaField = memo(MediaFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for media selection\n */\nexport function createMediaField(config: {\n label?: string\n apiEndpoint?: string\n}): CustomField<MediaReference | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <MediaField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n apiEndpoint={config.apiEndpoint}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * GradientEditor - Component for editing gradient values\n *\n * This component provides:\n * - Type selector (linear/radial toggle)\n * - Angle slider for linear gradients (0-360)\n * - Shape and position selectors for radial gradients\n * - Gradient stops list with color pickers and position sliders\n * - Add/remove stop buttons\n * - Visual gradient preview bar\n */\n\nimport React, { useCallback, memo, useState } from 'react'\nimport { Plus, Trash2 } from 'lucide-react'\nimport type { GradientValue, GradientStop, ColorValue } from './shared'\nimport { colorValueToCSS } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../components/ui/select'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface GradientEditorProps {\n value: GradientValue | null\n onChange: (value: GradientValue) => void\n readOnly?: boolean\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\nconst DEFAULT_GRADIENT: GradientValue = {\n type: 'linear',\n angle: 90,\n stops: [\n { color: { hex: '#000000', opacity: 100 }, position: 0 },\n { color: { hex: '#ffffff', opacity: 100 }, position: 100 },\n ],\n radialShape: 'circle',\n radialPosition: 'center',\n}\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Generates CSS gradient string for preview\n */\nfunction getGradientPreviewCSS(gradient: GradientValue): string {\n if (!gradient.stops || gradient.stops.length === 0) {\n return 'linear-gradient(90deg, #ccc 0%, #999 100%)'\n }\n\n const sortedStops = [...gradient.stops].sort((a, b) => a.position - b.position)\n const stopsCSS = sortedStops\n .map((stop) => {\n const color = colorValueToCSS(stop.color) || 'transparent'\n return `${color} ${stop.position}%`\n })\n .join(', ')\n\n if (gradient.type === 'radial') {\n const shape = gradient.radialShape || 'circle'\n const position = gradient.radialPosition || 'center'\n return `radial-gradient(${shape} at ${position}, ${stopsCSS})`\n }\n\n return `linear-gradient(${gradient.angle}deg, ${stopsCSS})`\n}\n\n// =============================================================================\n// GradientStopEditor Component\n// =============================================================================\n\ninterface GradientStopEditorProps {\n stop: GradientStop\n index: number\n canDelete: boolean\n onColorChange: (index: number, color: ColorValue) => void\n onPositionChange: (index: number, position: number) => void\n onDelete: (index: number) => void\n readOnly?: boolean\n}\n\nfunction GradientStopEditorInner({\n stop,\n index,\n canDelete,\n onColorChange,\n onPositionChange,\n onDelete,\n readOnly,\n}: GradientStopEditorProps) {\n const [hexInput, setHexInput] = useState(stop.color.hex)\n\n const handleColorPickerChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newHex = e.target.value\n setHexInput(newHex)\n onColorChange(index, { ...stop.color, hex: newHex })\n },\n [index, stop.color, onColorChange]\n )\n\n const handleHexInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target.value\n setHexInput(input)\n\n // Validate hex format\n const clean = input.replace(/^#/, '')\n if (/^[0-9A-Fa-f]{6}$/.test(clean)) {\n onColorChange(index, { ...stop.color, hex: `#${clean.toLowerCase()}` })\n }\n },\n [index, stop.color, onColorChange]\n )\n\n const handleOpacityChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newOpacity = parseInt(e.target.value, 10)\n onColorChange(index, { ...stop.color, opacity: newOpacity })\n },\n [index, stop.color, onColorChange]\n )\n\n const handlePositionChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newPosition = parseInt(e.target.value, 10)\n onPositionChange(index, Math.max(0, Math.min(100, newPosition)))\n },\n [index, onPositionChange]\n )\n\n const previewColor = colorValueToCSS(stop.color) || 'transparent'\n const opacity = stop.color.opacity ?? 100\n\n return (\n <div className=\"space-y-2 p-2 bg-muted/30 rounded-md overflow-hidden\">\n {/* Row 1: Color picker + hex input + preview swatch + delete */}\n <div className=\"flex items-center gap-2\">\n {/* Color picker */}\n <input\n type=\"color\"\n value={stop.color.hex}\n onChange={handleColorPickerChange}\n disabled={readOnly}\n className=\"w-7 h-7 rounded border border-input cursor-pointer disabled:cursor-not-allowed disabled:opacity-50 flex-shrink-0\"\n style={{ padding: 0 }}\n />\n\n {/* Hex input */}\n <Input\n type=\"text\"\n value={hexInput}\n onChange={handleHexInputChange}\n placeholder=\"#000000\"\n disabled={readOnly}\n className=\"w-20 min-w-0 h-7 text-xs font-mono px-1.5\"\n />\n\n {/* Preview swatch with checkerboard for transparency */}\n <div\n className=\"w-7 h-7 rounded border border-input flex-shrink-0 relative overflow-hidden\"\n title={`${previewColor} at ${opacity}% opacity`}\n >\n {/* Checkerboard background for transparency preview */}\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundImage:\n 'linear-gradient(45deg, #e0e0e0 25%, transparent 25%), linear-gradient(-45deg, #e0e0e0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #e0e0e0 75%), linear-gradient(-45deg, transparent 75%, #e0e0e0 75%)',\n backgroundSize: '8px 8px',\n backgroundPosition: '0 0, 0 4px, 4px -4px, -4px 0px',\n }}\n />\n {/* Color overlay */}\n <div className=\"absolute inset-0\" style={{ backgroundColor: previewColor }} />\n </div>\n\n {/* Spacer */}\n <div className=\"flex-1 min-w-0\" />\n\n {/* Delete button */}\n {canDelete && !readOnly && (\n <button\n type=\"button\"\n onClick={() => onDelete(index)}\n className=\"p-1 text-muted-foreground hover:text-destructive hover:bg-destructive/10 rounded flex-shrink-0\"\n title=\"Remove stop\"\n >\n <Trash2 className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n\n {/* Row 2: Position slider */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Label className=\"text-xs text-muted-foreground w-12 flex-shrink-0\">Pos</Label>\n <div className=\"flex-1 min-w-0\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={stop.position}\n onChange={handlePositionChange}\n disabled={readOnly}\n className=\"w-full h-1.5 accent-primary cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n <span className=\"text-xs text-muted-foreground font-mono w-8 text-right flex-shrink-0\">\n {stop.position}%\n </span>\n </div>\n\n {/* Row 3: Opacity slider */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Label className=\"text-xs text-muted-foreground w-12 flex-shrink-0\">Alpha</Label>\n <div className=\"flex-1 min-w-0\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={opacity}\n onChange={handleOpacityChange}\n disabled={readOnly}\n className=\"w-full h-1.5 accent-primary cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n <span className=\"text-xs text-muted-foreground font-mono w-8 text-right flex-shrink-0\">\n {opacity}%\n </span>\n </div>\n </div>\n )\n}\n\nconst GradientStopEditor = memo(GradientStopEditorInner)\n\n// =============================================================================\n// GradientEditor Component\n// =============================================================================\n\nfunction GradientEditorInner({ value, onChange, readOnly }: GradientEditorProps) {\n const currentValue = value || DEFAULT_GRADIENT\n\n // Handle gradient type change\n const handleTypeChange = useCallback(\n (type: 'linear' | 'radial') => {\n onChange({ ...currentValue, type })\n },\n [currentValue, onChange]\n )\n\n // Handle angle change\n const handleAngleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const angle = parseInt(e.target.value, 10)\n onChange({ ...currentValue, angle })\n },\n [currentValue, onChange]\n )\n\n // Handle radial shape change\n const handleRadialShapeChange = useCallback(\n (shape: 'circle' | 'ellipse') => {\n onChange({ ...currentValue, radialShape: shape })\n },\n [currentValue, onChange]\n )\n\n // Handle radial position change\n const handleRadialPositionChange = useCallback(\n (position: GradientValue['radialPosition']) => {\n onChange({ ...currentValue, radialPosition: position })\n },\n [currentValue, onChange]\n )\n\n // Handle stop color change\n const handleStopColorChange = useCallback(\n (index: number, color: ColorValue) => {\n const newStops = [...currentValue.stops]\n newStops[index] = { ...newStops[index], color }\n onChange({ ...currentValue, stops: newStops })\n },\n [currentValue, onChange]\n )\n\n // Handle stop position change\n const handleStopPositionChange = useCallback(\n (index: number, position: number) => {\n const newStops = [...currentValue.stops]\n newStops[index] = { ...newStops[index], position }\n onChange({ ...currentValue, stops: newStops })\n },\n [currentValue, onChange]\n )\n\n // Handle add stop\n const handleAddStop = useCallback(() => {\n const newPosition = currentValue.stops.length > 0 ? 50 : 0\n const newStop: GradientStop = {\n color: { hex: '#888888', opacity: 100 },\n position: newPosition,\n }\n onChange({ ...currentValue, stops: [...currentValue.stops, newStop] })\n }, [currentValue, onChange])\n\n // Handle delete stop\n const handleDeleteStop = useCallback(\n (index: number) => {\n const newStops = currentValue.stops.filter((_, i) => i !== index)\n onChange({ ...currentValue, stops: newStops })\n },\n [currentValue, onChange]\n )\n\n const previewCSS = getGradientPreviewCSS(currentValue)\n const canDeleteStops = currentValue.stops.length > 2\n\n return (\n <div className=\"space-y-4\">\n {/* Gradient Preview */}\n <div\n className=\"h-12 rounded-md border border-input\"\n style={{ background: previewCSS }}\n />\n\n {/* Type Selector */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-12\">Type</Label>\n <div className=\"flex gap-1\">\n <Button\n type=\"button\"\n variant={currentValue.type === 'linear' ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handleTypeChange('linear')}\n disabled={readOnly}\n className=\"text-xs h-7 px-3\"\n >\n Linear\n </Button>\n <Button\n type=\"button\"\n variant={currentValue.type === 'radial' ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handleTypeChange('radial')}\n disabled={readOnly}\n className=\"text-xs h-7 px-3\"\n >\n Radial\n </Button>\n </div>\n </div>\n\n {/* Linear Options: Angle */}\n {currentValue.type === 'linear' && (\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-12\">Angle</Label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"360\"\n value={currentValue.angle}\n onChange={handleAngleChange}\n disabled={readOnly}\n className=\"flex-1 h-2 bg-muted rounded-lg appearance-none cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <span className=\"text-xs text-muted-foreground font-mono w-10 text-right\">\n {currentValue.angle}deg\n </span>\n </div>\n )}\n\n {/* Radial Options: Shape & Position */}\n {currentValue.type === 'radial' && (\n <>\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-12\">Shape</Label>\n <Select\n value={currentValue.radialShape || 'circle'}\n onValueChange={(value) => handleRadialShapeChange(value as 'circle' | 'ellipse')}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-xs flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"circle\">Circle</SelectItem>\n <SelectItem value=\"ellipse\">Ellipse</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-12\">Position</Label>\n <Select\n value={currentValue.radialPosition || 'center'}\n onValueChange={(value) =>\n handleRadialPositionChange(value as GradientValue['radialPosition'])\n }\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-xs flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"center\">Center</SelectItem>\n <SelectItem value=\"top\">Top</SelectItem>\n <SelectItem value=\"bottom\">Bottom</SelectItem>\n <SelectItem value=\"left\">Left</SelectItem>\n <SelectItem value=\"right\">Right</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </>\n )}\n\n {/* Color Stops */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs text-muted-foreground\">Color Stops</Label>\n {!readOnly && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={handleAddStop}\n className=\"h-6 text-xs px-2\"\n >\n <Plus className=\"w-3 h-3 mr-1\" />\n Add Stop\n </Button>\n )}\n </div>\n <div className=\"space-y-2\">\n {currentValue.stops.map((stop, index) => (\n <GradientStopEditor\n key={index}\n stop={stop}\n index={index}\n canDelete={canDeleteStops}\n onColorChange={handleStopColorChange}\n onPositionChange={handleStopPositionChange}\n onDelete={handleDeleteStop}\n readOnly={readOnly}\n />\n ))}\n </div>\n </div>\n </div>\n )\n}\n\nexport const GradientEditor = memo(GradientEditorInner)\n","'use client'\n\n/**\n * BackgroundField - Custom Puck field for unified background selection\n *\n * This component provides a tabbed interface for selecting:\n * - None: No background\n * - Solid: Single color with opacity\n * - Gradient: Linear or radial gradients with multiple stops\n * - Image: Background image from media library with sizing options\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { X } from 'lucide-react'\nimport type {\n BackgroundValue,\n BackgroundImageValue,\n ColorValue,\n GradientValue,\n GradientMask,\n BackgroundOverlay,\n} from './shared'\nimport { backgroundValueToCSS, colorValueToCSS, getBackgroundImageOpacity } from './shared'\nimport { ColorPickerField } from './ColorPickerField'\nimport { MediaField, type MediaReference } from './MediaField'\nimport { GradientEditor } from './GradientEditor'\nimport { Label } from '../components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../components/ui/select'\nimport { Checkbox } from '../components/ui/checkbox'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype BackgroundType = 'none' | 'solid' | 'gradient' | 'image'\n\ninterface BackgroundFieldProps {\n value: BackgroundValue | null\n onChange: (value: BackgroundValue | null) => void\n label?: string\n readOnly?: boolean\n apiEndpoint?: string\n showOpacity?: boolean\n colorPresets?: Array<{ hex: string; label: string }>\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\nconst DEFAULT_VALUE: BackgroundValue = {\n type: 'none',\n solid: null,\n gradient: null,\n image: null,\n}\n\nconst DEFAULT_GRADIENT: GradientValue = {\n type: 'linear',\n angle: 90,\n stops: [\n { color: { hex: '#000000', opacity: 100 }, position: 0 },\n { color: { hex: '#ffffff', opacity: 100 }, position: 100 },\n ],\n radialShape: 'circle',\n radialPosition: 'center',\n}\n\nconst DEFAULT_IMAGE: BackgroundImageValue = {\n media: null,\n size: 'cover',\n position: 'center',\n repeat: 'no-repeat',\n attachment: 'scroll',\n opacity: 100,\n mask: undefined,\n}\n\nconst DEFAULT_MASK: GradientMask = {\n enabled: false,\n direction: 'to-bottom',\n startOpacity: 100,\n endOpacity: 0,\n startPosition: 0,\n endPosition: 100,\n}\n\nconst DEFAULT_OVERLAY: BackgroundOverlay = {\n enabled: false,\n type: 'solid',\n solid: { hex: '#000000', opacity: 50 },\n gradient: null,\n}\n\n// =============================================================================\n// Tab Button Component\n// =============================================================================\n\ninterface TabButtonProps {\n active: boolean\n onClick: () => void\n disabled?: boolean\n children: React.ReactNode\n}\n\nfunction TabButton({ active, onClick, disabled, children }: TabButtonProps) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className={cn(\n 'px-3 py-1.5 text-xs font-medium rounded-md transition-colors flex-1',\n active\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80 hover:text-foreground',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n {children}\n </button>\n )\n}\n\n// =============================================================================\n// Background Preview Component\n// =============================================================================\n\ninterface BackgroundPreviewProps {\n value: BackgroundValue\n}\n\nfunction BackgroundPreview({ value }: BackgroundPreviewProps) {\n const style = backgroundValueToCSS(value)\n const imageOpacity = getBackgroundImageOpacity(value)\n const hasBackground = value.type !== 'none' && Object.keys(style).length > 0\n\n return (\n <div\n className={cn(\n 'relative h-16 rounded-md border border-input overflow-hidden',\n !hasBackground && 'bg-muted'\n )}\n >\n {/* Checkerboard background for transparency preview */}\n {hasBackground && (\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundImage:\n 'linear-gradient(45deg, #e0e0e0 25%, transparent 25%), linear-gradient(-45deg, #e0e0e0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #e0e0e0 75%), linear-gradient(-45deg, transparent 75%, #e0e0e0 75%)',\n backgroundSize: '12px 12px',\n backgroundPosition: '0 0, 0 6px, 6px -6px, -6px 0px',\n }}\n />\n )}\n\n {/* Background layer */}\n {hasBackground && (\n <div\n className=\"absolute inset-0\"\n style={{\n ...style,\n opacity: imageOpacity !== undefined ? imageOpacity : 1,\n }}\n />\n )}\n\n {!hasBackground && (\n <div className=\"h-full flex items-center justify-center text-xs text-muted-foreground\">\n No background\n </div>\n )}\n </div>\n )\n}\n\n// =============================================================================\n// Image Options Component\n// =============================================================================\n\ninterface ImageOptionsProps {\n value: BackgroundImageValue\n onChange: (value: BackgroundImageValue) => void\n readOnly?: boolean\n apiEndpoint?: string\n}\n\nfunction ImageOptionsInner({ value, onChange, readOnly, apiEndpoint }: ImageOptionsProps) {\n const handleMediaChange = useCallback(\n (media: MediaReference | null) => {\n onChange({ ...value, media })\n },\n [value, onChange]\n )\n\n const handleSizeChange = useCallback(\n (size: BackgroundImageValue['size']) => {\n onChange({ ...value, size })\n },\n [value, onChange]\n )\n\n const handlePositionChange = useCallback(\n (position: BackgroundImageValue['position']) => {\n onChange({ ...value, position })\n },\n [value, onChange]\n )\n\n const handleRepeatChange = useCallback(\n (repeat: BackgroundImageValue['repeat']) => {\n onChange({ ...value, repeat })\n },\n [value, onChange]\n )\n\n const handleAttachmentChange = useCallback(\n (attachment: BackgroundImageValue['attachment']) => {\n onChange({ ...value, attachment })\n },\n [value, onChange]\n )\n\n const handleOpacityChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const opacity = parseInt(e.target.value, 10)\n onChange({ ...value, opacity })\n },\n [value, onChange]\n )\n\n const handleMaskToggle = useCallback(\n (checked: boolean) => {\n if (checked) {\n onChange({ ...value, mask: { ...DEFAULT_MASK, enabled: true } })\n } else {\n onChange({ ...value, mask: undefined })\n }\n },\n [value, onChange]\n )\n\n const handleMaskDirectionChange = useCallback(\n (direction: GradientMask['direction']) => {\n const currentMask = value.mask || DEFAULT_MASK\n onChange({ ...value, mask: { ...currentMask, direction, enabled: true } })\n },\n [value, onChange]\n )\n\n const handleMaskStartPositionChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const startPosition = parseInt(e.target.value, 10)\n const currentMask = value.mask || DEFAULT_MASK\n onChange({ ...value, mask: { ...currentMask, startPosition, enabled: true } })\n },\n [value, onChange]\n )\n\n const handleMaskEndPositionChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const endPosition = parseInt(e.target.value, 10)\n const currentMask = value.mask || DEFAULT_MASK\n onChange({ ...value, mask: { ...currentMask, endPosition, enabled: true } })\n },\n [value, onChange]\n )\n\n const opacity = value.opacity ?? 100\n const maskEnabled = value.mask?.enabled ?? false\n\n return (\n <div className=\"space-y-4\">\n {/* Media Picker */}\n <MediaField\n value={value.media}\n onChange={handleMediaChange}\n readOnly={readOnly}\n apiEndpoint={apiEndpoint}\n />\n\n {/* Image Options - only show when image is selected */}\n {value.media && (\n <div className=\"space-y-3 pt-2 border-t border-border\">\n {/* Opacity */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Label className=\"text-xs text-muted-foreground w-16 flex-shrink-0\">Opacity</Label>\n <div className=\"flex-1 min-w-0\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={opacity}\n onChange={handleOpacityChange}\n disabled={readOnly}\n className=\"w-full h-1.5 accent-primary cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n <span className=\"text-xs text-muted-foreground font-mono w-8 text-right flex-shrink-0\">\n {opacity}%\n </span>\n </div>\n\n {/* Size */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-20\">Size</Label>\n <Select\n value={value.size}\n onValueChange={(v) => handleSizeChange(v as BackgroundImageValue['size'])}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-xs flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"cover\">Cover</SelectItem>\n <SelectItem value=\"contain\">Contain</SelectItem>\n <SelectItem value=\"auto\">Auto</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Position */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-20\">Position</Label>\n <Select\n value={value.position}\n onValueChange={(v) => handlePositionChange(v as BackgroundImageValue['position'])}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-xs flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"center\">Center</SelectItem>\n <SelectItem value=\"top\">Top</SelectItem>\n <SelectItem value=\"bottom\">Bottom</SelectItem>\n <SelectItem value=\"left\">Left</SelectItem>\n <SelectItem value=\"right\">Right</SelectItem>\n <SelectItem value=\"top-left\">Top Left</SelectItem>\n <SelectItem value=\"top-right\">Top Right</SelectItem>\n <SelectItem value=\"bottom-left\">Bottom Left</SelectItem>\n <SelectItem value=\"bottom-right\">Bottom Right</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Repeat */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-20\">Repeat</Label>\n <Select\n value={value.repeat}\n onValueChange={(v) => handleRepeatChange(v as BackgroundImageValue['repeat'])}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-xs flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"no-repeat\">No Repeat</SelectItem>\n <SelectItem value=\"repeat\">Repeat</SelectItem>\n <SelectItem value=\"repeat-x\">Repeat X</SelectItem>\n <SelectItem value=\"repeat-y\">Repeat Y</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Attachment */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-20\">Attachment</Label>\n <Select\n value={value.attachment}\n onValueChange={(v) => handleAttachmentChange(v as BackgroundImageValue['attachment'])}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-xs flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"scroll\">Scroll</SelectItem>\n <SelectItem value=\"fixed\">Fixed</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Fade to Transparent (Gradient Mask) */}\n <div className=\"space-y-2 pt-3\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <Checkbox\n checked={maskEnabled}\n onCheckedChange={handleMaskToggle}\n disabled={readOnly}\n />\n <span className=\"text-xs text-muted-foreground\">Fade to transparent</span>\n </label>\n\n {maskEnabled && (\n <div className=\"space-y-2 pl-6\">\n {/* Direction */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Label className=\"text-xs text-muted-foreground w-12 flex-shrink-0\">Dir</Label>\n <Select\n value={value.mask?.direction || 'to-bottom'}\n onValueChange={(v) => handleMaskDirectionChange(v as GradientMask['direction'])}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-7 text-xs flex-1 min-w-0\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"to-top\">To Top</SelectItem>\n <SelectItem value=\"to-bottom\">To Bottom</SelectItem>\n <SelectItem value=\"to-left\">To Left</SelectItem>\n <SelectItem value=\"to-right\">To Right</SelectItem>\n <SelectItem value=\"to-top-left\">To Top Left</SelectItem>\n <SelectItem value=\"to-top-right\">To Top Right</SelectItem>\n <SelectItem value=\"to-bottom-left\">To Bottom Left</SelectItem>\n <SelectItem value=\"to-bottom-right\">To Bottom Right</SelectItem>\n <SelectItem value=\"from-center\">From Center (Radial)</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Start Position */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Label className=\"text-xs text-muted-foreground w-12 flex-shrink-0\">Start</Label>\n <div className=\"flex-1 min-w-0\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={value.mask?.startPosition ?? 0}\n onChange={handleMaskStartPositionChange}\n disabled={readOnly}\n className=\"w-full h-1.5 accent-primary cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n <span className=\"text-xs text-muted-foreground font-mono w-8 text-right flex-shrink-0\">\n {value.mask?.startPosition ?? 0}%\n </span>\n </div>\n\n {/* End Position */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Label className=\"text-xs text-muted-foreground w-12 flex-shrink-0\">End</Label>\n <div className=\"flex-1 min-w-0\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={value.mask?.endPosition ?? 100}\n onChange={handleMaskEndPositionChange}\n disabled={readOnly}\n className=\"w-full h-1.5 accent-primary cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n <span className=\"text-xs text-muted-foreground font-mono w-8 text-right flex-shrink-0\">\n {value.mask?.endPosition ?? 100}%\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nconst ImageOptions = memo(ImageOptionsInner)\n\n// =============================================================================\n// BackgroundField Component\n// =============================================================================\n\nfunction BackgroundFieldInner({\n value,\n onChange,\n label,\n readOnly,\n apiEndpoint = '/api/media',\n showOpacity = true,\n colorPresets,\n}: BackgroundFieldProps) {\n const currentValue = value || DEFAULT_VALUE\n const currentType = currentValue.type\n\n // Handle type change\n const handleTypeChange = useCallback(\n (type: BackgroundType) => {\n const newValue: BackgroundValue = {\n ...currentValue,\n type,\n }\n\n // Initialize defaults for the new type if needed\n if (type === 'gradient' && !newValue.gradient) {\n newValue.gradient = DEFAULT_GRADIENT\n }\n if (type === 'image' && !newValue.image) {\n newValue.image = DEFAULT_IMAGE\n }\n\n onChange(newValue)\n },\n [currentValue, onChange]\n )\n\n // Handle solid color change\n const handleSolidChange = useCallback(\n (solid: ColorValue | null) => {\n onChange({ ...currentValue, solid })\n },\n [currentValue, onChange]\n )\n\n // Handle gradient change\n const handleGradientChange = useCallback(\n (gradient: GradientValue) => {\n onChange({ ...currentValue, gradient })\n },\n [currentValue, onChange]\n )\n\n // Handle image change\n const handleImageChange = useCallback(\n (image: BackgroundImageValue) => {\n onChange({ ...currentValue, image })\n },\n [currentValue, onChange]\n )\n\n // Handle overlay toggle\n const handleOverlayToggle = useCallback(\n (checked: boolean) => {\n if (checked) {\n onChange({ ...currentValue, overlay: { ...DEFAULT_OVERLAY, enabled: true } })\n } else {\n onChange({ ...currentValue, overlay: { ...DEFAULT_OVERLAY, enabled: false } })\n }\n },\n [currentValue, onChange]\n )\n\n // Handle overlay type change\n const handleOverlayTypeChange = useCallback(\n (type: 'solid' | 'gradient') => {\n const currentOverlay = currentValue.overlay || DEFAULT_OVERLAY\n onChange({\n ...currentValue,\n overlay: {\n ...currentOverlay,\n type,\n enabled: true,\n // Initialize gradient if switching to gradient and not set\n gradient:\n type === 'gradient' && !currentOverlay.gradient ? DEFAULT_GRADIENT : currentOverlay.gradient,\n },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle overlay solid color change\n const handleOverlaySolidChange = useCallback(\n (solid: ColorValue | null) => {\n const currentOverlay = currentValue.overlay || DEFAULT_OVERLAY\n onChange({\n ...currentValue,\n overlay: { ...currentOverlay, solid, enabled: true },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle overlay gradient change\n const handleOverlayGradientChange = useCallback(\n (gradient: GradientValue) => {\n const currentOverlay = currentValue.overlay || DEFAULT_OVERLAY\n onChange({\n ...currentValue,\n overlay: { ...currentOverlay, gradient, enabled: true },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const overlayEnabled = currentValue.overlay?.enabled ?? false\n const overlayType = currentValue.overlay?.type ?? 'solid'\n\n return (\n <div className=\"puck-field space-y-3\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"block text-sm font-medium text-foreground\">{label}</Label>\n )}\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n title=\"Clear background\"\n className=\"flex items-center justify-center w-6 h-6 rounded border-none bg-transparent cursor-pointer text-muted-foreground hover:bg-accent hover:text-destructive\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n\n {/* Preview */}\n <BackgroundPreview value={currentValue} />\n\n {/* Type Tabs */}\n <div className=\"flex gap-1 bg-muted/50 p-1 rounded-lg\">\n <TabButton\n active={currentType === 'none'}\n onClick={() => handleTypeChange('none')}\n disabled={readOnly}\n >\n None\n </TabButton>\n <TabButton\n active={currentType === 'solid'}\n onClick={() => handleTypeChange('solid')}\n disabled={readOnly}\n >\n Solid\n </TabButton>\n <TabButton\n active={currentType === 'gradient'}\n onClick={() => handleTypeChange('gradient')}\n disabled={readOnly}\n >\n Gradient\n </TabButton>\n <TabButton\n active={currentType === 'image'}\n onClick={() => handleTypeChange('image')}\n disabled={readOnly}\n >\n Image\n </TabButton>\n </div>\n\n {/* Tab Content */}\n <div className=\"min-h-[100px]\">\n {currentType === 'none' && (\n <div className=\"flex items-center justify-center h-24 text-sm text-muted-foreground\">\n No background selected\n </div>\n )}\n\n {currentType === 'solid' && (\n <ColorPickerField\n value={currentValue.solid || null}\n onChange={handleSolidChange}\n readOnly={readOnly}\n showOpacity={showOpacity}\n presets={colorPresets}\n />\n )}\n\n {currentType === 'gradient' && (\n <GradientEditor\n value={currentValue.gradient || null}\n onChange={handleGradientChange}\n readOnly={readOnly}\n />\n )}\n\n {currentType === 'image' && (\n <div className=\"space-y-4\">\n <ImageOptions\n value={currentValue.image || DEFAULT_IMAGE}\n onChange={handleImageChange}\n readOnly={readOnly}\n apiEndpoint={apiEndpoint}\n />\n\n {/* Overlay Section - only show when image is selected */}\n {currentValue.image?.media && (\n <div className=\"space-y-3 pt-3\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <Checkbox\n checked={overlayEnabled}\n onCheckedChange={handleOverlayToggle}\n disabled={readOnly}\n />\n <span className=\"text-xs text-muted-foreground\">Enable overlay</span>\n </label>\n\n {overlayEnabled && (\n <div className=\"space-y-3\">\n {/* Overlay Type Toggle */}\n <div className=\"flex gap-1 bg-muted/50 p-1 rounded-lg\">\n <TabButton\n active={overlayType === 'solid'}\n onClick={() => handleOverlayTypeChange('solid')}\n disabled={readOnly}\n >\n Solid Color\n </TabButton>\n <TabButton\n active={overlayType === 'gradient'}\n onClick={() => handleOverlayTypeChange('gradient')}\n disabled={readOnly}\n >\n Gradient\n </TabButton>\n </div>\n\n {/* Overlay Editor */}\n {overlayType === 'solid' ? (\n <ColorPickerField\n value={currentValue.overlay?.solid || null}\n onChange={handleOverlaySolidChange}\n readOnly={readOnly}\n showOpacity={true}\n />\n ) : (\n <GradientEditor\n value={currentValue.overlay?.gradient || null}\n onChange={handleOverlayGradientChange}\n readOnly={readOnly}\n />\n )}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport const BackgroundField = memo(BackgroundFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for background selection\n */\nexport function createBackgroundField(config: {\n label?: string\n apiEndpoint?: string\n showOpacity?: boolean\n colorPresets?: Array<{ hex: string; label: string }>\n} = {}): CustomField<BackgroundValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <BackgroundField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n apiEndpoint={config.apiEndpoint}\n showOpacity={config.showOpacity}\n colorPresets={config.colorPresets}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * AnimationField - Custom Puck field for transition and entrance animation controls\n *\n * Provides comprehensive animation configuration with:\n * - 27 preset entrance animations organized by category\n * - Customizable intensity (distance, scale, rotate, blur)\n * - Transform origin control\n * - Advanced easing options (including spring/bounce)\n * - Scroll trigger settings\n * - Stagger support for child elements\n */\n\nimport React, { useCallback, memo, useState } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { X, ChevronDown, ChevronRight } from 'lucide-react'\nimport type {\n AnimationValue,\n AdvancedEasingFunction,\n EntranceAnimation,\n AnimationOrigin,\n StaggerDirection,\n} from './shared'\nimport {\n ANIMATION_CATEGORIES,\n DEFAULT_ANIMATION,\n getRelevantIntensityControls,\n getDefaultEasingForAnimation,\n} from './shared'\nimport { Button } from '../components/ui/button'\nimport { Label } from '../components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from '../components/ui/select'\nimport { Checkbox } from '../components/ui/checkbox'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface AnimationFieldProps {\n value: AnimationValue | null\n onChange: (value: AnimationValue | null) => void\n label?: string\n readOnly?: boolean\n /** Whether to show stagger controls (for container components) */\n showStagger?: boolean\n}\n\n// =============================================================================\n// Easing Options\n// =============================================================================\n\nconst EASING_OPTIONS: Array<{ value: AdvancedEasingFunction; label: string; group: string }> = [\n // Standard\n { value: 'linear', label: 'Linear', group: 'Standard' },\n { value: 'ease', label: 'Ease', group: 'Standard' },\n { value: 'ease-in', label: 'Ease In', group: 'Standard' },\n { value: 'ease-out', label: 'Ease Out', group: 'Standard' },\n { value: 'ease-in-out', label: 'Ease In Out', group: 'Standard' },\n // Spring/Bounce\n { value: 'spring', label: 'Spring', group: 'Spring' },\n { value: 'spring-gentle', label: 'Spring Gentle', group: 'Spring' },\n { value: 'bounce', label: 'Bounce', group: 'Spring' },\n { value: 'bounce-in', label: 'Bounce In', group: 'Spring' },\n { value: 'bounce-out', label: 'Bounce Out', group: 'Spring' },\n // Back\n { value: 'back-in', label: 'Back In', group: 'Back' },\n { value: 'back-out', label: 'Back Out', group: 'Back' },\n { value: 'back-in-out', label: 'Back In Out', group: 'Back' },\n // Elastic\n { value: 'elastic', label: 'Elastic', group: 'Elastic' },\n]\n\n// =============================================================================\n// Collapsible Section Component\n// =============================================================================\n\ninterface CollapsibleSectionProps {\n title: string\n defaultOpen?: boolean\n children: React.ReactNode\n}\n\nfunction CollapsibleSection({ title, defaultOpen = false, children }: CollapsibleSectionProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen)\n\n return (\n <div className=\"border border-border/50 rounded-md overflow-hidden\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-full flex items-center justify-between px-3 py-2 bg-muted/30 hover:bg-muted/50 transition-colors\"\n >\n <span className=\"text-xs font-medium text-muted-foreground\">{title}</span>\n {isOpen ? (\n <ChevronDown className=\"h-3.5 w-3.5 text-muted-foreground\" />\n ) : (\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\n )}\n </button>\n {isOpen && <div className=\"p-3 space-y-3\">{children}</div>}\n </div>\n )\n}\n\n// =============================================================================\n// Origin Grid Component\n// =============================================================================\n\ninterface OriginGridProps {\n value: AnimationOrigin\n onChange: (value: AnimationOrigin) => void\n disabled?: boolean\n}\n\nfunction OriginGrid({ value, onChange, disabled }: OriginGridProps) {\n const origins: AnimationOrigin[] = [\n 'top-left', 'top', 'top-right',\n 'left', 'center', 'right',\n 'bottom-left', 'bottom', 'bottom-right',\n ]\n\n return (\n <div className=\"grid grid-cols-3 gap-1 w-24\">\n {origins.map((origin) => (\n <button\n key={origin}\n type=\"button\"\n onClick={() => onChange(origin)}\n disabled={disabled}\n className={cn(\n 'w-7 h-7 rounded border transition-colors',\n value === origin\n ? 'bg-primary border-primary'\n : 'bg-muted/50 border-border hover:bg-muted hover:border-border/80',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n title={origin.replace('-', ' ')}\n >\n <span\n className={cn(\n 'block w-2 h-2 rounded-full mx-auto',\n value === origin ? 'bg-primary-foreground' : 'bg-muted-foreground/40'\n )}\n />\n </button>\n ))}\n </div>\n )\n}\n\n// =============================================================================\n// Slider Component\n// =============================================================================\n\ninterface SliderRowProps {\n label: string\n value: number\n min: number\n max: number\n step?: number\n unit?: string\n onChange: (value: number) => void\n disabled?: boolean\n}\n\nfunction SliderRow({ label, value, min, max, step = 1, unit = '', onChange, disabled }: SliderRowProps) {\n return (\n <div className=\"space-y-1\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n {label}\n </Label>\n <span className=\"text-xs text-muted-foreground\">{value}{unit}</span>\n </div>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={(e) => onChange(Number(e.target.value))}\n disabled={disabled}\n className=\"w-full h-1.5 accent-primary cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n )\n}\n\n// =============================================================================\n// AnimationField Component\n// =============================================================================\n\nfunction AnimationFieldInner({\n value,\n onChange,\n label = 'Animation',\n readOnly,\n showStagger = false,\n}: AnimationFieldProps) {\n const currentValue = value || DEFAULT_ANIMATION\n\n // Get which intensity controls to show based on animation type\n const intensityControls = getRelevantIntensityControls(currentValue.entrance || 'none')\n const hasIntensityControls = Object.values(intensityControls).some(Boolean)\n\n // Helpers to update specific fields\n const updateField = useCallback(\n <K extends keyof AnimationValue>(key: K, val: AnimationValue[K]) => {\n onChange({\n ...currentValue,\n [key]: val,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle entrance animation change - also update default easing\n const handleEntranceChange = useCallback(\n (entrance: EntranceAnimation) => {\n const defaultEasing = getDefaultEasingForAnimation(entrance)\n onChange({\n ...currentValue,\n entrance,\n // Only set default easing if current is 'ease' (not explicitly set)\n easing: currentValue.easing === 'ease' ? defaultEasing : currentValue.easing,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle stagger config updates\n const updateStagger = useCallback(\n (updates: Partial<NonNullable<AnimationValue['stagger']>>) => {\n onChange({\n ...currentValue,\n stagger: {\n enabled: currentValue.stagger?.enabled ?? false,\n delay: currentValue.stagger?.delay ?? 100,\n direction: currentValue.stagger?.direction ?? 'forward',\n ...currentValue.stagger,\n ...updates,\n },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const thresholdPercent = Math.round((currentValue.triggerThreshold ?? 0.1) * 100)\n\n // Format animation label\n const formatAnimationLabel = (anim: EntranceAnimation): string => {\n if (anim === 'none') return 'None'\n return anim\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n }\n\n return (\n <div className=\"puck-field space-y-3\">\n {/* Header with label and clear */}\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium text-foreground\">{label}</Label>\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Animation Type Select (grouped by category) */}\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Animation\n </Label>\n <Select\n value={currentValue.entrance || 'none'}\n onValueChange={(v) => handleEntranceChange(v as EntranceAnimation)}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue placeholder=\"Select animation\">\n {formatAnimationLabel(currentValue.entrance || 'none')}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {ANIMATION_CATEGORIES.map(({ category, label: catLabel, animations }, idx) => (\n <SelectGroup key={category}>\n <SelectLabel\n className={cn(\n 'text-[10px] font-semibold uppercase tracking-wider text-muted-foreground/70',\n 'px-2 py-1.5 bg-muted/50',\n idx > 0 && 'mt-1 border-t border-border/50'\n )}\n >\n {catLabel}\n </SelectLabel>\n {animations.map((anim) => (\n <SelectItem key={anim} value={anim}>\n {formatAnimationLabel(anim)}\n </SelectItem>\n ))}\n </SelectGroup>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Only show controls if animation is not 'none' */}\n {currentValue.entrance && currentValue.entrance !== 'none' && (\n <>\n {/* Timing Controls */}\n <div className=\"space-y-3 p-3 bg-muted/30 rounded-md\">\n <SliderRow\n label=\"Duration\"\n value={currentValue.entranceDuration ?? 500}\n min={100}\n max={2000}\n step={50}\n unit=\"ms\"\n onChange={(v) => updateField('entranceDuration', v)}\n disabled={readOnly}\n />\n <SliderRow\n label=\"Delay\"\n value={currentValue.entranceDelay ?? 0}\n min={0}\n max={2000}\n step={50}\n unit=\"ms\"\n onChange={(v) => updateField('entranceDelay', v)}\n disabled={readOnly}\n />\n </div>\n\n {/* Intensity Controls (context-aware) */}\n {hasIntensityControls && (\n <CollapsibleSection title=\"Intensity\">\n {intensityControls.showDistance && (\n <SliderRow\n label=\"Distance\"\n value={currentValue.distance ?? 24}\n min={8}\n max={200}\n step={4}\n unit=\"px\"\n onChange={(v) => updateField('distance', v)}\n disabled={readOnly}\n />\n )}\n {intensityControls.showScale && (\n <SliderRow\n label=\"Scale From\"\n value={Math.round((currentValue.scaleFrom ?? 0.9) * 100)}\n min={10}\n max={200}\n step={5}\n unit=\"%\"\n onChange={(v) => updateField('scaleFrom', v / 100)}\n disabled={readOnly}\n />\n )}\n {intensityControls.showRotate && (\n <SliderRow\n label=\"Rotation\"\n value={currentValue.rotateAngle ?? 15}\n min={-180}\n max={180}\n step={5}\n unit=\"deg\"\n onChange={(v) => updateField('rotateAngle', v)}\n disabled={readOnly}\n />\n )}\n {intensityControls.showBlur && (\n <SliderRow\n label=\"Blur\"\n value={currentValue.blurAmount ?? 8}\n min={0}\n max={50}\n step={1}\n unit=\"px\"\n onChange={(v) => updateField('blurAmount', v)}\n disabled={readOnly}\n />\n )}\n </CollapsibleSection>\n )}\n\n {/* Transform Origin */}\n <CollapsibleSection title=\"Transform Origin\">\n <div className=\"flex items-center justify-center\">\n <OriginGrid\n value={currentValue.origin ?? 'center'}\n onChange={(v) => updateField('origin', v)}\n disabled={readOnly}\n />\n </div>\n </CollapsibleSection>\n\n {/* Easing */}\n <CollapsibleSection title=\"Easing\">\n <Select\n value={currentValue.easing || 'ease'}\n onValueChange={(v) => updateField('easing', v as AdvancedEasingFunction)}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue placeholder=\"Select easing\" />\n </SelectTrigger>\n <SelectContent>\n {['Standard', 'Spring', 'Back', 'Elastic'].map((group, idx) => (\n <SelectGroup key={group}>\n <SelectLabel\n className={cn(\n 'text-[10px] font-semibold uppercase tracking-wider text-muted-foreground/70',\n 'px-2 py-1.5 bg-muted/50',\n idx > 0 && 'mt-1 border-t border-border/50'\n )}\n >\n {group}\n </SelectLabel>\n {EASING_OPTIONS.filter(e => e.group === group).map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectGroup>\n ))}\n </SelectContent>\n </Select>\n <p className=\"text-[10px] text-muted-foreground mt-2\">\n Spring and bounce easings create overshoot effects\n </p>\n </CollapsibleSection>\n\n {/* Scroll Trigger */}\n <CollapsibleSection title=\"Scroll Trigger\" defaultOpen>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"trigger-on-scroll\"\n checked={currentValue.triggerOnScroll ?? true}\n onCheckedChange={(checked) => updateField('triggerOnScroll', !!checked)}\n disabled={readOnly}\n />\n <Label htmlFor=\"trigger-on-scroll\" className=\"text-sm cursor-pointer\">\n Trigger on scroll\n </Label>\n </div>\n\n {currentValue.triggerOnScroll && (\n <>\n <SliderRow\n label=\"Threshold\"\n value={thresholdPercent}\n min={0}\n max={100}\n step={5}\n unit=\"%\"\n onChange={(v) => updateField('triggerThreshold', v / 100)}\n disabled={readOnly}\n />\n <p className=\"text-[10px] text-muted-foreground -mt-2\">\n Element visibility % before animation triggers\n </p>\n\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"animate-once\"\n checked={currentValue.triggerOnce ?? true}\n onCheckedChange={(checked) => updateField('triggerOnce', !!checked)}\n disabled={readOnly}\n />\n <Label htmlFor=\"animate-once\" className=\"text-sm cursor-pointer\">\n Animate only once\n </Label>\n </div>\n </>\n )}\n </div>\n </CollapsibleSection>\n\n {/* Stagger Controls (only for container components) */}\n {showStagger && (\n <CollapsibleSection title=\"Stagger Children\">\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"stagger-enabled\"\n checked={currentValue.stagger?.enabled ?? false}\n onCheckedChange={(checked) => updateStagger({ enabled: !!checked })}\n disabled={readOnly}\n />\n <Label htmlFor=\"stagger-enabled\" className=\"text-sm cursor-pointer\">\n Enable stagger\n </Label>\n </div>\n\n {currentValue.stagger?.enabled && (\n <>\n <SliderRow\n label=\"Delay Between\"\n value={currentValue.stagger?.delay ?? 100}\n min={50}\n max={500}\n step={25}\n unit=\"ms\"\n onChange={(v) => updateStagger({ delay: v })}\n disabled={readOnly}\n />\n\n <SliderRow\n label=\"Max Total Delay\"\n value={currentValue.stagger?.maxDelay ?? 2000}\n min={500}\n max={5000}\n step={100}\n unit=\"ms\"\n onChange={(v) => updateStagger({ maxDelay: v })}\n disabled={readOnly}\n />\n\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Direction\n </Label>\n <Select\n value={currentValue.stagger?.direction ?? 'forward'}\n onValueChange={(v) => updateStagger({ direction: v as StaggerDirection })}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"forward\">Forward</SelectItem>\n <SelectItem value=\"reverse\">Reverse</SelectItem>\n <SelectItem value=\"center\">From Center</SelectItem>\n <SelectItem value=\"edges\">From Edges</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </>\n )}\n </div>\n </CollapsibleSection>\n )}\n </>\n )}\n </div>\n )\n}\n\nexport const AnimationField = memo(AnimationFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateAnimationFieldConfig {\n label?: string\n /** Whether to show stagger controls (for container components like Flex, Grid) */\n showStagger?: boolean\n}\n\n/**\n * Creates a Puck field configuration for animation control\n *\n * @example\n * ```ts\n * fields: {\n * animation: createAnimationField({ label: 'Animation' }),\n * // For containers with child elements:\n * animation: createAnimationField({ label: 'Animation', showStagger: true }),\n * }\n * ```\n */\nexport function createAnimationField(config: CreateAnimationFieldConfig = {}): CustomField<AnimationValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <AnimationField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showStagger={config.showStagger}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * ResponsiveField - Generic wrapper for breakpoint-specific field overrides\n *\n * This component wraps any existing field to provide responsive overrides\n * at different breakpoints (xs, sm, md, lg, xl). It uses sparse storage,\n * only storing values for breakpoints that have explicit overrides.\n */\n\nimport React, { useState, useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n Smartphone,\n Tablet,\n Laptop,\n Monitor,\n X,\n} from 'lucide-react'\nimport { Button } from '../components/ui/button'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\nimport type { Breakpoint, ResponsiveValue } from './shared'\nimport { BREAKPOINTS } from './shared'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface ResponsiveFieldProps<T> {\n value: ResponsiveValue<T> | null\n onChange: (value: ResponsiveValue<T> | null) => void\n label?: string\n readOnly?: boolean\n /** Render function for the inner field */\n renderInnerField: (props: {\n value: T | null\n onChange: (v: T | null) => void\n readOnly?: boolean\n }) => React.ReactNode\n /** Default value for the xs breakpoint */\n defaultValue?: T\n}\n\n// =============================================================================\n// Breakpoint Icons\n// =============================================================================\n\nconst BREAKPOINT_ICONS: Record<Breakpoint, React.ComponentType<{ className?: string }>> = {\n xs: Smartphone,\n sm: Smartphone,\n md: Tablet,\n lg: Laptop,\n xl: Monitor,\n}\n\n// =============================================================================\n// Breakpoint Tab Button\n// =============================================================================\n\ninterface BreakpointTabProps {\n breakpoint: Breakpoint\n label: string\n minWidth: number | null\n isActive: boolean\n hasOverride: boolean\n onClick: () => void\n disabled?: boolean\n}\n\nfunction BreakpointTab({\n breakpoint,\n label,\n minWidth,\n isActive,\n hasOverride,\n onClick,\n disabled,\n}: BreakpointTabProps) {\n const Icon = BREAKPOINT_ICONS[breakpoint]\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={minWidth ? `${label} (${minWidth}px+)` : label}\n className={cn(\n 'relative flex items-center justify-center gap-1 px-2 py-1.5 text-xs font-medium rounded-md transition-colors flex-1',\n isActive\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80 hover:text-foreground',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n <span className=\"hidden sm:inline\">{label}</span>\n {/* Override indicator dot */}\n {hasOverride && !isActive && (\n <span className=\"absolute -top-0.5 -right-0.5 h-2 w-2 rounded-full bg-primary\" />\n )}\n </button>\n )\n}\n\n// =============================================================================\n// ResponsiveField Component\n// =============================================================================\n\nfunction ResponsiveFieldInner<T>({\n value,\n onChange,\n label,\n readOnly,\n renderInnerField,\n defaultValue,\n}: ResponsiveFieldProps<T>) {\n const [activeBreakpoint, setActiveBreakpoint] = useState<Breakpoint>('xs')\n\n // Get the current value for the active breakpoint\n // Falls back through the cascade: active -> smaller breakpoints -> xs -> default\n const getCurrentValue = useCallback((): T | null => {\n if (!value) return defaultValue ?? null\n\n // For xs, just return xs value\n if (activeBreakpoint === 'xs') {\n return value.xs ?? defaultValue ?? null\n }\n\n // For other breakpoints, return explicit override if set\n const override = value[activeBreakpoint]\n if (override !== undefined) {\n return override\n }\n\n // Otherwise cascade down to find the nearest defined value\n const breakpointOrder: Breakpoint[] = ['xl', 'lg', 'md', 'sm', 'xs']\n const activeIndex = breakpointOrder.indexOf(activeBreakpoint)\n\n for (let i = activeIndex + 1; i < breakpointOrder.length; i++) {\n const bp = breakpointOrder[i]\n const val = value[bp]\n if (val !== undefined) {\n return val\n }\n }\n\n return defaultValue ?? null\n }, [value, activeBreakpoint, defaultValue])\n\n // Check if a breakpoint has an explicit override\n const hasOverride = useCallback(\n (breakpoint: Breakpoint): boolean => {\n if (!value) return false\n if (breakpoint === 'xs') return value.xs !== undefined\n return value[breakpoint] !== undefined\n },\n [value]\n )\n\n // Handle value change for the active breakpoint\n const handleInnerChange = useCallback(\n (newValue: T | null) => {\n if (activeBreakpoint === 'xs') {\n // XS is required, so we always set it\n if (newValue === null && defaultValue !== undefined) {\n onChange({ ...value, xs: defaultValue } as ResponsiveValue<T>)\n } else if (newValue !== null) {\n onChange({ ...value, xs: newValue } as ResponsiveValue<T>)\n }\n } else {\n // For other breakpoints, set the override\n if (newValue === null) {\n // Remove the override\n const newResponsive = { ...value } as ResponsiveValue<T>\n delete newResponsive[activeBreakpoint]\n onChange(newResponsive)\n } else {\n // Ensure xs exists\n const xs = value?.xs ?? defaultValue\n if (xs === undefined) return\n onChange({\n ...value,\n xs,\n [activeBreakpoint]: newValue,\n } as ResponsiveValue<T>)\n }\n }\n },\n [value, onChange, activeBreakpoint, defaultValue]\n )\n\n // Clear override for current breakpoint\n const handleClearOverride = useCallback(() => {\n if (activeBreakpoint === 'xs' || !value) return\n\n const newResponsive = { ...value }\n delete newResponsive[activeBreakpoint]\n onChange(newResponsive)\n }, [value, onChange, activeBreakpoint])\n\n // Clear all values\n const handleClearAll = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const currentValue = getCurrentValue()\n const isOverrideBreakpoint = activeBreakpoint !== 'xs'\n const currentHasOverride = hasOverride(activeBreakpoint)\n\n // Count how many breakpoints have overrides (excluding xs)\n const overrideCount = value\n ? (['sm', 'md', 'lg', 'xl'] as Breakpoint[]).filter((bp) => value[bp] !== undefined).length\n : 0\n\n return (\n <div className=\"puck-field space-y-3\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">{label}</Label>\n {overrideCount > 0 && (\n <span className=\"text-xs text-muted-foreground bg-muted px-1.5 py-0.5 rounded\">\n {overrideCount} override{overrideCount !== 1 ? 's' : ''}\n </span>\n )}\n </div>\n )}\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClearAll}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Clear all values\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Breakpoint Tabs */}\n <div className=\"flex gap-1 bg-muted/50 p-1 rounded-lg\">\n {BREAKPOINTS.map((bp) => (\n <BreakpointTab\n key={bp.key}\n breakpoint={bp.key}\n label={bp.label}\n minWidth={bp.minWidth}\n isActive={activeBreakpoint === bp.key}\n hasOverride={hasOverride(bp.key)}\n onClick={() => setActiveBreakpoint(bp.key)}\n disabled={readOnly}\n />\n ))}\n </div>\n\n {/* Active Breakpoint Info */}\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>\n {activeBreakpoint === 'xs' ? (\n 'Extra small screens (0-639px)'\n ) : (\n <>\n {BREAKPOINTS.find((bp) => bp.key === activeBreakpoint)?.minWidth}px and up\n {!currentHasOverride && (\n <span className=\"text-muted-foreground/60\"> (inheriting from xs)</span>\n )}\n </>\n )}\n </span>\n\n {/* Clear Override Button */}\n {isOverrideBreakpoint && currentHasOverride && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClearOverride}\n className=\"h-6 px-2 text-xs text-muted-foreground hover:text-destructive\"\n >\n Clear override\n </Button>\n )}\n </div>\n\n {/* Inner Field */}\n <div className=\"border border-border rounded-md p-3\">\n {renderInnerField({\n value: currentValue,\n onChange: handleInnerChange,\n readOnly,\n })}\n </div>\n </div>\n )\n}\n\nexport const ResponsiveField = memo(ResponsiveFieldInner) as <T>(\n props: ResponsiveFieldProps<T>\n) => React.ReactElement\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateResponsiveFieldConfig<T> {\n label?: string\n /** Factory function that creates the inner field */\n innerField: (config: { label?: string }) => CustomField<T | null>\n /** Default value for base breakpoint */\n defaultValue?: T\n}\n\n/**\n * Creates a responsive wrapper around any Puck custom field.\n *\n * The inner field factory is called to get the field configuration,\n * and its render function is used to render the field at each breakpoint.\n *\n * @example\n * ```ts\n * // Create a responsive padding field\n * fields: {\n * padding: createResponsiveField({\n * label: 'Padding',\n * innerField: (config) => createPaddingField(config),\n * defaultValue: { top: 0, right: 0, bottom: 0, left: 0, unit: 'px', linked: true },\n * }),\n * }\n * ```\n */\nexport function createResponsiveField<T>(\n config: CreateResponsiveFieldConfig<T>\n): CustomField<ResponsiveValue<T> | null> {\n // Get the inner field configuration to access its render function\n const innerFieldConfig = config.innerField({ label: undefined })\n\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <ResponsiveField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n defaultValue={config.defaultValue}\n renderInnerField={(props) => {\n // Use the inner field's render function\n if (innerFieldConfig.type === 'custom' && innerFieldConfig.render) {\n return innerFieldConfig.render({\n field: innerFieldConfig,\n value: props.value,\n onChange: props.onChange,\n readOnly: props.readOnly,\n name: 'responsive-inner',\n id: 'responsive-inner',\n })\n }\n return null\n }}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * ResponsiveVisibilityField - Show/hide elements at different breakpoints\n *\n * Provides a compact visual interface for toggling element visibility\n * at each breakpoint (xs, sm, md, lg, xl). Simple independent toggles\n * like Elementor/Divi - each breakpoint is just on or off.\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n Smartphone,\n Tablet,\n Laptop,\n Monitor,\n Eye,\n EyeOff,\n} from 'lucide-react'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\nimport type { Breakpoint, VisibilityValue } from './shared'\nimport { BREAKPOINTS, DEFAULT_VISIBILITY } from './shared'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface ResponsiveVisibilityFieldProps {\n value: VisibilityValue | null\n onChange: (value: VisibilityValue | null) => void\n label?: string\n readOnly?: boolean\n}\n\n// =============================================================================\n// Breakpoint Icons\n// =============================================================================\n\nconst BREAKPOINT_ICONS: Record<Breakpoint, React.ComponentType<{ className?: string }>> = {\n xs: Smartphone,\n sm: Smartphone,\n md: Tablet,\n lg: Laptop,\n xl: Monitor,\n}\n\n// =============================================================================\n// Visibility Toggle Button\n// =============================================================================\n\ninterface VisibilityToggleProps {\n breakpoint: Breakpoint\n label: string\n minWidth: number | null\n isVisible: boolean\n onClick: () => void\n disabled?: boolean\n}\n\nfunction VisibilityToggle({\n breakpoint,\n label,\n minWidth,\n isVisible,\n onClick,\n disabled,\n}: VisibilityToggleProps) {\n const DeviceIcon = BREAKPOINT_ICONS[breakpoint]\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={`${label}${minWidth ? ` (${minWidth}px+)` : ''}: ${isVisible ? 'Visible' : 'Hidden'}`}\n className={cn(\n 'relative flex flex-col items-center justify-center gap-0.5 p-2 rounded-md transition-all flex-1 min-w-[52px]',\n isVisible\n ? 'bg-emerald-500/15 text-emerald-600 hover:bg-emerald-500/25 border border-emerald-500/40'\n : 'bg-red-500/15 text-red-500 hover:bg-red-500/25 border border-red-500/40',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <DeviceIcon className=\"h-4 w-4\" />\n <span className=\"text-[10px] font-medium\">{label}</span>\n {/* Visibility icon overlay */}\n <div className=\"absolute top-1 right-1\">\n {isVisible ? (\n <Eye className=\"h-3 w-3\" />\n ) : (\n <EyeOff className=\"h-3 w-3\" />\n )}\n </div>\n </button>\n )\n}\n\n// =============================================================================\n// ResponsiveVisibilityField Component\n// =============================================================================\n\nfunction ResponsiveVisibilityFieldInner({\n value,\n onChange,\n label,\n readOnly,\n}: ResponsiveVisibilityFieldProps) {\n // Get visibility for a breakpoint (simple lookup, no cascade)\n const getVisibility = useCallback(\n (breakpoint: Breakpoint): boolean => {\n const val = value ?? DEFAULT_VISIBILITY\n // All breakpoints have explicit values, default to true if undefined\n return val[breakpoint] ?? true\n },\n [value]\n )\n\n // Toggle visibility for a breakpoint (simple toggle, no cascade)\n const toggleVisibility = useCallback(\n (breakpoint: Breakpoint) => {\n const currentVisible = getVisibility(breakpoint)\n const newValue: VisibilityValue = {\n ...(value ?? DEFAULT_VISIBILITY),\n [breakpoint]: !currentVisible,\n }\n onChange(newValue)\n },\n [value, onChange, getVisibility]\n )\n\n // Check if any breakpoint is hidden\n const hasHiddenBreakpoints = BREAKPOINTS.some((bp) => !getVisibility(bp.key))\n\n return (\n <div className=\"puck-field space-y-2\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">{label}</Label>\n )}\n {hasHiddenBreakpoints && (\n <span className=\"text-xs text-amber-600 flex items-center gap-1\">\n <EyeOff className=\"h-3 w-3\" />\n Partially hidden\n </span>\n )}\n </div>\n\n {/* Visibility Grid */}\n <div className=\"flex gap-1\">\n {BREAKPOINTS.map((bp) => (\n <VisibilityToggle\n key={bp.key}\n breakpoint={bp.key}\n label={bp.label}\n minWidth={bp.minWidth}\n isVisible={getVisibility(bp.key)}\n onClick={() => toggleVisibility(bp.key)}\n disabled={readOnly}\n />\n ))}\n </div>\n\n {/* Help text */}\n <p className=\"text-xs text-muted-foreground\">\n Toggle visibility per screen size. Each breakpoint is independent.\n </p>\n </div>\n )\n}\n\nexport const ResponsiveVisibilityField = memo(ResponsiveVisibilityFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateResponsiveVisibilityFieldConfig {\n label?: string\n}\n\n/**\n * Creates a Puck custom field for responsive visibility control.\n *\n * @example\n * ```ts\n * fields: {\n * visibility: createResponsiveVisibilityField({ label: 'Visibility' }),\n * }\n * ```\n */\nexport function createResponsiveVisibilityField(\n config: CreateResponsiveVisibilityFieldConfig = {}\n): CustomField<VisibilityValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <ResponsiveVisibilityField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n />\n ),\n }\n}\n","/**\n * Container Component - Puck Configuration\n *\n * Content wrapper with max-width and background options.\n * Uses Puck's slot system for nesting other components.\n * Uses Tailwind classes for layout, inline styles for dynamic user values.\n *\n * Supports both preset options and advanced custom styling:\n * - Outer (Section): background, customPadding, border (applies to full-width wrapper)\n * - Inner (Content): innerBackground, innerPadding, innerBorder (applies to max-width container)\n *\n * Responsive Controls:\n * - dimensions: Different max-width at different breakpoints\n * - customPadding: Different outer padding at different breakpoints\n * - innerPadding: Different inner padding at different breakpoints\n * - margin: Different margins at different breakpoints\n * - visibility: Show/hide at different breakpoints\n */\n\nimport { useId } from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n dimensionsValueToCSS,\n borderValueToCSS,\n paddingValueToCSS,\n marginValueToCSS,\n backgroundValueToCSS,\n responsiveValueToCSS,\n visibilityValueToCSS,\n type PaddingValue,\n type BorderValue,\n type DimensionsValue,\n type BackgroundValue,\n type AnimationValue,\n type ResponsiveValue,\n type VisibilityValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createBorderField } from '../../fields/BorderField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createResetField } from '../../fields/ResetField'\nimport { createBackgroundField } from '../../fields/BackgroundField'\nimport { createAnimationField } from '../../fields/AnimationField'\nimport { createResponsiveField } from '../../fields/ResponsiveField'\nimport { createResponsiveVisibilityField } from '../../fields/ResponsiveVisibilityField'\n\n// Default dimensions for responsive field\nconst DEFAULT_DIMENSIONS: DimensionsValue = {\n mode: 'contained',\n alignment: 'center',\n maxWidth: { value: 1200, unit: 'px', enabled: true },\n}\n\n// Default padding for responsive field\nconst DEFAULT_PADDING: PaddingValue = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n unit: 'px',\n linked: true,\n}\n\nexport interface ContainerProps {\n content: unknown\n // Outer (section-level) options\n background: BackgroundValue | null\n customPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n dimensions: ResponsiveValue<DimensionsValue> | DimensionsValue | null\n border: BorderValue | null\n margin: ResponsiveValue<PaddingValue> | PaddingValue | null\n animation: AnimationValue | null\n // Inner (content container) options\n innerBackground: BackgroundValue | null\n innerPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n innerBorder: BorderValue | null\n // Responsive visibility\n visibility: VisibilityValue | null\n}\n\nconst defaultProps: ContainerProps = {\n content: [],\n background: null,\n customPadding: null,\n dimensions: null,\n border: null,\n margin: null,\n animation: null,\n innerBackground: null,\n innerPadding: null,\n innerBorder: null,\n visibility: null,\n}\n\nexport const ContainerConfig: ComponentConfig = {\n label: 'Container',\n fields: {\n _reset: createResetField({ defaultProps }),\n content: {\n type: 'slot',\n },\n // Responsive visibility control\n visibility: createResponsiveVisibilityField({ label: 'Visibility' }),\n // Outer (section-level) options\n background: createBackgroundField({ label: 'Outer Background' }),\n border: createBorderField({ label: 'Outer Border' }),\n // Responsive dimensions field\n dimensions: createResponsiveField({\n label: 'Dimensions (Responsive)',\n innerField: (config) => createDimensionsField(config),\n defaultValue: DEFAULT_DIMENSIONS,\n }),\n animation: createAnimationField({ label: 'Animation' }),\n // Inner (content container) options\n innerBackground: createBackgroundField({ label: 'Inner Background' }),\n innerBorder: createBorderField({ label: 'Inner Border' }),\n // Responsive inner padding\n innerPadding: createResponsiveField({\n label: 'Inner Padding (Responsive)',\n innerField: (config) => createPaddingField(config),\n defaultValue: DEFAULT_PADDING,\n }),\n // Spacing (grouped at bottom) - Responsive\n margin: createResponsiveField({\n label: 'Margin (Responsive)',\n innerField: (config) => createMarginField(config),\n defaultValue: DEFAULT_PADDING,\n }),\n customPadding: createResponsiveField({\n label: 'Outer Padding (Responsive)',\n innerField: (config) => createPaddingField(config),\n defaultValue: DEFAULT_PADDING,\n }),\n },\n defaultProps,\n render: ({\n content: Content,\n background,\n customPadding,\n dimensions,\n border,\n margin,\n animation,\n innerBackground,\n innerPadding,\n innerBorder,\n visibility,\n }) => {\n // Generate unique IDs for CSS targeting\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const uniqueId = useId().replace(/:/g, '')\n const outerClass = `puck-container-outer-${uniqueId}`\n const innerClass = `puck-container-inner-${uniqueId}`\n\n // Collect all media query CSS\n const mediaQueries: string[] = []\n\n // Generate outer wrapper styles from BackgroundValue\n const outerBackgroundStyles = backgroundValueToCSS(background)\n const outerStyles: React.CSSProperties = {\n ...outerBackgroundStyles,\n }\n\n // Add outer padding with responsive support\n const outerPaddingResult = responsiveValueToCSS(\n customPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n outerClass\n )\n Object.assign(outerStyles, outerPaddingResult.baseStyles)\n if (outerPaddingResult.mediaQueryCSS) {\n mediaQueries.push(outerPaddingResult.mediaQueryCSS)\n }\n\n // Add outer border if set\n const outerBorderStyles = borderValueToCSS(border)\n if (outerBorderStyles) {\n Object.assign(outerStyles, outerBorderStyles)\n }\n\n // Add margin with responsive support\n const marginResult = responsiveValueToCSS(\n margin,\n (v) => ({ margin: marginValueToCSS(v) }),\n outerClass\n )\n Object.assign(outerStyles, marginResult.baseStyles)\n if (marginResult.mediaQueryCSS) {\n mediaQueries.push(marginResult.mediaQueryCSS)\n }\n\n // Generate inner container styles\n const innerBackgroundStyles = backgroundValueToCSS(innerBackground)\n const innerStyles: React.CSSProperties = {\n ...innerBackgroundStyles,\n }\n\n // Dimensions with responsive support\n const dimensionsResult = responsiveValueToCSS(\n dimensions,\n dimensionsValueToCSS,\n innerClass\n )\n Object.assign(innerStyles, dimensionsResult.baseStyles)\n if (dimensionsResult.mediaQueryCSS) {\n mediaQueries.push(dimensionsResult.mediaQueryCSS)\n }\n\n // Inner padding with responsive support\n const innerPaddingResult = responsiveValueToCSS(\n innerPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n innerClass\n )\n Object.assign(innerStyles, innerPaddingResult.baseStyles)\n if (innerPaddingResult.mediaQueryCSS) {\n mediaQueries.push(innerPaddingResult.mediaQueryCSS)\n }\n\n // Inner border\n const innerBorderStyles = borderValueToCSS(innerBorder)\n if (innerBorderStyles) {\n Object.assign(innerStyles, innerBorderStyles)\n }\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, outerClass)\n if (visibilityCSS) {\n mediaQueries.push(visibilityCSS)\n }\n\n const contentClasses = cn('px-4', innerClass)\n\n // Check if we have any inner styling\n const hasInnerStyles = Object.keys(innerStyles).length > 0\n\n // Combine all media queries\n const allMediaQueryCSS = mediaQueries.join('\\n')\n\n return (\n <AnimatedWrapper animation={animation}>\n {allMediaQueryCSS && <style>{allMediaQueryCSS}</style>}\n <div className={outerClass} style={outerStyles}>\n {hasInnerStyles ? (\n <div className={contentClasses} style={innerStyles}>\n <Content />\n </div>\n ) : (\n <Content className={contentClasses} style={innerStyles} />\n )}\n </div>\n </AnimatedWrapper>\n )\n },\n}\n","'use client'\n\n/**\n * FlexAlignmentField - Icon toggle buttons for flexbox alignment properties\n *\n * Provides two specialized fields:\n * - JustifyContentField: Controls main-axis distribution (horizontal in row, vertical in column)\n * - AlignItemsField: Controls cross-axis alignment (vertical in row, horizontal in column)\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n AlignLeft,\n AlignCenter,\n AlignRight,\n AlignHorizontalDistributeCenter,\n GripHorizontal,\n AlignStartVertical,\n AlignCenterVertical,\n AlignEndVertical,\n MoveVertical,\n X,\n} from 'lucide-react'\nimport { Button } from '../components/ui/button'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type JustifyContent = 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'\nexport type AlignItems = 'flex-start' | 'center' | 'flex-end' | 'stretch'\n\ninterface JustifyContentFieldProps {\n value: JustifyContent | null\n onChange: (value: JustifyContent | null) => void\n label?: string\n readOnly?: boolean\n defaultValue?: JustifyContent\n}\n\ninterface AlignItemsFieldProps {\n value: AlignItems | null\n onChange: (value: AlignItems | null) => void\n label?: string\n readOnly?: boolean\n defaultValue?: AlignItems\n}\n\n// =============================================================================\n// JustifyContentField Component\n// =============================================================================\n\nfunction JustifyContentFieldInner({\n value,\n onChange,\n label = 'Justify Content',\n readOnly,\n defaultValue = 'flex-start',\n}: JustifyContentFieldProps) {\n const currentValue = value ?? defaultValue\n\n const handleChange = useCallback((justifyContent: JustifyContent) => {\n onChange(justifyContent)\n }, [onChange])\n\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const options = [\n { value: 'flex-start' as JustifyContent, icon: AlignLeft, title: 'Start' },\n { value: 'center' as JustifyContent, icon: AlignCenter, title: 'Center' },\n { value: 'flex-end' as JustifyContent, icon: AlignRight, title: 'End' },\n { value: 'space-between' as JustifyContent, icon: AlignHorizontalDistributeCenter, title: 'Space Between' },\n { value: 'space-around' as JustifyContent, icon: GripHorizontal, title: 'Space Around' },\n ]\n\n return (\n <div className=\"puck-field space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n <div className=\"flex gap-1\">\n {options.map(({ value: optionValue, icon: Icon, title }) => {\n const isActive = currentValue === optionValue\n return (\n <Button\n key={optionValue}\n type=\"button\"\n variant={isActive ? 'default' : 'secondary'}\n size=\"icon\"\n onClick={() => handleChange(optionValue)}\n disabled={readOnly}\n className={cn(\n \"h-8 w-8\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n title={title}\n >\n <Icon className=\"h-4 w-4\" />\n </Button>\n )\n })}\n </div>\n </div>\n )\n}\n\nexport const JustifyContentField = memo(JustifyContentFieldInner)\n\n// =============================================================================\n// AlignItemsField Component\n// =============================================================================\n\nfunction AlignItemsFieldInner({\n value,\n onChange,\n label = 'Align Items',\n readOnly,\n defaultValue = 'center',\n}: AlignItemsFieldProps) {\n const currentValue = value ?? defaultValue\n\n const handleChange = useCallback((alignItems: AlignItems) => {\n onChange(alignItems)\n }, [onChange])\n\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const options = [\n { value: 'flex-start' as AlignItems, icon: AlignStartVertical, title: 'Start' },\n { value: 'center' as AlignItems, icon: AlignCenterVertical, title: 'Center' },\n { value: 'flex-end' as AlignItems, icon: AlignEndVertical, title: 'End' },\n { value: 'stretch' as AlignItems, icon: MoveVertical, title: 'Stretch' },\n ]\n\n return (\n <div className=\"puck-field space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n <div className=\"flex gap-1\">\n {options.map(({ value: optionValue, icon: Icon, title }) => {\n const isActive = currentValue === optionValue\n return (\n <Button\n key={optionValue}\n type=\"button\"\n variant={isActive ? 'default' : 'secondary'}\n size=\"icon\"\n onClick={() => handleChange(optionValue)}\n disabled={readOnly}\n className={cn(\n \"h-8 w-8\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n title={title}\n >\n <Icon className=\"h-4 w-4\" />\n </Button>\n )\n })}\n </div>\n </div>\n )\n}\n\nexport const AlignItemsField = memo(AlignItemsFieldInner)\n\n// =============================================================================\n// Field Configuration Factories\n// =============================================================================\n\ninterface CreateJustifyContentFieldConfig {\n label?: string\n defaultValue?: JustifyContent\n}\n\ninterface CreateAlignItemsFieldConfig {\n label?: string\n defaultValue?: AlignItems\n}\n\n/**\n * Creates a Puck field configuration for flex justify-content control\n *\n * @example\n * ```ts\n * fields: {\n * justifyContent: createJustifyContentField({ label: 'Justify Content' }),\n * }\n * ```\n */\nexport function createJustifyContentField(\n config: CreateJustifyContentFieldConfig = {}\n): CustomField<JustifyContent | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <JustifyContentField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n defaultValue={config.defaultValue}\n />\n ),\n }\n}\n\n/**\n * Creates a Puck field configuration for flex align-items control\n *\n * @example\n * ```ts\n * fields: {\n * alignItems: createAlignItemsField({ label: 'Align Items' }),\n * }\n * ```\n */\nexport function createAlignItemsField(\n config: CreateAlignItemsFieldConfig = {}\n): CustomField<AlignItems | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <AlignItemsField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n defaultValue={config.defaultValue}\n />\n ),\n }\n}\n","/**\n * Flex Component - Puck Configuration\n *\n * Flexbox layout following official Puck demo patterns.\n * Uses Tailwind classes for layout, inline styles for dynamic user values.\n *\n * Supports both preset options and advanced custom styling:\n * - Background: unified BackgroundField (solid, gradient, or image)\n * - Advanced: customPadding, customWidth, border\n *\n * Responsive Controls:\n * - dimensions: Different dimensions at different breakpoints\n * - customPadding: Different padding at different breakpoints\n * - margin: Different margins at different breakpoints\n * - visibility: Show/hide at different breakpoints\n */\n\nimport { useId } from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n dimensionsValueToCSS,\n marginValueToCSS,\n paddingValueToCSS,\n borderValueToCSS,\n backgroundValueToCSS,\n responsiveValueToCSS,\n visibilityValueToCSS,\n justifyContentMap,\n alignItemsMap,\n type PaddingValue,\n type BorderValue,\n type DimensionsValue,\n type BackgroundValue,\n type AnimationValue,\n type ResponsiveValue,\n type VisibilityValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createBorderField } from '../../fields/BorderField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createResetField } from '../../fields/ResetField'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createBackgroundField } from '../../fields/BackgroundField'\nimport { createAnimationField } from '../../fields/AnimationField'\nimport { createResponsiveField } from '../../fields/ResponsiveField'\nimport { createResponsiveVisibilityField } from '../../fields/ResponsiveVisibilityField'\nimport {\n createJustifyContentField,\n createAlignItemsField,\n type JustifyContent,\n type AlignItems,\n} from '../../fields/FlexAlignmentField'\n\n// Tailwind class mappings for flex properties\nconst flexDirectionMap: Record<string, string> = {\n row: 'flex-row',\n column: 'flex-col',\n 'row-reverse': 'flex-row-reverse',\n 'column-reverse': 'flex-col-reverse',\n}\n\nconst flexWrapMap: Record<string, string> = {\n wrap: 'flex-wrap',\n nowrap: 'flex-nowrap',\n 'wrap-reverse': 'flex-wrap-reverse',\n}\n\n// Default values for responsive fields\nconst DEFAULT_PADDING: PaddingValue = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n unit: 'px',\n linked: true,\n}\n\nconst DEFAULT_DIMENSIONS: DimensionsValue = {\n mode: 'full',\n alignment: 'center',\n maxWidth: { value: 100, unit: '%', enabled: true },\n}\n\nexport interface FlexProps {\n content: unknown\n direction: 'row' | 'column'\n justifyContent: JustifyContent | null\n alignItems: AlignItems | null\n gap: number\n wrap: 'wrap' | 'nowrap'\n // Background\n background: BackgroundValue | null\n // Advanced custom options\n customPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n margin: ResponsiveValue<PaddingValue> | PaddingValue | null\n dimensions: ResponsiveValue<DimensionsValue> | DimensionsValue | null\n border: BorderValue | null\n animation: AnimationValue | null\n // Responsive visibility\n visibility: VisibilityValue | null\n}\n\nconst defaultProps: FlexProps = {\n content: [],\n direction: 'row',\n justifyContent: null,\n alignItems: null,\n gap: 24,\n wrap: 'wrap',\n background: null,\n customPadding: null,\n margin: null,\n dimensions: null,\n border: null,\n animation: null,\n visibility: null,\n}\n\nexport const FlexConfig: ComponentConfig = {\n label: 'Flex',\n fields: {\n _reset: createResetField({ defaultProps }),\n content: {\n type: 'slot',\n disallow: ['Section'],\n },\n // Responsive visibility control\n visibility: createResponsiveVisibilityField({ label: 'Visibility' }),\n direction: {\n type: 'radio',\n label: 'Direction',\n options: [\n { label: 'Row', value: 'row' },\n { label: 'Column', value: 'column' },\n ],\n },\n justifyContent: createJustifyContentField({ label: 'Justify Content' }),\n alignItems: createAlignItemsField({ label: 'Align Items' }),\n gap: {\n type: 'number',\n label: 'Gap (px)',\n min: 0,\n },\n wrap: {\n type: 'radio',\n label: 'Wrap',\n options: [\n { label: 'Yes', value: 'wrap' },\n { label: 'No', value: 'nowrap' },\n ],\n },\n // Background\n background: createBackgroundField({ label: 'Background' }),\n // Advanced custom options\n border: createBorderField({ label: 'Border' }),\n // Responsive dimensions\n dimensions: createResponsiveField({\n label: 'Dimensions (Responsive)',\n innerField: (config) => createDimensionsField(config),\n defaultValue: DEFAULT_DIMENSIONS,\n }),\n animation: createAnimationField({ label: 'Animation' }),\n // Spacing (grouped at bottom) - Responsive\n margin: createResponsiveField({\n label: 'Margin (Responsive)',\n innerField: (config) => createMarginField(config),\n defaultValue: DEFAULT_PADDING,\n }),\n customPadding: createResponsiveField({\n label: 'Padding (Responsive)',\n innerField: (config) => createPaddingField(config),\n defaultValue: DEFAULT_PADDING,\n }),\n },\n defaultProps,\n render: ({\n content: Content,\n direction,\n justifyContent,\n alignItems,\n gap,\n wrap,\n background,\n customPadding,\n margin,\n dimensions,\n border,\n animation,\n visibility,\n }) => {\n // Generate unique IDs for CSS targeting\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const uniqueId = useId().replace(/:/g, '')\n const wrapperClass = `puck-flex-${uniqueId}`\n const contentClass = `puck-flex-content-${uniqueId}`\n\n // Collect all media query CSS\n const mediaQueries: string[] = []\n\n // Generate styles from BackgroundValue\n const backgroundStyles = backgroundValueToCSS(background)\n\n // Build wrapper styles\n const wrapperStyles: React.CSSProperties = {\n ...backgroundStyles,\n }\n\n // Add padding with responsive support\n const paddingResult = responsiveValueToCSS(\n customPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, paddingResult.baseStyles)\n if (paddingResult.mediaQueryCSS) {\n mediaQueries.push(paddingResult.mediaQueryCSS)\n }\n\n // Add border if set\n const borderStyles = borderValueToCSS(border)\n if (borderStyles) {\n Object.assign(wrapperStyles, borderStyles)\n }\n\n // Apply margin with responsive support\n const marginResult = responsiveValueToCSS(\n margin,\n (v) => ({ margin: marginValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, marginResult.baseStyles)\n if (marginResult.mediaQueryCSS) {\n mediaQueries.push(marginResult.mediaQueryCSS)\n }\n\n // Use dimensions with responsive support\n const dimensionsResult = responsiveValueToCSS(\n dimensions,\n dimensionsValueToCSS,\n contentClass\n )\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, wrapperClass)\n if (visibilityCSS) {\n mediaQueries.push(visibilityCSS)\n }\n\n // Build Tailwind classes for flex layout\n // [&>*]:min-w-0 prevents flex children from overflowing (CSS best practice)\n const contentClasses = cn(\n 'flex w-full min-h-[50px]',\n flexDirectionMap[direction],\n justifyContent && justifyContentMap[justifyContent],\n alignItems && alignItemsMap[alignItems],\n flexWrapMap[wrap],\n '[&>*]:min-w-0',\n contentClass,\n )\n\n // Dynamic styles that need inline (user-controlled values)\n const contentStyles: React.CSSProperties = {\n gap,\n ...dimensionsResult.baseStyles,\n }\n if (dimensionsResult.mediaQueryCSS) {\n mediaQueries.push(dimensionsResult.mediaQueryCSS)\n }\n\n // Combine all media queries\n const allMediaQueryCSS = mediaQueries.join('\\n')\n\n return (\n <AnimatedWrapper animation={animation}>\n {allMediaQueryCSS && <style>{allMediaQueryCSS}</style>}\n <div className={wrapperClass} style={wrapperStyles}>\n <Content className={contentClasses} style={contentStyles} />\n </div>\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Grid Component - Puck Configuration\n *\n * CSS Grid layout following official Puck demo patterns.\n * Responsive: stacks on mobile (flex column), grid on desktop (md+).\n * Uses Tailwind classes for layout, inline styles for dynamic user values.\n *\n * Supports both preset options and advanced custom styling:\n * - Background: unified BackgroundField (solid, gradient, or image)\n * - Advanced: customPadding, customWidth, border\n *\n * Responsive Controls:\n * - gap: Different gap at different breakpoints\n * - visibility: Show/hide at different breakpoints\n */\n\nimport { useId } from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n dimensionsValueToCSS,\n marginValueToCSS,\n paddingValueToCSS,\n borderValueToCSS,\n backgroundValueToCSS,\n responsiveValueToCSS,\n visibilityValueToCSS,\n isResponsiveValue,\n type PaddingValue,\n type BorderValue,\n type DimensionsValue,\n type BackgroundValue,\n type AnimationValue,\n type ResponsiveValue,\n type VisibilityValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createBorderField } from '../../fields/BorderField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createResetField } from '../../fields/ResetField'\nimport { createBackgroundField } from '../../fields/BackgroundField'\nimport { createAnimationField } from '../../fields/AnimationField'\nimport { createResponsiveField } from '../../fields/ResponsiveField'\nimport { createResponsiveVisibilityField } from '../../fields/ResponsiveVisibilityField'\n\n// Default values for responsive fields\nconst DEFAULT_PADDING: PaddingValue = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n unit: 'px',\n linked: true,\n}\n\nconst DEFAULT_DIMENSIONS: DimensionsValue = {\n mode: 'full',\n alignment: 'center',\n maxWidth: { value: 100, unit: '%', enabled: true },\n}\n\nexport interface GridProps {\n content: unknown\n numColumns: number\n gap: number\n // Background\n background: BackgroundValue | null\n // Advanced custom options\n customPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n dimensions: ResponsiveValue<DimensionsValue> | DimensionsValue | null\n border: BorderValue | null\n margin: ResponsiveValue<PaddingValue> | PaddingValue | null\n animation: AnimationValue | null\n // Responsive visibility\n visibility: VisibilityValue | null\n}\n\nconst defaultProps: GridProps = {\n content: [],\n numColumns: 3,\n gap: 24,\n background: null,\n customPadding: null,\n dimensions: null,\n border: null,\n margin: null,\n animation: null,\n visibility: null,\n}\n\nexport const GridConfig: ComponentConfig = {\n label: 'Grid',\n fields: {\n _reset: createResetField({ defaultProps }),\n content: {\n type: 'slot',\n disallow: ['Section'],\n },\n // Responsive visibility control\n visibility: createResponsiveVisibilityField({ label: 'Visibility' }),\n numColumns: {\n type: 'number',\n label: 'Number of Columns',\n min: 1,\n max: 12,\n },\n gap: {\n type: 'number',\n label: 'Gap (px)',\n min: 0,\n },\n // Background\n background: createBackgroundField({ label: 'Background' }),\n // Advanced custom options\n border: createBorderField({ label: 'Border' }),\n // Responsive dimensions\n dimensions: createResponsiveField({\n label: 'Dimensions (Responsive)',\n innerField: (config) => createDimensionsField(config),\n defaultValue: DEFAULT_DIMENSIONS,\n }),\n animation: createAnimationField({ label: 'Animation' }),\n // Spacing (grouped at bottom) - Responsive\n margin: createResponsiveField({\n label: 'Margin (Responsive)',\n innerField: (config) => createMarginField(config),\n defaultValue: DEFAULT_PADDING,\n }),\n customPadding: createResponsiveField({\n label: 'Padding (Responsive)',\n innerField: (config) => createPaddingField(config),\n defaultValue: DEFAULT_PADDING,\n }),\n },\n defaultProps,\n render: ({\n content: Content,\n numColumns,\n gap,\n background,\n customPadding,\n dimensions,\n border,\n margin,\n animation,\n visibility,\n }) => {\n // Generate unique IDs for CSS targeting\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const uniqueId = useId().replace(/:/g, '')\n const wrapperClass = `puck-grid-${uniqueId}`\n const contentClass = `puck-grid-content-${uniqueId}`\n\n // Collect all media query CSS\n const mediaQueries: string[] = []\n\n // Generate styles from BackgroundValue\n const backgroundStyles = backgroundValueToCSS(background)\n\n // Build wrapper styles\n const wrapperStyles: React.CSSProperties = {\n ...backgroundStyles,\n }\n\n // Add padding with responsive support\n const paddingResult = responsiveValueToCSS(\n customPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, paddingResult.baseStyles)\n if (paddingResult.mediaQueryCSS) {\n mediaQueries.push(paddingResult.mediaQueryCSS)\n }\n\n // Add border if set\n const borderStyles = borderValueToCSS(border)\n if (borderStyles) {\n Object.assign(wrapperStyles, borderStyles)\n }\n\n // Add margin with responsive support\n const marginResult = responsiveValueToCSS(\n margin,\n (v) => ({ margin: marginValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, marginResult.baseStyles)\n if (marginResult.mediaQueryCSS) {\n mediaQueries.push(marginResult.mediaQueryCSS)\n }\n\n // Use dimensions with responsive support\n const dimensionsResult = responsiveValueToCSS(\n dimensions,\n dimensionsValueToCSS,\n contentClass\n )\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, wrapperClass)\n if (visibilityCSS) {\n mediaQueries.push(visibilityCSS)\n }\n\n // Tailwind classes for responsive grid: flex column on mobile, grid on md+\n const contentClasses = cn(\n 'flex flex-col w-full',\n 'md:grid',\n contentClass,\n )\n\n // Dynamic styles that need inline (user-controlled values: gap, columns)\n const contentStyles: React.CSSProperties = {\n gap,\n ...dimensionsResult.baseStyles,\n }\n if (dimensionsResult.mediaQueryCSS) {\n mediaQueries.push(dimensionsResult.mediaQueryCSS)\n }\n\n // Grid template columns must be inline since numColumns is dynamic\n const gridStyles: React.CSSProperties = {\n ...contentStyles,\n '--grid-cols': numColumns,\n } as React.CSSProperties\n\n // Combine all media queries\n const allMediaQueryCSS = mediaQueries.join('\\n')\n\n return (\n <AnimatedWrapper animation={animation}>\n {allMediaQueryCSS && <style>{allMediaQueryCSS}</style>}\n <div className={wrapperClass} style={wrapperStyles}>\n <Content\n className={contentClasses}\n style={gridStyles}\n />\n <style>{`\n @media (min-width: 768px) {\n .flex.md\\\\:grid {\n grid-template-columns: repeat(var(--grid-cols), 1fr);\n }\n }\n `}</style>\n </div>\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Section Component - Puck Configuration\n *\n * Full-width section with background options and content slot.\n * Used as a top-level page section wrapper.\n * Uses Tailwind classes for layout, inline styles for dynamic user values.\n *\n * Supports both preset options and advanced custom styling:\n * - Background: unified BackgroundField (solid, gradient, or image)\n * - Advanced: customPadding, customWidth, border\n *\n * Responsive Controls:\n * - dimensions: Different dimensions at different breakpoints\n * - customPadding: Different padding at different breakpoints\n * - margin: Different margins at different breakpoints\n * - visibility: Show/hide at different breakpoints\n */\n\nimport { useId } from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n dimensionsValueToCSS,\n marginValueToCSS,\n paddingValueToCSS,\n borderValueToCSS,\n backgroundValueToCSS,\n responsiveValueToCSS,\n visibilityValueToCSS,\n type PaddingValue,\n type BorderValue,\n type DimensionsValue,\n type BackgroundValue,\n type AnimationValue,\n type ResponsiveValue,\n type VisibilityValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createBorderField } from '../../fields/BorderField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createResetField } from '../../fields/ResetField'\nimport { createBackgroundField } from '../../fields/BackgroundField'\nimport { createAnimationField } from '../../fields/AnimationField'\nimport { createResponsiveField } from '../../fields/ResponsiveField'\nimport { createResponsiveVisibilityField } from '../../fields/ResponsiveVisibilityField'\n\n// Default values for responsive fields\nconst DEFAULT_PADDING: PaddingValue = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n unit: 'px',\n linked: true,\n}\n\nconst DEFAULT_DIMENSIONS: DimensionsValue = {\n mode: 'full',\n alignment: 'center',\n maxWidth: { value: 100, unit: '%', enabled: true },\n}\n\nexport interface SectionProps {\n id: string\n content: unknown\n // Background\n background: BackgroundValue | null\n fullWidth: boolean\n // Advanced custom options\n customPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n dimensions: ResponsiveValue<DimensionsValue> | DimensionsValue | null\n border: BorderValue | null\n margin: ResponsiveValue<PaddingValue> | PaddingValue | null\n animation: AnimationValue | null\n // Responsive visibility\n visibility: VisibilityValue | null\n}\n\nconst defaultProps: SectionProps = {\n id: '',\n content: [],\n background: null,\n fullWidth: false,\n customPadding: null,\n dimensions: null,\n border: null,\n margin: null,\n animation: null,\n visibility: null,\n}\n\nexport const SectionConfig: ComponentConfig = {\n label: 'Section',\n fields: {\n _reset: createResetField({ defaultProps }),\n id: {\n type: 'text',\n label: 'Section ID',\n },\n content: {\n type: 'slot',\n },\n // Responsive visibility control\n visibility: createResponsiveVisibilityField({ label: 'Visibility' }),\n fullWidth: {\n type: 'radio',\n label: 'Full Width Content',\n options: [\n { label: 'Yes', value: true },\n { label: 'No', value: false },\n ],\n },\n // Background\n background: createBackgroundField({ label: 'Background' }),\n // Advanced custom options\n border: createBorderField({ label: 'Border' }),\n // Responsive dimensions\n dimensions: createResponsiveField({\n label: 'Dimensions (Responsive)',\n innerField: (config) => createDimensionsField(config),\n defaultValue: DEFAULT_DIMENSIONS,\n }),\n animation: createAnimationField({ label: 'Animation' }),\n // Spacing (grouped at bottom) - Responsive\n margin: createResponsiveField({\n label: 'Margin (Responsive)',\n innerField: (config) => createMarginField(config),\n defaultValue: DEFAULT_PADDING,\n }),\n customPadding: createResponsiveField({\n label: 'Padding (Responsive)',\n innerField: (config) => createPaddingField(config),\n defaultValue: DEFAULT_PADDING,\n }),\n },\n defaultProps,\n render: ({\n id,\n content: Content,\n background,\n fullWidth,\n customPadding,\n dimensions,\n border,\n margin,\n animation,\n visibility,\n }) => {\n // Generate unique IDs for CSS targeting\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const uniqueId = useId().replace(/:/g, '')\n const sectionClass = `puck-section-${uniqueId}`\n const contentClass = `puck-section-content-${uniqueId}`\n\n // Collect all media query CSS\n const mediaQueries: string[] = []\n\n // Generate styles from BackgroundValue\n const backgroundStyles = backgroundValueToCSS(background)\n\n // Build section styles\n const sectionStyles: React.CSSProperties = {\n ...backgroundStyles,\n }\n\n // Add padding with responsive support\n const paddingResult = responsiveValueToCSS(\n customPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n sectionClass\n )\n Object.assign(sectionStyles, paddingResult.baseStyles)\n if (paddingResult.mediaQueryCSS) {\n mediaQueries.push(paddingResult.mediaQueryCSS)\n }\n\n // Add border if set\n const borderStyles = borderValueToCSS(border)\n if (borderStyles) {\n Object.assign(sectionStyles, borderStyles)\n }\n\n // Add margin with responsive support\n const marginResult = responsiveValueToCSS(\n margin,\n (v) => ({ margin: marginValueToCSS(v) }),\n sectionClass\n )\n Object.assign(sectionStyles, marginResult.baseStyles)\n if (marginResult.mediaQueryCSS) {\n mediaQueries.push(marginResult.mediaQueryCSS)\n }\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, sectionClass)\n if (visibilityCSS) {\n mediaQueries.push(visibilityCSS)\n }\n\n const sectionClasses = cn('relative w-full', sectionClass)\n\n // Use dimensions with responsive support\n const dimensionsResult = responsiveValueToCSS(\n dimensions,\n dimensionsValueToCSS,\n contentClass\n )\n if (dimensionsResult.mediaQueryCSS) {\n mediaQueries.push(dimensionsResult.mediaQueryCSS)\n }\n\n const contentClasses = cn(\n 'relative z-10',\n // Only apply preset content width if no dimensions set\n !dimensions && !fullWidth && 'max-w-[1200px] mx-auto px-4',\n contentClass,\n )\n\n // Combine all media queries\n const allMediaQueryCSS = mediaQueries.join('\\n')\n\n return (\n <AnimatedWrapper animation={animation}>\n {allMediaQueryCSS && <style>{allMediaQueryCSS}</style>}\n <section\n id={id || undefined}\n className={sectionClasses}\n style={sectionStyles}\n >\n <Content className={contentClasses} style={dimensionsResult.baseStyles} />\n </section>\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Spacer Component - Puck Configuration\n *\n * Simple spacing component for adding vertical or horizontal space.\n * Uses Tailwind classes for layout and sizing from predefined options.\n *\n * Responsive Controls:\n * - visibility: Show/hide at different breakpoints\n */\n\nimport { useId } from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport { cn, visibilityValueToCSS, type VisibilityValue } from '../../fields/shared'\nimport { createResetField } from '../../fields/ResetField'\nimport { createResponsiveVisibilityField } from '../../fields/ResponsiveVisibilityField'\n\nconst spacingOptions = [\n { label: '8px', value: '8px' },\n { label: '16px', value: '16px' },\n { label: '24px', value: '24px' },\n { label: '32px', value: '32px' },\n { label: '48px', value: '48px' },\n { label: '64px', value: '64px' },\n { label: '80px', value: '80px' },\n { label: '96px', value: '96px' },\n { label: '128px', value: '128px' },\n]\n\n// Tailwind height classes for predefined spacing options\nconst heightMap: Record<string, string> = {\n '8px': 'h-2',\n '16px': 'h-4',\n '24px': 'h-6',\n '32px': 'h-8',\n '48px': 'h-12',\n '64px': 'h-16',\n '80px': 'h-20',\n '96px': 'h-24',\n '128px': 'h-32',\n}\n\n// Tailwind width classes for predefined spacing options\nconst widthMap: Record<string, string> = {\n '8px': 'w-2',\n '16px': 'w-4',\n '24px': 'w-6',\n '32px': 'w-8',\n '48px': 'w-12',\n '64px': 'w-16',\n '80px': 'w-20',\n '96px': 'w-24',\n '128px': 'w-32',\n}\n\nexport interface SpacerProps {\n size: string\n direction: 'vertical' | 'horizontal' | 'both'\n visibility: VisibilityValue | null\n}\n\nconst defaultProps: SpacerProps = {\n size: '24px',\n direction: 'vertical',\n visibility: null,\n}\n\nexport const SpacerConfig: ComponentConfig = {\n label: 'Spacer',\n fields: {\n _reset: createResetField({ defaultProps }),\n // Responsive visibility control\n visibility: createResponsiveVisibilityField({ label: 'Visibility' }),\n size: {\n type: 'select',\n label: 'Size',\n options: spacingOptions,\n },\n direction: {\n type: 'radio',\n label: 'Direction',\n options: [\n { label: 'Vertical', value: 'vertical' },\n { label: 'Horizontal', value: 'horizontal' },\n { label: 'Both', value: 'both' },\n ],\n },\n },\n defaultProps,\n render: ({ size, direction, visibility }) => {\n // Generate unique ID for CSS targeting\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const uniqueId = useId().replace(/:/g, '')\n const wrapperClass = `puck-spacer-${uniqueId}`\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, wrapperClass)\n\n const getClasses = (): string => {\n const heightClass = heightMap[size] || 'h-6'\n const widthClass = widthMap[size] || 'w-6'\n\n if (direction === 'vertical') {\n return `block ${heightClass} w-full`\n }\n if (direction === 'horizontal') {\n return `inline-block ${widthClass} h-full`\n }\n // both\n return `block ${heightClass} ${widthClass}`\n }\n\n return (\n <>\n {visibilityCSS && <style>{visibilityCSS}</style>}\n <div className={cn(getClasses(), wrapperClass)} aria-hidden=\"true\" />\n </>\n )\n },\n}\n","'use client'\n\n/**\n * TemplateField - Custom Puck field for saving/loading template content\n *\n * This component provides a template picker that:\n * - Fetches templates from the puck-templates Payload collection\n * - Shows a dropdown to select a template\n * - Has a \"Save as template\" button to save current slot content\n * - When a template is selected, loads the saved components into the slot\n *\n * Uses Puck's usePuck hook to access and modify component slot data.\n */\n\nimport React, { useState, useEffect, useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { createUsePuck } from '@measured/puck'\nimport type { Data } from '@measured/puck'\nimport {\n LayoutTemplate,\n Loader2,\n Save,\n Download,\n AlertCircle,\n ChevronDown,\n ChevronUp,\n X,\n} from 'lucide-react'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// Create usePuck hook for accessing editor state\nconst usePuck = createUsePuck()\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface TemplateItem {\n id: string\n name: string\n description?: string\n category?: string\n content: unknown[]\n updatedAt?: string\n}\n\ninterface TemplateFieldProps {\n value: string | null\n onChange: (value: string | null) => void\n label?: string\n readOnly?: boolean\n apiEndpoint?: string\n}\n\ninterface SaveFormState {\n expanded: boolean\n name: string\n description: string\n category: string\n saving: boolean\n error: string | null\n}\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Get the slot content for the currently selected component.\n * In Puck v0.20+ with the slots API, slot content is stored directly\n * in the component's props.content array.\n */\nfunction getSlotContent(\n data: Data,\n componentId: string,\n selectedItem: { type: string; props: Record<string, unknown> } | null\n): unknown[] {\n // With Puck v0.20+ slots API, content is stored directly in the component's props\n if (selectedItem?.props?.content) {\n const content = selectedItem.props.content\n if (Array.isArray(content) && content.length > 0) {\n return content\n }\n }\n\n // Also search in data.content for the component\n if (data.content && Array.isArray(data.content)) {\n for (const item of data.content) {\n const component = item as { type: string; props: { id?: string; content?: unknown[] } }\n if (component.props?.id === componentId) {\n if (component.props?.content && Array.isArray(component.props.content)) {\n if (component.props.content.length > 0) {\n return component.props.content\n }\n }\n }\n }\n }\n\n return []\n}\n\n/**\n * Find and update a component's props in the Puck data tree.\n * Recursively searches through content and zones.\n */\nfunction updateComponentInData(\n data: Data,\n componentId: string,\n propsToMerge: Record<string, unknown>\n): Data {\n // Helper to update components in an array\n const updateInArray = (\n items: Array<{ type: string; props: Record<string, unknown> }>\n ): Array<{ type: string; props: Record<string, unknown> }> => {\n return items.map((item) => {\n if (item.props?.id === componentId) {\n return {\n ...item,\n props: {\n ...item.props,\n ...propsToMerge,\n },\n }\n }\n // Recursively check nested content (slots)\n if (item.props?.content && Array.isArray(item.props.content)) {\n return {\n ...item,\n props: {\n ...item.props,\n content: updateInArray(item.props.content as Array<{ type: string; props: Record<string, unknown> }>),\n },\n }\n }\n return item\n })\n }\n\n // Update content array\n const updatedContent = data.content\n ? updateInArray(data.content as Array<{ type: string; props: Record<string, unknown> }>)\n : []\n\n // Update zones\n const updatedZones: Record<string, Array<{ type: string; props: Record<string, unknown> }>> = {}\n if (data.zones) {\n for (const [zoneName, zoneContent] of Object.entries(data.zones)) {\n updatedZones[zoneName] = updateInArray(\n zoneContent as Array<{ type: string; props: Record<string, unknown> }>\n )\n }\n }\n\n return {\n ...data,\n content: updatedContent,\n zones: updatedZones,\n }\n}\n\n// =============================================================================\n// TemplateField Component\n// =============================================================================\n\nfunction TemplateFieldInner({\n value,\n onChange,\n label = 'Template',\n readOnly,\n apiEndpoint = '/api/puck-templates',\n}: TemplateFieldProps) {\n const [templates, setTemplates] = useState<TemplateItem[]>([])\n const [loading, setLoading] = useState(false)\n const [loadingTemplate, setLoadingTemplate] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [saveForm, setSaveForm] = useState<SaveFormState>({\n expanded: false,\n name: '',\n description: '',\n category: '',\n saving: false,\n error: null,\n })\n\n // Puck state access\n const appState = usePuck((s) => s.appState)\n const dispatch = usePuck((s) => s.dispatch)\n const selectedItem = usePuck((s) => s.selectedItem)\n const getSelectorForId = usePuck((s) => s.getSelectorForId)\n\n // Get current component ID\n const componentId = selectedItem?.props?.id as string | undefined\n\n // Fetch templates from Payload API\n const fetchTemplates = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const params = new URLSearchParams({\n limit: '100',\n sort: '-updatedAt',\n })\n\n const response = await fetch(`${apiEndpoint}?${params}`)\n if (!response.ok) throw new Error('Failed to fetch templates')\n\n const data = await response.json()\n const items: TemplateItem[] = (data.docs || []).map(\n (doc: Record<string, unknown>) => ({\n id: doc.id as string,\n name: doc.name as string,\n description: doc.description as string | undefined,\n category: doc.category as string | undefined,\n content: doc.content as unknown[],\n updatedAt: doc.updatedAt as string | undefined,\n })\n )\n\n setTemplates(items)\n } catch (err) {\n console.error('Error fetching templates:', err)\n setError('Failed to load templates')\n } finally {\n setLoading(false)\n }\n }, [apiEndpoint])\n\n // Load templates on mount\n useEffect(() => {\n fetchTemplates()\n }, [fetchTemplates])\n\n // Handle template selection - load content into slot\n const handleTemplateSelect = useCallback(\n async (templateId: string) => {\n if (!componentId || !selectedItem) return\n\n // Find the selected template (compare as strings to handle UUID vs SERIAL ID types)\n const template = templates.find((t) => String(t.id) === String(templateId))\n if (!template) return\n\n setLoadingTemplate(true)\n try {\n // Get the component's selector (index and zone) for atomic replace\n const selector = getSelectorForId(componentId)\n\n if (selector) {\n // Use atomic 'replace' action - much more efficient than setData\n // This only updates this specific component instead of the entire data tree\n dispatch({\n type: 'replace',\n destinationIndex: selector.index,\n destinationZone: selector.zone,\n data: {\n type: selectedItem.type,\n props: {\n ...selectedItem.props,\n content: template.content,\n templateId: templateId,\n },\n },\n })\n } else {\n // Fallback to setData if selector not found (shouldn't happen normally)\n const updatedData = updateComponentInData(\n appState.data,\n componentId,\n { content: template.content, templateId: templateId }\n )\n dispatch({\n type: 'setData',\n data: updatedData,\n })\n }\n\n // Also call onChange to ensure field state is in sync\n onChange(templateId)\n } catch (err) {\n console.error('Error loading template:', err)\n setError('Failed to load template')\n } finally {\n setLoadingTemplate(false)\n }\n },\n [componentId, selectedItem, templates, getSelectorForId, appState.data, dispatch, onChange]\n )\n\n // Handle clearing template selection\n const handleClearTemplate = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n // Toggle save form\n const handleToggleSaveForm = useCallback(() => {\n setSaveForm((prev) => ({\n ...prev,\n expanded: !prev.expanded,\n error: null,\n }))\n }, [])\n\n // Close save form\n const handleCloseSaveForm = useCallback(() => {\n setSaveForm({\n expanded: false,\n name: '',\n description: '',\n category: '',\n saving: false,\n error: null,\n })\n }, [])\n\n // Save current slot content as a new template\n const handleSaveTemplate = useCallback(async () => {\n if (!componentId) return\n\n const name = saveForm.name.trim()\n if (!name) {\n setSaveForm((prev) => ({\n ...prev,\n error: 'Please enter a template name',\n }))\n return\n }\n\n setSaveForm((prev) => ({ ...prev, saving: true, error: null }))\n\n try {\n // Get current slot content (using slots API - content is in props.content)\n const content = getSlotContent(appState.data, componentId, selectedItem)\n\n if (content.length === 0) {\n throw new Error('No content to save. Add components to the template first.')\n }\n\n // Save to Payload\n const response = await fetch(apiEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n name,\n description: saveForm.description.trim() || undefined,\n category: saveForm.category.trim() || undefined,\n content,\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(\n errorData.message || errorData.errors?.[0]?.message || 'Failed to save template'\n )\n }\n\n const data = await response.json()\n const doc = data.doc || data\n\n // Create the new template object\n const newTemplate: TemplateItem = {\n id: doc.id as string,\n name: doc.name as string,\n description: doc.description as string | undefined,\n category: doc.category as string | undefined,\n content: doc.content as unknown[],\n updatedAt: doc.updatedAt as string | undefined,\n }\n\n // Add to local templates list\n setTemplates((prev) => [newTemplate, ...prev])\n\n // Close form\n handleCloseSaveForm()\n\n // Use a small delay to ensure state has updated before selecting\n setTimeout(() => {\n onChange(newTemplate.id)\n }, 50)\n } catch (err) {\n console.error('Error saving template:', err)\n setSaveForm((prev) => ({\n ...prev,\n saving: false,\n error: err instanceof Error ? err.message : 'Failed to save template',\n }))\n }\n }, [componentId, appState.data, selectedItem, apiEndpoint, saveForm, onChange, handleCloseSaveForm])\n\n // Get selected template name for display (compare as strings for type safety)\n const selectedTemplate = templates.find((t) => String(t.id) === String(value))\n\n // Group templates by category\n const categorizedTemplates = templates.reduce<Record<string, TemplateItem[]>>(\n (acc, template) => {\n const category = template.category || 'Uncategorized'\n if (!acc[category]) {\n acc[category] = []\n }\n acc[category].push(template)\n return acc\n },\n {}\n )\n\n return (\n <div className=\"puck-field space-y-3\">\n {label && (\n <Label className=\"block text-sm font-medium text-foreground\">\n {label}\n </Label>\n )}\n\n {/* Template Selector - Native select to avoid portal conflicts */}\n <div className=\"flex gap-2\">\n <select\n value={value || ''}\n onChange={(e) => e.target.value && handleTemplateSelect(e.target.value)}\n disabled={readOnly || loading || loadingTemplate}\n className={cn(\n 'flex-1 h-9 rounded-md border border-input bg-background px-3 py-1 text-sm',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50'\n )}\n >\n <option value=\"\">\n {loading ? 'Loading...' : loadingTemplate ? 'Loading template...' : 'Select a template'}\n </option>\n {Object.entries(categorizedTemplates).map(([category, items]) => (\n <optgroup key={category} label={category}>\n {items.map((template) => (\n <option key={template.id} value={template.id}>\n {template.name}\n </option>\n ))}\n </optgroup>\n ))}\n </select>\n\n {value && !readOnly && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleClearTemplate}\n title=\"Clear selection\"\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Action Buttons */}\n {!readOnly && (\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleToggleSaveForm}\n className=\"flex-1 gap-1.5\"\n disabled={loading || saveForm.saving}\n >\n {saveForm.expanded ? (\n <ChevronUp className=\"h-4 w-4\" />\n ) : (\n <Save className=\"h-4 w-4\" />\n )}\n {saveForm.expanded ? 'Cancel' : 'Save as Template'}\n </Button>\n\n {value && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleTemplateSelect(value)}\n className=\"gap-1.5\"\n disabled={loadingTemplate}\n >\n {loadingTemplate ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Download className=\"h-4 w-4\" />\n )}\n Reload\n </Button>\n )}\n </div>\n )}\n\n {/* Inline Save Form */}\n {saveForm.expanded && (\n <div className=\"space-y-3 p-3 border border-border rounded-md bg-muted/30\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"template-name\" className=\"text-xs\">\n Template Name *\n </Label>\n <Input\n id=\"template-name\"\n placeholder=\"e.g., Hero Section with CTA\"\n value={saveForm.name}\n onChange={(e) =>\n setSaveForm((prev) => ({ ...prev, name: e.target.value }))\n }\n disabled={saveForm.saving}\n className=\"h-8 text-sm\"\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"template-description\" className=\"text-xs\">\n Description\n </Label>\n <Input\n id=\"template-description\"\n placeholder=\"Optional description...\"\n value={saveForm.description}\n onChange={(e) =>\n setSaveForm((prev) => ({ ...prev, description: e.target.value }))\n }\n disabled={saveForm.saving}\n className=\"h-8 text-sm\"\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"template-category\" className=\"text-xs\">\n Category\n </Label>\n <Input\n id=\"template-category\"\n placeholder=\"e.g., Hero, Footer, CTA\"\n value={saveForm.category}\n onChange={(e) =>\n setSaveForm((prev) => ({ ...prev, category: e.target.value }))\n }\n disabled={saveForm.saving}\n className=\"h-8 text-sm\"\n />\n </div>\n\n {saveForm.error && (\n <div className=\"p-2 bg-destructive/10 border border-destructive/30 rounded-md text-destructive text-xs flex items-start gap-2\">\n <AlertCircle className=\"h-3.5 w-3.5 flex-shrink-0 mt-0.5\" />\n <span>{saveForm.error}</span>\n </div>\n )}\n\n <Button\n onClick={handleSaveTemplate}\n disabled={saveForm.saving}\n size=\"sm\"\n className=\"w-full gap-1.5\"\n >\n {saveForm.saving ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Saving...\n </>\n ) : (\n <>\n <Save className=\"h-4 w-4\" />\n Save Template\n </>\n )}\n </Button>\n </div>\n )}\n\n {/* Error Display */}\n {error && (\n <div className=\"p-2 bg-destructive/10 border border-destructive/30 rounded-md text-destructive text-sm flex items-start gap-2\">\n <AlertCircle className=\"h-4 w-4 flex-shrink-0 mt-0.5\" />\n <span>{error}</span>\n </div>\n )}\n </div>\n )\n}\n\n// Memoize to prevent unnecessary re-renders\nexport const TemplateField = memo(TemplateFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for template selection\n *\n * @example\n * ```ts\n * const TemplateConfig: ComponentConfig = {\n * fields: {\n * templateId: createTemplateField({ label: 'Template' }),\n * content: { type: 'slot' },\n * },\n * }\n * ```\n */\nexport function createTemplateField(config: {\n label?: string\n apiEndpoint?: string\n}): CustomField<string | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <TemplateField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n apiEndpoint={config.apiEndpoint}\n />\n ),\n }\n}\n","/**\n * Template Component - Puck Configuration\n *\n * A reusable template container that allows saving and loading\n * pre-configured component arrangements from the Payload CMS.\n *\n * Use this component to:\n * - Create reusable page sections\n * - Save common component patterns as templates\n * - Quickly load pre-built layouts\n *\n * Responsive Controls:\n * - dimensions: Different dimensions at different breakpoints\n * - customPadding: Different padding at different breakpoints\n * - margin: Different margins at different breakpoints\n * - visibility: Show/hide at different breakpoints\n */\n\nimport { useId } from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n dimensionsValueToCSS,\n marginValueToCSS,\n paddingValueToCSS,\n responsiveValueToCSS,\n visibilityValueToCSS,\n type PaddingValue,\n type DimensionsValue,\n type ResponsiveValue,\n type VisibilityValue,\n} from '../../fields/shared'\nimport { createResetField } from '../../fields/ResetField'\nimport { createTemplateField } from '../../fields/TemplateField'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createResponsiveField } from '../../fields/ResponsiveField'\nimport { createResponsiveVisibilityField } from '../../fields/ResponsiveVisibilityField'\n\n// Default values for responsive fields\nconst DEFAULT_PADDING: PaddingValue = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n unit: 'px',\n linked: true,\n}\n\nconst DEFAULT_DIMENSIONS: DimensionsValue = {\n mode: 'full',\n alignment: 'center',\n maxWidth: { value: 100, unit: '%', enabled: true },\n}\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface TemplateProps {\n /** Slot for nested components */\n content: unknown\n /** ID of the currently loaded template (or null if none) */\n templateId: string | null\n /** Responsive dimensions */\n dimensions: ResponsiveValue<DimensionsValue> | DimensionsValue | null\n /** Responsive padding */\n customPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n /** Responsive margin */\n margin: ResponsiveValue<PaddingValue> | PaddingValue | null\n /** Responsive visibility */\n visibility: VisibilityValue | null\n}\n\n// =============================================================================\n// Default Props\n// =============================================================================\n\nconst defaultProps: TemplateProps = {\n content: [],\n templateId: null,\n dimensions: null,\n customPadding: null,\n margin: null,\n visibility: null,\n}\n\n// =============================================================================\n// Component Configuration\n// =============================================================================\n\nexport const TemplateConfig: ComponentConfig = {\n label: 'Template',\n fields: {\n _reset: createResetField({ defaultProps }),\n templateId: createTemplateField({ label: 'Template' }),\n content: {\n type: 'slot',\n },\n // Responsive visibility control\n visibility: createResponsiveVisibilityField({ label: 'Visibility' }),\n // Responsive dimensions\n dimensions: createResponsiveField({\n label: 'Dimensions (Responsive)',\n innerField: (config) => createDimensionsField(config),\n defaultValue: DEFAULT_DIMENSIONS,\n }),\n // Spacing (grouped at bottom) - Responsive\n margin: createResponsiveField({\n label: 'Margin (Responsive)',\n innerField: (config) => createMarginField(config),\n defaultValue: DEFAULT_PADDING,\n }),\n customPadding: createResponsiveField({\n label: 'Padding (Responsive)',\n innerField: (config) => createPaddingField(config),\n defaultValue: DEFAULT_PADDING,\n }),\n },\n defaultProps,\n render: ({ content: Content, dimensions, customPadding, margin, visibility }) => {\n // Generate unique IDs for CSS targeting\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const uniqueId = useId().replace(/:/g, '')\n const wrapperClass = `puck-template-${uniqueId}`\n const contentClass = `puck-template-content-${uniqueId}`\n\n // Collect all media query CSS\n const mediaQueries: string[] = []\n\n // Build wrapper styles\n const wrapperStyles: React.CSSProperties = {}\n\n // Add padding with responsive support\n const paddingResult = responsiveValueToCSS(\n customPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, paddingResult.baseStyles)\n if (paddingResult.mediaQueryCSS) {\n mediaQueries.push(paddingResult.mediaQueryCSS)\n }\n\n // Add margin with responsive support\n const marginResult = responsiveValueToCSS(\n margin,\n (v) => ({ margin: marginValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, marginResult.baseStyles)\n if (marginResult.mediaQueryCSS) {\n mediaQueries.push(marginResult.mediaQueryCSS)\n }\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, wrapperClass)\n if (visibilityCSS) {\n mediaQueries.push(visibilityCSS)\n }\n\n // Use dimensions with responsive support\n const dimensionsResult = responsiveValueToCSS(\n dimensions,\n dimensionsValueToCSS,\n contentClass\n )\n if (dimensionsResult.mediaQueryCSS) {\n mediaQueries.push(dimensionsResult.mediaQueryCSS)\n }\n\n // Combine all media queries\n const allMediaQueryCSS = mediaQueries.join('\\n')\n\n // Content is a slot component that Puck provides\n // It renders all the nested components within this template\n return (\n <>\n {allMediaQueryCSS && <style>{allMediaQueryCSS}</style>}\n <div\n className={cn('template-wrapper', wrapperClass)}\n style={Object.keys(wrapperStyles).length > 0 ? wrapperStyles : undefined}\n >\n <Content className={contentClass} style={dimensionsResult.baseStyles} />\n </div>\n </>\n )\n },\n}\n","/**\n * Template Component - Server-safe Configuration\n *\n * A reusable template container for rendering nested components.\n * This server-safe version excludes the TemplateField (which requires client-side APIs).\n *\n * For the full editor experience with template loading, use Template.tsx\n *\n * Responsive Controls:\n * - dimensions: Different dimensions at different breakpoints\n * - customPadding: Different padding at different breakpoints\n * - margin: Different margins at different breakpoints\n * - visibility: Show/hide at different breakpoints\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n dimensionsValueToCSS,\n marginValueToCSS,\n paddingValueToCSS,\n responsiveValueToCSS,\n visibilityValueToCSS,\n type PaddingValue,\n type DimensionsValue,\n type ResponsiveValue,\n type VisibilityValue,\n} from '../../fields/shared'\n\n// Simple ID generator for server-side rendering\nlet idCounter = 0\nfunction generateUniqueId(): string {\n return `t${(++idCounter).toString(36)}${Math.random().toString(36).slice(2, 6)}`\n}\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface TemplateProps {\n /** Slot for nested components */\n content: unknown\n /** ID of the currently loaded template (for tracking only) */\n templateId: string | null\n /** Responsive dimensions */\n dimensions: ResponsiveValue<DimensionsValue> | DimensionsValue | null\n /** Responsive padding */\n customPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n /** Responsive margin */\n margin: ResponsiveValue<PaddingValue> | PaddingValue | null\n /** Responsive visibility */\n visibility: VisibilityValue | null\n}\n\n// =============================================================================\n// Default Props\n// =============================================================================\n\nconst defaultProps: TemplateProps = {\n content: [],\n templateId: null,\n dimensions: null,\n customPadding: null,\n margin: null,\n visibility: null,\n}\n\n// =============================================================================\n// Component Configuration (Server-safe)\n// =============================================================================\n\nexport const TemplateServerConfig: ComponentConfig = {\n label: 'Template',\n fields: {\n // In server config, templateId is just for reference (no loading UI)\n templateId: {\n type: 'text',\n label: 'Template ID',\n },\n content: {\n type: 'slot',\n },\n },\n defaultProps,\n render: ({ content: Content, dimensions, customPadding, margin, visibility }) => {\n // Generate unique IDs for CSS targeting (server-safe)\n const uniqueId = generateUniqueId()\n const wrapperClass = `puck-template-${uniqueId}`\n const contentClass = `puck-template-content-${uniqueId}`\n\n // Collect all media query CSS\n const mediaQueries: string[] = []\n\n // Build wrapper styles\n const wrapperStyles: React.CSSProperties = {}\n\n // Add padding with responsive support\n const paddingResult = responsiveValueToCSS(\n customPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, paddingResult.baseStyles)\n if (paddingResult.mediaQueryCSS) {\n mediaQueries.push(paddingResult.mediaQueryCSS)\n }\n\n // Add margin with responsive support\n const marginResult = responsiveValueToCSS(\n margin,\n (v) => ({ margin: marginValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, marginResult.baseStyles)\n if (marginResult.mediaQueryCSS) {\n mediaQueries.push(marginResult.mediaQueryCSS)\n }\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, wrapperClass)\n if (visibilityCSS) {\n mediaQueries.push(visibilityCSS)\n }\n\n // Use dimensions with responsive support\n const dimensionsResult = responsiveValueToCSS(\n dimensions,\n dimensionsValueToCSS,\n contentClass\n )\n if (dimensionsResult.mediaQueryCSS) {\n mediaQueries.push(dimensionsResult.mediaQueryCSS)\n }\n\n // Combine all media queries\n const allMediaQueryCSS = mediaQueries.join('\\n')\n\n // Type assertion for Puck slot content\n const ContentSlot = Content as any\n\n // Content is a slot component that Puck provides\n // It renders all the nested components within this template\n return (\n <>\n {allMediaQueryCSS && <style>{allMediaQueryCSS}</style>}\n <div\n className={cn('template-wrapper', wrapperClass)}\n style={Object.keys(wrapperStyles).length > 0 ? wrapperStyles : undefined}\n >\n <ContentSlot className={contentClass} style={dimensionsResult.baseStyles} />\n </div>\n </>\n )\n },\n}\n","'use client'\n\n/**\n * AlignmentField - Icon toggle buttons for text/content alignment\n *\n * Replaces select dropdowns with intuitive icon toggles for\n * left, center, right alignment.\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n AlignLeft,\n AlignCenter,\n AlignRight,\n X,\n} from 'lucide-react'\nimport { Button } from '../components/ui/button'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type Alignment = 'left' | 'center' | 'right'\n\ninterface AlignmentFieldProps {\n value: Alignment | null\n onChange: (value: Alignment | null) => void\n label?: string\n readOnly?: boolean\n /** Default value when cleared or initially null */\n defaultValue?: Alignment\n}\n\n// =============================================================================\n// AlignmentField Component\n// =============================================================================\n\nfunction AlignmentFieldInner({\n value,\n onChange,\n label = 'Alignment',\n readOnly,\n defaultValue = 'left',\n}: AlignmentFieldProps) {\n const currentValue = value ?? defaultValue\n\n const handleChange = useCallback((alignment: Alignment) => {\n onChange(alignment)\n }, [onChange])\n\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const alignments = [\n { value: 'left' as Alignment, icon: AlignLeft, title: 'Align left' },\n { value: 'center' as Alignment, icon: AlignCenter, title: 'Align center' },\n { value: 'right' as Alignment, icon: AlignRight, title: 'Align right' },\n ]\n\n return (\n <div className=\"puck-field space-y-2\">\n {/* Header with label and clear */}\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Alignment toggle buttons */}\n <div className=\"flex gap-1\">\n {alignments.map(({ value: alignment, icon: Icon, title }) => {\n const isActive = currentValue === alignment\n return (\n <Button\n key={alignment}\n type=\"button\"\n variant={isActive ? 'default' : 'secondary'}\n size=\"icon\"\n onClick={() => handleChange(alignment)}\n disabled={readOnly}\n className={cn(\n \"h-8 w-8\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n title={title}\n >\n <Icon className=\"h-4 w-4\" />\n </Button>\n )\n })}\n </div>\n </div>\n )\n}\n\nexport const AlignmentField = memo(AlignmentFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateAlignmentFieldConfig {\n label?: string\n defaultValue?: Alignment\n}\n\n/**\n * Creates a Puck field configuration for alignment control\n *\n * @example\n * ```ts\n * fields: {\n * alignment: createAlignmentField({ label: 'Text Alignment' }),\n * }\n * ```\n */\nexport function createAlignmentField(\n config: CreateAlignmentFieldConfig = {}\n): CustomField<Alignment | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <AlignmentField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n defaultValue={config.defaultValue}\n />\n ),\n }\n}\n","/**\n * Heading Component - Puck Configuration\n *\n * H1-H6 headings with customizable styling.\n * Supports custom margin for spacing control.\n */\n\nimport React, { createElement } from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n headingLevelField,\n headingLevelMap,\n alignmentMap,\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n colorValueToCSS,\n dimensionsValueToCSS,\n type PaddingValue,\n type ColorValue,\n type DimensionsValue,\n type AnimationValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createColorPickerField } from '../../fields/ColorPickerField'\nimport { createAlignmentField, type Alignment } from '../../fields/AlignmentField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createAnimationField } from '../../fields/AnimationField'\nimport { createResetField } from '../../fields/ResetField'\n\nexport interface HeadingProps {\n text: string\n level: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'\n alignment: Alignment | null\n textColor: ColorValue | null\n dimensions: DimensionsValue | null\n animation: AnimationValue | null\n margin: PaddingValue | null\n customPadding: PaddingValue | null\n}\n\nconst defaultProps: HeadingProps = {\n text: 'Heading Text',\n level: 'h2',\n alignment: null,\n textColor: null,\n dimensions: null,\n animation: null,\n margin: null,\n customPadding: null,\n}\n\nexport const HeadingConfig: ComponentConfig = {\n label: 'Heading',\n fields: {\n _reset: createResetField({ defaultProps }),\n text: {\n type: 'text',\n label: 'Text',\n },\n level: headingLevelField,\n textColor: createColorPickerField({ label: 'Text Color' }),\n dimensions: createDimensionsField({ label: 'Dimensions' }),\n alignment: createAlignmentField({ label: 'Alignment' }),\n animation: createAnimationField({ label: 'Animation' }),\n // Spacing (grouped at bottom)\n margin: createMarginField({ label: 'Margin' }),\n customPadding: createPaddingField({ label: 'Padding' }),\n },\n defaultProps,\n render: ({ text, level, alignment, textColor, dimensions, animation, margin, customPadding }) => {\n const tag = level || 'h2'\n const alignmentValue = alignment ?? 'left'\n const classes = cn(\n headingLevelMap[level] || headingLevelMap.h2,\n alignmentMap[alignmentValue] || alignmentMap.left\n )\n\n const dimensionsStyles = dimensions ? dimensionsValueToCSS(dimensions) : undefined\n\n const style: React.CSSProperties = {\n ...dimensionsStyles,\n }\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n style.margin = marginCSS\n }\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n style.padding = paddingCSS\n }\n // Apply text color from ColorValue\n const colorCSS = colorValueToCSS(textColor)\n if (colorCSS) {\n style.color = colorCSS\n }\n\n const headingElement = createElement(tag, { className: classes, style: Object.keys(style).length > 0 ? style : undefined }, text)\n\n return (\n <AnimatedWrapper animation={animation}>\n {headingElement}\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Text Component - Puck Configuration\n *\n * Simple paragraph text with customizable styling.\n */\n\nimport type React from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n textSizeField,\n textSizeMap,\n alignmentMap,\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n colorValueToCSS,\n dimensionsValueToCSS,\n type PaddingValue,\n type ColorValue,\n type DimensionsValue,\n type AnimationValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createColorPickerField } from '../../fields/ColorPickerField'\nimport { createAlignmentField, type Alignment } from '../../fields/AlignmentField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createAnimationField } from '../../fields/AnimationField'\nimport { createResetField } from '../../fields/ResetField'\n\nexport interface TextProps {\n content: string\n size: string\n alignment: Alignment | null\n textColor: ColorValue | null\n dimensions: DimensionsValue | null\n animation: AnimationValue | null\n margin: PaddingValue | null\n customPadding: PaddingValue | null\n}\n\nconst defaultProps: TextProps = {\n content: 'Enter your text here...',\n size: 'base',\n alignment: null,\n textColor: null,\n dimensions: null,\n animation: null,\n margin: null,\n customPadding: null,\n}\n\nexport const TextConfig: ComponentConfig = {\n label: 'Text',\n fields: {\n _reset: createResetField({ defaultProps }),\n content: {\n type: 'textarea',\n label: 'Content',\n },\n size: textSizeField,\n textColor: createColorPickerField({ label: 'Text Color' }),\n dimensions: createDimensionsField({ label: 'Dimensions' }),\n alignment: createAlignmentField({ label: 'Alignment' }),\n animation: createAnimationField({ label: 'Animation' }),\n // Spacing (grouped at bottom)\n margin: createMarginField({ label: 'Margin' }),\n customPadding: createPaddingField({ label: 'Padding' }),\n },\n defaultProps,\n render: ({ content, size, alignment, textColor, dimensions, animation, margin, customPadding }) => {\n const dimensionsStyles = dimensions ? dimensionsValueToCSS(dimensions) : undefined\n\n const style: React.CSSProperties = {\n ...dimensionsStyles,\n }\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n style.margin = marginCSS\n }\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n style.padding = paddingCSS\n }\n // Apply text color from ColorValue\n const colorCSS = colorValueToCSS(textColor)\n if (colorCSS) {\n style.color = colorCSS\n }\n\n const alignmentValue = alignment ?? 'left'\n\n return (\n <AnimatedWrapper animation={animation}>\n <p\n className={cn(\n textSizeMap[size] || textSizeMap.base,\n alignmentMap[alignmentValue] || alignmentMap.left\n )}\n style={Object.keys(style).length > 0 ? style : undefined}\n >\n {content}\n </p>\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * RichText Component - Puck Server Configuration\n *\n * Server-safe config for rendering. Uses a simple textarea for the field.\n * The editor config (RichText.editor.tsx) uses Tiptap for the visual editor.\n */\n\nimport type React from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n dimensionsValueToCSS,\n colorValueToCSS,\n alignmentMap,\n type PaddingValue,\n type DimensionsValue,\n type ColorValue,\n type AnimationValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createColorPickerField } from '../../fields/ColorPickerField'\nimport { createAlignmentField, type Alignment } from '../../fields/AlignmentField'\nimport { createAnimationField } from '../../fields/AnimationField'\nimport { createResetField } from '../../fields/ResetField'\n\nexport interface RichTextProps {\n content: string\n alignment: Alignment | null\n textColor: ColorValue | null\n dimensions: DimensionsValue | null\n animation: AnimationValue | null\n margin: PaddingValue | null\n customPadding: PaddingValue | null\n}\n\nconst defaultProps: RichTextProps = {\n content: '<p>Enter your content here...</p>',\n alignment: null,\n textColor: null,\n dimensions: null,\n animation: null,\n margin: null,\n customPadding: null,\n}\n\nexport const RichTextConfig: ComponentConfig = {\n label: 'Rich Text',\n fields: {\n _reset: createResetField({ defaultProps }),\n content: {\n type: 'textarea',\n label: 'Content (HTML)',\n },\n textColor: createColorPickerField({ label: 'Text Color' }),\n dimensions: createDimensionsField({ label: 'Dimensions' }),\n alignment: createAlignmentField({ label: 'Alignment' }),\n animation: createAnimationField({ label: 'Animation' }),\n // Spacing (grouped at bottom)\n margin: createMarginField({ label: 'Margin' }),\n customPadding: createPaddingField({ label: 'Padding' }),\n },\n defaultProps,\n render: ({ content, alignment, textColor, dimensions, animation, margin, customPadding }) => {\n const dimensionsStyles = dimensions ? dimensionsValueToCSS(dimensions) : undefined\n\n const style: React.CSSProperties = {\n ...dimensionsStyles,\n }\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n style.margin = marginCSS\n }\n const customPaddingCSS = paddingValueToCSS(customPadding)\n if (customPaddingCSS) {\n style.padding = customPaddingCSS\n }\n // Apply text color from ColorValue\n const colorCSS = colorValueToCSS(textColor)\n if (colorCSS) {\n style.color = colorCSS\n }\n\n const alignmentValue = alignment ?? 'left'\n const alignmentClass = alignmentMap[alignmentValue] || alignmentMap.left\n\n // Handle empty content\n if (!content || content === '<p></p>') {\n return (\n <AnimatedWrapper animation={animation}>\n <section className={cn('relative overflow-hidden px-4', alignmentClass)} style={Object.keys(style).length > 0 ? style : undefined}>\n <div className=\"prose dark:prose-invert\">\n <p><em>No content available</em></p>\n </div>\n </section>\n </AnimatedWrapper>\n )\n }\n\n return (\n <AnimatedWrapper animation={animation}>\n <section className={cn('relative overflow-hidden px-4', alignmentClass)} style={Object.keys(style).length > 0 ? style : undefined}>\n <div\n className=\"prose dark:prose-invert\"\n dangerouslySetInnerHTML={{ __html: content }}\n />\n </section>\n </AnimatedWrapper>\n )\n },\n}\n","'use client'\n\n/**\n * TiptapField - Rich Text Editor Field for Puck\n *\n * A custom Puck field that provides WYSIWYG rich text editing using Tiptap.\n * Outputs HTML content that can be rendered with dangerouslySetInnerHTML.\n *\n * Features:\n * - Theme-aware \"inherit\" color option for text that adapts to dark/light mode\n * - Expanded color palette organized by category\n * - Strikethrough and highlight text styling\n * - Font size options (small, normal, large, extra large)\n * - Full toolbar with all formatting options\n * - HTML source view/edit mode\n */\n\nimport React, { useCallback, memo, useState, useRef, useEffect } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { useEditor, EditorContent, useEditorState } from '@tiptap/react'\nimport StarterKit from '@tiptap/starter-kit'\nimport TextAlign from '@tiptap/extension-text-align'\nimport { TextStyle } from '@tiptap/extension-text-style'\nimport { Color } from '@tiptap/extension-color'\nimport Highlight from '@tiptap/extension-highlight'\nimport Superscript from '@tiptap/extension-superscript'\nimport Subscript from '@tiptap/extension-subscript'\nimport { Extension } from '@tiptap/core'\nimport {\n Bold,\n Italic,\n Underline,\n Strikethrough,\n Highlighter,\n Link,\n List,\n ListOrdered,\n AlignLeft,\n AlignCenter,\n AlignRight,\n AlignJustify,\n Heading1,\n Heading2,\n Heading3,\n Heading4,\n Heading5,\n Heading6,\n Quote,\n Code,\n RemoveFormatting,\n Palette,\n ALargeSmall,\n X,\n ChevronDown,\n Superscript as SuperscriptIcon,\n Subscript as SubscriptIcon,\n Minus,\n CornerDownLeft,\n Pilcrow,\n} from 'lucide-react'\nimport { cn } from '../lib/utils'\nimport './tiptap-styles.css'\nimport './richtext-output.css'\n\n// =============================================================================\n// Injected Editor Styles\n// These are injected directly to ensure styles load regardless of bundler config\n// =============================================================================\n\nconst TIPTAP_EDITOR_STYLES = `\n.tiptap-editor h1 { font-size: 2em !important; font-weight: 700 !important; margin: 1em 0 0.5em 0; }\n.tiptap-editor h2 { font-size: 1.5em !important; font-weight: 700 !important; margin: 1em 0 0.5em 0; }\n.tiptap-editor h3 { font-size: 1.25em !important; font-weight: 600 !important; margin: 1em 0 0.5em 0; }\n.tiptap-editor h4 { font-size: 1.1em !important; font-weight: 600 !important; margin: 1em 0 0.5em 0; }\n.tiptap-editor h5 { font-size: 1em !important; font-weight: 600 !important; margin: 1em 0 0.5em 0; }\n.tiptap-editor h6 { font-size: 0.9em !important; font-weight: 600 !important; margin: 1em 0 0.5em 0; }\n.tiptap-editor h1:first-child, .tiptap-editor h2:first-child, .tiptap-editor h3:first-child,\n.tiptap-editor h4:first-child, .tiptap-editor h5:first-child, .tiptap-editor h6:first-child { margin-top: 0; }\n.tiptap-editor ul, .tiptap-editor ol { padding-left: 1.5em !important; margin: 0 0 1em 0; }\n.tiptap-editor ul { list-style-type: disc !important; }\n.tiptap-editor ol { list-style-type: decimal !important; }\n.tiptap-editor li { margin: 0.25em 0; }\n.tiptap-editor li p { margin: 0; }\n.tiptap-editor blockquote { border-left: 4px solid #e5e7eb !important; padding-left: 1em !important; margin: 1em 0 !important; font-style: italic !important; }\n.tiptap-editor p { margin: 0 0 1em 0; }\n.tiptap-editor p:last-child { margin-bottom: 0; }\n`\n\n// Inject styles once when module loads\nif (typeof document !== 'undefined') {\n const styleId = 'tiptap-editor-injected-styles'\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style')\n style.id = styleId\n style.textContent = TIPTAP_EDITOR_STYLES\n document.head.appendChild(style)\n console.log('[TipTap] Injected editor styles')\n }\n\n // Debug: Check if CSS file was loaded\n const stylesheets = Array.from(document.styleSheets)\n const hasTiptapCSS = stylesheets.some(sheet => {\n try {\n return Array.from(sheet.cssRules || []).some(rule =>\n rule.cssText?.includes('.tiptap-editor h1')\n )\n } catch { return false }\n })\n console.log('[TipTap] CSS file loaded:', hasTiptapCSS)\n}\n\n// =============================================================================\n// Reusable Tailwind Class Constants\n// =============================================================================\n\nconst ICON_SIZE = 'w-[18px] h-[18px]'\nconst TOOLBAR_BUTTON = 'h-7 w-7 p-0 flex-shrink-0'\nconst TOOLBAR_DIVIDER = 'w-px h-6 bg-gray-300 mx-1 flex-shrink-0'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface TiptapFieldProps {\n value: string\n onChange: (value: string) => void\n label?: string\n readOnly?: boolean\n}\n\n// =============================================================================\n// Font Size Extension\n// =============================================================================\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n fontSize: {\n setFontSize: (size: string) => ReturnType\n unsetFontSize: () => ReturnType\n }\n }\n}\n\nconst FontSize = Extension.create({\n name: 'fontSize',\n\n addOptions() {\n return {\n types: ['textStyle'],\n }\n },\n\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n fontSize: {\n default: null,\n parseHTML: element => element.style.fontSize?.replace(/['\"]+/g, ''),\n renderHTML: attributes => {\n if (!attributes.fontSize) {\n return {}\n }\n return {\n style: `font-size: ${attributes.fontSize}`,\n }\n },\n },\n },\n },\n ]\n },\n\n addCommands() {\n return {\n setFontSize:\n (fontSize: string) =>\n ({ chain }) => {\n return chain().setMark('textStyle', { fontSize }).run()\n },\n unsetFontSize:\n () =>\n ({ chain }) => {\n return chain()\n .setMark('textStyle', { fontSize: null })\n .removeEmptyTextStyle()\n .run()\n },\n }\n },\n})\n\n// =============================================================================\n// Color Palette - Organized by Category\n// =============================================================================\n\n// Special \"inherit\" color means remove any color styling, inherit from parent\nconst THEME_COLOR = { label: 'Theme (Auto)', value: 'inherit' }\n\nconst COLOR_CATEGORIES = [\n {\n label: 'Brand',\n colors: [\n { hex: '#2563eb', label: 'Blue 600' },\n { hex: '#3b82f6', label: 'Blue 500' },\n { hex: '#60a5fa', label: 'Blue 400' },\n { hex: '#0d9488', label: 'Teal 600' },\n ],\n },\n {\n label: 'Grays',\n colors: [\n { hex: '#000000', label: 'Black' },\n { hex: '#374151', label: 'Gray 700' },\n { hex: '#6b7280', label: 'Gray 500' },\n { hex: '#9ca3af', label: 'Gray 400' },\n { hex: '#ffffff', label: 'White' },\n ],\n },\n {\n label: 'Colors',\n colors: [\n { hex: '#dc2626', label: 'Red' },\n { hex: '#ea580c', label: 'Orange' },\n { hex: '#f59e0b', label: 'Amber' },\n { hex: '#16a34a', label: 'Green' },\n { hex: '#0891b2', label: 'Cyan' },\n { hex: '#7c3aed', label: 'Violet' },\n { hex: '#db2777', label: 'Pink' },\n ],\n },\n]\n\n// Highlight colors (background)\nconst HIGHLIGHT_COLORS = [\n { hex: '#fef08a', label: 'Yellow' },\n { hex: '#bbf7d0', label: 'Green' },\n { hex: '#bfdbfe', label: 'Blue' },\n { hex: '#fecaca', label: 'Red' },\n { hex: '#e9d5ff', label: 'Purple' },\n { hex: '#fed7aa', label: 'Orange' },\n]\n\n// Font size options - expanded preset sizes\nconst FONT_SIZES = [\n { label: 'XS', value: '0.75rem', px: '12px' },\n { label: 'Small', value: '0.875rem', px: '14px' },\n { label: 'Normal', value: null, px: '16px' },\n { label: 'Medium', value: '1.125rem', px: '18px' },\n { label: 'Large', value: '1.25rem', px: '20px' },\n { label: 'XL', value: '1.5rem', px: '24px' },\n { label: '2XL', value: '1.875rem', px: '30px' },\n { label: '3XL', value: '2.25rem', px: '36px' },\n { label: '4XL', value: '3rem', px: '48px' },\n]\n\n// Font size units for custom input\nconst FONT_SIZE_UNITS = ['px', 'rem', 'em'] as const\n\n// =============================================================================\n// Standalone UI Components (no external dependencies)\n// =============================================================================\n\nfunction ToolbarButton({\n onClick,\n isActive,\n title,\n children,\n className = '',\n}: {\n onClick: () => void\n isActive?: boolean\n title: string\n children: React.ReactNode\n className?: string\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n title={title}\n className={cn(\n 'inline-flex items-center justify-center rounded transition-colors',\n TOOLBAR_BUTTON,\n isActive && 'bg-gray-200',\n !isActive && 'bg-transparent',\n className\n )}\n >\n {children}\n </button>\n )\n}\n\nfunction ToolbarDropdown({\n trigger,\n children,\n title,\n isActive,\n}: {\n trigger: React.ReactNode\n children: React.ReactNode | ((close: () => void) => React.ReactNode)\n title: string\n isActive?: boolean\n}) {\n const [isOpen, setIsOpen] = useState(false)\n const dropdownRef = useRef<HTMLDivElement>(null)\n\n const close = useCallback(() => setIsOpen(false), [])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n // Don't close if a color input has focus (native color picker popup is open)\n // The native picker is rendered outside our DOM, so clicks in it would\n // otherwise trigger a close since they're not contained in dropdownRef\n const activeElement = document.activeElement\n if (activeElement?.tagName === 'INPUT' && (activeElement as HTMLInputElement).type === 'color') {\n return\n }\n\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n return (\n <div ref={dropdownRef} className=\"relative flex-shrink-0\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n title={title}\n className={cn(\n 'inline-flex items-center justify-center rounded transition-colors',\n TOOLBAR_BUTTON,\n isActive && 'bg-gray-200',\n !isActive && 'bg-transparent'\n )}\n >\n {trigger}\n </button>\n {isOpen && (\n <div className=\"absolute top-full left-0 mt-1 bg-white border border-gray-200 rounded-md shadow-lg z-50 min-w-[160px]\">\n {typeof children === 'function' ? children(close) : children}\n </div>\n )}\n </div>\n )\n}\n\nfunction DropdownItem({\n onClick,\n children,\n className = '',\n}: {\n onClick: () => void\n children: React.ReactNode\n className?: string\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={`\n w-full px-3 py-2 text-left text-sm hover:bg-gray-100 transition-colors\n flex items-center\n ${className}\n `}\n >\n {children}\n </button>\n )\n}\n\nfunction DropdownLabel({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"px-3 py-1 text-xs text-gray-500 font-medium\">\n {children}\n </div>\n )\n}\n\nfunction DropdownSeparator() {\n return <div className=\"h-px bg-gray-200 my-1\" />\n}\n\nfunction LinkPopover({\n isOpen,\n onClose,\n onSetLink,\n onRemoveLink,\n}: {\n isOpen: boolean\n onClose: () => void\n onSetLink: (url: string) => void\n onRemoveLink: () => void\n}) {\n const [url, setUrl] = useState('')\n const popoverRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (popoverRef.current && !popoverRef.current.contains(event.target as Node)) {\n onClose()\n }\n }\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [isOpen, onClose])\n\n if (!isOpen) return null\n\n return (\n <div\n ref={popoverRef}\n className=\"absolute top-full left-0 mt-1 bg-white border border-gray-200 rounded-md shadow-lg z-50 p-3 w-80\"\n >\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-gray-700\">URL</label>\n <input\n type=\"text\"\n placeholder=\"https://example.com\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n if (url) {\n onSetLink(url)\n setUrl('')\n }\n }\n }}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => {\n if (url) {\n onSetLink(url)\n setUrl('')\n }\n }}\n className=\"px-3 py-1.5 bg-blue-600 text-white text-sm rounded-md hover:bg-blue-700\"\n >\n Add Link\n </button>\n <button\n type=\"button\"\n onClick={() => {\n onRemoveLink()\n setUrl('')\n }}\n className=\"px-3 py-1.5 text-gray-600 text-sm hover:bg-gray-100 rounded-md\"\n >\n Remove Link\n </button>\n </div>\n </div>\n </div>\n )\n}\n\n// =============================================================================\n// Tiptap Extensions Factory\n// Each editor instance needs its own extension instances to avoid\n// \"duplicate extension\" warnings when multiple editors exist on the page.\n// =============================================================================\n\nfunction createTiptapExtensions() {\n return [\n StarterKit.configure({\n heading: {\n levels: [1, 2, 3, 4, 5, 6],\n },\n // Enable strikethrough from StarterKit\n strike: {},\n // Horizontal rule and hard break are included by default\n horizontalRule: {},\n hardBreak: {},\n // Configure StarterKit's built-in Link and Underline (v3+)\n // These are included in StarterKit by default, so we configure them here\n // instead of adding duplicate extensions\n link: {\n openOnClick: false,\n HTMLAttributes: {\n class: 'text-blue-600 underline',\n },\n },\n underline: {},\n }),\n TextAlign.configure({\n types: ['heading', 'paragraph'],\n alignments: ['left', 'center', 'right', 'justify'],\n }),\n TextStyle,\n Color,\n Highlight.configure({\n multicolor: true,\n }),\n FontSize,\n Superscript,\n Subscript,\n ]\n}\n\n// =============================================================================\n// TiptapField Component\n// =============================================================================\n\nfunction TiptapFieldInner({ value, onChange, label, readOnly }: TiptapFieldProps) {\n const [isLinkPopoverOpen, setIsLinkPopoverOpen] = useState(false)\n const [showSource, setShowSource] = useState(false)\n const [sourceContent, setSourceContent] = useState(value)\n\n // Use a ref to store the onChange callback to avoid recreating the editor\n // when onChange reference changes (which happens on every Puck render)\n const onChangeRef = useRef(onChange)\n onChangeRef.current = onChange\n\n // Stable onUpdate handler that uses the ref\n const handleUpdate = useCallback(({ editor }: { editor: ReturnType<typeof useEditor> }) => {\n if (editor) {\n const html = editor.getHTML()\n onChangeRef.current(html)\n }\n }, [])\n\n // Note: The \"duplicate extension\" warning is a known Tiptap limitation with React Strict Mode\n // and multiple editor instances. It doesn't affect functionality.\n // See: https://github.com/ueberdosis/tiptap/issues/2890\n const editor = useEditor({\n extensions: createTiptapExtensions(),\n content: value,\n editorProps: {\n attributes: {\n class: 'tiptap-editor focus:outline-none min-h-[200px] p-4',\n },\n },\n onUpdate: handleUpdate,\n immediatelyRender: false,\n shouldRerenderOnTransaction: false,\n })\n\n // Use useEditorState to subscribe to formatting state changes.\n // This is the official TipTap pattern for reactive toolbar buttons with shouldRerenderOnTransaction: false.\n // See: https://tiptap.dev/docs/guides/performance\n const formattingState = useEditorState({\n editor,\n selector: ({ editor: e }) => {\n if (!e) return null\n return {\n isBold: e.isActive('bold'),\n isItalic: e.isActive('italic'),\n isUnderline: e.isActive('underline'),\n isStrike: e.isActive('strike'),\n isH1: e.isActive('heading', { level: 1 }),\n isH2: e.isActive('heading', { level: 2 }),\n isH3: e.isActive('heading', { level: 3 }),\n isH4: e.isActive('heading', { level: 4 }),\n isH5: e.isActive('heading', { level: 5 }),\n isH6: e.isActive('heading', { level: 6 }),\n isBulletList: e.isActive('bulletList'),\n isOrderedList: e.isActive('orderedList'),\n isBlockquote: e.isActive('blockquote'),\n isAlignLeft: e.isActive({ textAlign: 'left' }),\n isAlignCenter: e.isActive({ textAlign: 'center' }),\n isAlignRight: e.isActive({ textAlign: 'right' }),\n isAlignJustify: e.isActive({ textAlign: 'justify' }),\n isLink: e.isActive('link'),\n isHighlight: e.isActive('highlight'),\n isSuperscript: e.isActive('superscript'),\n isSubscript: e.isActive('subscript'),\n }\n },\n })\n\n // Debug: Log editor element info\n useEffect(() => {\n if (editor) {\n const editorEl = editor.view.dom as HTMLElement\n console.log('[TipTap Debug] Editor element:', {\n className: editorEl.className,\n tagName: editorEl.tagName,\n hasH1: editorEl.querySelector('h1') !== null,\n })\n // Check computed styles on a heading if present\n const h1 = editorEl.querySelector('h1')\n if (h1) {\n const styles = window.getComputedStyle(h1)\n console.log('[TipTap Debug] H1 computed styles:', {\n fontSize: styles.fontSize,\n fontWeight: styles.fontWeight,\n })\n }\n const ul = editorEl.querySelector('ul')\n if (ul) {\n const styles = window.getComputedStyle(ul)\n console.log('[TipTap Debug] UL computed styles:', {\n listStyleType: styles.listStyleType,\n paddingLeft: styles.paddingLeft,\n })\n }\n }\n }, [editor, value])\n\n if (!editor) {\n return (\n <div className=\"puck-field\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">{label}</label>\n )}\n <div className=\"border rounded-lg overflow-hidden bg-white\">\n <div className=\"min-h-[200px] p-4 text-gray-400\">Loading editor...</div>\n </div>\n </div>\n )\n }\n\n const setLink = (url: string) => {\n editor.chain().focus().extendMarkRange('link').setLink({ href: url }).run()\n setIsLinkPopoverOpen(false)\n }\n\n const removeLink = () => {\n editor.chain().focus().unsetLink().run()\n setIsLinkPopoverOpen(false)\n }\n\n return (\n <div className=\"puck-field\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">{label}</label>\n )}\n\n <div className=\"border rounded-lg bg-white\">\n {/* Toolbar - wraps into multiple rows on narrow screens */}\n {!readOnly && (\n <div className=\"border-b bg-gray-50 flex items-center flex-wrap gap-1 p-2\">\n {/* Text Style */}\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n isActive={formattingState?.isBold}\n title=\"Bold\"\n >\n <Bold className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n isActive={formattingState?.isItalic}\n title=\"Italic\"\n >\n <Italic className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n isActive={formattingState?.isUnderline}\n title=\"Underline\"\n >\n <Underline className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleStrike().run()}\n isActive={formattingState?.isStrike}\n title=\"Strikethrough\"\n >\n <Strikethrough className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSuperscript().run()}\n isActive={formattingState?.isSuperscript}\n title=\"Superscript\"\n >\n <SuperscriptIcon className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSubscript().run()}\n isActive={formattingState?.isSubscript}\n title=\"Subscript\"\n >\n <SubscriptIcon className={ICON_SIZE} />\n </ToolbarButton>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Headings Dropdown */}\n <ToolbarDropdown\n trigger={\n <span className=\"flex items-center gap-0.5\">\n {formattingState?.isH1 ? <Heading1 className={ICON_SIZE} /> :\n formattingState?.isH2 ? <Heading2 className={ICON_SIZE} /> :\n formattingState?.isH3 ? <Heading3 className={ICON_SIZE} /> :\n formattingState?.isH4 ? <Heading4 className={ICON_SIZE} /> :\n formattingState?.isH5 ? <Heading5 className={ICON_SIZE} /> :\n formattingState?.isH6 ? <Heading6 className={ICON_SIZE} /> :\n <Pilcrow className={ICON_SIZE} />}\n <ChevronDown className=\"w-3 h-3\" />\n </span>\n }\n title=\"Text Type\"\n isActive={formattingState?.isH1 || formattingState?.isH2 || formattingState?.isH3 || formattingState?.isH4 || formattingState?.isH5 || formattingState?.isH6}\n >\n {(close) => (\n <>\n <DropdownItem onClick={() => { editor.chain().focus().setParagraph().run(); close(); }}>\n <Pilcrow className={cn(ICON_SIZE, 'mr-2')} />\n Paragraph\n </DropdownItem>\n <DropdownSeparator />\n <DropdownItem onClick={() => { editor.chain().focus().toggleHeading({ level: 1 }).run(); close(); }}>\n <Heading1 className={cn(ICON_SIZE, 'mr-2')} />\n <span className=\"font-bold text-lg\">Heading 1</span>\n </DropdownItem>\n <DropdownItem onClick={() => { editor.chain().focus().toggleHeading({ level: 2 }).run(); close(); }}>\n <Heading2 className={cn(ICON_SIZE, 'mr-2')} />\n <span className=\"font-bold text-base\">Heading 2</span>\n </DropdownItem>\n <DropdownItem onClick={() => { editor.chain().focus().toggleHeading({ level: 3 }).run(); close(); }}>\n <Heading3 className={cn(ICON_SIZE, 'mr-2')} />\n <span className=\"font-semibold\">Heading 3</span>\n </DropdownItem>\n <DropdownItem onClick={() => { editor.chain().focus().toggleHeading({ level: 4 }).run(); close(); }}>\n <Heading4 className={cn(ICON_SIZE, 'mr-2')} />\n <span className=\"font-semibold text-sm\">Heading 4</span>\n </DropdownItem>\n <DropdownItem onClick={() => { editor.chain().focus().toggleHeading({ level: 5 }).run(); close(); }}>\n <Heading5 className={cn(ICON_SIZE, 'mr-2')} />\n <span className=\"font-semibold text-xs\">Heading 5</span>\n </DropdownItem>\n <DropdownItem onClick={() => { editor.chain().focus().toggleHeading({ level: 6 }).run(); close(); }}>\n <Heading6 className={cn(ICON_SIZE, 'mr-2')} />\n <span className=\"font-semibold text-xs text-gray-600\">Heading 6</span>\n </DropdownItem>\n </>\n )}\n </ToolbarDropdown>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Font Size */}\n <ToolbarDropdown\n trigger={<ALargeSmall className={ICON_SIZE} />}\n title=\"Font Size\"\n >\n {(close) => (\n <>\n <DropdownLabel>Presets</DropdownLabel>\n <div className=\"grid grid-cols-3 gap-1 px-2 pb-2\">\n {FONT_SIZES.map((size) => (\n <button\n key={size.label}\n type=\"button\"\n onClick={() => {\n if (size.value) {\n editor.chain().focus().setFontSize(size.value).run()\n } else {\n editor.chain().focus().unsetFontSize().run()\n }\n close()\n }}\n className=\"px-2 py-1.5 text-xs rounded border border-gray-200 hover:bg-gray-100 transition-colors text-center\"\n title={size.px}\n >\n {size.label}\n </button>\n ))}\n </div>\n <DropdownSeparator />\n <div className=\"p-2\">\n <DropdownLabel>Custom Size</DropdownLabel>\n <div className=\"flex items-center gap-1 mt-1\">\n <input\n type=\"number\"\n placeholder=\"16\"\n min=\"8\"\n max=\"200\"\n className=\"w-16 px-2 py-1 text-sm border border-gray-200 rounded focus:outline-none focus:ring-1 focus:ring-blue-500\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n const input = e.target as HTMLInputElement\n const value = input.value\n const unit = (input.nextElementSibling as HTMLSelectElement)?.value || 'px'\n if (value) {\n editor.chain().focus().setFontSize(`${value}${unit}`).run()\n close()\n }\n }\n }}\n />\n <select\n className=\"px-1 py-1 text-sm border border-gray-200 rounded focus:outline-none focus:ring-1 focus:ring-blue-500\"\n defaultValue=\"px\"\n >\n {FONT_SIZE_UNITS.map((unit) => (\n <option key={unit} value={unit}>{unit}</option>\n ))}\n </select>\n <button\n type=\"button\"\n onClick={(e) => {\n const container = (e.target as HTMLElement).parentElement\n const input = container?.querySelector('input') as HTMLInputElement\n const select = container?.querySelector('select') as HTMLSelectElement\n const value = input?.value\n const unit = select?.value || 'px'\n if (value) {\n editor.chain().focus().setFontSize(`${value}${unit}`).run()\n close()\n }\n }}\n className=\"px-2 py-1 text-xs bg-blue-600 text-white rounded hover:bg-blue-700\"\n >\n Apply\n </button>\n </div>\n </div>\n </>\n )}\n </ToolbarDropdown>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Lists */}\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n isActive={formattingState?.isBulletList}\n title=\"Bullet List\"\n >\n <List className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n isActive={formattingState?.isOrderedList}\n title=\"Numbered List\"\n >\n <ListOrdered className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n isActive={formattingState?.isBlockquote}\n title=\"Blockquote\"\n >\n <Quote className={ICON_SIZE} />\n </ToolbarButton>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Alignment */}\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('left').run()}\n isActive={formattingState?.isAlignLeft}\n title=\"Align Left\"\n >\n <AlignLeft className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('center').run()}\n isActive={formattingState?.isAlignCenter}\n title=\"Align Center\"\n >\n <AlignCenter className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('right').run()}\n isActive={formattingState?.isAlignRight}\n title=\"Align Right\"\n >\n <AlignRight className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('justify').run()}\n isActive={formattingState?.isAlignJustify}\n title=\"Justify\"\n >\n <AlignJustify className={ICON_SIZE} />\n </ToolbarButton>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Link */}\n <div className=\"relative flex-shrink-0\">\n <ToolbarButton\n onClick={() => setIsLinkPopoverOpen(!isLinkPopoverOpen)}\n isActive={formattingState?.isLink}\n title=\"Add Link\"\n >\n <Link className={ICON_SIZE} />\n </ToolbarButton>\n <LinkPopover\n isOpen={isLinkPopoverOpen}\n onClose={() => setIsLinkPopoverOpen(false)}\n onSetLink={setLink}\n onRemoveLink={removeLink}\n />\n </div>\n\n {/* Text Color */}\n <ToolbarDropdown\n trigger={<Palette className={ICON_SIZE} />}\n title=\"Text Color\"\n >\n {(close) => (\n <>\n {/* Theme (Auto) option - removes color to inherit from parent */}\n <DropdownItem onClick={() => { editor.chain().focus().unsetColor().run(); close(); }}>\n <span\n className=\"w-4 h-4 rounded mr-2 border border-gray-300 flex-shrink-0\"\n style={{ background: 'linear-gradient(135deg, #fff 50%, #1f2937 50%)' }}\n />\n {THEME_COLOR.label}\n </DropdownItem>\n <DropdownSeparator />\n\n {/* Color categories */}\n {COLOR_CATEGORIES.map((category) => (\n <div key={category.label}>\n <DropdownLabel>{category.label}</DropdownLabel>\n <div className=\"grid grid-cols-5 gap-1 px-2 pb-2\">\n {category.colors.map((color) => (\n <button\n key={color.hex}\n type=\"button\"\n onClick={() => { editor.chain().focus().setColor(color.hex).run(); close(); }}\n className=\"w-6 h-6 rounded border border-gray-200 cursor-pointer transition-transform duration-100 hover:scale-110\"\n style={{ backgroundColor: color.hex }}\n title={color.label}\n />\n ))}\n </div>\n </div>\n ))}\n\n <DropdownSeparator />\n\n {/* Custom color picker */}\n <div className=\"p-2\">\n <DropdownLabel>Custom Color</DropdownLabel>\n <div className=\"flex items-center gap-2 mt-1\">\n <input\n type=\"color\"\n // Show current text color (default to black if none set)\n value={editor.getAttributes('textStyle').color || '#000000'}\n // onInput fires while dragging - apply color live\n onInput={(e) => editor.chain().focus().setColor((e.target as HTMLInputElement).value).run()}\n // Let dropdown close naturally via click-outside detection\n className=\"w-8 h-8 p-0 border border-gray-200 rounded cursor-pointer\"\n title=\"Pick any color\"\n />\n <span className=\"text-xs text-gray-500\">Pick any color</span>\n </div>\n </div>\n </>\n )}\n </ToolbarDropdown>\n\n {/* Highlight (background color) */}\n <ToolbarDropdown\n trigger={<Highlighter className={ICON_SIZE} />}\n title=\"Highlight\"\n isActive={formattingState?.isHighlight}\n >\n {(close) => (\n <>\n <div className=\"grid grid-cols-3 gap-1 p-2\">\n {HIGHLIGHT_COLORS.map((color) => (\n <button\n key={color.hex}\n type=\"button\"\n onClick={() => { editor.chain().focus().toggleHighlight({ color: color.hex }).run(); close(); }}\n className=\"w-8 h-6 rounded border border-gray-200 cursor-pointer transition-transform duration-100 hover:scale-110\"\n style={{ backgroundColor: color.hex }}\n title={color.label}\n />\n ))}\n </div>\n <DropdownItem onClick={() => { editor.chain().focus().unsetHighlight().run(); close(); }}>\n Remove Highlight\n </DropdownItem>\n </>\n )}\n </ToolbarDropdown>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Insert Elements */}\n <ToolbarButton\n onClick={() => editor.chain().focus().setHorizontalRule().run()}\n title=\"Horizontal Rule\"\n >\n <Minus className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setHardBreak().run()}\n title=\"Hard Break (Shift+Enter)\"\n >\n <CornerDownLeft className={ICON_SIZE} />\n </ToolbarButton>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Clear Formatting */}\n <ToolbarButton\n onClick={() => editor.chain().focus().unsetAllMarks().clearNodes().run()}\n title=\"Clear Formatting\"\n >\n <RemoveFormatting className={ICON_SIZE} />\n </ToolbarButton>\n\n {/* View Source */}\n <button\n type=\"button\"\n onClick={() => {\n if (showSource) {\n editor.commands.setContent(sourceContent)\n onChange(sourceContent)\n } else {\n setSourceContent(editor.getHTML())\n }\n setShowSource(!showSource)\n }}\n title=\"View Source\"\n className={cn(\n 'inline-flex items-center rounded transition-colors text-xs h-7 px-2 gap-1 flex-shrink-0',\n showSource && 'bg-gray-200',\n !showSource && 'bg-transparent'\n )}\n >\n <Code className={ICON_SIZE} />\n Source\n </button>\n </div>\n )}\n\n {/* Editor or Source View */}\n {showSource ? (\n <textarea\n value={sourceContent}\n onChange={(e) => {\n setSourceContent(e.target.value)\n onChange(e.target.value)\n }}\n className=\"w-full min-h-[200px] p-4 font-mono text-sm border-0 resize-y focus:outline-none\"\n placeholder=\"Edit HTML source...\"\n />\n ) : (\n <div className=\"min-h-[200px] bg-white\">\n <EditorContent editor={editor} />\n </div>\n )}\n </div>\n </div>\n )\n}\n\n// Memoize the component to prevent unnecessary re-renders when Puck updates state.\n// This is critical for maintaining editor focus during typing.\nexport const TiptapField = memo(TiptapFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for Tiptap rich text editing\n */\nexport function createTiptapField(config: {\n label?: string\n placeholder?: string\n}): CustomField<string> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ name, value, onChange, readOnly }) => (\n <TiptapField\n key={`tiptap-${name}`}\n value={value || ''}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * TiptapModal - Full-screen modal for TipTap rich text editing\n *\n * Used by TiptapModalField to provide a focused editing experience\n * that works within Puck's architecture (sidebar triggers modal).\n */\n\nimport React, { useState, useEffect, useCallback } from 'react'\nimport { TiptapField } from './TiptapField'\nimport { X } from 'lucide-react'\n\ninterface TiptapModalProps {\n isOpen: boolean\n onClose: () => void\n value: string\n onChange: (value: string) => void\n title?: string\n}\n\nexport function TiptapModal({ isOpen, onClose, value, onChange, title }: TiptapModalProps) {\n const [localValue, setLocalValue] = useState(value)\n\n // Sync local value when modal opens with new value\n useEffect(() => {\n if (isOpen) {\n setLocalValue(value)\n }\n }, [isOpen, value])\n\n // Handle escape key\n useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape' && isOpen) {\n handleCancel()\n }\n }\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [isOpen])\n\n const handleSave = useCallback(() => {\n onChange(localValue)\n onClose()\n }, [localValue, onChange, onClose])\n\n const handleCancel = useCallback(() => {\n setLocalValue(value) // Reset to original\n onClose()\n }, [value, onClose])\n\n // Handle backdrop click\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n handleCancel()\n }\n },\n [handleCancel]\n )\n\n if (!isOpen) return null\n\n return (\n <div\n onClick={handleBackdropClick}\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 99999,\n padding: '24px',\n }}\n >\n <div\n style={{\n backgroundColor: 'white',\n borderRadius: '8px',\n width: '100%',\n maxWidth: '900px',\n height: '80vh',\n maxHeight: '800px',\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '16px 20px',\n borderBottom: '1px solid #e5e7eb',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flexShrink: 0,\n }}\n >\n <h2 style={{ margin: 0, fontSize: '18px', fontWeight: 600, color: '#111827' }}>\n {title || 'Edit Content'}\n </h2>\n <button\n type=\"button\"\n onClick={handleCancel}\n style={{\n padding: '8px',\n background: 'transparent',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n color: '#6b7280',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n title=\"Close (Esc)\"\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Editor */}\n <div\n style={{\n flex: 1,\n overflow: 'auto',\n padding: '16px 20px',\n minHeight: 0,\n }}\n >\n <TiptapField value={localValue} onChange={setLocalValue} />\n </div>\n\n {/* Footer */}\n <div\n style={{\n padding: '16px 20px',\n borderTop: '1px solid #e5e7eb',\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '12px',\n flexShrink: 0,\n }}\n >\n <button\n type=\"button\"\n onClick={handleCancel}\n style={{\n padding: '10px 20px',\n backgroundColor: 'transparent',\n color: '#374151',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n }}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n style={{\n padding: '10px 20px',\n backgroundColor: '#2563eb',\n color: 'white',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n }}\n >\n Save Changes\n </button>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\n/**\n * TiptapModalField - Custom Puck field with embedded editor + modal option\n *\n * Shows the full TipTap editor embedded in the sidebar for quick edits,\n * with an \"Expand\" button to open a full-screen modal for focused editing.\n */\n\nimport React, { useState, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { TiptapField } from './TiptapField'\nimport { TiptapModal } from './TiptapModal'\nimport { Maximize2 } from 'lucide-react'\n\ninterface TiptapModalFieldProps {\n value: string\n onChange: (value: string) => void\n label?: string\n}\n\nfunction TiptapModalFieldInner({ value, onChange, label }: TiptapModalFieldProps) {\n const [isModalOpen, setIsModalOpen] = useState(false)\n\n return (\n <div>\n {/* Header with label and expand button */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n {label && (\n <label\n style={{\n fontSize: '14px',\n fontWeight: 500,\n color: '#374151',\n }}\n >\n {label}\n </label>\n )}\n <button\n type=\"button\"\n onClick={() => setIsModalOpen(true)}\n style={{\n padding: '4px 8px',\n backgroundColor: 'transparent',\n color: '#6b7280',\n border: '1px solid #d1d5db',\n borderRadius: '4px',\n cursor: 'pointer',\n fontSize: '12px',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n transition: 'all 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#f3f4f6'\n e.currentTarget.style.borderColor = '#9ca3af'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.borderColor = '#d1d5db'\n }}\n title=\"Open full-screen editor\"\n >\n <Maximize2 size={14} />\n Expand\n </button>\n </div>\n\n {/* Embedded TipTap editor */}\n <TiptapField value={value || ''} onChange={onChange} />\n\n {/* Modal for full-screen editing */}\n <TiptapModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n value={value || ''}\n onChange={onChange}\n title=\"Edit Rich Text\"\n />\n </div>\n )\n}\n\nexport const TiptapModalField = memo(TiptapModalFieldInner)\n\n/**\n * Creates a Puck field configuration for TipTap editing with modal option\n */\nexport function createTiptapModalField(config: { label?: string } = {}): CustomField<string> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange }) => (\n <TiptapModalField value={value || ''} onChange={onChange} label={config.label} />\n ),\n }\n}\n","'use client'\n\n/**\n * RichText Component - Puck Editor Configuration with Modal Editing\n *\n * Uses a modal-based approach for TipTap editing. The sidebar shows a\n * preview and \"Edit Content\" button that opens a full-screen modal.\n * This works within Puck's architecture where canvas events are captured.\n *\n * Requires @tailwindcss/typography - uses the `prose` class for styling.\n */\n\nimport React, { useMemo } from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n marginValueToCSS,\n paddingValueToCSS,\n dimensionsValueToCSS,\n type PaddingValue,\n type DimensionsValue,\n} from '../../fields/shared'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createResetField } from '../../fields/ResetField'\nimport { createTiptapModalField } from '../../fields/TiptapModalField'\n\nexport interface RichTextEditorProps {\n content: string\n dimensions: DimensionsValue | null\n margin: PaddingValue | null\n customPadding: PaddingValue | null\n id?: string // Puck adds this automatically\n}\n\nconst defaultProps: RichTextEditorProps = {\n content: '<p>Click to start editing...</p>',\n dimensions: null,\n margin: null,\n customPadding: null,\n}\n\n// =============================================================================\n// Render Component for Editor Config\n// =============================================================================\n\n// Note: RichTextEditorConfig is only used in the Puck editor (editorConfig).\n// The frontend uses RichTextConfig from RichText.server.tsx (baseConfig).\n// Content is edited via modal from the sidebar, canvas shows preview.\n\nfunction RichTextRender({\n content,\n dimensions,\n margin,\n customPadding,\n}: RichTextEditorProps) {\n // Build styles\n const style = useMemo(() => {\n const s: React.CSSProperties = {}\n\n const dimensionsStyles = dimensions ? dimensionsValueToCSS(dimensions) : undefined\n if (dimensionsStyles) {\n Object.assign(s, dimensionsStyles)\n }\n\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n s.margin = marginCSS\n }\n\n const customPaddingCSS = paddingValueToCSS(customPadding)\n if (customPaddingCSS) {\n s.padding = customPaddingCSS\n }\n\n return Object.keys(s).length > 0 ? s : undefined\n }, [dimensions, margin, customPadding])\n\n // Render static preview (editing happens via modal in sidebar)\n return (\n <section className=\"relative overflow-hidden\" style={style}>\n <div className=\"prose dark:prose-invert\" dangerouslySetInnerHTML={{ __html: content }} />\n </section>\n )\n}\n\n// =============================================================================\n// Puck Component Config\n// =============================================================================\n\nexport const RichTextEditorConfig: ComponentConfig = {\n label: 'Rich Text',\n fields: {\n _reset: createResetField({ defaultProps }),\n content: createTiptapModalField({ label: 'Content' }),\n dimensions: createDimensionsField({ label: 'Dimensions' }),\n margin: createMarginField({ label: 'Margin' }),\n customPadding: createPaddingField({ label: 'Padding' }),\n },\n defaultProps,\n render: (props) => (\n <RichTextRender\n content={props.content}\n dimensions={props.dimensions}\n margin={props.margin}\n customPadding={props.customPadding}\n id={props.id}\n />\n ),\n}\n","'use client'\n\n/**\n * TransformField - Custom Puck field for CSS transforms\n *\n * This component provides:\n * - Live preview of transform effect\n * - Rotate slider (-360 to 360)\n * - Scale X/Y with link/unlink toggle\n * - Skew X/Y sliders\n * - Translate X/Y inputs with unit selector\n * - Transform origin 3x3 grid selector\n * - Collapsible 3D section (perspective, rotateX, rotateY)\n */\n\nimport React, { useCallback, memo, useState } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n Link,\n Unlink,\n RotateCw,\n Maximize2,\n X,\n ChevronDown,\n ChevronRight,\n Box,\n} from 'lucide-react'\nimport type { TransformValue, TransformOrigin } from './shared'\nimport { DEFAULT_TRANSFORM, transformValueToCSS } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { Checkbox } from '../components/ui/checkbox'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../components/ui/select'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface TransformFieldProps {\n value: TransformValue | null\n onChange: (value: TransformValue | null) => void\n label?: string\n readOnly?: boolean\n}\n\ntype TranslateUnit = 'px' | 'rem' | '%'\n\n// =============================================================================\n// Origin Grid Component\n// =============================================================================\n\ninterface OriginGridProps {\n value: TransformOrigin\n onChange: (origin: TransformOrigin) => void\n disabled?: boolean\n}\n\nconst ORIGIN_POSITIONS: Array<{ value: TransformOrigin; row: number; col: number }> = [\n { value: 'top-left', row: 0, col: 0 },\n { value: 'top', row: 0, col: 1 },\n { value: 'top-right', row: 0, col: 2 },\n { value: 'left', row: 1, col: 0 },\n { value: 'center', row: 1, col: 1 },\n { value: 'right', row: 1, col: 2 },\n { value: 'bottom-left', row: 2, col: 0 },\n { value: 'bottom', row: 2, col: 1 },\n { value: 'bottom-right', row: 2, col: 2 },\n]\n\nfunction OriginGrid({ value, onChange, disabled }: OriginGridProps) {\n return (\n <div className=\"grid grid-cols-3 gap-1 w-fit\">\n {ORIGIN_POSITIONS.map(({ value: origin }) => {\n const isActive = value === origin\n return (\n <button\n key={origin}\n type=\"button\"\n onClick={() => onChange(origin)}\n disabled={disabled}\n className={cn(\n 'w-6 h-6 rounded border transition-colors',\n isActive\n ? 'bg-primary border-primary'\n : 'bg-muted/50 border-border hover:bg-muted hover:border-muted-foreground/50',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n title={origin}\n >\n <span\n className={cn(\n 'block w-2 h-2 rounded-full mx-auto',\n isActive ? 'bg-primary-foreground' : 'bg-muted-foreground/30'\n )}\n />\n </button>\n )\n })}\n </div>\n )\n}\n\n// =============================================================================\n// Slider Input Component (custom range input)\n// =============================================================================\n\ninterface SliderInputProps {\n value: number\n onChange: (value: number) => void\n min: number\n max: number\n step?: number\n disabled?: boolean\n label?: string\n unit?: string\n}\n\nfunction SliderInput({\n value,\n onChange,\n min,\n max,\n step = 1,\n disabled,\n label,\n unit = '',\n}: SliderInputProps) {\n return (\n <div className=\"space-y-1\">\n {label && (\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n {label}\n </Label>\n <span className=\"text-xs font-mono text-muted-foreground\">\n {value}{unit}\n </span>\n </div>\n )}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={(e) => onChange(Number(e.target.value))}\n disabled={disabled}\n className={cn(\n 'w-full h-2 bg-muted rounded-lg appearance-none cursor-pointer',\n 'accent-primary',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n />\n </div>\n )\n}\n\n// =============================================================================\n// TransformField Component\n// =============================================================================\n\nfunction TransformFieldInner({\n value,\n onChange,\n label,\n readOnly,\n}: TransformFieldProps) {\n const [show3D, setShow3D] = useState(value?.enable3D ?? false)\n\n // Use default if no value\n const currentValue = value || DEFAULT_TRANSFORM\n\n // Handle individual value changes\n const handleChange = useCallback(\n <K extends keyof TransformValue>(key: K, newValue: TransformValue[K]) => {\n onChange({\n ...currentValue,\n [key]: newValue,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle scale change with locking\n const handleScaleChange = useCallback(\n (axis: 'scaleX' | 'scaleY', newValue: number) => {\n if (currentValue.scaleLocked) {\n onChange({\n ...currentValue,\n scaleX: newValue,\n scaleY: newValue,\n })\n } else {\n onChange({\n ...currentValue,\n [axis]: newValue,\n })\n }\n },\n [currentValue, onChange]\n )\n\n // Handle scale lock toggle\n const handleScaleLockToggle = useCallback(() => {\n if (!currentValue.scaleLocked) {\n // When locking, sync both to X value\n onChange({\n ...currentValue,\n scaleLocked: true,\n scaleY: currentValue.scaleX,\n })\n } else {\n onChange({\n ...currentValue,\n scaleLocked: false,\n })\n }\n }, [currentValue, onChange])\n\n // Handle 3D toggle\n const handle3DToggle = useCallback(\n (enabled: boolean) => {\n setShow3D(enabled)\n onChange({\n ...currentValue,\n enable3D: enabled,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n // Get preview styles\n const previewStyles = transformValueToCSS(currentValue) || {}\n\n return (\n <div className=\"puck-field space-y-4\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">{label}</Label>\n )}\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset transform\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Live Preview */}\n <div className=\"h-24 bg-muted/30 rounded-md border border-border flex items-center justify-center overflow-hidden\">\n <div\n className=\"w-12 h-12 bg-primary/80 rounded-md flex items-center justify-center text-primary-foreground text-xs font-medium transition-transform duration-200\"\n style={previewStyles}\n >\n Aa\n </div>\n </div>\n\n {/* Rotate */}\n <div className=\"space-y-2 p-3 bg-muted/30 rounded-md\">\n <div className=\"flex items-center gap-2 mb-2\">\n <RotateCw className=\"h-4 w-4 text-muted-foreground\" />\n <Label className=\"text-xs font-medium\">Rotate</Label>\n </div>\n <SliderInput\n value={currentValue.rotate}\n onChange={(v) => handleChange('rotate', v)}\n min={-360}\n max={360}\n disabled={readOnly}\n unit=\"deg\"\n />\n </div>\n\n {/* Scale */}\n <div className=\"space-y-3 p-3 bg-muted/30 rounded-md\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Maximize2 className=\"h-4 w-4 text-muted-foreground\" />\n <Label className=\"text-xs font-medium\">Scale</Label>\n </div>\n {!readOnly && (\n <Button\n type=\"button\"\n variant={currentValue.scaleLocked ? 'default' : 'outline'}\n size=\"icon-sm\"\n onClick={handleScaleLockToggle}\n className=\"h-6 w-6\"\n title={\n currentValue.scaleLocked\n ? 'Click to unlink X and Y scale'\n : 'Click to link X and Y scale'\n }\n >\n {currentValue.scaleLocked ? (\n <Link className=\"h-3 w-3\" />\n ) : (\n <Unlink className=\"h-3 w-3\" />\n )}\n </Button>\n )}\n </div>\n\n <div className={cn('grid gap-3', currentValue.scaleLocked ? 'grid-cols-1' : 'grid-cols-2')}>\n <SliderInput\n label={currentValue.scaleLocked ? 'Scale' : 'Scale X'}\n value={currentValue.scaleX}\n onChange={(v) => handleScaleChange('scaleX', v)}\n min={0.1}\n max={3}\n step={0.1}\n disabled={readOnly}\n />\n {!currentValue.scaleLocked && (\n <SliderInput\n label=\"Scale Y\"\n value={currentValue.scaleY}\n onChange={(v) => handleScaleChange('scaleY', v)}\n min={0.1}\n max={3}\n step={0.1}\n disabled={readOnly}\n />\n )}\n </div>\n </div>\n\n {/* Skew */}\n <div className=\"space-y-3 p-3 bg-muted/30 rounded-md\">\n <Label className=\"text-xs font-medium\">Skew</Label>\n <div className=\"grid grid-cols-2 gap-3\">\n <SliderInput\n label=\"Skew X\"\n value={currentValue.skewX}\n onChange={(v) => handleChange('skewX', v)}\n min={-45}\n max={45}\n disabled={readOnly}\n unit=\"deg\"\n />\n <SliderInput\n label=\"Skew Y\"\n value={currentValue.skewY}\n onChange={(v) => handleChange('skewY', v)}\n min={-45}\n max={45}\n disabled={readOnly}\n unit=\"deg\"\n />\n </div>\n </div>\n\n {/* Translate */}\n <div className=\"space-y-3 p-3 bg-muted/30 rounded-md\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs font-medium\">Translate</Label>\n <Select\n value={currentValue.translateUnit}\n onValueChange={(v) => handleChange('translateUnit', v as TranslateUnit)}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-7 w-16 text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"px\">px</SelectItem>\n <SelectItem value=\"rem\">rem</SelectItem>\n <SelectItem value=\"%\">%</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n X\n </Label>\n <Input\n type=\"number\"\n value={currentValue.translateX}\n onChange={(e) =>\n handleChange('translateX', parseFloat(e.target.value) || 0)\n }\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Y\n </Label>\n <Input\n type=\"number\"\n value={currentValue.translateY}\n onChange={(e) =>\n handleChange('translateY', parseFloat(e.target.value) || 0)\n }\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n </div>\n </div>\n\n {/* Transform Origin */}\n <div className=\"space-y-3 p-3 bg-muted/30 rounded-md\">\n <Label className=\"text-xs font-medium\">Transform Origin</Label>\n <div className=\"flex items-center gap-4\">\n <OriginGrid\n value={currentValue.origin}\n onChange={(v) => handleChange('origin', v)}\n disabled={readOnly}\n />\n <span className=\"text-xs text-muted-foreground capitalize\">\n {currentValue.origin.replace('-', ' ')}\n </span>\n </div>\n </div>\n\n {/* 3D Section (Collapsible) */}\n <div className=\"border border-border rounded-md overflow-hidden\">\n <button\n type=\"button\"\n onClick={() => setShow3D(!show3D)}\n className=\"w-full flex items-center justify-between p-3 bg-muted/30 hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <Box className=\"h-4 w-4 text-muted-foreground\" />\n <Label className=\"text-xs font-medium cursor-pointer\">3D Transforms</Label>\n </div>\n {show3D ? (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n\n {show3D && (\n <div className=\"p-3 space-y-3 border-t border-border\">\n {/* Enable 3D checkbox */}\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"enable3d\"\n checked={currentValue.enable3D}\n onCheckedChange={(checked) =>\n handle3DToggle(checked === true)\n }\n disabled={readOnly}\n />\n <Label\n htmlFor=\"enable3d\"\n className=\"text-xs text-muted-foreground cursor-pointer\"\n >\n Enable 3D Transforms\n </Label>\n </div>\n\n {currentValue.enable3D && (\n <>\n {/* Perspective */}\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Perspective (px)\n </Label>\n <Input\n type=\"number\"\n min={100}\n max={2000}\n value={currentValue.perspective ?? 1000}\n onChange={(e) =>\n handleChange('perspective', parseInt(e.target.value, 10) || 1000)\n }\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n\n {/* Rotate X/Y */}\n <div className=\"grid grid-cols-2 gap-3\">\n <SliderInput\n label=\"Rotate X\"\n value={currentValue.rotateX ?? 0}\n onChange={(v) => handleChange('rotateX', v)}\n min={-180}\n max={180}\n disabled={readOnly}\n unit=\"deg\"\n />\n <SliderInput\n label=\"Rotate Y\"\n value={currentValue.rotateY ?? 0}\n onChange={(v) => handleChange('rotateY', v)}\n min={-180}\n max={180}\n disabled={readOnly}\n unit=\"deg\"\n />\n </div>\n </>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport const TransformField = memo(TransformFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for CSS transforms\n */\nexport function createTransformField(config: {\n label?: string\n}): CustomField<TransformValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <TransformField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n />\n ),\n }\n}\n","/**\n * Image Component - Puck Configuration\n *\n * Standalone image block with optional link wrapper.\n * Server-safe version using standard HTML img element.\n *\n * Responsive Controls:\n * - visibility: Show/hide at different breakpoints\n */\n\nimport { useId } from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n aspectRatioField,\n aspectRatioMap,\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n dimensionsValueToCSS,\n borderValueToCSS,\n transformValueToCSS,\n visibilityValueToCSS,\n type PaddingValue,\n type DimensionsValue,\n type BorderValue,\n type AnimationValue,\n type TransformValue,\n type VisibilityValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createBorderField } from '../../fields/BorderField'\nimport { createMediaField, type MediaReference } from '../../fields/MediaField'\nimport { createAlignmentField, type Alignment } from '../../fields/AlignmentField'\nimport { createAnimationField } from '../../fields/AnimationField'\nimport { createTransformField } from '../../fields/TransformField'\nimport { createResetField } from '../../fields/ResetField'\nimport { createResponsiveVisibilityField } from '../../fields/ResponsiveVisibilityField'\n\nexport interface ImageProps {\n image: MediaReference | null\n alt: string\n aspectRatio: string\n link: string\n openInNewTab: boolean\n margin: PaddingValue | null\n border: BorderValue | null\n dimensions: DimensionsValue | null\n alignment: Alignment | null\n transform: TransformValue | null\n animation: AnimationValue | null\n customPadding: PaddingValue | null\n visibility: VisibilityValue | null\n}\n\nconst defaultProps: ImageProps = {\n image: null,\n alt: '',\n aspectRatio: 'auto',\n link: '',\n openInNewTab: false,\n margin: null,\n border: null,\n dimensions: null,\n alignment: null,\n transform: null,\n animation: null,\n customPadding: null,\n visibility: null,\n}\n\nexport const ImageConfig: ComponentConfig = {\n label: 'Image',\n fields: {\n _reset: createResetField({ defaultProps }),\n image: createMediaField({ label: 'Image' }),\n alt: {\n type: 'text',\n label: 'Alt Text Override',\n },\n // Responsive visibility control\n visibility: createResponsiveVisibilityField({ label: 'Visibility' }),\n aspectRatio: aspectRatioField,\n link: {\n type: 'text',\n label: 'Link URL',\n },\n openInNewTab: {\n type: 'radio',\n label: 'Open in New Tab',\n options: [\n { label: 'Yes', value: true },\n { label: 'No', value: false },\n ],\n },\n border: createBorderField({ label: 'Border' }),\n dimensions: createDimensionsField({ label: 'Dimensions' }),\n alignment: createAlignmentField({ label: 'Alignment', defaultValue: 'center' }),\n transform: createTransformField({ label: 'Transform' }),\n animation: createAnimationField({ label: 'Animation' }),\n // Spacing (grouped at bottom)\n margin: createMarginField({ label: 'Margin' }),\n customPadding: createPaddingField({ label: 'Padding' }),\n },\n defaultProps,\n render: ({ image, alt, aspectRatio, link, openInNewTab, dimensions, alignment, margin, border, transform, animation, customPadding, visibility }) => {\n // Generate unique ID for CSS targeting\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const uniqueId = useId().replace(/:/g, '')\n const wrapperClass = `puck-image-${uniqueId}`\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, wrapperClass)\n const dimensionsStyles = dimensionsValueToCSS(dimensions)\n\n const style: React.CSSProperties = {\n ...dimensionsStyles,\n }\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n style.margin = marginCSS\n }\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n style.padding = paddingCSS\n }\n const borderStyles = borderValueToCSS(border)\n if (borderStyles) {\n Object.assign(style, borderStyles)\n }\n const transformStyles = transformValueToCSS(transform)\n if (transformStyles) {\n Object.assign(style, transformStyles)\n }\n\n const alignmentValue = alignment ?? 'center'\n const alignmentClasses = cn(\n 'flex',\n alignmentValue === 'left' && 'justify-start',\n alignmentValue === 'center' && 'justify-center',\n alignmentValue === 'right' && 'justify-end'\n )\n\n // Placeholder if no image\n if (!image?.url) {\n return (\n <AnimatedWrapper animation={animation}>\n {visibilityCSS && <style>{visibilityCSS}</style>}\n <div className={cn('py-4 px-4', wrapperClass)} style={Object.keys(style).length > 0 ? style : undefined}>\n <div className={alignmentClasses}>\n <div\n className={cn(\n 'relative overflow-hidden rounded-lg w-full max-w-md bg-muted flex items-center justify-center min-h-[200px]',\n aspectRatioMap[aspectRatio] || ''\n )}\n >\n <span className=\"text-muted-foreground\">No image selected</span>\n </div>\n </div>\n </div>\n </AnimatedWrapper>\n )\n }\n\n // For auto aspect ratio, use natural image dimensions\n // For fixed aspect ratios, use absolute positioning within aspect-ratio container\n // Note: When using aspect ratios in Flex, set a min-width via Dimensions\n const imageElement = aspectRatio === 'auto' ? (\n <div className=\"relative overflow-hidden rounded-lg w-full\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={image.url}\n alt={alt || image.alt || ''}\n className=\"w-full h-auto object-cover\"\n />\n </div>\n ) : (\n <div className={cn('relative overflow-hidden rounded-lg w-full', aspectRatioMap[aspectRatio])}>\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={image.url}\n alt={alt || image.alt || ''}\n className=\"absolute inset-0 w-full h-full object-cover\"\n />\n </div>\n )\n\n const content = link ? (\n <a\n href={link}\n target={openInNewTab ? '_blank' : undefined}\n rel={openInNewTab ? 'noopener noreferrer' : undefined}\n className=\"block transition-opacity hover:opacity-90\"\n >\n {imageElement}\n </a>\n ) : (\n imageElement\n )\n\n return (\n <AnimatedWrapper animation={animation}>\n {visibilityCSS && <style>{visibilityCSS}</style>}\n <div className={cn('py-4 px-4', wrapperClass)} style={Object.keys(style).length > 0 ? style : undefined}>\n <div className={alignmentClasses}>{content}</div>\n </div>\n </AnimatedWrapper>\n )\n },\n}\n","'use client'\n\n/**\n * SizeField - Custom Puck field for button/element sizing\n *\n * Provides preset size options (sm, default, lg) with a \"custom\" mode\n * that reveals detailed controls for height, padding, and font size.\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { X } from 'lucide-react'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type SizeMode = 'sm' | 'default' | 'lg' | 'custom'\nexport type SizeUnit = 'px' | 'rem'\n\nexport interface SizeValue {\n mode: SizeMode\n /** Height in units (only used when mode === 'custom') */\n height?: number\n /** Horizontal padding in units (only used when mode === 'custom') */\n paddingX?: number\n /** Vertical padding in units (only used when mode === 'custom') */\n paddingY?: number\n /** Font size in units (only used when mode === 'custom') */\n fontSize?: number\n /** Unit for all values */\n unit?: SizeUnit\n}\n\ninterface SizeFieldProps {\n value: SizeValue | null\n onChange: (value: SizeValue | null) => void\n label?: string\n readOnly?: boolean\n /** Show height input (default: true) */\n showHeight?: boolean\n /** Show font size input (default: true) */\n showFontSize?: boolean\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\nconst DEFAULT_VALUE: SizeValue = {\n mode: 'default',\n}\n\nconst CUSTOM_DEFAULTS: Required<Omit<SizeValue, 'mode'>> = {\n height: 40,\n paddingX: 16,\n paddingY: 8,\n fontSize: 14,\n unit: 'px',\n}\n\n// =============================================================================\n// SizeField Component\n// =============================================================================\n\nfunction SizeFieldInner({\n value,\n onChange,\n label = 'Size',\n readOnly,\n showHeight = true,\n showFontSize = true,\n}: SizeFieldProps) {\n const currentValue = value || DEFAULT_VALUE\n\n // Handle mode change\n const handleModeChange = useCallback((mode: SizeMode) => {\n if (mode === 'custom') {\n // Initialize custom values when switching to custom\n onChange({\n mode,\n ...CUSTOM_DEFAULTS,\n })\n } else {\n onChange({ mode })\n }\n }, [onChange])\n\n // Handle numeric value changes\n const handleValueChange = useCallback((\n field: 'height' | 'paddingX' | 'paddingY' | 'fontSize',\n val: number\n ) => {\n onChange({\n ...currentValue,\n [field]: val,\n })\n }, [currentValue, onChange])\n\n // Handle unit change\n const handleUnitChange = useCallback((unit: SizeUnit) => {\n onChange({\n ...currentValue,\n unit,\n })\n }, [currentValue, onChange])\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const presets = [\n { mode: 'sm' as SizeMode, label: 'SM' },\n { mode: 'default' as SizeMode, label: 'Default' },\n { mode: 'lg' as SizeMode, label: 'LG' },\n { mode: 'custom' as SizeMode, label: 'Custom' },\n ]\n\n return (\n <div className=\"puck-field space-y-3\">\n {/* Header with label and clear */}\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Size mode selector */}\n <div className=\"flex flex-wrap gap-1\">\n {presets.map(({ mode, label: modeLabel }) => {\n const isActive = currentValue.mode === mode\n return (\n <Button\n key={mode}\n type=\"button\"\n variant={isActive ? 'default' : 'secondary'}\n size=\"sm\"\n onClick={() => handleModeChange(mode)}\n disabled={readOnly}\n className={cn(\n \"text-xs\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n >\n {modeLabel}\n </Button>\n )\n })}\n </div>\n\n {/* Custom size controls */}\n {currentValue.mode === 'custom' && (\n <div className=\"space-y-3 p-3 bg-muted/50 rounded-md\">\n {/* Unit selector */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground flex-shrink-0\">\n Unit:\n </Label>\n <div className=\"flex gap-1\">\n {(['px', 'rem'] as SizeUnit[]).map((unit) => {\n const isActive = (currentValue.unit || 'px') === unit\n return (\n <Button\n key={unit}\n type=\"button\"\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handleUnitChange(unit)}\n disabled={readOnly}\n className={cn(\n \"text-xs font-mono h-7 px-2\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n >\n {unit}\n </Button>\n )\n })}\n </div>\n </div>\n\n {/* Numeric inputs */}\n <div className=\"grid grid-cols-2 gap-2\">\n {showHeight && (\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Height\n </Label>\n <Input\n type=\"number\"\n min={0}\n value={currentValue.height ?? CUSTOM_DEFAULTS.height}\n onChange={(e) => handleValueChange('height', parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n )}\n\n {showFontSize && (\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Font Size\n </Label>\n <Input\n type=\"number\"\n min={0}\n value={currentValue.fontSize ?? CUSTOM_DEFAULTS.fontSize}\n onChange={(e) => handleValueChange('fontSize', parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n )}\n\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Padding X\n </Label>\n <Input\n type=\"number\"\n min={0}\n value={currentValue.paddingX ?? CUSTOM_DEFAULTS.paddingX}\n onChange={(e) => handleValueChange('paddingX', parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Padding Y\n </Label>\n <Input\n type=\"number\"\n min={0}\n value={currentValue.paddingY ?? CUSTOM_DEFAULTS.paddingY}\n onChange={(e) => handleValueChange('paddingY', parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n </div>\n\n {/* Preview summary */}\n <div className=\"text-xs text-muted-foreground font-mono pt-1 border-t border-border/50\">\n {showHeight && `h: ${currentValue.height ?? CUSTOM_DEFAULTS.height}${currentValue.unit || 'px'}`}\n {showHeight && ' | '}\n {`p: ${currentValue.paddingY ?? CUSTOM_DEFAULTS.paddingY}${currentValue.unit || 'px'} ${currentValue.paddingX ?? CUSTOM_DEFAULTS.paddingX}${currentValue.unit || 'px'}`}\n {showFontSize && ` | font: ${currentValue.fontSize ?? CUSTOM_DEFAULTS.fontSize}${currentValue.unit || 'px'}`}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport const SizeField = memo(SizeFieldInner)\n\n// =============================================================================\n// CSS Helper\n// =============================================================================\n\n/**\n * Convert SizeValue to CSS properties object\n *\n * For preset modes, returns undefined (use Tailwind classes instead)\n * For custom mode, returns inline styles\n */\nexport function sizeValueToCSS(size: SizeValue | null | undefined): React.CSSProperties | undefined {\n if (!size || size.mode !== 'custom') return undefined\n\n const unit = size.unit || 'px'\n const style: React.CSSProperties = {}\n\n if (size.height != null) {\n style.height = `${size.height}${unit}`\n }\n\n if (size.paddingX != null || size.paddingY != null) {\n const py = size.paddingY ?? 0\n const px = size.paddingX ?? 0\n style.padding = `${py}${unit} ${px}${unit}`\n }\n\n if (size.fontSize != null) {\n style.fontSize = `${size.fontSize}${unit}`\n }\n\n return Object.keys(style).length > 0 ? style : undefined\n}\n\n/**\n * Get Tailwind classes for preset size modes\n * Returns empty string for custom mode (use inline styles instead)\n */\nexport function getSizeClasses(size: SizeValue | null | undefined, sizeMap: Record<string, string>): string {\n if (!size) return sizeMap.default || ''\n if (size.mode === 'custom') return ''\n return sizeMap[size.mode] || sizeMap.default || ''\n}\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateSizeFieldConfig {\n label?: string\n showHeight?: boolean\n showFontSize?: boolean\n}\n\n/**\n * Creates a Puck field configuration for size control\n *\n * @example\n * ```ts\n * fields: {\n * size: createSizeField({ label: 'Button Size' }),\n * }\n * ```\n */\nexport function createSizeField(\n config: CreateSizeFieldConfig = {}\n): CustomField<SizeValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <SizeField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showHeight={config.showHeight}\n showFontSize={config.showFontSize}\n />\n ),\n }\n}\n","/**\n * Button Component - Puck Configuration\n *\n * CTA button with customizable styling and link support.\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n buttonVariantField,\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n colorValueToCSS,\n borderValueToCSS,\n transformValueToCSS,\n type PaddingValue,\n type ColorValue,\n type BorderValue,\n type AnimationValue,\n type TransformValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createColorPickerField } from '../../fields/ColorPickerField'\nimport { createBorderField } from '../../fields/BorderField'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createAlignmentField, type Alignment } from '../../fields/AlignmentField'\nimport { createSizeField, sizeValueToCSS, getSizeClasses, type SizeValue } from '../../fields/SizeField'\nimport { createAnimationField } from '../../fields/AnimationField'\nimport { createTransformField } from '../../fields/TransformField'\nimport { createResetField } from '../../fields/ResetField'\nimport {\n DEFAULT_BUTTON_VARIANTS,\n DEFAULT_FOCUS_RING,\n getVariantClasses,\n} from '../../theme'\n\nexport interface ButtonProps {\n text: string\n link: string\n variant: string\n size: SizeValue | null\n openInNewTab: string\n margin: PaddingValue | null\n customBackgroundColor: ColorValue | null\n customTextColor: ColorValue | null\n customBorder: BorderValue | null\n alignment: Alignment | null\n transform: TransformValue | null\n animation: AnimationValue | null\n customPadding: PaddingValue | null\n}\n\nconst sizeStyles: Record<string, string> = {\n sm: 'h-8 px-3 text-sm',\n default: 'h-10 px-4',\n lg: 'h-12 px-8 text-lg',\n}\n\nconst alignmentWrapperMap: Record<string, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n}\n\nconst defaultProps: ButtonProps = {\n text: 'Click Me',\n link: '',\n variant: 'default',\n size: null,\n openInNewTab: 'no',\n margin: null,\n customBackgroundColor: null,\n customTextColor: null,\n customBorder: null,\n alignment: null,\n transform: null,\n animation: null,\n customPadding: null,\n}\n\nexport const ButtonConfig: ComponentConfig = {\n label: 'Button',\n fields: {\n _reset: createResetField({ defaultProps }),\n text: {\n type: 'text',\n label: 'Button Text',\n },\n link: {\n type: 'text',\n label: 'Link URL',\n },\n variant: buttonVariantField,\n size: createSizeField({ label: 'Size' }),\n openInNewTab: {\n type: 'radio',\n label: 'Open in New Tab',\n options: [\n { label: 'No', value: 'no' },\n { label: 'Yes', value: 'yes' },\n ],\n },\n customBackgroundColor: createColorPickerField({ label: 'Custom Background', showOpacity: true }),\n customTextColor: createColorPickerField({ label: 'Custom Text Color', showOpacity: true }),\n customBorder: createBorderField({ label: 'Custom Border' }),\n alignment: createAlignmentField({ label: 'Alignment' }),\n transform: createTransformField({ label: 'Transform' }),\n animation: createAnimationField({ label: 'Animation' }),\n // Spacing (grouped at bottom)\n margin: createMarginField({ label: 'Margin' }),\n customPadding: createPaddingField({ label: 'Padding' }),\n },\n defaultProps,\n render: ({ text, link, variant, size, openInNewTab, alignment, margin, customBackgroundColor, customTextColor, customBorder, transform, animation, customPadding }) => {\n // Determine if custom styles should override preset variant/size styles\n const hasCustomBackground = customBackgroundColor?.hex\n const hasCustomTextColor = customTextColor?.hex\n const hasCustomPadding = customPadding\n const hasCustomSize = size?.mode === 'custom'\n\n // Get variant classes from defaults (SSR-safe, no hooks)\n const variantClasses = getVariantClasses(DEFAULT_BUTTON_VARIANTS, variant, 'default')\n\n // Get size classes for preset modes, or empty for custom mode\n const sizeClasses = getSizeClasses(size, sizeStyles)\n\n // Build button classes - exclude variant/size classes if custom styles are set\n const buttonClasses = cn(\n 'inline-flex items-center justify-center font-medium transition-colors',\n `focus:outline-none focus:ring-2 focus:ring-offset-2 ${DEFAULT_FOCUS_RING}`,\n 'disabled:opacity-50 disabled:pointer-events-none',\n // Only apply variant styles if no custom background/text color\n !hasCustomBackground && !hasCustomTextColor && variantClasses,\n // Only apply background portion of variant if no custom background\n hasCustomBackground && !hasCustomTextColor && 'hover:opacity-90',\n // Only apply size classes if not using custom size or custom padding\n !hasCustomPadding && !hasCustomSize && sizeClasses,\n // Apply rounded-md unless custom border has radius\n !customBorder?.radius && 'rounded-md'\n )\n\n // Build inline styles for the button\n const buttonStyle: React.CSSProperties = {}\n\n // Apply custom background color\n if (hasCustomBackground) {\n buttonStyle.backgroundColor = colorValueToCSS(customBackgroundColor)\n }\n\n // Apply custom text color\n if (hasCustomTextColor) {\n buttonStyle.color = colorValueToCSS(customTextColor)\n }\n\n // Apply custom border\n const borderStyles = borderValueToCSS(customBorder)\n if (borderStyles) {\n Object.assign(buttonStyle, borderStyles)\n }\n\n // Apply custom size (only if mode is custom)\n const customSizeStyles = sizeValueToCSS(size)\n if (customSizeStyles) {\n Object.assign(buttonStyle, customSizeStyles)\n }\n\n // Apply custom padding (overrides size padding if set)\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n buttonStyle.padding = paddingCSS\n }\n\n // Apply transform\n const transformStyles = transformValueToCSS(transform)\n if (transformStyles) {\n Object.assign(buttonStyle, transformStyles)\n }\n\n const buttonElement = link ? (\n <a\n href={link}\n target={openInNewTab === 'yes' ? '_blank' : undefined}\n rel={openInNewTab === 'yes' ? 'noopener noreferrer' : undefined}\n className={buttonClasses}\n style={buttonStyle}\n >\n {text}\n </a>\n ) : (\n <button type=\"button\" className={buttonClasses} style={buttonStyle}>\n {text}\n </button>\n )\n\n const wrapperStyle: React.CSSProperties = {}\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n wrapperStyle.margin = marginCSS\n }\n\n // Get alignment value, defaulting to 'left'\n const alignmentValue = alignment ?? 'left'\n\n return (\n <AnimatedWrapper\n animation={animation}\n className={alignmentWrapperMap[alignmentValue] || alignmentWrapperMap.left}\n style={wrapperStyle}\n >\n {buttonElement}\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Card Component - Puck Configuration\n *\n * Content card with image, heading, and text.\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n shadowField,\n shadowMap,\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n backgroundValueToCSS,\n borderValueToCSS,\n dimensionsValueToCSS,\n transformValueToCSS,\n type PaddingValue,\n type BackgroundValue,\n type BorderValue,\n type DimensionsValue,\n type AnimationValue,\n type TransformValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createResetField } from '../../fields/ResetField'\nimport { createBackgroundField } from '../../fields/BackgroundField'\nimport { createBorderField } from '../../fields/BorderField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createAlignmentField, type Alignment } from '../../fields/AlignmentField'\nimport { createAnimationField } from '../../fields/AnimationField'\nimport { createTransformField } from '../../fields/TransformField'\nimport type { MediaReference } from '../../fields/MediaField'\n\nexport interface CardProps {\n image: MediaReference | null\n heading: string\n text: string\n link: string\n openInNewTab: boolean\n shadow: string\n margin: PaddingValue | null\n background: BackgroundValue | null\n border: BorderValue | null\n dimensions: DimensionsValue | null\n alignment: Alignment | null\n transform: TransformValue | null\n animation: AnimationValue | null\n customPadding: PaddingValue | null\n}\n\nconst defaultProps: CardProps = {\n image: null,\n heading: 'Card Heading',\n text: 'Card description text goes here.',\n link: '',\n openInNewTab: false,\n shadow: 'md',\n margin: null,\n background: null,\n border: null,\n dimensions: null,\n alignment: null,\n transform: null,\n animation: null,\n customPadding: null,\n}\n\nexport const CardConfig: ComponentConfig = {\n label: 'Card',\n fields: {\n _reset: createResetField({ defaultProps }),\n image: {\n type: 'object',\n label: 'Image',\n objectFields: {\n id: { type: 'text', label: 'Media ID' },\n url: { type: 'text', label: 'URL' },\n alt: { type: 'text', label: 'Alt Text' },\n },\n },\n heading: {\n type: 'text',\n label: 'Heading',\n },\n text: {\n type: 'textarea',\n label: 'Text',\n },\n link: {\n type: 'text',\n label: 'Link URL',\n },\n openInNewTab: {\n type: 'radio',\n label: 'Open in New Tab',\n options: [\n { label: 'Yes', value: true },\n { label: 'No', value: false },\n ],\n },\n shadow: shadowField,\n background: createBackgroundField({ label: 'Background' }),\n border: createBorderField({ label: 'Border' }),\n dimensions: createDimensionsField({ label: 'Dimensions' }),\n alignment: createAlignmentField({ label: 'Alignment' }),\n transform: createTransformField({ label: 'Transform' }),\n animation: createAnimationField({ label: 'Animation' }),\n // Spacing (grouped at bottom)\n margin: createMarginField({ label: 'Margin' }),\n customPadding: createPaddingField({ label: 'Padding' }),\n },\n defaultProps,\n render: ({ image, heading, text, link, openInNewTab, shadow, background, dimensions, alignment, margin, border, transform, animation, customPadding }) => {\n // Check if border has radius, if so don't apply rounded-lg\n const hasBorderRadius = border?.radius && border.radius > 0\n const cardClasses = cn(\n 'overflow-hidden transition-all bg-card',\n !hasBorderRadius && 'rounded-lg',\n shadowMap[shadow] || '',\n link && 'hover:shadow-lg cursor-pointer'\n )\n\n // Wrapper style for margin, dimensions, alignment, transform, animation\n const wrapperStyle: React.CSSProperties = {}\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n wrapperStyle.margin = marginCSS\n }\n const dimensionsStyles = dimensionsValueToCSS(dimensions)\n if (dimensionsStyles) {\n Object.assign(wrapperStyle, dimensionsStyles)\n }\n const transformStyles = transformValueToCSS(transform)\n if (transformStyles) {\n Object.assign(wrapperStyle, transformStyles)\n }\n\n // Alignment classes for wrapper\n const alignmentValue = alignment ?? 'left'\n const alignmentClasses = cn(\n 'flex',\n alignmentValue === 'left' && 'justify-start',\n alignmentValue === 'center' && 'justify-center',\n alignmentValue === 'right' && 'justify-end'\n )\n\n // Card background styles from BackgroundValue\n const backgroundStyles = backgroundValueToCSS(background)\n const cardStyle: React.CSSProperties = {\n ...backgroundStyles,\n }\n // Note: bg-card class handles default background (theme-aware)\n // Apply border to card\n const borderStyles = borderValueToCSS(border)\n if (borderStyles) {\n Object.assign(cardStyle, borderStyles)\n }\n // Apply padding to card\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n cardStyle.padding = paddingCSS\n }\n\n const cardContent = (\n <div className={cardClasses} style={cardStyle}>\n {/* Image */}\n {image?.url ? (\n <div className=\"relative aspect-video w-full overflow-hidden\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={image.url}\n alt={image.alt || heading || ''}\n className=\"w-full h-full object-cover\"\n />\n </div>\n ) : (\n <div className=\"aspect-video w-full bg-muted flex items-center justify-center\">\n <span className=\"text-muted-foreground\">No image</span>\n </div>\n )}\n\n {/* Content */}\n <div className=\"p-4\">\n {heading && (\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">{heading}</h3>\n )}\n {text && <p className=\"text-muted-foreground text-sm\">{text}</p>}\n </div>\n </div>\n )\n\n if (link) {\n return (\n <AnimatedWrapper animation={animation}>\n <div className={alignmentClasses}>\n <a\n href={link}\n target={openInNewTab ? '_blank' : undefined}\n rel={openInNewTab ? 'noopener noreferrer' : undefined}\n className=\"block\"\n style={wrapperStyle}\n >\n {cardContent}\n </a>\n </div>\n </AnimatedWrapper>\n )\n }\n\n return (\n <AnimatedWrapper animation={animation}>\n <div className={alignmentClasses}>\n <div style={wrapperStyle}>{cardContent}</div>\n </div>\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Divider Component - Puck Configuration\n *\n * Horizontal line separator with customizable style.\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n dividerStyleField,\n dividerStyleMap,\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n colorValueToCSS,\n dimensionsValueToCSS,\n transformValueToCSS,\n type PaddingValue,\n type ColorValue,\n type DimensionsValue,\n type AnimationValue,\n type TransformValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createColorPickerField } from '../../fields/ColorPickerField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createAnimationField } from '../../fields/AnimationField'\nimport { createTransformField } from '../../fields/TransformField'\nimport { createResetField } from '../../fields/ResetField'\n\nexport interface DividerProps {\n style: string\n color: ColorValue | null\n margin: PaddingValue | null\n dimensions: DimensionsValue | null\n transform: TransformValue | null\n animation: AnimationValue | null\n customPadding: PaddingValue | null\n}\n\nconst defaultProps: DividerProps = {\n style: 'solid',\n color: null,\n margin: null,\n dimensions: null,\n transform: null,\n animation: null,\n customPadding: null,\n}\n\nexport const DividerConfig: ComponentConfig = {\n label: 'Divider',\n fields: {\n _reset: createResetField({ defaultProps }),\n style: dividerStyleField,\n color: createColorPickerField({ label: 'Color' }),\n dimensions: createDimensionsField({ label: 'Dimensions' }),\n transform: createTransformField({ label: 'Transform' }),\n animation: createAnimationField({ label: 'Animation' }),\n // Spacing (grouped at bottom)\n margin: createMarginField({ label: 'Margin' }),\n customPadding: createPaddingField({ label: 'Padding' }),\n },\n defaultProps,\n render: ({ style, color, dimensions, margin, transform, animation, customPadding }) => {\n const dimensionsStyles = dimensionsValueToCSS(dimensions)\n\n const wrapperStyle: React.CSSProperties = {\n ...dimensionsStyles,\n }\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n wrapperStyle.margin = marginCSS\n }\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n wrapperStyle.padding = paddingCSS\n }\n const transformStyles = transformValueToCSS(transform)\n if (transformStyles) {\n Object.assign(wrapperStyle, transformStyles)\n }\n\n // Only set color if explicitly provided, otherwise use CSS variable\n const customColor = colorValueToCSS(color)\n const hrStyle: React.CSSProperties | undefined = customColor\n ? { borderColor: customColor }\n : undefined\n\n return (\n <AnimatedWrapper animation={animation}>\n <div className=\"px-4\" style={Object.keys(wrapperStyle).length > 0 ? wrapperStyle : undefined}>\n <hr\n className={cn(\n 'border-t border-border',\n dividerStyleMap[style] || dividerStyleMap.solid\n )}\n style={hrStyle}\n />\n </div>\n </AnimatedWrapper>\n )\n },\n}\n","'use client'\n\n/**\n * Accordion Component - Puck Configuration\n *\n * Expandable sections with collapsible content.\n * Uses plain HTML/CSS for the accordion behavior.\n * Supports custom margin for spacing control.\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport { useState } from 'react'\nimport { ChevronDown } from 'lucide-react'\nimport {\n marginValueToCSS,\n paddingValueToCSS,\n dimensionsValueToCSS,\n backgroundValueToCSS,\n transformValueToCSS,\n colorValueToCSS,\n cn,\n type PaddingValue,\n type DimensionsValue,\n type BackgroundValue,\n type AnimationValue,\n type TransformValue,\n type ColorValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { createMarginField } from '../../fields/MarginField'\nimport { createPaddingField } from '../../fields/PaddingField'\nimport { createDimensionsField } from '../../fields/DimensionsField'\nimport { createResetField } from '../../fields/ResetField'\nimport { createBackgroundField } from '../../fields/BackgroundField'\nimport { createAnimationField } from '../../fields/AnimationField'\nimport { createTransformField } from '../../fields/TransformField'\nimport { createColorPickerField } from '../../fields/ColorPickerField'\n\ninterface AccordionItemData {\n title: string\n content: string\n defaultOpen: boolean\n}\n\ninterface AccordionRendererProps {\n items: AccordionItemData[]\n allowMultiple: boolean\n textColor: ColorValue | null\n margin: PaddingValue | null\n background: BackgroundValue | null\n dimensions: DimensionsValue | null\n transform: TransformValue | null\n animation: AnimationValue | null\n customPadding: PaddingValue | null\n}\n\n// Accordion Item Component\nfunction AccordionItem({\n item,\n isOpen,\n onToggle,\n textColorCSS,\n}: {\n item: AccordionItemData\n isOpen: boolean\n onToggle: () => void\n textColorCSS?: string\n}) {\n const textStyle: React.CSSProperties = textColorCSS ? { color: textColorCSS } : {}\n\n return (\n <div className=\"border-b border-border last:border-b-0\">\n <button\n type=\"button\"\n onClick={onToggle}\n className=\"flex w-full items-center justify-between py-4 px-4 text-left font-medium transition-all hover:bg-muted/50 text-foreground\"\n style={textStyle}\n >\n <span>{item.title}</span>\n <ChevronDown\n className={cn(\n 'h-4 w-4 shrink-0 transition-transform duration-200',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n <div\n className={cn(\n 'overflow-hidden transition-all duration-200',\n isOpen ? 'max-h-[1000px] opacity-100' : 'max-h-0 opacity-0'\n )}\n >\n <div\n className=\"px-4 pb-4 text-muted-foreground\"\n style={textColorCSS ? { color: textColorCSS } : undefined}\n >\n {item.content}\n </div>\n </div>\n </div>\n )\n}\n\n// Main Accordion Render Component\nfunction AccordionRenderer({\n items,\n allowMultiple,\n textColor,\n margin,\n background,\n dimensions,\n transform,\n animation,\n customPadding,\n}: AccordionRendererProps) {\n // Initialize open states from defaultOpen values\n const [openItems, setOpenItems] = useState<Set<number>>(() => {\n const initialOpen = new Set<number>()\n items?.forEach((item, index) => {\n if (item.defaultOpen) {\n initialOpen.add(index)\n }\n })\n return initialOpen\n })\n\n const handleToggle = (index: number) => {\n setOpenItems((prev) => {\n const newSet = new Set(prev)\n if (newSet.has(index)) {\n newSet.delete(index)\n } else {\n if (!allowMultiple) {\n newSet.clear()\n }\n newSet.add(index)\n }\n return newSet\n })\n }\n\n const textColorCSS = colorValueToCSS(textColor)\n const dimensionsStyles = dimensionsValueToCSS(dimensions)\n\n // Theme-aware classes - uses CSS variables for colors\n const accordionClasses = 'rounded-lg border border-border overflow-hidden bg-card'\n\n const backgroundStyles = backgroundValueToCSS(background)\n // Only apply background styles if explicitly set, otherwise let bg-card handle it\n const accordionStyle: React.CSSProperties = backgroundStyles && Object.keys(backgroundStyles).length > 0\n ? backgroundStyles\n : {}\n\n const style: React.CSSProperties = {\n ...dimensionsStyles,\n }\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n style.margin = marginCSS\n }\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n style.padding = paddingCSS\n }\n const transformStyles = transformValueToCSS(transform)\n if (transformStyles) {\n Object.assign(style, transformStyles)\n }\n\n if (!items || items.length === 0) {\n return (\n <AnimatedWrapper animation={animation}>\n <div className=\"px-4\" style={Object.keys(style).length > 0 ? style : undefined}>\n <div className={accordionClasses} style={accordionStyle}>\n <div className=\"p-4 text-center text-muted-foreground\">\n No accordion items. Add items in the editor.\n </div>\n </div>\n </div>\n </AnimatedWrapper>\n )\n }\n\n return (\n <AnimatedWrapper animation={animation}>\n <div className=\"px-4\" style={Object.keys(style).length > 0 ? style : undefined}>\n <div className={accordionClasses} style={accordionStyle}>\n {items.map((item, index) => (\n <AccordionItem\n key={index}\n item={item}\n isOpen={openItems.has(index)}\n onToggle={() => handleToggle(index)}\n textColorCSS={textColorCSS}\n />\n ))}\n </div>\n </div>\n </AnimatedWrapper>\n )\n}\n\nexport interface AccordionProps {\n items: AccordionItemData[]\n allowMultiple: boolean\n textColor: ColorValue | null\n margin: PaddingValue | null\n background: BackgroundValue | null\n dimensions: DimensionsValue | null\n transform: TransformValue | null\n animation: AnimationValue | null\n customPadding: PaddingValue | null\n}\n\nconst defaultProps: AccordionProps = {\n items: [\n {\n title: 'What is this?',\n content: 'This is an accordion component that can expand and collapse.',\n defaultOpen: false,\n },\n {\n title: 'How do I use it?',\n content: 'Click on each item to expand or collapse it.',\n defaultOpen: false,\n },\n ],\n allowMultiple: false,\n textColor: null,\n margin: null,\n background: null,\n dimensions: null,\n transform: null,\n animation: null,\n customPadding: null,\n}\n\nexport const AccordionConfig: ComponentConfig = {\n label: 'Accordion',\n fields: {\n _reset: createResetField({ defaultProps }),\n items: {\n type: 'array',\n label: 'Items',\n arrayFields: {\n title: {\n type: 'text',\n label: 'Title',\n },\n content: {\n type: 'textarea',\n label: 'Content',\n },\n defaultOpen: {\n type: 'radio',\n label: 'Default Open',\n options: [\n { label: 'Yes', value: true },\n { label: 'No', value: false },\n ],\n },\n },\n defaultItemProps: {\n title: 'Accordion Item',\n content: '',\n defaultOpen: false,\n },\n getItemSummary: (item: AccordionItemData) => item.title || 'Untitled',\n },\n allowMultiple: {\n type: 'radio',\n label: 'Allow Multiple Open',\n options: [\n { label: 'Yes', value: true },\n { label: 'No', value: false },\n ],\n },\n textColor: createColorPickerField({ label: 'Text Color' }),\n background: createBackgroundField({ label: 'Background' }),\n dimensions: createDimensionsField({ label: 'Dimensions' }),\n transform: createTransformField({ label: 'Transform' }),\n animation: createAnimationField({ label: 'Animation' }),\n // Spacing (grouped at bottom)\n margin: createMarginField({ label: 'Margin' }),\n customPadding: createPaddingField({ label: 'Padding' }),\n },\n defaultProps,\n render: (props) => (\n <AccordionRenderer\n items={props.items}\n allowMultiple={props.allowMultiple}\n textColor={props.textColor}\n margin={props.margin}\n background={props.background}\n dimensions={props.dimensions}\n transform={props.transform}\n animation={props.animation}\n customPadding={props.customPadding}\n />\n ),\n}\n"]}