payload-live-preview 1.0.0

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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +389 -0
  3. package/dist/adapters/astro/RichText.astro +55 -0
  4. package/dist/adapters/astro/index.cjs +370 -0
  5. package/dist/adapters/astro/index.cjs.map +1 -0
  6. package/dist/adapters/astro/index.d.cts +105 -0
  7. package/dist/adapters/astro/index.d.ts +105 -0
  8. package/dist/adapters/astro/index.js +364 -0
  9. package/dist/adapters/astro/index.js.map +1 -0
  10. package/dist/adapters/astro/middleware-entry.cjs +303 -0
  11. package/dist/adapters/astro/middleware-entry.cjs.map +1 -0
  12. package/dist/adapters/astro/middleware-entry.d.cts +15 -0
  13. package/dist/adapters/astro/middleware-entry.d.ts +15 -0
  14. package/dist/adapters/astro/middleware-entry.js +297 -0
  15. package/dist/adapters/astro/middleware-entry.js.map +1 -0
  16. package/dist/adapters/nextjs/index.cjs +309 -0
  17. package/dist/adapters/nextjs/index.cjs.map +1 -0
  18. package/dist/adapters/nextjs/index.d.cts +75 -0
  19. package/dist/adapters/nextjs/index.d.ts +75 -0
  20. package/dist/adapters/nextjs/index.js +306 -0
  21. package/dist/adapters/nextjs/index.js.map +1 -0
  22. package/dist/adapters/nuxt/index.cjs +299 -0
  23. package/dist/adapters/nuxt/index.cjs.map +1 -0
  24. package/dist/adapters/nuxt/index.d.cts +126 -0
  25. package/dist/adapters/nuxt/index.d.ts +126 -0
  26. package/dist/adapters/nuxt/index.js +294 -0
  27. package/dist/adapters/nuxt/index.js.map +1 -0
  28. package/dist/adapters/sveltekit/index.cjs +275 -0
  29. package/dist/adapters/sveltekit/index.cjs.map +1 -0
  30. package/dist/adapters/sveltekit/index.d.cts +80 -0
  31. package/dist/adapters/sveltekit/index.d.ts +80 -0
  32. package/dist/adapters/sveltekit/index.js +273 -0
  33. package/dist/adapters/sveltekit/index.js.map +1 -0
  34. package/dist/bind-BSgxoQhN.d.cts +1137 -0
  35. package/dist/bind-BSgxoQhN.d.ts +1137 -0
  36. package/dist/codegen-astro.cjs +612 -0
  37. package/dist/codegen-astro.cjs.map +1 -0
  38. package/dist/codegen-astro.d.cts +54 -0
  39. package/dist/codegen-astro.d.ts +54 -0
  40. package/dist/codegen-astro.js +610 -0
  41. package/dist/codegen-astro.js.map +1 -0
  42. package/dist/codegen-cli.cjs +669 -0
  43. package/dist/codegen-cli.cjs.map +1 -0
  44. package/dist/codegen-cli.d.cts +19 -0
  45. package/dist/codegen-cli.d.ts +19 -0
  46. package/dist/codegen-cli.js +667 -0
  47. package/dist/codegen-cli.js.map +1 -0
  48. package/dist/codegen.cjs +551 -0
  49. package/dist/codegen.cjs.map +1 -0
  50. package/dist/codegen.d.cts +162 -0
  51. package/dist/codegen.d.ts +162 -0
  52. package/dist/codegen.js +547 -0
  53. package/dist/codegen.js.map +1 -0
  54. package/dist/core.cjs +3684 -0
  55. package/dist/core.cjs.map +1 -0
  56. package/dist/core.d.cts +24 -0
  57. package/dist/core.d.ts +24 -0
  58. package/dist/core.js +3657 -0
  59. package/dist/core.js.map +1 -0
  60. package/dist/index.cjs +4083 -0
  61. package/dist/index.cjs.map +1 -0
  62. package/dist/index.d.cts +472 -0
  63. package/dist/index.d.ts +472 -0
  64. package/dist/index.js +4040 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/middleware-BwIlf0jW.d.cts +168 -0
  67. package/dist/middleware-BwIlf0jW.d.ts +168 -0
  68. package/dist/payload.cjs +31 -0
  69. package/dist/payload.cjs.map +1 -0
  70. package/dist/payload.d.cts +87 -0
  71. package/dist/payload.d.ts +87 -0
  72. package/dist/payload.js +29 -0
  73. package/dist/payload.js.map +1 -0
  74. package/dist/preview-request-DAvxm18T.d.cts +68 -0
  75. package/dist/preview-request-DAvxm18T.d.ts +68 -0
  76. package/package.json +186 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../package.json","../src/version.ts","../src/core/cache.ts","../src/core/observers.ts","../src/core/protocol-version.ts","../src/core/message-bus.ts","../src/core/state.ts","../src/core/data-merger.ts","../src/security/url-validator.ts","../src/core/attribute-binding.ts","../src/core/update-scheduler.ts","../src/detection/locale.ts","../src/core/a11y.ts","../src/schema/walker.ts","../src/schema/diff.ts","../src/schema/field-type-map.ts","../src/core/lifecycle.ts","../src/events/emitter.ts","../src/detection/environment.ts","../src/detection/origin.ts","../src/plugins/manager.ts","../src/security/sanitizer.ts","../src/lexical/registry.ts","../src/lexical/utils.ts","../src/security/escape.ts","../src/lexical/types.ts","../src/lexical/nodes/text.ts","../src/lexical/nodes/paragraph.ts","../src/lexical/nodes/heading.ts","../src/lexical/nodes/list.ts","../src/lexical/nodes/link.ts","../src/lexical/nodes/quote.ts","../src/lexical/nodes/code.ts","../src/lexical/nodes/linebreak.ts","../src/lexical/nodes/upload.ts","../src/lexical/nodes/relationship.ts","../src/lexical/blocks/registry.ts","../src/lexical/nodes/block.ts","../src/lexical/render.ts","../src/field-types/registry.ts","../src/field-types/text.ts","../src/field-types/utils.ts","../src/field-types/textarea.ts","../src/field-types/rich-text.ts","../src/field-types/html.ts","../src/field-types/url.ts","../src/field-types/image.ts","../src/field-types/upload.ts","../src/field-types/relationship.ts","../src/field-types/select.ts","../src/field-types/checkbox.ts","../src/core/intl-cache.ts","../src/field-types/date.ts","../src/field-types/number.ts","../src/field-types/array.ts","../src/core/view-transitions.ts","../src/core/structural-applier.ts","../src/field-types/structural-array.ts","../src/field-types/index.ts","../src/client/index.ts","../src/inline/runtime.generated.ts","../src/inline/generator.ts","../src/security/csp.ts","../src/adapters/shared/preview-request.ts","../src/preview-fetch.ts","../src/plugins/built-in/highlight.ts","../src/plugins/built-in/debug.ts","../src/plugins/built-in/analytics.ts","../src/plugins/built-in/document-save.ts","../src/dsl/bind.ts"],"names":["DEFAULT_DEBOUNCE_MS","path","URL_ATTRIBUTES","attrMap","format","registry","textRenderer","uploadRenderer","readMedia","relationshipRenderer","pickLabel","stringify","escapeRegex","buildBuiltinRenderers","url"],"mappings":";;;AAAA,IAAA,eAAA,GAAA;AAAA,EAEE,OAAA,EAAW,OAuLb,CAAA;;;ACzKO,IAAM,UAAkB,eAAA,CAAI;;;ACS5B,IAAM,eAAA,GAAkB,oBAAA;AACxB,IAAM,cAAA,GAAiB,mBAAA;AACvB,IAAM,0BAAA,GAA6B,wBAAA;AACnC,IAAM,cAAA,GAAiB,mBAAA;AACvB,IAAM,aAAA,GAAgB,kBAAA;AACtB,IAAM,aAAA,GAAgB,kBAAA;AACtB,IAAM,wBAAA,GAA2B,6BAAA;AACjC,IAAM,yBAAA,GAA4B,8BAAA;AAClC,IAAM,gBAAA,GAAmB,qBAAA;AAEhC,IAAM,cAAA,GAAiB,IAAI,eAAe,CAAA,CAAA,CAAA;AAE1C,IAAM,iBAAA,uBAAgD,GAAA,CAAe;AAAA,EACnE,MAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAuBM,IAAM,eAAN,MAAmB;AAAA,EACf,QAAA,uBAAe,GAAA,EAA6B;AAAA,EAC5C,eAAA,uBAAsB,OAAA,EAAgC;AAAA,EACtD,OAAA;AAAA,EAET,WAAA,CAAY,OAAA,GAA+B,EAAC,EAAG;AAC7C,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,MAAA,IAAU,UAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,IAAA,EAAmC;AAC/C,IAAA,MAAM,EAAA,GAAK,YAAY,GAAA,EAAI;AAC3B,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AAEpB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,cAAc,CAAA;AACrD,IAAA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC5B,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA;AAC1C,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,IAAA,CAAK,QAAQ,KAAK,CAAA;AAClB,MAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,OAAA,EAAS,KAAK,CAAA;AACvC,MAAA,YAAA,IAAgB,CAAA;AAAA,IAClB;AAEA,IAAA,OAAO;AAAA,MACL,YAAA;AAAA,MACA,UAAA,EAAY,KAAK,QAAA,CAAS,IAAA;AAAA,MAC1B,UAAA,EAAY,WAAA,CAAY,GAAA,EAAI,GAAI;AAAA,KAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,OAAA,EAA6C;AAC/C,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,OAAO,MAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA;AAC1C,IAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,IAAA,IAAA,CAAK,QAAQ,KAAK,CAAA;AAClB,IAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,OAAA,EAAS,KAAK,CAAA;AACvC,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAA,EAA2B;AAChC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA;AAC9C,IAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,OAAO,CAAA;AACnC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAM,SAAS,CAAA;AAChD,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA;AAClC,IAAA,IAAI,KAAA,GAAQ,GAAG,OAAO,KAAA;AACtB,IAAA,MAAA,CAAO,MAAA,CAAO,OAAO,CAAC,CAAA;AACtB,IAAA,IAAI,OAAO,MAAA,KAAW,CAAA,OAAQ,QAAA,CAAS,MAAA,CAAO,MAAM,SAAS,CAAA;AAC7D,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,SAAA,EAAyD;AAC3D,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAS,CAAA;AAAA,EACpC;AAAA;AAAA,EAGA,aAAa,OAAA,EAA6C;AACxD,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA;AAAA,EACzC;AAAA;AAAA,EAGA,IAAI,UAAA,GAAqB;AACvB,IAAA,OAAO,KAAK,QAAA,CAAS,IAAA;AAAA,EACvB;AAAA;AAAA,EAGA,IAAI,YAAA,GAAuB;AACzB,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,UAAU,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,WAAY,MAAA,CAAO,MAAA;AAC7D,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA,EAGA,OAAA,GAAgE;AAC9D,IAAA,OAAO,IAAA,CAAK,SAAS,OAAA,EAAQ;AAAA,EAC/B;AAAA;AAAA,EAGA,CAAC,MAAA,GAA0C;AACzC,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,QAAA,CAAS,MAAA,IAAU,OAAO,MAAA;AAAA,EACtD;AAAA;AAAA,EAGA,IAAI,OAAA,EAA2B;AAC7B,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,OAAO,CAAA;AAAA,EACzC;AAAA;AAAA,EAGA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,EACtB;AAAA,EAEA,QAAQ,KAAA,EAA4B;AAClC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAM,SAAS,CAAA;AAChD,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,SAAS,GAAA,CAAI,KAAA,CAAM,SAAA,EAAW,CAAC,KAAK,CAAC,CAAA;AAAA,EAC5C;AAAA,EAEA,gBAAgB,OAAA,EAA6C;AAC3D,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,YAAA,CAAa,eAAe,CAAA;AACtD,IAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,SAAA,CAAU,MAAA,KAAW,GAAG,OAAO,MAAA;AACzD,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,YAAA,CAAa,cAAc,CAAA;AACpD,IAAA,MAAM,SAAA,GAAY,iBAAiB,OAAO,CAAA;AAC1C,IAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,YAAA,CAAa,0BAA0B,CAAA;AACvE,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,YAAA,CAAa,cAAc,CAAA;AACrD,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,YAAA,CAAa,aAAa,CAAA;AACnD,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,YAAA,CAAa,aAAa,CAAA;AACnD,IAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,YAAA,CAAa,wBAAwB,CAAA;AACnE,IAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,YAAA,CAAa,yBAAyB,CAAA;AACrE,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,YAAA,CAAa,gBAAgB,CAAA;AAEpD,IAAA,MAAM,KAAA,GAAuB;AAAA,MAC3B,OAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA,EAAmB,QAAA,KAAa,IAAA,IAAQ,iBAAA,CAAkB,IAAI,QAAqB,CAAA;AAAA,MACnF,GAAI,oBAAoB,IAAA,IAAQ,eAAA,CAAgB,SAAS,CAAA,GAAI,EAAE,eAAA,EAAgB,GAAI,EAAC;AAAA,MACpF,GAAI,SAAA,KAAc,IAAA,GAAO,EAAE,SAAA,KAAc,EAAC;AAAA,MAC1C,GAAI,QAAA,KAAa,IAAA,GAAO,EAAE,QAAA,KAAa,EAAC;AAAA,MACxC,GAAI,QAAA,KAAa,IAAA,GAAO,EAAE,QAAA,KAAa,EAAC;AAAA,MACxC,GAAI,aAAA,KAAkB,IAAA,GAAO,EAAE,aAAA,KAAkB,EAAC;AAAA,MAClD,GAAI,cAAA,KAAmB,IAAA,GAAO,EAAE,cAAA,KAAmB,EAAC;AAAA,MACpD,GAAI,MAAA,KAAW,IAAA,GAAO,EAAE,MAAA,KAAW;AAAC,KACtC;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;AAOO,SAAS,iBAAiB,OAAA,EAA6B;AAC5D,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,YAAA,CAAa,cAAc,CAAA;AACpD,EAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,iBAAA,CAAkB,GAAA,CAAI,QAAqB,CAAA,EAAG;AACrE,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,uBAAuB,CAAA,EAAG,OAAO,UAAA;AAC1D,EAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,mBAAmB,CAAA,EAAG,OAAO,MAAA;AACtD,EAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,yBAAyB,CAAA,EAAG,OAAO,kBAAA;AAC5D,EAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,oBAAoB,CAAA,EAAG,OAAO,OAAA;AACvD,EAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,KAAA,EAAO,OAAO,OAAA;AACtC,EAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,GAAA,EAAK,OAAO,KAAA;AACpC,EAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,MAAA,EAAQ,OAAO,MAAA;AACvC,EAAA,IAAI,OAAA,CAAQ,YAAY,OAAA,EAAS;AAC/B,IAAA,MAAM,YAAa,OAAA,CAA6B,IAAA;AAChD,IAAA,IAAI,SAAA,KAAc,YAAY,OAAO,UAAA;AACrC,IAAA,IAAI,SAAA,KAAc,UAAU,OAAO,QAAA;AACnC,IAAA,IAAI,SAAA,KAAc,MAAA,IAAU,SAAA,KAAc,gBAAA,EAAkB,OAAO,MAAA;AAAA,EACrE;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAA,GAAsB;AAC7B,EAAA,OAAO,IAAA;AACT;;;ACxNA,IAAM,mBAAA,GAAsB,GAAA;AAC5B,IAAM,mBAAA,GAAsB,OAAA;AAWrB,IAAM,kBAAN,MAAsB;AAAA,EAClB,UAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA,uBAAe,GAAA,EAAa;AAAA,EACrC,SAAA,GAAqC,IAAA;AAAA,EACrC,aAAA,GAA6C,IAAA;AAAA,EAC7C,cAAA,GAAuD,IAAA;AAAA,EAEvD,WAAA,CAAY,SAAA,EAA8B,OAAA,GAA2B,EAAC,EAAG;AACvE,IAAA,IAAA,CAAK,UAAA,GAAa,SAAA;AAClB,IAAA,IAAA,CAAK,WAAA,GAAc,QAAQ,kBAAA,IAAsB,mBAAA;AACjD,IAAA,IAAA,CAAK,WAAA,GAAc,QAAQ,sBAAA,IAA0B,mBAAA;AAAA,EACvD;AAAA;AAAA,EAGA,MAAM,IAAA,EAAkB;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,gBAAA,CAAiB,CAAC,SAAA,KAAc;AACnD,MAAA,IAAA,CAAK,iBAAiB,SAAS,CAAA;AAAA,IACjC,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,SAAA,CAAU,QAAQ,IAAA,EAAM;AAAA,MAC3B,SAAA,EAAW,IAAA;AAAA,MACX,OAAA,EAAS,IAAA;AAAA,MACT,UAAA,EAAY,IAAA;AAAA,MACZ,eAAA,EAAiB,CAAC,eAAe;AAAA,KAClC,CAAA;AAED,IAAA,IAAA,CAAK,gBAAgB,IAAI,oBAAA;AAAA,MACvB,CAAC,OAAA,KAAY;AACX,QAAA,IAAA,CAAK,oBAAoB,OAAO,CAAA;AAAA,MAClC,CAAA;AAAA,MACA,EAAE,UAAA,EAAY,IAAA,CAAK,WAAA,EAAa,WAAW,CAAA;AAAE,KAC/C;AAAA,EACF;AAAA;AAAA,EAGA,eAAe,OAAA,EAAwB;AACrC,IAAA,IAAA,CAAK,aAAA,EAAe,QAAQ,OAAO,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,iBAAiB,OAAA,EAAwB;AACvC,IAAA,IAAA,CAAK,aAAA,EAAe,UAAU,OAAO,CAAA;AACrC,IAAA,IAAA,CAAK,QAAA,CAAS,OAAO,OAAO,CAAA;AAAA,EAC9B;AAAA;AAAA,EAGA,WAAA,CAAY,SAAkB,OAAA,EAAwB;AACpD,IAAA,IAAI,OAAA,EAAS,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAAA,SACjC,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,OAAO,CAAA;AAAA,EACnC;AAAA;AAAA,EAGA,UAAU,OAAA,EAA2B;AACnC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAAA,EAClC;AAAA;AAAA,EAGA,IAAA,GAAa;AACX,IAAA,IAAI,IAAA,CAAK,mBAAmB,IAAA,EAAM;AAChC,MAAA,YAAA,CAAa,KAAK,cAAc,CAAA;AAChC,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,IACxB;AACA,IAAA,IAAA,CAAK,WAAW,UAAA,EAAW;AAC3B,IAAA,IAAA,CAAK,eAAe,UAAA,EAAW;AAC/B,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,EACtB;AAAA,EAEA,iBAAiB,SAAA,EAA4C;AAC3D,IAAA,IAAI,CAAC,mBAAA,CAAoB,SAAS,CAAA,EAAG;AACrC,IAAA,IAAI,IAAA,CAAK,cAAA,KAAmB,IAAA,EAAM,YAAA,CAAa,KAAK,cAAc,CAAA;AAClE,IAAA,IAAA,CAAK,cAAA,GAAiB,WAAW,MAAM;AACrC,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,MAAA,IAAA,CAAK,WAAW,kBAAA,EAAmB;AAAA,IACrC,CAAA,EAAG,KAAK,WAAW,CAAA;AAAA,EACrB;AAAA,EAEA,oBAAoB,OAAA,EAAqD;AACvE,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG;AAC9B,UAAA,IAAA,CAAK,QAAA,CAAS,IAAI,MAAM,CAAA;AACxB,UAAA,IAAA,CAAK,UAAA,CAAW,kBAAA,CAAmB,MAAA,EAAQ,IAAI,CAAA;AAAA,QACjD;AAAA,MACF,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG;AACpC,QAAA,IAAA,CAAK,QAAA,CAAS,OAAO,MAAM,CAAA;AAC3B,QAAA,IAAA,CAAK,UAAA,CAAW,kBAAA,CAAmB,MAAA,EAAQ,KAAK,CAAA;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAOA,SAAS,oBAAoB,SAAA,EAA+C;AAC1E,EAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,IAAA,IAAI,EAAE,IAAA,KAAS,YAAA,IAAgB,CAAA,CAAE,aAAA,KAAkB,iBAAiB,OAAO,IAAA;AAC3E,IAAA,KAAA,MAAW,IAAA,IAAQ,EAAE,UAAA,EAAY;AAC/B,MAAA,IAAI,sBAAA,CAAuB,IAAI,CAAA,EAAG,OAAO,IAAA;AAAA,IAC3C;AACA,IAAA,KAAA,MAAW,IAAA,IAAQ,EAAE,YAAA,EAAc;AACjC,MAAA,IAAI,sBAAA,CAAuB,IAAI,CAAA,EAAG,OAAO,IAAA;AAAA,IAC3C;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,uBAAuB,IAAA,EAAqB;AACnD,EAAA,IAAI,IAAA,CAAK,QAAA,KAAa,IAAA,CAAK,YAAA,EAAc,OAAO,KAAA;AAChD,EAAA,MAAM,OAAA,GAAU,IAAA;AAChB,EAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,eAAe,CAAA,EAAG,OAAO,IAAA;AAClD,EAAA,OAAO,OAAA,CAAQ,aAAA,CAAc,CAAA,CAAA,EAAI,eAAe,GAAG,CAAA,KAAM,IAAA;AAC3D;;;AC9IO,IAAM,wBAAA,GAA2B;AAGxC,IAAM,uBAAA,GAA4D;AAAA,EAChE,KAAA,EAAO,CAAA;AAAA,EACP,aAAA,EAAe,CAAA;AAAA,EACf,eAAA,EAAiB,CAAA;AAAA,EACjB,eAAA,EAAiB,CAAA;AAAA,EACjB,iBAAA,EAAmB;AACrB,CAAA;AAwBO,SAAS,kBAAkB,MAAA,EAAiD;AACjF,EAAA,MAAM,eAAA,GACJ,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,MAAA,IAAU,CAAA,GAC/D,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,GACjB,MAAA;AACN,EAAA,MAAM,kBAAkB,eAAA,IAAmB,CAAA;AAC3C,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,wBAAA,EAA0B,eAAe,CAAA;AACrE,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AACrC,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,UAAU,KAAK,MAAA,CAAO,OAAA,CAAQ,uBAAuB,CAAA,EAAG;AACxE,IAAA,IAAI,UAAA,IAAc,UAAA,EAAY,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AAAA,EACrD;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,wBAAA;AAAA,IACN,GAAI,oBAAoB,MAAA,GAAY,EAAE,QAAQ,eAAA,EAAgB,GAAI,EAAE,MAAA,EAAQ,MAAA,EAAU;AAAA,IACtF,UAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,aAAA,CACd,aACA,UAAA,EACS;AACT,EAAA,OAAO,WAAA,CAAY,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AAChD;;;ACnCO,IAAM,aAAN,MAAiB;AAAA,EACb,QAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACT,SAAA,GAAY,KAAA;AAAA,EAEZ,WAAA,CAAY,SAAwB,QAAA,EAA2B;AAC7D,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAChB,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AACjB,IAAA,IAAA,CAAK,cAAA,GAAiB,CAAC,KAAA,KAA8B;AACnD,MAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,IACrB,CAAA;AAAA,EACF;AAAA;AAAA,EAGA,MAAA,CAAO,SAAiB,MAAA,EAAc;AACpC,IAAA,IAAI,KAAK,SAAA,EAAW;AACpB,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,IAAA,CAAK,cAAc,CAAA;AACtD,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,EACnB;AAAA;AAAA,EAGA,MAAA,CAAO,SAAiB,MAAA,EAAc;AACpC,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACrB,IAAA,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,IAAA,CAAK,cAAc,CAAA;AACzD,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,SAAA,CAAU,OAAA,EAA4B,OAAA,EAAkC;AAC7E,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,IAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AAClD,IAAA,MAAM,OAAA,GAAqC;AAAA,MACzC,IAAA,EAAM,sBAAA;AAAA,MACN,KAAA,EAAO,IAAA;AAAA,MACP,eAAA,EAAiB;AAAA,KACnB;AACA,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,IAAI;AACF,UAAA,MAAA,CAAO,WAAA,CAAY,SAAS,MAAM,CAAA;AAAA,QACpC,CAAA,CAAA,MAAQ;AAAA,QAIR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS,KAAA,EAA2B;AAClC,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,SAAA,CAAU,SAAA,GAAY,QAAA,EAAU,MAAM,CAAA;AAC3C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAgB,KAAA,CAAM,IAAA;AAC5B,IAAA,IAAI,CAAC,eAAA,CAAgB,IAAI,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,SAAA,CAAU,SAAA,GAAY,OAAA,EAAS,MAAM,CAAA;AAC1C,MAAA;AAAA,IACF;AACA,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,sBAAA;AACH,QAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,MAAM,CAAA;AACjC,QAAA;AAAA,MACF,KAAK,wBAAA;AACH,QAAA,IAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,IAAA,EAAM,MAAM,CAAA;AAC3C,QAAA;AAAA,MACF;AACE,QAAA,IAAA,CAAK,SAAA,CAAU,SAAA,GAAY,MAAA,EAAQ,MAAM,CAAA;AAAA;AAC7C,EACF;AAAA,EAEA,eAAA,CAAgB,SAAoC,MAAA,EAAsB;AACxE,IAAA,MAAM,SAAA,GAAY,KAAK,SAAA,CAAU,aAAA;AACjC,IAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,MAAA,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,OAAA,EAAS,MAAM,CAAA;AACvC,MAAA;AAAA,IACF;AAIA,IAAA,IAAI,OAAA,CAAQ,KAAA,KAAU,IAAA,IAAQ,OAAA,CAAQ,SAAS,MAAA,EAAW;AACxD,MAAA,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,OAAA,EAAS,MAAM,CAAA;AACvC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,SAAA,CAAU,OAAA,CAAQ,YAAA,EAAc,MAAM,CAAA;AAAA,IACnD,CAAA,CAAA,MAAQ;AACN,MAAA,IAAA,CAAK,SAAA,CAAU,SAAA,GAAY,OAAA,EAAS,MAAM,CAAA;AAC1C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,aAAa,SAAA,EAAW;AACjC,MAAA,IAAI,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,SAAS,MAAM,CAAA;AAAA,WAChD,IAAA,CAAK,SAAA,CAAU,SAAA,GAAY,OAAA,EAAS,MAAM,CAAA;AAC/C,MAAA;AAAA,IACF;AACA,IAAA,KAAK,QAAA,CAAS,IAAA;AAAA,MACZ,CAAC,EAAA,KAAO;AACN,QAAA,IAAI,EAAA,EAAI,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,SAAS,MAAM,CAAA;AAAA,aAC1C,IAAA,CAAK,SAAA,CAAU,SAAA,GAAY,OAAA,EAAS,MAAM,CAAA;AAAA,MACjD,CAAA;AAAA,MACA,MAAM;AACJ,QAAA,IAAA,CAAK,SAAA,CAAU,SAAA,GAAY,OAAA,EAAS,MAAM,CAAA;AAAA,MAC5C;AAAA,KACF;AAAA,EACF;AACF,CAAA;AAEA,SAAS,gBAAgB,KAAA,EAAiD;AACxE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,IAAI,EAAE,MAAA,IAAU,KAAA,CAAA,EAAQ,OAAO,KAAA;AAC/B,EAAA,OAAO,OAAO,MAAM,IAAA,KAAS,QAAA;AAC/B;;;ACnJA,IAAM,kBAAA,GAAqB,CAAA;AAQpB,IAAM,iBAAN,MAAqB;AAAA,EACjB,UAAA;AAAA,EACA,UAAA;AAAA,EACT,OAAA,GAAgD,IAAA;AAAA,EAChD,SAAA,GAAY,CAAA;AAAA,EAEZ,YAAY,OAAA,EAA2B;AACrC,IAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,SAAA,IAAa,kBAAA;AACvC,IAAA,IAAA,CAAK,aAAa,OAAA,CAAQ,SAAA;AAAA,EAC5B;AAAA;AAAA,EAGA,IAAA,GAAa;AACX,IAAA,IAAA,CAAK,SAAA,GAAY,KAAK,GAAA,EAAI;AAC1B,IAAA,IAAI,IAAA,CAAK,cAAc,CAAA,EAAG;AAC1B,IAAA,IAAI,IAAA,CAAK,OAAA,KAAY,IAAA,EAAM,YAAA,CAAa,KAAK,OAAO,CAAA;AACpD,IAAA,IAAA,CAAK,OAAA,GAAU,WAAW,MAAM;AAC9B,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,MAAA,IAAA,CAAK,UAAA,EAAW;AAAA,IAClB,CAAA,EAAG,KAAK,UAAU,CAAA;AAAA,EACpB;AAAA;AAAA,EAGA,IAAA,GAAa;AACX,IAAA,IAAI,IAAA,CAAK,YAAY,IAAA,EAAM;AAC3B,IAAA,YAAA,CAAa,KAAK,OAAO,CAAA;AACzB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,EACjB;AAAA;AAAA,EAGA,IAAI,UAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,OAAA,GAAmB;AACrB,IAAA,OAAO,KAAK,OAAA,KAAY,IAAA;AAAA,EAC1B;AACF,CAAA;AAMO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,OAAA,GAA4B,cAAA;AAAA,EACnB,SAAA;AAAA,EAET,YAAY,QAAA,EAAwE;AAClF,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AAAA,EACnB;AAAA,EAEA,IAAI,MAAA,GAA2B;AAC7B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA,EAGA,aAAA,GAAyB;AACvB,IAAA,OAAO,IAAA,CAAK,YAAY,WAAW,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,cAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,YAAY,YAAY,CAAA;AAAA,EACtC;AAAA;AAAA,EAGA,gBAAA,GAA4B;AAC1B,IAAA,OAAO,IAAA,CAAK,YAAY,cAAc,CAAA;AAAA,EACxC;AAAA,EAEA,YAAY,IAAA,EAAiC;AAC3C,IAAA,IAAI,IAAA,CAAK,OAAA,KAAY,IAAA,EAAM,OAAO,KAAA;AAClC,IAAA,MAAM,WAAW,IAAA,CAAK,OAAA;AACtB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,SAAA,CAAU,MAAM,QAAQ,CAAA;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;;;AC1DA,IAAM,OAAO,MAAY,MAAA;AAElB,IAAM,aAAN,MAAiB;AAAA,EACb,UAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACT,SAAA,GAAoC,IAAA;AAAA,EAEpC,YAAY,OAAA,EAA4B;AAEtC,IAAA,IAAA,CAAK,UAAA,GAAa,OAAA,CAAQ,SAAA,CAAU,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACtD,IAAA,MAAM,KAAA,GAAQ,QAAQ,QAAA,IAAY,MAAA;AAClC,IAAA,IAAA,CAAK,YAAY,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,GAAI,KAAA,GAAQ,IAAI,KAAK,CAAA,CAAA;AAC1D,IAAA,IAAA,CAAK,MAAA,GAAS,QAAQ,KAAA,IAAS,CAAA;AAC/B,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,OAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,GAAA,IAAO,IAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,OAAA,EAAgC;AACvC,IAAA,IAAI,QAAQ,UAAA,KAAe,MAAA,IAAa,OAAA,CAAQ,UAAA,KAAe,IAAI,OAAO,IAAA;AAC1E,IAAA,IAAI,QAAQ,cAAA,KAAmB,MAAA,IAAa,OAAA,CAAQ,cAAA,KAAmB,IAAI,OAAO,KAAA;AAClF,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAC5B,IAAA,OAAO,OAAO,EAAA,KAAO,QAAA,IAAY,OAAO,EAAA,KAAO,QAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAM,OAAA,EAA6C;AACvD,IAAA,IAAI,CAAC,KAAK,QAAA,CAAS,OAAO,GAAG,OAAO,EAAE,QAAQ,aAAA,EAAc;AAC5D,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA,KAAa,OAAO,KAAA,KAAU,aAAa,KAAA,GAAQ,MAAA,CAAA;AACxE,IAAA,IAAI,OAAA,KAAY,MAAA,EAAW,OAAO,EAAE,QAAQ,aAAA,EAAc;AAE1D,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,IAAA,CAAK,SAAA,GAAY,UAAA;AAEjB,IAAA,MAAM,QAAA,GACJ,QAAQ,UAAA,KAAe,MAAA,IAAa,QAAQ,UAAA,KAAe,EAAA,GACvD,WAAW,OAAA,CAAQ,UAAU,KAC7B,CAAA,EAAG,OAAA,CAAQ,cAAc,CAAA,CAAA,EAAI,MAAA,CAAO,QAAQ,IAAA,CAAK,IAAI,CAAC,CAAC,CAAA,CAAA;AAC7D,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,UAAU,CAAA,EAAG,KAAK,SAAS,CAAA,CAAA,EAAI,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAA;AAEtE,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK;AAAA,QAClC,MAAA,EAAQ,MAAA;AAAA,QACR,WAAA,EAAa,SAAA;AAAA,QACb,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA;AAAA;AAAA;AAAA,UAIhB,gCAAA,EAAkC;AAAA,SACpC;AAAA,QACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,MAAM,OAAA,CAAQ,IAAA;AAAA,UACd,OAAO,IAAA,CAAK,MAAA;AAAA;AAAA,UAEZ,cAAA,EAAgB,KAAA;AAAA,UAChB,GAAI,QAAQ,MAAA,KAAW,KAAA,CAAA,GAAY,EAAE,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAO,GAAI;AAAC,SAClE,CAAA;AAAA,QACD,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AACD,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,IAAA,CAAK,IAAA,CAAK,oBAAA,EAAsB,QAAA,CAAS,MAAA,EAAQ,GAAG,CAAA;AACpD,QAAA,OAAO,EAAE,QAAQ,aAAA,EAAc;AAAA,MACjC;AACA,MAAA,MAAM,MAAA,GAAkB,MAAM,QAAA,CAAS,IAAA,EAAK;AAC5C,MAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1E,QAAA,IAAA,CAAK,IAAA,CAAK,mCAAmC,GAAG,CAAA;AAChD,QAAA,OAAO,EAAE,QAAQ,aAAA,EAAc;AAAA,MACjC;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,GAAA,EAAK,MAAA,EAAkC;AAAA,IACpE,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,WAAW,MAAA,CAAO,OAAA,EAAS,OAAO,EAAE,QAAQ,YAAA,EAAa;AAC7D,MAAA,IAAA,CAAK,IAAA,CAAK,qBAAqB,KAAK,CAAA;AACpC,MAAA,OAAO,EAAE,QAAQ,aAAA,EAAc;AAAA,IACjC,CAAA,SAAE;AACA,MAAA,IAAI,IAAA,CAAK,SAAA,KAAc,UAAA,EAAY,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,IACtD;AAAA,EACF;AAAA;AAAA,EAGA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,EACnB;AACF,CAAA;;;ACrIA,IAAM,cAAA,uBAA0C,GAAA,CAAI,CAAC,SAAS,QAAA,EAAU,SAAA,EAAW,MAAM,CAAC,CAAA;AAI1F,IAAM,0BAAA,GAA6B,uDAAA;AAEnC,IAAM,aAAA,GAAgB,kCAAA;AAWf,SAAS,UAAU,GAAA,EAAuB;AAC/C,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,MAAA,KAAW,GAAG,OAAO,KAAA;AACxD,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAGjC,EAAA,IAAI,0BAAA,CAA2B,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,KAAA;AAGrD,EAAA,IAAI,OAAA,CAAQ,WAAW,GAAG,CAAA,IAAK,QAAQ,UAAA,CAAW,GAAG,GAAG,OAAO,IAAA;AAG/D,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,IAAA;AAGrC,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,IAAA;AAIpC,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,OAAO,CAAA;AAC9B,IAAA,OAAO,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA;AAAA,EAC3C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,aAAA,CAAc,KAAK,OAAO,CAAA;AAAA,EACnC;AACF;AAYO,SAAS,kBAAkB,GAAA,EAAsB;AACtD,EAAA,IAAI,CAAC,SAAA,CAAU,GAAG,CAAA,EAAG,OAAO,KAAA;AAC5B,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,OAAO,gBAAgB,IAAA,CAAK,OAAO,CAAA,IAAK,WAAA,CAAY,KAAK,OAAO,CAAA;AAClE;;;ACvDA,IAAM,kBAAA,uBAA8C,GAAA,CAAI;AAAA,EACtD,OAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,cAAA,uBAA0C,GAAA,CAAI;AAAA,EAClD,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA;AASM,SAAS,qBAAA,CACd,OAAA,EACA,SAAA,EACA,KAAA,EACsB;AACtB,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,WAAA,EAAY,CAAE,IAAA,EAAK;AAC1C,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,SAAA;AAC9B,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,SAAA;AAClC,EAAA,IAAI,kBAAA,CAAmB,GAAA,CAAI,IAAI,CAAA,EAAG,OAAO,SAAA;AAEzC,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAA,CAAQ,gBAAgB,IAAI,CAAA;AAC5B,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW;AACxF,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,MAAM,WAAA,GAAc,OAAO,KAAK,CAAA;AAEhC,EAAA,IAAI,cAAA,CAAe,IAAI,IAAI,CAAA,IAAK,CAAC,SAAA,CAAU,WAAW,GAAG,OAAO,SAAA;AAEhE,EAAA,OAAA,CAAQ,YAAA,CAAa,MAAM,WAAW,CAAA;AACtC,EAAA,OAAO,SAAA;AACT;;;ACIA,IAAMA,oBAAAA,GAAsB,EAAA;AAC5B,IAAM,4BAAA,GAA+B,EAAA;AAY9B,IAAM,kBAAN,MAAsB;AAAA,EAClB,MAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA;AAAA,EAGT,QAAA,uBAAe,GAAA,EAA0B;AAAA;AAAA,EAEhC,OAAA,uBAAc,GAAA,EAA0B;AAAA,EAEjD,cAAA,GAAuD,IAAA;AAAA,EACvD,YAAA,GAA8B,IAAA;AAAA,EAE9B,WAAA,CAAY,OAAoB,OAAA,EAAiC;AAC/D,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,IAAA,CAAK,WAAA,GAAc,QAAQ,UAAA,IAAcA,oBAAAA;AACzC,IAAA,IAAA,CAAK,aAAa,OAAA,CAAQ,SAAA;AAC1B,IAAA,IAAA,CAAK,cAAA,GAAiB,QAAQ,uBAAA,IAA2B,4BAAA;AACzD,IAAA,IAAA,CAAK,aAAA,GAAgB,QAAQ,qBAAA,IAAyB,KAAA;AACtD,IAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,YAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,OAAA;AACxB,IAAA,IAAA,CAAK,cAAA,GACH,OAAA,CAAQ,aAAA,KACP,OAAO,qBAAA,KAA0B,UAAA,GAC9B,qBAAA,CAAsB,IAAA,CAAK,UAAU,CAAA,GACrC,CAAC,EAAA,KAAO;AACN,MAAA,OAAO,WAAW,MAAM;AACtB,QAAA,EAAA,CAAG,WAAA,CAAY,KAAK,CAAA;AAAA,MACtB,GAAG,CAAC,CAAA;AAAA,IACN,CAAA,CAAA;AACN,IAAA,IAAA,CAAK,YAAA,GACH,OAAA,CAAQ,WAAA,KACP,OAAO,oBAAA,KAAyB,UAAA,GAC7B,oBAAA,CAAqB,IAAA,CAAK,UAAU,CAAA,GACpC,CAAC,MAAA,KAAW;AACV,MAAA,YAAA,CAAa,MAAkD,CAAA;AAAA,IACjE,CAAA,CAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,MAAA,EAA+B;AACtC,IAAA,MAAM,WAAW,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,OAAO,OAAO,CAAA;AACxD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,QAAQ,MAAA,CAAO,KAAA;AACxB,MAAA,QAAA,CAAS,YAAY,MAAA,CAAO,SAAA;AAAA,IAC9B,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS;AAAA,QACvC,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,WAAW,MAAA,CAAO;AAAA,OACnB,CAAA;AAAA,IACH;AACA,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAA,GAAuB;AACrB,IAAA,IAAI,IAAA,CAAK,mBAAmB,IAAA,EAAM;AAChC,MAAA,YAAA,CAAa,KAAK,cAAc,CAAA;AAChC,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,IACxB;AACA,IAAA,OAAO,KAAK,MAAA,EAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,OAAA,EAAwB;AACpC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AACtC,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,OAAO,CAAA;AAC3B,IAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAA,EAAwB;AAC7B,IAAA,IAAA,CAAK,QAAA,CAAS,OAAO,OAAO,CAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,OAAA,GAAgB;AACd,IAAA,IAAI,IAAA,CAAK,mBAAmB,IAAA,EAAM;AAChC,MAAA,YAAA,CAAa,KAAK,cAAc,CAAA;AAChC,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,IACxB;AACA,IAAA,IAAI,IAAA,CAAK,iBAAiB,IAAA,EAAM;AAC9B,MAAA,IAAA,CAAK,YAAA,CAAa,KAAK,YAAY,CAAA;AACnC,MAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AAAA,IACtB;AACA,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AACpB,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AAAA,EACrB;AAAA;AAAA,EAGA,IAAI,YAAA,GAAuB;AACzB,IAAA,OAAO,KAAK,QAAA,CAAS,IAAA;AAAA,EACvB;AAAA;AAAA,EAGA,IAAI,WAAA,GAAsB;AACxB,IAAA,OAAO,KAAK,OAAA,CAAQ,IAAA;AAAA,EACtB;AAAA,EAEA,YAAA,GAAqB;AACnB,IAAA,IAAI,IAAA,CAAK,cAAA,KAAmB,IAAA,EAAM,YAAA,CAAa,KAAK,cAAc,CAAA;AAClE,IAAA,IAAA,CAAK,cAAA,GAAiB,WAAW,MAAM;AACrC,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,MAAA,IAAA,CAAK,aAAA,EAAc;AAAA,IACrB,CAAA,EAAG,KAAK,WAAW,CAAA;AAAA,EACrB;AAAA,EAEA,aAAA,GAAsB;AACpB,IAAA,IAAI,KAAK,YAAA,KAAiB,IAAA,EAAM,IAAA,CAAK,YAAA,CAAa,KAAK,YAAY,CAAA;AACnE,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,cAAA,CAAe,MAAM;AAC5C,MAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IACd,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAA,GAAqB;AACnB,IAAA,MAAM,EAAA,GAAK,YAAY,GAAA,EAAI;AAC3B,IAAA,MAAM,aAAa,CAAC,IAAA,CAAK,iBAAiB,IAAA,CAAK,aAAA,KAAkB,IAAA,CAAK,cAAA;AACtE,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA;AACrB,IAAA,IAAA,CAAK,QAAA,uBAAe,GAAA,EAAI;AAExB,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,MAAA,EAAO,EAAG;AACpC,MAAA,IAAI,cAAc,CAAC,IAAA,CAAK,WAAW,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,EAAG;AACxD,QAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,SAAS,KAAK,CAAA;AAC5C,QAAA,QAAA,IAAY,CAAA;AACZ,QAAA;AAAA,MACF;AAIA,MAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AACjB,MAAA,OAAA,IAAW,CAAA;AAAA,IACb;AACA,IAAA,MAAM,KAAA,GAAoB;AAAA,MACxB,OAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA,EAAY,WAAA,CAAY,GAAA,EAAI,GAAI;AAAA,KAClC;AACA,IAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AACrB,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;;;AC7OA,IAAM,eAAA,GAAkB,IAAA;AAQjB,SAAS,mBAAA,GAA8B;AAC5C,EAAA,MAAM,WAAW,YAAA,EAAa;AAC9B,EAAA,IAAI,QAAA,KAAa,QAAW,OAAO,QAAA;AACnC,EAAA,MAAM,gBAAgB,qBAAA,EAAsB;AAC5C,EAAA,IAAI,aAAA,KAAkB,QAAW,OAAO,aAAA;AACxC,EAAA,OAAO,eAAA;AACT;AAEA,SAAS,YAAA,GAAmC;AAC1C,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,MAAA;AAC5C,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,eAAA,CAAgB,YAAA,CAAa,MAAM,CAAA;AACzD,EAAA,OAAO,IAAA,KAAS,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,IAAI,MAAA,GAAY,IAAA;AAC1D;AAEA,SAAS,qBAAA,GAA4C;AACnD,EAAA,IAAI,OAAO,SAAA,KAAc,WAAA,EAAa,OAAO,MAAA;AAC7C,EAAA,MAAM,OAAO,SAAA,CAAU,QAAA;AACvB,EAAA,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,MAAA,GAAS,IAAI,IAAA,GAAO,MAAA;AAC9D;;;ACdA,IAAM,UAAA,GAAa,2BAAA;AACnB,IAAM,cAAA,GAAiB,IAAA;AACvB,IAAM,KAAA,GAAQ;AAAA,EACZ,mBAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA,CAAE,KAAK,GAAG,CAAA;AAQV,IAAM,gBAAA,GAA6B;AAAA,EACjC,SAAA,EAAW,wBAAA;AAAA,EACX,YAAA,EAAc,2BAAA;AAAA,EACd,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,KAAM,CAAA,GAAI,QAAA,GAAW,SAAS,CAAA,QAAA;AAChE,CAAA;AAEA,IAAM,OAAA,GAA8C;AAAA,EAClD,EAAA,EAAI,gBAAA;AAAA,EACJ,EAAA,EAAI;AAAA,IACF,SAAA,EAAW,oBAAA;AAAA,IACX,YAAA,EAAc,mBAAA;AAAA,IACd,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,KAAM,CAAA,GAAI,aAAA,GAAa,eAAY,CAAA,WAAA;AAAA;AAEvE,CAAA;AAEA,SAAS,eAAe,MAAA,EAA0B;AAChD,EAAA,MAAM,IAAA,GAAO,OAAO,KAAA,CAAM,MAAM,EAAE,CAAC,CAAA,EAAG,aAAY,IAAK,IAAA;AACvD,EAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,IAAK,gBAAA;AAC1B;AAOO,IAAM,gBAAN,MAAoB;AAAA,EACzB,QAAA,GAA+B,IAAA;AAAA,EACtB,QAAA;AAAA,EACT,WAAA,GAAoD,IAAA;AAAA,EAEpD,WAAA,CAAY,MAAA,GAAiB,mBAAA,EAAoB,EAAG;AAClD,IAAA,IAAA,CAAK,QAAA,GAAW,eAAe,MAAM,CAAA;AAAA,EAIvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAA,GAA6B;AAC3B,IAAA,IAAI,KAAK,QAAA,KAAa,IAAA,IAAQ,KAAK,QAAA,CAAS,WAAA,SAAoB,IAAA,CAAK,QAAA;AAGrE,IAAA,IAAI,OAAO,QAAA,KAAa,WAAA,IAAgB,QAAA,CAAS,SAAgC,IAAA,EAAM;AACrF,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAA,GAA8B,QAAA,CAAS,cAAA,CAAe,UAAU,CAAA;AACpE,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,GAAU,QAAA,CAAS,cAAc,KAAK,CAAA;AACtC,MAAA,OAAA,CAAQ,EAAA,GAAK,UAAA;AACb,MAAA,OAAA,CAAQ,YAAA,CAAa,QAAQ,QAAQ,CAAA;AACrC,MAAA,OAAA,CAAQ,YAAA,CAAa,aAAa,QAAQ,CAAA;AAC1C,MAAA,OAAA,CAAQ,YAAA,CAAa,eAAe,MAAM,CAAA;AAC1C,MAAA,OAAA,CAAQ,YAAA,CAAa,SAAS,KAAK,CAAA;AACnC,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,OAAO,CAAA;AAAA,IACnC;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAChB,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA,EAGA,iBAAA,GAA0B;AACxB,IAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAAA,EACnC;AAAA;AAAA,EAGA,oBAAA,GAA6B;AAC3B,IAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA;AAAA,EACtC;AAAA;AAAA,EAGA,eAAe,KAAA,EAAqB;AAClC,IAAA,IAAI,SAAS,CAAA,EAAG;AAChB,IAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,GAAe;AACb,IAAA,IAAI,IAAA,CAAK,gBAAgB,IAAA,EAAM;AAC7B,MAAA,YAAA,CAAa,KAAK,WAAW,CAAA;AAC7B,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,IACrB;AACA,IAAA,IAAI,IAAA,CAAK,UAAU,UAAA,EAAY;AAC7B,MAAA,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,WAAA,CAAY,IAAA,CAAK,QAAQ,CAAA;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,KAAK,OAAA,EAAuB;AAC1B,IAAA,MAAM,OAAA,GAAU,KAAK,MAAA,EAAO;AAC5B,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,OAAA,CAAQ,WAAA,GAAc,OAAA;AACtB,IAAA,IAAI,IAAA,CAAK,WAAA,KAAgB,IAAA,EAAM,YAAA,CAAa,KAAK,WAAW,CAAA;AAC5D,IAAA,IAAA,CAAK,WAAA,GAAc,WAAW,MAAM;AAClC,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,MAAA,IAAI,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,WAAA,GAAc,EAAA;AAAA,IACjD,GAAG,cAAc,CAAA;AAAA,EACnB;AACF,CAAA;;;AC5HA,IAAM,gBAAA,uBAAsD,GAAA,CAAsB;AAAA,EAChF,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAC,CAAA;AAOM,SAAS,gBAAA,CACd,OAAA,EACA,QAAA,GAAW,EAAA,EACE;AACb,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAgC;AAChD,EAAA,IAAA,CAAK,OAAA,EAAS,UAAU,GAAG,CAAA;AAC3B,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,IAAA,CACP,OAAA,EACA,QAAA,EACA,GAAA,EACM;AACN,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,gBAAA,CAAiB,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AACrC,MAAA,IAAI,OAAO,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,UAAU,GAAG,CAAA;AACpD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAMC,KAAAA,GAAO,aAAa,EAAA,GAAK,MAAA,CAAO,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAA,CAAA;AACvE,MAAA,GAAA,CAAI,GAAA,CAAIA,OAAM,MAAM,CAAA;AACpB,MAAA,IAAI,OAAO,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQA,OAAM,GAAG,CAAA;AAChD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,aAAa,EAAA,GAAK,MAAA,CAAO,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAA,CAAA;AACvE,IAAA,GAAA,CAAI,GAAA,CAAI,MAAM,MAAM,CAAA;AACpB,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,OAAA,IAAW,MAAA,CAAO,MAAA,EAAQ;AAC5C,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAA,EAAG,IAAI,MAAM,GAAG,CAAA;AAAA,IACtC,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,OAAO,MAAA,EAAQ;AACpD,MAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,QAAA,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAG,IAAI,MAAM,KAAA,CAAM,IAAI,IAAI,GAAG,CAAA;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AACF;AAOO,SAAS,YAAA,CACd,OACA,SAAA,EACgC;AAChC,EAAA,IAAI,MAAM,GAAA,CAAI,SAAS,GAAG,OAAO,KAAA,CAAM,IAAI,SAAS,CAAA;AAEpD,EAAA,MAAM,YAAA,GAAe,SAAA,CAAU,OAAA,CAAQ,gBAAA,EAAkB,IAAI,CAAA;AAC7D,EAAA,IAAI,MAAM,GAAA,CAAI,YAAY,GAAG,OAAO,KAAA,CAAM,IAAI,YAAY,CAAA;AAC1D,EAAA,OAAO,MAAA;AACT;;;ACpDA,SAAS,MAAM,IAAA,EAA4C;AACzD,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,MAAM,OAAO,MAAA;AACtD,EAAA,MAAM,EAAA,GAAM,KAAiC,IAAI,CAAA;AACjD,EAAA,IAAI,OAAO,EAAA,KAAO,QAAA,IAAY,OAAO,EAAA,KAAO,UAAU,OAAO,EAAA;AAC7D,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,aAAa,IAAA,EAAmC;AACvD,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,MAAM,OAAO,MAAA;AACtD,EAAA,MAAM,SAAA,GAAa,KAAiC,WAAW,CAAA;AAC/D,EAAA,OAAO,OAAO,SAAA,KAAc,QAAA,GAAW,SAAA,GAAY,MAAA;AACrD;AAUO,SAAS,SAAA,CACd,MACA,IAAA,EACuB;AACvB,EAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAM,CAAC,SAAS,KAAA,CAAM,IAAI,MAAM,MAAS,CAAA;AAC9D,EAAA,IAAI,OAAA,EAAS,OAAO,QAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AACvC,EAAA,OAAO,cAAA,CAAe,MAAM,IAAI,CAAA;AAClC;AAEA,SAAS,QAAA,CAAS,MAA0B,IAAA,EAAiD;AAC3F,EAAA,MAAM,UAAwB,EAAC;AAC/B,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAA6B;AACvD,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AACvC,IAAA,MAAM,EAAA,GAAK,KAAA,CAAM,IAAA,CAAK,CAAC,CAAC,CAAA;AACxB,IAAA,IAAI,EAAA,KAAO,MAAA,EAAW,aAAA,CAAc,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,EAC/C;AAEA,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAY;AACzC,EAAA,KAAA,IAAS,KAAK,CAAA,EAAG,EAAA,GAAK,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA,EAAG;AAC1C,IAAA,MAAM,IAAA,GAAO,KAAK,EAAE,CAAA;AACpB,IAAA,MAAM,EAAA,GAAK,MAAM,IAAI,CAAA;AACrB,IAAA,IAAI,OAAO,MAAA,EAAW;AACpB,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,EAAA,EAAI,KAAA,EAAO,MAAM,CAAA;AACvD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,CAAI,EAAE,CAAA;AACjC,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,EAAA,EAAI,KAAA,EAAO,MAAM,CAAA;AACvD,MAAA;AAAA,IACF;AACA,IAAA,gBAAA,CAAiB,IAAI,IAAI,CAAA;AACzB,IAAA,MAAM,QAAA,GAAW,KAAK,IAAI,CAAA;AAC1B,IAAA,IAAI,YAAA,CAAa,QAAQ,CAAA,KAAM,YAAA,CAAa,IAAI,CAAA,EAAG;AACjD,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,IAAI,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,IAAA,EAAM,CAAA;AAC5E,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,EAAA,EAAI;AACf,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,EAAA,EAAI,KAAA,EAAO,MAAM,CAAA;AAAA,IACtD;AACA,IAAA,IAAI,CAAC,YAAA,CAAa,QAAA,EAAU,IAAI,CAAA,EAAG;AACjC,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,EAAA,EAAI,KAAA,EAAO,MAAM,CAAA;AAAA,IACzD;AAAA,EACF;AAEA,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AACvC,IAAA,IAAI,gBAAA,CAAiB,GAAA,CAAI,CAAC,CAAA,EAAG;AAC7B,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,GAAG,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,cAAA,CAAe,MAA0B,IAAA,EAAiD;AACjG,EAAA,MAAM,UAAwB,EAAC;AAC/B,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,MAAM,CAAA;AAC7C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,KAAK,CAAA,EAAG;AAC/B,IAAA,IAAI,CAAC,aAAa,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG;AACnC,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,GAAG,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA;AAAA,IAC3D;AAAA,EACF;AACA,EAAA,IAAI,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,EAAQ;AAC7B,IAAA,KAAA,IAAS,IAAI,IAAA,CAAK,MAAA,EAAQ,IAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AACjD,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,GAAG,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA;AAAA,IAC3D;AAAA,EACF;AACA,EAAA,IAAI,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,EAAQ;AAC7B,IAAA,KAAA,IAAS,IAAI,IAAA,CAAK,MAAA,EAAQ,IAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AACjD,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,GAAG,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA;AAAA,IAC3D;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,YAAA,CAAa,GAAY,CAAA,EAAqB;AACrD,EAAA,IAAI,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,GAAG,OAAO,IAAA;AAC5B,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,YAAY,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,IAAA,EAAM,OAAO,KAAA;AACvF,EAAA,MAAM,IAAA,GAAO,CAAA;AACb,EAAA,MAAM,IAAA,GAAO,CAAA;AACb,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC9B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AAC1C,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AAGvB,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,CAAG,IAAA,CAAK,GAAG,GAAG,IAAA,CAAK,GAAG,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,EAC/C;AACA,EAAA,OAAO,IAAA;AACT;;;AClIA,IAAM,GAAA,GAAqD;AAAA,EACzD,IAAA,EAAM,MAAA;AAAA,EACN,QAAA,EAAU,UAAA;AAAA,EACV,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,EAAQ,QAAA;AAAA,EACR,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,KAAA,EAAO,MAAA;AAAA;AAAA,EACP,IAAA,EAAM,MAAA;AAAA;AAAA,EACN,GAAA,EAAK,MAAA;AAAA,EACL,WAAA,EAAa,MAAA;AAAA,EACb,YAAA,EAAc,cAAA;AAAA,EACd,MAAA,EAAQ,QAAA;AAAA,EACR,KAAA,EAAO,MAAA;AAAA,EACP,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,EAAA,EAAI;AACN,CAAA;AAQO,SAAS,sBAAsB,IAAA,EAAqC;AACzE,EAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,GAAA,EAAK,IAAI,CAAA,EAAG;AACnD,IAAA,OAAO,IAAI,IAAwB,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,MAAA;AACT;;;ACDA,IAAM,qBAAA,GAAwB,CAAC,CAAA,EAAG,GAAA,EAAK,KAAM,GAAI,CAAA;AAwF1C,IAAM,qBAAN,MAAyB;AAAA,EACrB,QAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,uBAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,eAAgD,EAAC;AAAA,EACjD,KAAA;AAAA,EACA,OAAA;AAAA,EAET,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA,GAA4C,kBAAkB,MAAS,CAAA;AAAA,EACvE,QAAA,GAAW,KAAA;AAAA,EACX,cAAA,GAAsC,IAAA;AAAA,EACtC,YAAA,GAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAON,mBAAA,uBAA0B,GAAA,EAAY;AAAA,EAE/C,YAAY,OAAA,EAAyB;AACnC,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,OAAA;AACxB,IAAA,IAAA,CAAK,aAAa,OAAA,CAAQ,SAAA;AAC1B,IAAA,IAAA,CAAK,QACH,OAAA,CAAQ,IAAA,KAAS,OAAO,QAAA,KAAa,cAAc,QAAA,GAAY,IAAA,CAAA;AACjE,IAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,YAAA;AAC7B,IAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,SAAA,IAAa,gBAAA;AACvC,IAAA,IAAA,CAAK,0BAA0B,OAAA,CAAQ,kBAAA;AACvC,IAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,GAAA,IAAO,UAAA;AAC3B,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAQ,IAAA,IAAQ,WAAA;AAC7B,IAAA,IAAA,CAAK,KAAA,GAAQ,WAAW,OAAO,CAAA;AAC/B,IAAA,IAAA,CAAK,OAAA,GACH,OAAA,CAAQ,SAAA,KAAc,MAAA,GAClB,IAAI,UAAA,CAAW;AAAA,MACb,SAAA,EAAW,QAAQ,SAAA,CAAU,SAAA;AAAA,MAC7B,GAAI,OAAA,CAAQ,SAAA,CAAU,QAAA,KAAa,MAAA,GAC/B,EAAE,QAAA,EAAU,OAAA,CAAQ,SAAA,CAAU,QAAA,EAAS,GACvC,EAAC;AAAA,MACL,GAAI,OAAA,CAAQ,SAAA,CAAU,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAM,GAAI,EAAC;AAAA,MAClF,GAAI,OAAA,CAAQ,SAAA,CAAU,OAAA,KAAY,MAAA,GAC9B,EAAE,OAAA,EAAS,OAAA,CAAQ,SAAA,CAAU,OAAA,EAAQ,GACrC,EAAC;AAAA,MACL,GAAA,EAAK,IAAI,IAAA,KAAS;AAChB,QAAA,IAAA,CAAK,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,MACnB;AAAA,KACD,CAAA,GACD,IAAA;AAEN,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,YAAA,EAAa;AAC/B,IAAA,IAAA,CAAK,aAAa,IAAI,eAAA;AAAA,MACpB;AAAA,QACE,oBAAoB,MAAM;AACxB,UAAA,IAAA,CAAK,aAAA,EAAc;AAAA,QACrB,CAAA;AAAA,QACA,kBAAA,EAAoB,CAAC,OAAA,EAAS,OAAA,KAAY;AACxC,UAAA,IAAI,OAAA,EAAS,IAAA,CAAK,UAAA,CAAW,aAAA,CAAc,OAAO,CAAA;AAAA,QACpD;AAAA,OACF;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,sBAAA,KAA2B,MAAA,GACnC,EAAE,sBAAA,EAAwB,OAAA,CAAQ,sBAAA,EAAuB,GACzD;AAAC;AACP,KACF;AACA,IAAA,IAAA,CAAK,aAAa,IAAI,eAAA;AAAA,MACpB,CAAC,MAAA,KAAW;AACV,QAAA,IAAA,CAAK,aAAa,MAAM,CAAA;AAAA,MAC1B,CAAA;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAW,GAAI,EAAC;AAAA,QAC7E,GAAI,QAAQ,qBAAA,KAA0B,MAAA,GAClC,EAAE,qBAAA,EAAuB,OAAA,CAAQ,qBAAA,EAAsB,GACvD,EAAC;AAAA,QACL,GAAI,QAAQ,uBAAA,KAA4B,MAAA,GACpC,EAAE,uBAAA,EAAyB,OAAA,CAAQ,uBAAA,EAAwB,GAC3D,EAAC;AAAA,QACL,WAAW,CAAC,OAAA,KAAY,IAAA,CAAK,UAAA,CAAW,UAAU,OAAO,CAAA;AAAA,QACzD,YAAA,EAAc,MAAM,IAAA,CAAK,MAAA,CAAO,YAAA;AAAA,QAChC,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,UAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,QACrB;AAAA;AACF,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,UAAA,CAAW,OAAA,CAAQ,aAAA,EAAe;AAAA,MAChD,QAAA,EAAU,CAAC,GAAA,EAAK,MAAA,KAAW;AACzB,QAAA,IAAA,CAAK,aAAA,CAAc,KAAK,MAAM,CAAA;AAAA,MAChC,CAAA;AAAA,MACA,eAAA,EAAiB,CAAC,GAAA,EAAK,MAAA,KAAW;AAChC,QAAA,IAAA,CAAK,oBAAA,CAAqB,KAAK,MAAM,CAAA;AAAA,MACvC,CAAA;AAAA,MACA,SAAA,EAAW,CAAC,MAAA,EAAQ,MAAA,KAAW;AAC7B,QAAA,IAAI,WAAW,OAAA,EAAS;AACtB,UAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,MAAM,CAAA,CAAA,CAAG,CAAA;AACpE,UAAA,KAAK,IAAA,CAAK,SAAS,IAAA,CAAK,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,EAAS,SAAS,CAAA;AAAA,QAC9D;AACA,QAAA,IAAA,CAAK,IAAA,CAAK,mBAAA,EAAqB,MAAA,EAAQ,MAAM,CAAA;AAAA,MAC/C,CAAA;AAAA,MACA,GAAI,QAAQ,aAAA,KAAkB,MAAA,GAAY,EAAE,aAAA,EAAe,OAAA,CAAQ,aAAA,EAAc,GAAI;AAAC,KACvF,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,eAAA,CAAgB,CAAC,MAAM,IAAA,KAAS;AAChD,MAAA,IAAA,CAAK,IAAA,CAAK,YAAA,EAAc,IAAA,EAAM,QAAA,EAAK,IAAI,CAAA;AAAA,IACzC,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,cAAA,CAAe;AAAA,MACnC,GAAI,QAAQ,WAAA,KAAgB,MAAA,GAAY,EAAE,SAAA,EAAW,OAAA,CAAQ,WAAA,EAAY,GAAI,EAAC;AAAA,MAC9E,WAAW,MAAM;AACf,QAAA,IAAA,CAAK,mBAAA,EAAoB;AAAA,MAC3B;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,KAAA,GAAiB;AACf,IAAA,IAAI,IAAA,CAAK,UAAU,OAAO,KAAA;AAC1B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAEhB,IAAA,MAAM,OAAO,IAAA,CAAK,KAAA;AAClB,IAAA,IAAI,IAAA,YAAgB,QAAA,IAAY,IAAA,CAAK,UAAA,KAAe,SAAA,EAAW;AAC7D,MAAA,MAAM,UAAU,MAAY;AAC1B,QAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,QAAA,IAAA,CAAK,SAAA,EAAU;AAAA,MACjB,CAAA;AACA,MAAA,IAAA,CAAK,cAAA,GAAiB,OAAA;AACtB,MAAA,IAAA,CAAK,iBAAiB,kBAAA,EAAoB,OAAA,EAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AACjE,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAA,CAAK,SAAA,EAAU;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,SAAA,GAAkB;AAChB,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,UAAA,CAAW,MAAM,IAAA,CAAK,KAAA,YAAiB,WAAW,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,IAAA,CAAK,KAAK,CAAA;AACnF,IAAA,IAAA,CAAK,KAAK,MAAA,EAAO;AACjB,IAAA,IAAA,CAAK,SAAA,EAAU;AAGf,IAAA,KAAA,MAAW,SAAS,qBAAA,EAAuB;AACzC,MAAA,IAAI,UAAU,CAAA,EAAG;AACf,QAAA,IAAA,CAAK,UAAA,CAAW,KAAK,aAAa,CAAA;AAAA,MACpC,CAAA,MAAO;AACL,QAAA,MAAM,MAAA,GAAS,WAAW,MAAM;AAC9B,UAAA,IAAA,CAAK,UAAA,CAAW,KAAK,aAAa,CAAA;AAAA,QACpC,GAAG,KAAK,CAAA;AACR,QAAA,IAAA,CAAK,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,OAAA,GAAgB;AACd,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AACpB,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,IAAA,IAAI,IAAA,CAAK,mBAAmB,IAAA,EAAM;AAChC,MAAA,MAAM,OAAO,IAAA,CAAK,KAAA;AAClB,MAAA,IAAI,gBAAgB,QAAA,EAAU;AAC5B,QAAA,IAAA,CAAK,mBAAA,CAAoB,kBAAA,EAAoB,IAAA,CAAK,cAAc,CAAA;AAAA,MAClE;AACA,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,MAAA,KAAK,IAAA,CAAK,SAAS,IAAA,CAAK,SAAA,EAAW,EAAE,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,YAAA,EAAc,YAAA,CAAa,MAAM,CAAA;AAC3D,IAAA,IAAA,CAAK,aAAa,MAAA,GAAS,CAAA;AAC3B,IAAA,IAAA,CAAK,WAAW,IAAA,EAAK;AACrB,IAAA,IAAA,CAAK,KAAK,MAAA,EAAO;AACjB,IAAA,IAAA,CAAK,WAAW,IAAA,EAAK;AACrB,IAAA,IAAA,CAAK,WAAW,OAAA,EAAQ;AACxB,IAAA,IAAA,CAAK,SAAS,OAAA,EAAQ;AACtB,IAAA,IAAA,CAAK,OAAO,KAAA,EAAM;AAClB,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,WAAA;AAC5C,IAAA,IAAA,CAAK,OAAO,gBAAA,EAAiB;AAC7B,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAA,CAAK,OAAO,oBAAA,EAAqB;AACjC,MAAA,KAAK,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,YAAA,EAAc,EAAE,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAAA,IACpF;AACA,IAAA,IAAA,CAAK,OAAO,MAAA,EAAO;AACnB,IAAA,KAAK,IAAA,CAAK,SAAS,IAAA,CAAK,SAAA,EAAW,EAAE,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAAA,EAC9D;AAAA;AAAA,EAGA,YAAA,GAAqB;AACnB,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACrB;AAAA;AAAA,EAGA,IAAI,MAAA,GAAsD;AACxD,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACrB;AAAA;AAAA,EAGA,IAAI,KAAA,GAAsB;AACxB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,WAAA,GAAsB;AACxB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,QAAA,GAAgC;AAClC,IAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAMA,qBAAA,GAA8B;AAC5B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,KAAK,KAAK,CAAA;AAClD,IAAA,IAAA,CAAK,IAAA,CAAK,eAAe,KAAK,CAAA;AAC9B,IAAA,KAAK,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,cAAA,EAAgB,KAAK,CAAA;AAC7C,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,MAAA,CAAO,MAAA,EAAO,EAAG;AACxC,MAAA,IAAA,CAAK,UAAA,CAAW,cAAA,CAAe,KAAA,CAAM,OAAO,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,aAAA,GAAsB;AACpB,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,MAAA,CAAO,MAAA,EAAO,EAAG;AACxC,MAAA,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,KAAA,CAAM,OAAO,CAAA;AAC9C,MAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA;AAAA,IACtC;AACA,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,EAC7B;AAAA,EAEA,SAAA,GAAkB;AAChB,IAAA,KAAK,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,EAAQ,EAAE,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAAA,EAC3D;AAAA,EAEA,kBAAkB,aAAA,EAA6B;AAC7C,IAAA,MAAM,IAAA,GAAO,kBAAkB,aAAa,CAAA;AAC5C,IAAA,IAAI,IAAA,CAAK,UAAA,KAAe,IAAA,CAAK,oBAAA,CAAqB,UAAA,EAAY;AAC9D,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA;AAC5B,IAAA,IAAA,CAAK,IAAA;AAAA,MACH,qBAAA;AAAA,MACA,QAAQ,wBAAwB,CAAA,CAAA;AAAA,MAChC,UAAU,aAAa,CAAA,CAAA;AAAA,MACvB,CAAA,WAAA,EAAc,KAAK,UAAU,CAAA;AAAA,KAC/B;AAAA,EACF;AAAA,EAEA,aAAA,CAAc,SAAoC,MAAA,EAAsB;AACtE,IAAA,IAAA,CAAK,WAAW,IAAA,EAAK;AACrB,IAAA,IAAI,OAAA,CAAQ,oBAAoB,MAAA,EAAW;AACzC,MAAA,IAAA,CAAK,iBAAA,CAAkB,QAAQ,eAAe,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAW;AAC9B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,aAAA,EAAc,EAAG;AAC/B,MAAA,IAAA,CAAK,OAAO,iBAAA,EAAkB;AAC9B,MAAA,KAAK,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,SAAA,EAAW,EAAE,QAAQ,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAAA,IACtE;AACA,IAAA,IAAA,CAAK,YAAA,IAAgB,CAAA;AACrB,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAW,IAAA,CAAK,iBAAiB,OAAA,CAAQ,MAAA;AAChE,IAAA,IAAI,OAAA,CAAQ,oBAAoB,MAAA,EAAW;AACzC,MAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,eAAA;AAC9B,MAAA,IAAA,CAAK,YAAA,GAAe,gBAAA,CAAiB,OAAA,CAAQ,eAAe,CAAA;AAAA,IAC9D;AAEA,IAAA,KAAK,KAAK,sBAAA,CAAuB,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW;AACzD,MAAA,IAAI,WAAW,IAAA,EAAM;AAErB,MAAA,MAAM,IAAA,GAA+B;AAAA,QACnC,MAAA;AAAA,QACA,GAAI,KAAK,cAAA,KAAmB,MAAA,GAAY,EAAE,MAAA,EAAQ,IAAA,CAAK,cAAA,EAAe,GAAI,EAAC;AAAA,QAC3E,GAAI,QAAQ,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAW,GAAI,EAAC;AAAA,QAC7E,GAAI,QAAQ,cAAA,KAAmB,MAAA,GAAY,EAAE,cAAA,EAAgB,OAAA,CAAQ,cAAA,EAAe,GAAI,EAAC;AAAA,QACzF,GAAI,KAAK,cAAA,KAAmB,MAAA,GAAY,EAAE,MAAA,EAAQ,IAAA,CAAK,cAAA,EAAe,GAAI;AAAC,OAC7E;AAEA,MAAA,IAAI,SAAA,GAAY,KAAA;AAChB,MAAA,KAAK,IAAA,CAAK,QAAA,CACP,IAAA,CAAK,cAAA,EAAgB;AAAA,QACpB,IAAA;AAAA,QACA,QAAQ,MAAY;AAClB,UAAA,SAAA,GAAY,IAAA;AAAA,QACd;AAAA,OACD,CAAA,CACA,IAAA,CAAK,MAAM;AACV,QAAA,IAAI,SAAA,EAAW;AACf,QAAA,IAAA,CAAK,mBAAmB,IAAI,CAAA;AAAA,MAC9B,CAAC,CAAA;AAAA,IACL,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,uBACJ,OAAA,EACyC;AAEzC,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,IAAQ,EAAC;AAC7B,IAAA,IAAI,IAAA,CAAK,OAAA,KAAY,IAAA,EAAM,OAAO,GAAA;AAClC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM;AAAA,MACtC,gBAAgB,OAAA,CAAQ,cAAA;AAAA,MACxB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,IAAA,EAAM,GAAA;AAAA,MACN,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AACD,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,QAAA,EAAU,OAAO,MAAA,CAAO,GAAA;AAC9C,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,YAAA,EAAc,OAAO,IAAA;AAC3C,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,oBAAA,CAAqB,UAAuC,OAAA,EAAuB;AACjF,IAAA,KAAK,IAAA,CAAK,SAAS,IAAA,CAAK,cAAA,EAAgB,EAAE,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAAA,EACnE;AAAA,EAEA,mBAAmB,IAAA,EAAoC;AACrD,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,QAAQ,KAAK,IAAA,CAAK,MAAA,CAAO,SAAQ,EAAG;AACzD,MAAA,MAAM,QAAQ,iBAAA,CAAkB,IAAA,CAAK,MAAA,EAAQ,SAAA,EAAW,KAAK,cAAc,CAAA;AAC3E,MAAA,IAAI,UAAU,MAAA,EAAW;AACzB,MAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,MAAA,GAA0B;AAAA,UAC9B,MAAA;AAAA,UACA,KAAA;AAAA,UACA,WAAW,IAAA,CAAK;AAAA,SAClB;AACA,QAAA,IAAA,CAAK,UAAA,CAAW,SAAS,MAAM,CAAA;AAAA,MACjC;AAAA,IACF;AACA,IAAA,IAAA,CAAK,qBAAA,CAAsB,KAAK,MAAM,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,sBAAsB,MAAA,EAAuC;AAC3D,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,YAAA,KAAiB,CAAA,EAAG;AACpC,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,IAAA,KAAA,MAAW,CAAC,IAAI,CAAA,IAAK,IAAA,CAAK,OAAO,OAAA,EAAQ,EAAG,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AAC/D,IAAA,KAAA,MAAW,CAAC,OAAA,EAAS,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACrD,MAAA,IAAI,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,OAAO,CAAA,EAAG;AAC3C,MAAA,IAAI,kBAAA,CAAmB,GAAA,CAAI,OAAO,CAAA,EAAG;AACrC,MAAA,IAAI,CAAC,oBAAA,CAAqB,KAAK,CAAA,EAAG;AAClC,MAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,OAAA,EAAS,IAAA,CAAK,cAAc,CAAA;AAC/D,MAAA,IAAI,WAAW,GAAA,CAAI,OAAO,KAAK,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA,EAAG;AACzD,MAAA,IAAA,CAAK,mBAAA,CAAoB,IAAI,OAAO,CAAA;AACpC,MAAA,IAAA,CAAK,KAAA;AAAA,QACH,CAAA,yCAAA,EAA4C,OAAO,CAAA,qCAAA,EACvB,QAAQ,CAAA,4JAAA;AAAA,OAGtC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aAAa,MAAA,EAA+B;AAC1C,IAAA,MAAM,WAAA,GACJ,IAAA,CAAK,YAAA,KAAiB,MAAA,GAClB,YAAA,CAAa,KAAK,YAAA,EAAc,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,GACvD,MAAA;AACN,IAAA,IAAI,eAAe,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,aAAa,IAAI,CAAA;AAI1E,IAAA,IACE,YAAA,KAAiB,UACjB,MAAA,CAAO,MAAA,CAAO,sBAAsB,IAAA,IACpC,oBAAA,CAAqB,MAAA,CAAO,KAAK,CAAA,EACjC;AACA,MAAA,YAAA,GAAe,UAAA;AAAA,IACjB;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,YAAY,CAAA;AAC7C,IAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AAC1D,IAAA,MAAM,OAAA,GAAyB;AAAA,MAC7B,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,QAAQ,IAAA,CAAK,cAAA;AAAA,MACb,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,IAAI;AACF,MAAA,IAAI,MAAA,CAAO,MAAA,CAAO,eAAA,KAAoB,KAAA,CAAA,EAAW;AAC/C,QAAA,MAAM,OAAA,GAAU,qBAAA;AAAA,UACd,OAAO,MAAA,CAAO,OAAA;AAAA,UACd,OAAO,MAAA,CAAO,eAAA;AAAA,UACd,MAAA,CAAO;AAAA,SACT;AACA,QAAA,IAAI,YAAY,SAAA,EAAW;AACzB,UAAA,IAAA,CAAK,KAAA;AAAA,YACH,0CAA0C,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,kBAAA,EAC5C,MAAA,CAAO,OAAO,eAAe,CAAA,6BAAA;AAAA,WACpD;AAAA,QACF;AAAA,MACF,WAAW,QAAA,EAAU;AACnB,QAAA,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,OAAO,OAAO,CAAA;AAAA,MACtD,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,IAAA,CAAK,mBAAmB,YAAY,CAAA;AAAA,MAC3C;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,KAAA,GAAQ,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAChE,MAAA,KAAK,IAAA,CAAK,SAAS,IAAA,CAAK,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,EAAS,YAAY,CAAA;AAC/D,MAAA;AAAA,IACF;AACA,IAAA,KAAK,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,eAAA,EAAiB;AAAA,MACvC,OAAA,EAAS,OAAO,MAAA,CAAO,OAAA;AAAA,MACvB,SAAA,EAAW,OAAO,MAAA,CAAO,SAAA;AAAA,MACzB,aAAA,EAAe,QAAA;AAAA,MACf,WAAW,MAAA,CAAO;AAAA,KACnB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAA,CAAkB,QAAuB,UAAA,EAA2C;AAClF,IAAA,IAAI,MAAA,CAAO,iBAAA,EAAmB,OAAO,MAAA,CAAO,SAAA;AAC5C,IAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,MAAA,MAAM,MAAA,GAAS,sBAAsB,UAAU,CAAA;AAC/C,MAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AAAA,IACnC;AACA,IAAA,OAAO,MAAA,CAAO,SAAA;AAAA,EAChB;AAAA,EAEA,SAAS,KAAA,EAAyB;AAChC,IAAA,IAAI,KAAA,CAAM,OAAA,KAAY,CAAA,IAAK,KAAA,CAAM,aAAa,CAAA,EAAG;AACjD,IAAA,IAAI,MAAM,OAAA,GAAU,CAAA,OAAQ,KAAA,EAAO,cAAA,CAAe,MAAM,OAAO,CAAA;AAC/D,IAAA,KAAK,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe;AAAA,MACrC,IAAA,EAAM;AAAA,QACJ,QAAQ,EAAC;AAAA,QACT,GAAI,KAAK,cAAA,KAAmB,MAAA,GAAY,EAAE,MAAA,EAAQ,IAAA,CAAK,cAAA,EAAe,GAAI;AAAC,OAC7E;AAAA,MACA,cAAc,KAAA,CAAM,OAAA;AAAA,MACpB,YAAY,KAAA,CAAM;AAAA,KACnB,CAAA;AAAA,EACH;AAAA,EAEA,mBAAA,GAA4B;AAC1B,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,gBAAA,EAAiB,EAAG;AAClC,MAAA,IAAA,CAAK,OAAO,oBAAA,EAAqB;AACjC,MAAA,KAAK,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,YAAA,EAAc,EAAE,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAAA,IACpF;AACA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,uBAAA,IAA0B;AAAA,IACjC,SAAS,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,IAAA,CAAK,kCAAkC,GAAG,CAAA;AAAA,IACjD;AACA,IAAA,IAAA,CAAK,UAAA,CAAW,KAAK,aAAa,CAAA;AAAA,EACpC;AACF,CAAA;AAEA,SAAS,WAAW,OAAA,EAA+C;AACjE,EAAA,IAAI,OAAA,CAAQ,UAAA,KAAe,KAAA,EAAO,OAAO,IAAA;AACzC,EAAA,OAAO,OAAA,CAAQ,eAAe,MAAA,GAC1B,IAAI,cAAc,OAAA,CAAQ,UAAU,CAAA,GACpC,IAAI,aAAA,EAAc;AACxB;AAEA,SAAS,UAAA,GAAmB;AAE5B;AAQA,SAAS,qBAAqB,KAAA,EAAyB;AACrD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,IAAI,EAAE,MAAA,IAAU,KAAA,CAAA,EAAQ,OAAO,KAAA;AAC/B,EAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AACnB,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,MAAM,OAAO,KAAA;AACtD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAS,IAAA,CAAgC,QAAQ,CAAA;AAChE;AAQA,SAAS,eAAe,IAAA,EAAuB;AAC7C,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,IAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,EACtB;AACF;AAMA,SAAS,iBAAiB,OAAA,EAAkC;AAC1D,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,OAAO,MAAA,KAAW,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,OAAO,MAAM,CAAA;AACxD,EAAA,IAAI,OAAO,MAAA,YAAkB,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,OAAO,MAAM,CAAA;AAC/D,EAAA,UAAA,CAAW,SAAA,CAAU,SAAS,OAAO,CAAA;AACvC;AASA,IAAM,+BAAe,IAAI,GAAA,CAAI,CAAC,WAAA,EAAa,WAAA,EAAa,aAAa,CAAC,CAAA;AAQtE,IAAM,kBAAA,uBAA8C,GAAA,CAAI;AAAA,EACtD,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAC,CAAA;AAOD,SAAS,qBAAqB,KAAA,EAAyB;AACrD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,KAAA;AAClD,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,YACjB,OAAO,KAAA,KAAU,SAAA,IACjB,OAAO,KAAA,KAAU,QAAA;AAErB;AAQA,SAAS,iBAAA,CAAkB,MAAc,MAAA,EAAoC;AAC3E,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,MAAM,MAAA,GAAS,IAAI,MAAM,CAAA,CAAA;AACzB,EAAA,OAAO,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,GAAI,IAAA,CAAK,MAAM,CAAA,EAAG,CAAC,MAAA,CAAO,MAAM,CAAA,GAAI,IAAA;AACjE;AACO,SAAS,iBAAA,CACd,MAAA,EACA,IAAA,EACA,MAAA,EACS;AACT,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,EAAQ,IAAI,CAAA;AACpC,EAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AACjC,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC/B,IAAA,IAAI,OAAA,GAAmB,MAAA;AACvB,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA,EAAG,OAAO,MAAA;AACtC,MAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAO,OAAA,KAAY,UAAU,OAAO,MAAA;AAC5D,MAAA,OAAA,GAAW,QAAoC,OAAO,CAAA;AAAA,IACxD;AACA,IAAA,IAAI,OAAA,KAAY,QAAW,OAAO,OAAA;AAAA,EACpC;AACA,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,MAAM,YAAY,QAAA,CAAS,MAAA,EAAQ,GAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AACtD,IAAA,IAAI,SAAA,KAAc,QAAW,OAAO,SAAA;AAAA,EACtC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,QAAA,CAAS,KAA8B,GAAA,EAAsB;AACpE,EAAA,IAAI,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,MAAA;AAClC,EAAA,IAAI,CAAC,OAAO,SAAA,CAAU,cAAA,CAAe,KAAK,GAAA,EAAK,GAAG,GAAG,OAAO,MAAA;AAC5D,EAAA,OAAO,IAAI,GAAG,CAAA;AAChB;AAEA,SAAS,oBAAoB,OAAA,EAA2B;AACtD,EAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,OAAA,IAAW,OAAA,CAAQ,YAAY,UAAA,EAAY;AACjE,IAAA,OAAQ,OAAA,CAA6B,KAAA;AAAA,EACvC;AACA,EAAA,IAAI,OAAA,CAAQ,YAAY,KAAA,EAAO;AAC7B,IAAA,OAAQ,OAAA,CAA6B,GAAA;AAAA,EACvC;AACA,EAAA,OAAO,OAAA,CAAQ,WAAA;AACjB;;;ACvuBO,IAAM,eAAN,MAA8D;AAAA,EAC1D,QAAA,uBAAe,GAAA,EAAiC;AAAA,EAChD,KAAA,uBAAY,GAAA,EAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOtD,EAAA,CAAyB,OAAU,OAAA,EAA6C;AAC9E,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,QAAA,EAAU,OAAO,OAAqB,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAA,CAA2B,OAAU,OAAA,EAA6C;AAChF,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAA,EAAO,OAAO,OAAqB,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,GAAA,CAA0B,OAAU,OAAA,EAAsC;AACxE,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA,EAAG,OAAO,OAAqB,CAAA;AACtD,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA,EAAG,OAAO,OAAqB,CAAA;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,IAAA,CAA2B,KAAA,EAAU,OAAA,EAAiC;AAC1E,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACvC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,KAAA,MAAW,OAAA,IAAW,CAAC,GAAG,OAAO,CAAA,QAAS,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,OAAA,EAAS,KAAK,CAAA;AAAA,IAChF;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,IAAA,GAAO,CAAA,EAAG;AACzB,MAAA,MAAM,QAAA,GAAW,CAAC,GAAG,IAAI,CAAA;AACzB,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,KAAK,CAAA;AACvB,MAAA,KAAA,MAAW,WAAW,QAAA,EAAU,MAAM,KAAK,OAAA,CAAQ,OAAA,EAAS,SAAS,KAAK,CAAA;AAAA,IAC5E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,KAAA,EAA2B;AACvC,IAAA,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA,EAAG,IAAA,IAAQ,CAAA,KAAM,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA,EAAG,IAAA,IAAQ,CAAA,CAAA;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB,KAAA,EAA0B;AAC3C,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AACpB,MAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,OAAO,KAAK,CAAA;AAC1B,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAA,GAA6B;AAC3B,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAgB;AAClC,IAAA,KAAA,MAAW,OAAO,IAAA,CAAK,QAAA,CAAS,MAAK,EAAG,KAAA,CAAM,IAAI,GAAG,CAAA;AACrD,IAAA,KAAA,MAAW,OAAO,IAAA,CAAK,KAAA,CAAM,MAAK,EAAG,KAAA,CAAM,IAAI,GAAG,CAAA;AAClD,IAAA,OAAO,CAAC,GAAG,KAAK,CAAA;AAAA,EAClB;AAAA,EAEA,SAAA,CACE,MAAA,EACA,KAAA,EACA,OAAA,EACa;AACb,IAAA,IAAI,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAC1B,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,GAAA,uBAAU,GAAA,EAAI;AACd,MAAA,MAAA,CAAO,GAAA,CAAI,OAAO,GAAG,CAAA;AAAA,IACvB;AACA,IAAA,GAAA,CAAI,IAAI,OAAO,CAAA;AACf,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,EAAG,MAAA,CAAO,OAAO,CAAA;AAAA,IACnC,CAAA;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,CAAQ,OAAA,EAAqB,OAAA,EAAkB,KAAA,EAAkC;AACrF,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,OAAO,CAAA;AAAA,IACvB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,KAAA,GACJ,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA,GAAW,MAAA,CAAO,KAAK,CAAA,GAAI,SAAA;AAC3E,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,4BAAA,EAA+B,KAAK,CAAA,QAAA,CAAA,EAAY,GAAG,CAAA;AAAA,IACnE;AAAA,EACF;AACF;;;AC1HO,SAAS,UAAA,GAAsB;AACpC,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,EAAA,IAAI;AACF,IAAA,OAAO,MAAA,CAAO,SAAS,MAAA,CAAO,GAAA;AAAA,EAChC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAMO,SAAS,SAAA,GAAqB;AACnC,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,EAAA,OAAO,OAAO,MAAA,IAAU,IAAA;AAC1B;AAOO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,OAAO,UAAA,MAAgB,SAAA,EAAU;AACnC;AAYO,SAAS,SAAA,GAAqB;AACnC,EAAA,MAAM,UAAU,WAAA,EAAY;AAC5B,EAAA,IAAI,OAAA,KAAY,MAAA,EAAW,OAAO,OAAA,KAAY,YAAA;AAC9C,EAAA,MAAM,gBAAgB,iBAAA,EAAkB;AACxC,EAAA,IAAI,aAAA,KAAkB,QAAW,OAAO,aAAA;AACxC,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,MAAM,IAAA,GAAO,OAAO,QAAA,CAAS,QAAA;AAC7B,IAAA,IAAI,IAAA,KAAS,WAAA,IAAe,IAAA,KAAS,WAAA,EAAa,OAAO,IAAA;AAAA,EAC3D;AACA,EAAA,OAAO,KAAA;AACT;AAQO,SAAS,UAAU,IAAA,EAAkC;AAC1D,EAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAC9B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,GAAG,OAAO,KAAA;AAAA,EAC5D;AACA,EAAA,MAAM,OAAO,oBAAA,EAAqB;AAClC,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAI,CAAA;AACvB,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,GAAG,OAAO,KAAA;AAAA,EAC5D;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,WAAA,GAAkC;AACzC,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,EAAa,OAAO,MAAA;AAC3C,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AACpC,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA;AAC7C;AAEA,SAAS,iBAAA,GAAyC;AAChD,EAAA,MAAM,OAAO,oBAAA,EAAqB;AAClC,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,MAAM,GAAA,GAAM,KAAK,KAAK,CAAA;AACtB,EAAA,OAAO,OAAO,GAAA,KAAQ,SAAA,GAAY,GAAA,GAAM,MAAA;AAC1C;AAYA,IAAI,kBAAA;AAYJ,SAAS,oBAAA,GAA4D;AACnE,EAAA,IAAI,OAAO,wBAAA,KAA6B,WAAA,IAAe,wBAAA,EAA0B;AAC/E,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,kBAAA,KAAuB,MAAA,EAAW,OAAO,kBAAA,IAAsB,MAAA;AACnE,EAAA,kBAAA,GAAqB,IAAA;AACrB,EAAA,IAAI;AAEF,IAAA,MAAM,SAAS,IAAI,QAAA;AAAA,MACjB;AAAA,KACF;AACA,IAAA,MAAM,SAAS,MAAA,EAAO;AACtB,IAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACxC,MAAA,kBAAA,GAAqB,MAAA;AACrB,MAAA,OAAO,kBAAA;AAAA,IACT;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,MAAA;AACT;;;ACrHA,IAAM,iBAAA,GAAoB,iDAAA;AAC1B,IAAM,oBAAA,GAAuB,yBAAA;AAE7B,IAAM,aAAA,GAAgB;AAAA,EACpB,sBAAA;AAAA,EACA,6BAAA;AAAA,EACA;AACF,CAAA;AAyBO,IAAM,iBAAN,MAAqB;AAAA,EACjB,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,qBAAA;AAAA,EACT,aAAA;AAAA,EAEA,WAAA,CAAY,OAAA,GAAiC,EAAC,EAAG;AAC/C,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AACjC,IAAA,KAAA,MAAW,MAAA,IAAU,OAAA,CAAQ,iBAAA,IAAqB,EAAC,EAAG;AACpD,MAAA,MAAM,UAAA,GAAa,gBAAgB,MAAM,CAAA;AACzC,MAAA,IAAI,UAAA,KAAe,MAAA,EAAW,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA;AAAA,IACvD;AACA,IAAA,KAAA,MAAW,WAAW,aAAA,EAAe;AACnC,MAAA,MAAM,KAAA,GAAQ,UAAU,OAAO,CAAA;AAC/B,MAAA,IAAI,UAAU,MAAA,EAAW;AACzB,MAAA,KAAA,MAAW,GAAA,IAAO,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,EAAG;AAClC,QAAA,MAAM,UAAA,GAAa,gBAAgB,GAAG,CAAA;AACtC,QAAA,IAAI,UAAA,KAAe,MAAA,EAAW,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA;AAAA,MACvD;AAAA,IACF;AACA,IAAA,IAAA,CAAK,gBAAA,GAAmB,QAAA;AAExB,IAAA,MAAM,WAAA,GAAc,QAAQ,uBAAA,IAA2B,IAAA;AACvD,IAAA,IAAI,cAAA;AACJ,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,WACJ,OAAA,CAAQ,QAAA,KAAa,OAAO,QAAA,KAAa,WAAA,GAAc,SAAS,QAAA,GAAW,EAAA,CAAA;AAC7E,MAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,QAAQ,CAAA,CAAE,MAAA;AACjC,UAAA,IAAI,MAAA,IAAU,MAAA,KAAW,MAAA,EAAQ,cAAA,GAAiB,MAAA;AAAA,QACpD,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,eAAA,GAAkB,cAAA;AACvB,IAAA,IAAA,CAAK,wBAAwB,cAAA,KAAmB,MAAA;AAEhD,IAAA,MAAM,kBACH,OAAA,CAAQ,uBAAA,IAA2B,IAAA,MAAU,OAAA,CAAQ,gBAAgB,SAAA,EAAU,CAAA;AAClF,IAAA,IAAA,CAAK,eAAA,GAAkB,cAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,QAAQ,MAAA,EAAyB;AAC/B,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,MAAA,KAAW,QAAQ,OAAO,KAAA;AACrD,IAAA,IAAI,IAAA,CAAK,aAAA,KAAkB,MAAA,EAAW,OAAO,WAAW,IAAA,CAAK,aAAA;AAC7D,IAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,MAAM,GAAG,OAAO,IAAA;AAC9C,IAAA,IACE,IAAA,CAAK,iBAAiB,IAAA,KAAS,CAAA,IAC/B,KAAK,eAAA,KAAoB,MAAA,IACzB,MAAA,KAAW,IAAA,CAAK,eAAA,EAChB;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAK,eAAA,IAAmB,iBAAA,CAAkB,IAAA,CAAK,MAAM,GAAG,OAAO,IAAA;AACnE,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,WAAW,MAAA,EAAyB;AAClC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,MAAM,GAAG,OAAO,KAAA;AAClC,IAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,YAAA,GAAmC;AACjC,IAAA,MAAM,WAAW,IAAA,CAAK,aAAA;AACtB,IAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AACrB,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,YAAA,GAAmC;AACrC,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAA,GAAsB;AACpB,IAAA,IAAI,KAAK,aAAA,KAAkB,MAAA,EAAW,OAAO,CAAC,KAAK,aAAa,CAAA;AAChE,IAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAY,IAAA,CAAK,gBAAgB,CAAA;AAEpD,IAAA,IAAI,KAAK,gBAAA,CAAiB,IAAA,KAAS,CAAA,IAAK,IAAA,CAAK,oBAAoB,MAAA,EAAW;AAC1E,MAAA,MAAA,CAAO,GAAA,CAAI,KAAK,eAAe,CAAA;AAAA,IACjC;AACA,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,KAAA,MAAW,QAAQ,yBAAA,EAA2B;AAC5C,QAAA,MAAA,CAAO,GAAA,CAAI,CAAA,iBAAA,EAAoB,MAAA,CAAO,IAAI,CAAC,CAAA,CAAE,CAAA;AAC7C,QAAA,MAAA,CAAO,GAAA,CAAI,CAAA,iBAAA,EAAoB,MAAA,CAAO,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MAC/C;AAAA,IACF;AACA,IAAA,OAAO,CAAC,GAAG,MAAM,CAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,oBAAA,GAAgC;AAClC,IAAA,OAAO,IAAA,CAAK,qBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,wBAAA,GAAoC;AACtC,IAAA,IAAI,CAAC,UAAA,EAAW,EAAG,OAAO,KAAA;AAC1B,IAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,IAAA,GAAO,CAAA,EAAG,OAAO,KAAA;AAC3C,IAAA,IAAI,IAAA,CAAK,iBAAiB,OAAO,KAAA;AACjC,IAAA,IAAI,IAAA,CAAK,eAAA,KAAoB,MAAA,EAAW,OAAO,KAAA;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAI,mBAAA,GAA+B;AACjC,IAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,IAAA,GAAO,CAAA,EAAG,OAAO,KAAA;AAC3C,IAAA,IAAI,IAAA,CAAK,iBAAiB,OAAO,KAAA;AACjC,IAAA,OAAO,KAAK,eAAA,KAAoB,MAAA;AAAA,EAClC;AACF;AAOA,IAAM,yBAAA,GAA+C;AAAA,EACnD,GAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM;AACpE,CAAA;AAMO,SAAS,gBAAgB,KAAA,EAAmC;AACjE,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AACjC,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAO,CAAA;AAC3B,IAAA,IAAI,IAAI,QAAA,KAAa,OAAA,IAAW,GAAA,CAAI,QAAA,KAAa,UAAU,OAAO,KAAA,CAAA;AAClE,IAAA,IAAI,CAAC,oBAAA,CAAqB,IAAA,CAAK,GAAA,CAAI,MAAM,GAAG,OAAO,KAAA,CAAA;AACnD,IAAA,OAAO,GAAA,CAAI,MAAA;AAAA,EACb,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;ACtOO,IAAM,gBAAN,MAAoB;AAAA,EAChB,OAAA;AAAA,EACA,OAAA;AAAA,EACA,iBAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA,uBAAe,GAAA,EAA+B;AAAA,EAC9C,WAAA,uBAAkB,GAAA,EAA8B;AAAA,EAEzD,YAAY,OAAA,EAA+B;AACzC,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,MAAA;AACvB,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,MAAA;AACvB,IAAA,IAAA,CAAK,oBAAoB,OAAA,CAAQ,qBAAA;AACjC,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,GAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SAAS,MAAA,EAA0C;AACvD,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AAClC,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,QAAA,EAAW,MAAA,CAAO,IAAI,CAAA,oBAAA,CAAsB,CAAA;AACtD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAyB;AAAA,MAC7B,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,qBAAA,EAAuB,CAAC,QAAA,KAAa;AACnC,QAAA,IAAA,CAAK,kBAAkB,QAAQ,CAAA;AAAA,MACjC,CAAA;AAAA,MACA,iBAAA,EAAmB,CAAC,SAAA,EAAW,SAAA,KAAc;AAC3C,QAAA,IAAA,CAAK,aAAA,CAAc,WAAW,SAAS,CAAA;AAAA,MACzC,CAAA;AAAA,MACA,SAAA,EAAW,MAAM,IAAA,CAAK,OAAA;AAAA,MACtB,GAAA,EAAK,IAAI,IAAA,KAAS;AAChB,QAAA,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAA,CAAA,CAAA,EAAK,GAAG,IAAI,CAAA;AAAA,MACvC;AAAA,KACF;AACA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,CAAO,KAAK,OAAO,CAAA;AACzB,MAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACrC,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,QAAA,EAAW,MAAA,CAAO,IAAI,CAAA,YAAA,CAAc,CAAA;AAAA,IAChD,SAAS,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,QAAA,EAAW,MAAA,CAAO,IAAI,kBAAkB,GAAG,CAAA;AAAA,IACvD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,IAAA,EAA6B;AAC5C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AACrC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,IAAA,CAAK,QAAA,CAAS,OAAO,IAAI,CAAA;AACzB,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,OAAA,EAAQ;AAAA,MACvB,SAAS,GAAA,EAAK;AACZ,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,QAAA,EAAW,IAAI,CAAA,iBAAA,CAAA,EAAqB,GAAG,CAAA;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAA,GAA4B;AAChC,IAAA,MAAM,QAAQ,CAAC,GAAG,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AACtC,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,EAAO,MAAM,IAAA,CAAK,WAAW,IAAI,CAAA;AACpD,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAA,CACE,SAAA,EACA,KAAA,EACA,OAAA,EACS;AACT,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,SAAS,CAAA;AACjD,IAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,GAAG,OAAO,KAAA;AACnD,IAAA,IAAI,MAAA,GAAkB,KAAA;AACtB,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,UAAU,MAAA,EAAQ;AAAA,UACzB,SAAA;AAAA,UACA,SAAS,OAAA,CAAQ,OAAA;AAAA,UACjB,WAAW,OAAA,CAAQ;AAAA,SACpB,CAAA;AAAA,MACH,SAAS,GAAA,EAAK;AACZ,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,eAAA,EAAkB,SAAS,CAAA,QAAA,CAAA,EAAY,GAAG,CAAA;AACpD,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA,EAGA,IAAA,GAA0B;AACxB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAAA,EACjC;AAAA;AAAA,EAGA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,QAAA,CAAS,IAAA;AAAA,EACvB;AAAA,EAEA,aAAA,CAAc,WAAmB,SAAA,EAAiC;AAChE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,SAAS,CAAA;AAC/C,IAAA,IAAI,QAAA,EAAU,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AAAA,cAC3B,WAAA,CAAY,GAAA,CAAI,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,EAClD;AACF,CAAA;;;AC1GA,IAAM,YAAA,uBAAwC,GAAA,CAAI;AAAA,EAChD,GAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAOD,IAAM,iBAAA,uBAA6C,GAAA,CAAI;AAAA,EACrD,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,WAAA,uBAAuC,GAAA,CAAI;AAAA,EAC/C,IAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,gBAAA,GAAmB,OAAA;AACzB,IAAM,gBAAA,GAAmB,OAAA;AAEzB,IAAM,WAAA,GAA6D;AAAA,EACjE,CAAA,kBAAG,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,UAAU,KAAA,EAAO,UAAA,EAAY,UAAA,EAAY,MAAM,CAAC,CAAA;AAAA,EACpE,GAAA,kBAAK,IAAI,GAAA,CAAI,CAAC,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,QAAA,EAAU,SAAA,EAAW,UAAU,CAAC,CAAA;AAAA,EACxF,OAAA,kBAAS,IAAI,GAAA,CAAI,EAAE,CAAA;AAAA,EACnB,MAAA,sBAAY,GAAA,CAAI,CAAC,OAAO,QAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAC,CAAA;AAAA,EAC3D,KAAA,kBAAO,IAAI,GAAA,CAAI,CAAC,KAAA,EAAO,YAAY,UAAA,EAAY,MAAA,EAAQ,OAAA,EAAS,SAAS,CAAC,CAAA;AAAA,EAC1E,KAAA,sBAAW,GAAA,CAAI;AAAA,IACb,KAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AAAA,EACD,IAAA,kBAAM,IAAI,GAAA,CAAI,CAAC,UAAU,CAAC,CAAA;AAAA,EAC1B,IAAA,kBAAM,IAAI,GAAA,CAAI,CAAC,OAAO,CAAC,CAAA;AAAA,EACvB,CAAA,kBAAG,IAAI,GAAA,CAAI,CAAC,MAAM,CAAC,CAAA;AAAA,EACnB,UAAA,kBAAY,IAAI,GAAA,CAAI,CAAC,MAAM,CAAC,CAAA;AAAA,EAC5B,KAAA,kBAAO,IAAI,GAAA,CAAI,CAAC,SAAS,CAAC,CAAA;AAAA,EAC1B,EAAA,sBAAQ,GAAA,CAAI,CAAC,WAAW,SAAA,EAAW,OAAA,EAAS,SAAA,EAAW,MAAM,CAAC,CAAA;AAAA,EAC9D,oBAAI,IAAI,GAAA,CAAI,CAAC,SAAA,EAAW,SAAA,EAAW,SAAS,CAAC,CAAA;AAAA,EAC7C,GAAA,kBAAK,IAAI,GAAA,CAAI,CAAC,MAAM,CAAC,CAAA;AAAA,EACrB,QAAA,kBAAU,IAAI,GAAA,CAAI,CAAC,MAAM,CAAC,CAAA;AAAA,EAC1B,oBAAI,IAAI,GAAA,CAAI,CAAC,OAAA,EAAS,UAAA,EAAY,MAAM,CAAC,CAAA;AAAA,EACzC,EAAA,kBAAI,IAAI,GAAA,CAAI,CAAC,OAAO,CAAC,CAAA;AAAA,EACrB,IAAA,kBAAM,IAAI,GAAA,CAAI,CAAC,OAAO,CAAC,CAAA;AAAA,EACvB,GAAA,kBAAK,IAAI,GAAA,CAAI,CAAC,OAAO,CAAC;AACxB,CAAA;AAEA,IAAMC,eAAAA,uBAA0C,GAAA,CAAI,CAAC,QAAQ,KAAA,EAAO,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAQ9E,IAAM,yBAAA,GAAN,cAAwC,KAAA,CAAM;AAAA,EACjC,IAAA,GAAO,2BAAA;AAC3B,CAAA;AAcA,SAAS,cAAc,OAAA,EAAsD;AAC3E,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAMC,QAAAA,uBAAc,GAAA,EAAiC;AACrD,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAGA,QAAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAC9E,IAAA,OAAO,EAAE,WAAA,EAAa,YAAA,EAAc,SAAA,EAAWA,QAAAA,EAAQ;AAAA,EACzD;AACA,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,YAAY,CAAA;AACpC,EAAA,KAAA,MAAW,OAAO,OAAA,CAAQ,qBAAA,IAAyB,EAAC,EAAG,OAAA,CAAQ,IAAI,GAAG,CAAA;AACtE,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAiC;AACrD,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAC9E,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,CAAO,QAAQ,OAAA,CAAQ,2BAAA,IAA+B,EAAE,CAAA,EAAG;AACpF,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAChC,IAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,QAAA,IAAY,EAAE,CAAA;AACrC,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AACzC,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,EAAE,WAAA,EAAa,OAAA,EAAS,SAAA,EAAW,OAAA,EAAQ;AACpD;AAcA,IAAI,gBAAA;AA0BG,SAAS,qBAAqB,GAAA,EAAqC;AACxE,EAAA,gBAAA,GAAmB,GAAA,IAAO,MAAA;AAC5B;AAWO,SAAS,YAAA,CAAa,MAAc,OAAA,EAAmC;AAC5E,EAAA,MAAM,MAAM,eAAA,EAAgB;AAC5B,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,yBAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AACA,EAAA,IAAI,IAAA,KAAS,IAAI,OAAO,EAAA;AAExB,EAAA,MAAM,MAAA,GAAS,cAAc,OAAO,CAAA;AACpC,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,CAAc,UAAU,CAAA;AAC7C,EAAA,QAAA,CAAS,SAAA,GAAY,IAAA;AACrB,EAAA,gBAAA,CAAiB,QAAA,CAAS,SAAS,MAAM,CAAA;AACzC,EAAA,OAAO,QAAA,CAAS,SAAA;AAClB;AAEA,SAAS,eAAA,GAAiD;AACxD,EAAA,IAAI,kBAAkB,OAAO,gBAAA;AAC7B,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,MAAA;AAC5C,EAAA,OAAO,QAAA;AACT;AAUO,SAAS,oBAAA,GAAgC;AAC9C,EAAA,OAAO,iBAAgB,KAAM,MAAA;AAC/B;AAEA,SAAS,gBAAA,CAAiB,MAAkB,MAAA,EAA8B;AAExE,EAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,EAAG;AAC/C,IAAA,IAAI,KAAA,CAAM,QAAA,KAAa,IAAA,CAAK,YAAA,EAAc;AACxC,MAAA,eAAA,CAAgB,OAAkB,MAAM,CAAA;AAAA,IAC1C,CAAA,MAAA,IAAW,KAAA,CAAM,QAAA,KAAa,IAAA,CAAK,YAAA,EAAc;AAC/C,MAAA,KAAA,CAAM,MAAA,EAAO;AAAA,IACf;AAAA,EACF;AACF;AAEA,SAAS,eAAA,CAAgB,SAAkB,MAAA,EAA8B;AACvE,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAY;AAExC,EAAA,IAAI,iBAAA,CAAkB,GAAA,CAAI,GAAG,CAAA,EAAG;AAC9B,IAAA,OAAA,CAAQ,MAAA,EAAO;AACf,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA,EAAG;AAEhC,IAAA,gBAAA,CAAiB,SAAS,MAAM,CAAA;AAChC,IAAA,MAAM,SAAS,OAAA,CAAQ,UAAA;AACvB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,QAAQ,UAAA,EAAY,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,YAAY,OAAO,CAAA;AAC1E,MAAA,OAAA,CAAQ,MAAA,EAAO;AAAA,IACjB;AACA,IAAA;AAAA,EACF;AAEA,EAAA,kBAAA,CAAmB,OAAA,EAAS,KAAK,MAAM,CAAA;AAGvC,EAAA,IAAI,GAAA,KAAQ,GAAA,EAAK,YAAA,CAAa,OAAO,CAAA;AAErC,EAAA,gBAAA,CAAiB,SAAS,MAAM,CAAA;AAClC;AAEA,SAAS,kBAAA,CAAmB,OAAA,EAAkB,GAAA,EAAa,MAAA,EAA8B;AACvF,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAEzC,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,EAAG;AACjD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY;AAGnC,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG;AACzB,MAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,IAAI,CAAA;AACjC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,IAAI,CAAA;AACjC,MAAA;AAAA,IACF;AAIA,IAAA,IACE,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA,IACpB,IAAA,CAAK,UAAA,CAAW,gBAAgB,CAAA,IAChC,IAAA,CAAK,UAAA,CAAW,gBAAgB,CAAA,EAChC;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAA,EAAU,GAAA,CAAI,IAAI,CAAA,EAAG;AACvB,MAAA,IAAID,eAAAA,CAAe,IAAI,IAAI,CAAA,IAAK,CAAC,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,EAAG;AACtD,QAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,IAAI,CAAA;AAAA,MACnC,WAAW,IAAA,KAAS,QAAA,IAAY,CAAC,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA,EAAG;AACzD,QAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,IAAI,CAAA;AAAA,MACnC;AACA,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,IAAI,CAAA;AAAA,EACnC;AACF;AASA,SAAS,aAAa,KAAA,EAAwB;AAC5C,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAClC,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAM,MAAM,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,CAAC,EAAE,CAAC,CAAA;AACrC,IAAA,IAAI,GAAA,KAAQ,UAAa,GAAA,CAAI,MAAA,KAAW,KAAK,CAAC,SAAA,CAAU,GAAG,CAAA,EAAG,OAAO,KAAA;AAAA,EACvE;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aAAa,MAAA,EAAuB;AAC3C,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,YAAA,CAAa,MAAM,CAAA;AACvC,EAAA,IAAI,CAAC,IAAA,EAAM;AACX,EAAA,IAAI,CAAC,iBAAA,CAAkB,IAAI,CAAA,EAAG;AAC9B,EAAA,MAAA,CAAO,YAAA,CAAa,OAAO,qBAAqB,CAAA;AAChD,EAAA,IAAI,CAAC,OAAO,YAAA,CAAa,QAAQ,GAAG,MAAA,CAAO,YAAA,CAAa,UAAU,QAAQ,CAAA;AAC5E;;;ACnWA,IAAM,QAAA,uBAAe,GAAA,EAA0B;AAKxC,SAAS,QAAA,CAAS,MAAc,QAAA,EAA8B;AACnE,EAAA,QAAA,CAAS,GAAA,CAAI,MAAM,QAAQ,CAAA;AAC7B;AAGO,SAAS,OAAO,IAAA,EAAwC;AAC7D,EAAA,OAAO,QAAA,CAAS,IAAI,IAAI,CAAA;AAC1B;;;AChDA,IAAM,iBAAA,GAAsD;AAAA,EAC1D,CAAA,EAAG,MAAA;AAAA,EACH,CAAA,EAAG,QAAA;AAAA,EACH,CAAA,EAAG,OAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAEA,IAAM,gBAAA,mBAAmB,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,UAAU,OAAA,EAAS,SAAA,EAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AAQhF,SAAS,iBAAiB,IAAA,EAAuC;AACtE,EAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,iBAAiB,GAAA,CAAI,GAAG,GAAG,OAAO,GAAA;AACjE,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,MAAA,GAAS,kBAAkB,GAAG,CAAA;AACpC,IAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AAAA,EACnC;AACA,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,cAAc,IAAA,EAA2B;AACvD,EAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,EAAA,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,GAAS,IAAI,MAAA,GAAS,CAAA;AAC7D;AAKO,SAAS,aAAa,IAAA,EAA2B;AACtD,EAAA,IAAI,IAAA,CAAK,SAAA,KAAc,KAAA,EAAO,OAAO,YAAA;AACrC,EAAA,IAAI,IAAA,CAAK,SAAA,KAAc,KAAA,EAAO,OAAO,YAAA;AACrC,EAAA,OAAO,EAAA;AACT;AAMO,SAAS,eAAe,IAAA,EAA2B;AACxD,EAAA,MAAM,KAAA,GAAQ,iBAAiB,IAAI,CAAA;AACnC,EAAA,MAAM,MAAA,GAAS,cAAc,IAAI,CAAA;AACjC,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,UAAU,MAAA,EAAW,MAAA,CAAO,IAAA,CAAK,CAAA,WAAA,EAAc,KAAK,CAAA,CAAE,CAAA;AAC1D,EAAA,IAAI,MAAA,GAAS,GAAG,MAAA,CAAO,IAAA,CAAK,wBAAwB,MAAA,CAAO,MAAA,GAAS,EAAE,CAAC,CAAA,EAAA,CAAI,CAAA;AAC3E,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAChC,EAAA,OAAO,CAAA,QAAA,EAAW,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AACpC;;;ACnDA,IAAM,YAAA,GAAiD,OAAO,MAAA,CAAO;AAAA,EACnE,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,QAAA;AAAA,EACL,GAAA,EAAK,QAAA;AAAA,EACL,GAAA,EAAK,QAAA;AAAA,EACL,GAAA,EAAK,QAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAC,CAAA;AAED,IAAM,mBAAA,GAAsB,aAAA;AAUrB,SAAS,WAAW,IAAA,EAAsB;AAC/C,EAAA,IAAI,IAAA,KAAS,IAAI,OAAO,EAAA;AAIxB,EAAA,OAAO,KAAK,OAAA,CAAQ,mBAAA,EAAqB,CAAC,IAAA,KAAS,YAAA,CAAa,IAAI,CAAW,CAAA;AACjF;AAUO,SAAS,aAAa,KAAA,EAAuB;AAClD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAa,MAAM,CAAA;AAC1C;AAEA,IAAM,YAAA,GAAiD,OAAO,MAAA,CAAO;AAAA,EACnE,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,QAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAC,CAAA;AAED,IAAM,mBAAA,GAAsB,UAAA;AAWrB,SAAS,oBAAoB,KAAA,EAAuB;AACzD,EAAA,IAAI,KAAA,KAAU,IAAI,OAAO,EAAA;AAEzB,EAAA,OAAO,MAAM,OAAA,CAAQ,mBAAA,EAAqB,CAAC,IAAA,KAAS,YAAA,CAAa,IAAI,CAAW,CAAA;AAClF;AASO,SAAS,mBAAmB,IAAA,EAAsB;AACvD,EAAA,OAAO,UAAA,CAAW,IAAI,CAAA,CAAE,OAAA,CAAQ,eAAe,MAAM,CAAA;AACvD;;;ACrEO,IAAM,UAAA,GAAa;AAAA,EACxB,IAAA,EAAM,CAAA;AAAA,EACN,MAAA,EAAQ,CAAA;AAAA,EACR,aAAA,EAAe,CAAA;AAAA,EACf,SAAA,EAAW,CAAA;AAAA,EACX,IAAA,EAAM,EAAA;AAAA,EACN,SAAA,EAAW,EAAA;AAAA,EACX,WAAA,EAAa,EAAA;AAAA,EACb,SAAA,EAAW;AACb,CAAA;;;ACXA,IAAM,YAAA,GAA6B,CAAC,IAAA,KAA8B;AAChE,EAAA,MAAM,MAAM,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,GAAW,KAAK,IAAA,GAAO,EAAA;AACxD,EAAA,IAAI,GAAA,GAAM,WAAW,GAAG,CAAA;AACxB,EAAA,MAAME,UAAS,OAAO,IAAA,CAAK,MAAA,KAAW,QAAA,GAAW,KAAK,MAAA,GAAS,CAAA;AAC/D,EAAA,IAAA,CAAKA,UAAS,UAAA,CAAW,IAAA,MAAU,CAAA,EAAG,GAAA,GAAM,SAAS,GAAG,CAAA,OAAA,CAAA;AACxD,EAAA,IAAA,CAAKA,UAAS,UAAA,CAAW,IAAA,MAAU,CAAA,EAAG,GAAA,GAAM,WAAW,GAAG,CAAA,SAAA,CAAA;AAC1D,EAAA,IAAA,CAAKA,UAAS,UAAA,CAAW,MAAA,MAAY,CAAA,EAAG,GAAA,GAAM,OAAO,GAAG,CAAA,KAAA,CAAA;AACxD,EAAA,IAAA,CAAKA,UAAS,UAAA,CAAW,SAAA,MAAe,CAAA,EAAG,GAAA,GAAM,MAAM,GAAG,CAAA,IAAA,CAAA;AAC1D,EAAA,IAAA,CAAKA,UAAS,UAAA,CAAW,aAAA,MAAmB,CAAA,EAAG,GAAA,GAAM,MAAM,GAAG,CAAA,IAAA,CAAA;AAC9D,EAAA,IAAA,CAAKA,UAAS,UAAA,CAAW,SAAA,MAAe,CAAA,EAAG,GAAA,GAAM,QAAQ,GAAG,CAAA,MAAA,CAAA;AAC5D,EAAA,IAAA,CAAKA,UAAS,UAAA,CAAW,WAAA,MAAiB,CAAA,EAAG,GAAA,GAAM,QAAQ,GAAG,CAAA,MAAA,CAAA;AAC9D,EAAA,IAAA,CAAKA,UAAS,UAAA,CAAW,SAAA,MAAe,CAAA,EAAG,GAAA,GAAM,SAAS,GAAG,CAAA,OAAA,CAAA;AAC7D,EAAA,OAAO,GAAA;AACT,CAAA;AAEA,QAAA,CAAS,QAAQ,YAAY,CAAA;;;ACnB7B,IAAM,iBAAA,GAAkC,CAAC,IAAA,EAAM,GAAA,KAAgB;AAC7D,EAAA,MAAM,WAAW,GAAA,CAAI,cAAA,CAAe,IAAA,CAAK,QAAA,IAAY,EAAE,CAAA;AACvD,EAAA,OAAO,CAAA,EAAA,EAAK,aAAa,IAAI,CAAC,GAAG,cAAA,CAAe,IAAI,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,IAAA,CAAA;AACnE,CAAA;AAEA,QAAA,CAAS,aAAa,iBAAiB,CAAA;;;ACHvC,IAAM,UAAA,mBAAa,IAAI,GAAA,CAAI,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAC,CAAA;AAE/D,IAAM,eAAA,GAAgC,CAAC,IAAA,EAAM,GAAA,KAAgB;AAC3D,EAAA,MAAM,MAAA,GAAS,OAAO,IAAA,CAAK,KAAK,CAAA,KAAM,WAAW,IAAA,CAAK,KAAK,CAAA,CAAE,WAAA,EAAY,GAAI,IAAA;AAC7E,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,GAAA,CAAI,MAAM,IAAI,MAAA,GAAS,IAAA;AAC9C,EAAA,MAAM,WAAW,GAAA,CAAI,cAAA,CAAe,IAAA,CAAK,QAAA,IAAY,EAAE,CAAA;AACvD,EAAA,OAAO,CAAA,CAAA,EAAI,GAAG,CAAA,EAAG,YAAA,CAAa,IAAI,CAAC,CAAA,EAAG,cAAA,CAAe,IAAI,CAAC,CAAA,CAAA,EAAI,QAAQ,KAAK,GAAG,CAAA,CAAA,CAAA;AAChF,CAAA;AAEA,QAAA,CAAS,WAAW,eAAe,CAAA;;;ACPnC,IAAM,YAAA,GAA6B,CAAC,IAAA,EAAM,GAAA,KAAgB;AACxD,EAAA,MAAM,QAAA,GAAW,OAAO,IAAA,CAAK,UAAU,MAAM,QAAA,GAAW,IAAA,CAAK,UAAU,CAAA,GAAI,QAAA;AAC3E,EAAA,MAAM,GAAA,GAAM,QAAA,KAAa,QAAA,GAAW,IAAA,GAAO,IAAA;AAC3C,EAAA,MAAM,YACJ,QAAA,KAAa,QAAA,IAAY,OAAO,IAAA,CAAK,OAAO,MAAM,QAAA,IAAY,IAAA,CAAK,OAAO,CAAA,GAAI,IAC1E,CAAA,QAAA,EAAW,MAAA,CAAO,KAAK,OAAO,CAAC,CAAC,CAAA,CAAA,CAAA,GAChC,EAAA;AACN,EAAA,MAAM,SAAA,GAAY,QAAA,KAAa,OAAA,GAAU,cAAA,GAAiB,EAAA;AAC1D,EAAA,MAAM,WAAW,GAAA,CAAI,cAAA,CAAe,IAAA,CAAK,QAAA,IAAY,EAAE,CAAA;AACvD,EAAA,OAAO,IAAI,GAAG,CAAA,EAAG,YAAA,CAAa,IAAI,CAAC,CAAA,EAAG,cAAA,CAAe,IAAI,CAAC,GAAG,SAAS,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,QAAQ,KAAK,GAAG,CAAA,CAAA,CAAA;AACxG,CAAA;AAEA,IAAM,gBAAA,GAAiC,CAAC,IAAA,EAAM,GAAA,KAAgB;AAC5D,EAAA,MAAM,WAAW,GAAA,CAAI,cAAA,CAAe,IAAA,CAAK,QAAA,IAAY,EAAE,CAAA;AACvD,EAAA,IAAI,OAAO,IAAA,CAAK,SAAS,CAAA,KAAM,SAAA,EAAW;AACxC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAS,CAAA,GAAI,MAAA,GAAS,OAAA;AACzC,IAAA,OAAO,qCAAqC,KAAK,CAAA,CAAA,EAAI,eAAe,IAAI,CAAC,IAAI,QAAQ,CAAA,KAAA,CAAA;AAAA,EACvF;AACA,EAAA,MAAM,SAAA,GACJ,OAAO,IAAA,CAAK,OAAO,MAAM,QAAA,GAAW,CAAA,QAAA,EAAW,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACxF,EAAA,OAAO,CAAA,GAAA,EAAM,YAAA,CAAa,IAAI,CAAC,CAAA,EAAG,cAAA,CAAe,IAAI,CAAC,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,QAAQ,CAAA,KAAA,CAAA;AAChF,CAAA;AAEA,QAAA,CAAS,QAAQ,YAAY,CAAA;AAC7B,QAAA,CAAS,YAAY,gBAAgB,CAAA;;;ACvBrC,IAAM,YAAA,GAA6B,CAAC,IAAA,EAAM,GAAA,KAAgB;AACxD,EAAA,MAAM,GAAA,GAAM,OAAO,IAAA,CAAK,KAAK,MAAM,QAAA,GAAW,IAAA,CAAK,KAAK,CAAA,GAAI,EAAA;AAC5D,EAAA,MAAM,WAAW,GAAA,CAAI,cAAA,CAAe,IAAA,CAAK,QAAA,IAAY,EAAE,CAAA;AAEvD,EAAA,IAAI,IAAI,MAAA,KAAW,CAAA,IAAK,CAAC,SAAA,CAAU,GAAG,GAAG,OAAO,QAAA;AAEhD,EAAA,MAAM,aAAa,iBAAA,CAAkB,GAAG,CAAA,GACpC,4CAAA,GACA,mBAAmB,IAAI,CAAA;AAC3B,EAAA,MAAM,SAAA,GACJ,OAAO,IAAA,CAAK,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,QAAA,EAAW,UAAA,CAAW,IAAA,CAAK,OAAO,CAAC,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AAChF,EAAA,OAAO,CAAA,SAAA,EAAY,oBAAoB,GAAG,CAAC,IAAI,UAAU,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,QAAQ,CAAA,IAAA,CAAA;AACnF,CAAA;AAOA,SAAS,mBAAmB,IAAA,EAAuC;AACjE,EAAA,MAAM,MAAA,GAAS,OAAO,IAAA,CAAK,QAAQ,MAAM,QAAA,GAAW,IAAA,CAAK,QAAQ,CAAA,GAAI,EAAA;AACrE,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAChC,EAAA,MAAM,UAAA,GAAa,WAAW,MAAM,CAAA;AACpC,EAAA,IAAI,MAAA,KAAW,UAAU,OAAO,CAAA,0CAAA,CAAA;AAChC,EAAA,OAAO,YAAY,UAAU,CAAA,CAAA,CAAA;AAC/B;AAEA,QAAA,CAAS,QAAQ,YAAY,CAAA;AAC7B,QAAA,CAAS,YAAY,YAAY,CAAA;;;ACnCjC,IAAM,aAAA,GAA8B,CAAC,IAAA,EAAM,GAAA,KAAgB;AACzD,EAAA,MAAM,WAAW,GAAA,CAAI,cAAA,CAAe,IAAA,CAAK,QAAA,IAAY,EAAE,CAAA;AACvD,EAAA,OAAO,CAAA,WAAA,EAAc,aAAa,IAAI,CAAC,GAAG,cAAA,CAAe,IAAI,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,aAAA,CAAA;AAC5E,CAAA;AAEA,QAAA,CAAS,SAAS,aAAa,CAAA;;;ACA/B,IAAM,YAAA,GAA6B,CAAC,IAAA,KAAiB;AACnD,EAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,OAAO,IAAA,CAAK,UAAU,MAAM,QAAA,GAAW,IAAA,CAAK,UAAU,CAAA,GAAI,EAAE,CAAA;AAC/F,EAAA,MAAM,KAAA,GAAQ,YAAY,IAAI,CAAA;AAC9B,EAAA,MAAM,SAAA,GAAY,QAAA,KAAa,EAAA,GAAK,EAAA,GAAK,oBAAoB,QAAQ,CAAA,CAAA,CAAA;AACrE,EAAA,OAAO,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,UAAA,CAAW,KAAK,CAAC,CAAA,aAAA,CAAA;AACpD,CAAA;AAEA,IAAM,qBAAA,GAAsC,CAAC,IAAA,KAAiB;AAC5D,EAAA,MAAM,OAAO,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,GAAW,KAAK,IAAA,GAAO,EAAA;AACzD,EAAA,MAAM,SAAA,GACJ,OAAO,IAAA,CAAK,eAAe,CAAA,KAAM,QAAA,GAC7B,CAAA,cAAA,EAAiB,iBAAA,CAAkB,IAAA,CAAK,eAAe,CAAC,CAAC,CAAA,CAAA,CAAA,GACzD,EAAA;AACN,EAAA,OAAO,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAA,EAAI,UAAA,CAAW,IAAI,CAAC,CAAA,OAAA,CAAA;AAC9C,CAAA;AAEA,QAAA,CAAS,QAAQ,YAAY,CAAA;AAC7B,QAAA,CAAS,kBAAkB,qBAAqB,CAAA;AAIhD,SAAS,YAAY,IAAA,EAA2B;AAC9C,EAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,SAAiB,IAAA,CAAK,IAAA;AAC/C,EAAA,IAAI,CAAC,IAAA,CAAK,QAAA,EAAU,OAAO,EAAA;AAC3B,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,QAAA,EAAU,GAAA,IAAO,YAAY,KAAK,CAAA;AAC3D,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,kBAAkB,KAAA,EAAuB;AAChD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,iBAAA,EAAmB,EAAE,CAAA;AAC5C;;;ACrCA,IAAM,oBAAkC,MAAM,MAAA;AAC9C,IAAM,yBAAuC,MAAM,MAAA;AACnD,IAAM,cAA4B,MAAM,GAAA;AAExC,QAAA,CAAS,aAAa,iBAAiB,CAAA;AACvC,QAAA,CAAS,kBAAkB,sBAAsB,CAAA;AACjD,QAAA,CAAS,OAAO,WAAW,CAAA;;;ACiB3B,IAAM,cAAA,GAA+B,CAAC,IAAA,KAAiB;AACrD,EAAA,MAAM,KAAA,GAAQ,gBAAgB,IAAI,CAAA;AAClC,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,EAAA;AAChC,EAAA,MAAM,MAAM,KAAA,CAAM,GAAA;AAClB,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,CAAC,SAAA,CAAU,GAAG,GAAG,OAAO,EAAA;AAEvD,EAAA,MAAM,OAAO,OAAO,KAAA,CAAM,QAAA,KAAa,QAAA,GAAW,MAAM,QAAA,GAAW,EAAA;AACnE,EAAA,IAAI,KAAK,UAAA,CAAW,QAAQ,GAAG,OAAO,WAAA,CAAY,OAAO,GAAG,CAAA;AAC5D,EAAA,IAAI,KAAK,UAAA,CAAW,QAAQ,GAAG,OAAO,WAAA,CAAY,OAAO,GAAG,CAAA;AAC5D,EAAA,IAAI,IAAA,KAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,WAAA,CAAY,KAAA,EAAO,GAAG,CAAA;AAC3E,EAAA,OAAO,kBAAA,CAAmB,OAAO,GAAG,CAAA;AACtC,CAAA;AAEA,QAAA,CAAS,UAAU,cAAc,CAAA;AAIjC,SAAS,gBAAgB,IAAA,EAAwD;AAC/E,EAAA,MAAM,GAAA,GAAM,KAAK,OAAO,CAAA;AACxB,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,MAAM,OAAO,MAAA;AACpD,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,WAAA,CAAY,OAAoB,GAAA,EAAqB;AAC5D,EAAA,MAAM,GAAA,GAAM,OAAO,KAAA,CAAM,GAAA,KAAQ,WAAW,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,GAAI,EAAA;AACpE,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,GAAW,WAAW,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACpF,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA,GAAW,YAAY,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACxF,EAAA,OAAO,CAAA,UAAA,EAAa,oBAAoB,GAAG,CAAC,UAAU,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,EAAG,MAAM,CAAA,iCAAA,CAAA;AAC7E;AAEA,SAAS,WAAA,CAAY,OAAoB,GAAA,EAAqB;AAC5D,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,GAAW,WAAW,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACpF,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA,GAAW,YAAY,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACxF,EAAA,MAAM,IAAA,GACJ,OAAO,KAAA,CAAM,QAAA,KAAa,QAAA,GAAW,UAAU,mBAAA,CAAoB,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AAC1F,EAAA,OAAO,CAAA,eAAA,EAAkB,KAAK,CAAA,EAAG,MAAM,iBAAiB,mBAAA,CAAoB,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,SAAA,CAAA;AAC1F;AAEA,SAAS,WAAA,CAAY,OAAoB,GAAA,EAAqB;AAC5D,EAAA,MAAM,IAAA,GACJ,OAAO,KAAA,CAAM,QAAA,KAAa,QAAA,GAAW,UAAU,mBAAA,CAAoB,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AAC1F,EAAA,OAAO,CAAA,6BAAA,EAAgC,mBAAA,CAAoB,GAAG,CAAC,IAAI,IAAI,CAAA,SAAA,CAAA;AACzE;AAEA,SAAS,kBAAA,CAAmB,OAAoB,GAAA,EAAqB;AACnE,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,CAAM,QAAA,KAAa,QAAA,GAAW,WAAW,KAAA,CAAM,QAAQ,CAAA,GAAI,UAAA,CAAW,GAAG,CAAA;AAC9F,EAAA,OAAO,CAAA,SAAA,EAAY,mBAAA,CAAoB,GAAG,CAAC,+CAA+C,KAAK,CAAA,IAAA,CAAA;AACjG;;;ACvDA,IAAM,oBAAA,GAAqC,CAAC,IAAA,KAAiB;AAC3D,EAAA,MAAM,UAAA,GAAa,OAAO,IAAA,CAAK,YAAY,MAAM,QAAA,GAAW,IAAA,CAAK,YAAY,CAAA,GAAI,EAAA;AACjF,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAC5B,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,EAAO,UAAU,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,WAAW,KAAK,CAAA;AAClC,EAAA,MAAM,UAAU,UAAA,KAAe,EAAA,GAAK,KAAK,CAAA,mBAAA,EAAsB,UAAA,CAAW,UAAU,CAAC,CAAA,CAAA,CAAA;AAErF,EAAA,MAAM,MAAM,KAAA,EAAO,GAAA;AACnB,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,SAAA,CAAU,GAAG,CAAA,EAAG;AAC7C,IAAA,OAAO,YAAY,mBAAA,CAAoB,GAAG,CAAC,CAAA,CAAA,EAAI,OAAO,IAAI,SAAS,CAAA,IAAA,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,CAAA,KAAA,EAAQ,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,OAAA,CAAA;AACrC,CAAA;AAEA,QAAA,CAAS,gBAAgB,oBAAoB,CAAA;AAI7C,SAAS,UAAU,IAAA,EAA8D;AAC/E,EAAA,MAAM,GAAA,GAAM,KAAK,OAAO,CAAA;AACxB,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,MAAM,OAAO,MAAA;AACpD,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,SAAA,CAAU,OAAsC,UAAA,EAA4B;AACnF,EAAA,IAAI,UAAU,MAAA,EAAW,OAAO,eAAe,EAAA,GAAK,GAAA,GAAM,IAAI,UAAU,CAAA,CAAA;AACxE,EAAA,IAAI,OAAO,MAAM,KAAA,KAAU,QAAA,IAAY,MAAM,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,OAAO,KAAA,CAAM,KAAA;AAC5E,EAAA,IAAI,OAAO,MAAM,IAAA,KAAS,QAAA,IAAY,MAAM,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,OAAO,KAAA,CAAM,IAAA;AAC1E,EAAA,IAAI,OAAO,MAAM,IAAA,KAAS,QAAA,IAAY,MAAM,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,OAAO,KAAA,CAAM,IAAA;AAC1E,EAAA,IAAI,MAAM,EAAA,KAAO,MAAA,EAAW,OAAO,MAAA,CAAO,MAAM,EAAE,CAAA;AAClD,EAAA,OAAO,UAAA,KAAe,EAAA,GAAK,GAAA,GAAM,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AACjD;;;ACfA,IAAMC,SAAAA,uBAAe,GAAA,EAA2B;AAGzC,SAAS,qBAAA,CAAsB,WAAmB,QAAA,EAA+B;AACtF,EAAAA,SAAAA,CAAS,GAAA,CAAI,SAAA,EAAW,QAAQ,CAAA;AAClC;AAGO,SAAS,oBAAoB,SAAA,EAA8C;AAChF,EAAA,OAAOA,SAAAA,CAAS,IAAI,SAAS,CAAA;AAC/B;;;ACrBA,IAAM,aAAA,GAA8B,CAAC,IAAA,EAAM,GAAA,KAAgB;AACzD,EAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,EAAA,MAAM,YAAA,GAAe,OAAO,MAAA,CAAO,WAAW,MAAM,QAAA,GAAW,MAAA,CAAO,WAAW,CAAA,GAAI,EAAA;AACrF,EAAA,MAAM,IAAA,GAAO,cAAc,YAAY,CAAA;AAEvC,EAAA,IAAI,iBAAiB,EAAA,EAAI;AACvB,IAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,YAAY,CAAA,IAAK,oBAAoB,IAAI,CAAA;AAC5E,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,OAAO,MAAA,EAAQ,EAAE,cAAA,EAAgB,GAAA,CAAI,gBAAgB,CAAA;AAAA,IAC9D;AAAA,EACF;AAEA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,IAAA,KAAS,IAAI,KAAA,CAAM,IAAA,CAAK,oBAAoB,UAAA,CAAW,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AACnE,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,IAAA,IAAI,GAAA,KAAQ,WAAA,IAAe,GAAA,KAAQ,IAAA,EAAM;AACzC,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AAC3C,IAAA,MAAM,WAAA,GACJ,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,YACvE,MAAA,CAAO,KAAK,CAAA,GACZ,IAAA,CAAK,UAAU,KAAK,CAAA;AAC1B,IAAA,KAAA,CAAM,IAAA,CAAK,cAAc,aAAA,CAAc,GAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,WAAW,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EAC5E;AACA,EAAA,MAAM,UAAA,GAAa,MAAM,MAAA,KAAW,CAAA,GAAI,KAAK,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAChE,EAAA,OAAO,OAAO,UAAU,CAAA,OAAA,CAAA;AAC1B,CAAA;AAEA,QAAA,CAAS,SAAS,aAAa,CAAA;AAI/B,SAAS,WAAW,IAAA,EAAwD;AAC1E,EAAA,MAAM,GAAA,GAAM,KAAK,QAAQ,CAAA;AACzB,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,IAAA,SAAa,EAAC;AACrD,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,cAAc,KAAA,EAAuB;AAC5C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,iBAAA,EAAmB,GAAG,EAAE,WAAA,EAAY;AAC3D;;;ACjCA,QAAA,CAAS,QAAQ,YAAY,CAAA;AAC7B,QAAA,CAAS,aAAa,iBAAiB,CAAA;AACvC,QAAA,CAAS,WAAW,eAAe,CAAA;AACnC,QAAA,CAAS,QAAQ,YAAY,CAAA;AAC7B,QAAA,CAAS,YAAY,gBAAgB,CAAA;AACrC,QAAA,CAAS,QAAQ,YAAY,CAAA;AAC7B,QAAA,CAAS,YAAY,YAAY,CAAA;AACjC,QAAA,CAAS,SAAS,aAAa,CAAA;AAC/B,QAAA,CAAS,QAAQ,YAAY,CAAA;AAC7B,QAAA,CAAS,kBAAkB,qBAAqB,CAAA;AAChD,QAAA,CAAS,aAAa,iBAAiB,CAAA;AACvC,QAAA,CAAS,kBAAkB,sBAAsB,CAAA;AACjD,QAAA,CAAS,OAAO,WAAW,CAAA;AAC3B,QAAA,CAAS,UAAU,cAAc,CAAA;AACjC,QAAA,CAAS,gBAAgB,oBAAoB,CAAA;AAC7C,QAAA,CAAS,SAAS,aAAa,CAAA;AAE/B,IAAM,cAAA,GAAoC;AAAA,EACxC,cAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA;AAaO,SAAS,iBAAiB,KAAA,EAAsC;AACrE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,IAAI,EAAE,MAAA,IAAU,KAAA,CAAA,EAAQ,OAAO,KAAA;AAC/B,EAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AACnB,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,MAAM,OAAO,KAAA;AACtD,EAAA,IAAI,EAAE,UAAA,IAAc,IAAA,CAAA,EAAO,OAAO,KAAA;AAClC,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AACpC;AAQO,SAAS,aAAA,CAAc,OAAA,EAAsB,OAAA,GAAgC,EAAC,EAAW;AAC9F,EAAA,IAAI,CAAC,gBAAA,CAAiB,OAAO,CAAA,EAAG,OAAO,EAAA;AACvC,EAAA,MAAM,IAAA,GAAO,cAAA,CAAe,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AACjD,EAAA,IAAI,OAAA,CAAQ,QAAA,KAAa,KAAA,EAAO,OAAO,IAAA;AAQvC,EAAA,IAAI,CAAC,oBAAA,EAAqB,EAAG,OAAO,IAAA;AACpC,EAAA,OAAO,aAAa,IAAI,CAAA;AAC1B;AAQO,SAAS,mBAAmB,OAAA,EAA8B;AAC/D,EAAA,IAAI,CAAC,gBAAA,CAAiB,OAAO,CAAA,EAAG,OAAO,EAAA;AACvC,EAAA,OAAO,OAAA,CAAQ,KAAK,QAAA,CAAS,GAAA,CAAI,gBAAgB,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA,EAAK;AACrE;AAEA,SAAS,eAAe,QAAA,EAA0C;AAChE,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,KAAA,IAAS,QAAA,EAAU,GAAA,IAAO,UAAA,CAAW,KAAK,CAAA;AACrD,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,WAAW,IAAA,EAA2B;AAC7C,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AACjC,EAAA,IAAI,QAAA,EAAU,OAAO,QAAA,CAAS,IAAA,EAAM,cAAc,CAAA;AAElD,EAAA,OAAO,KAAK,QAAA,KAAa,MAAA,GAAY,cAAA,CAAe,IAAA,CAAK,QAAQ,CAAA,GAAI,EAAA;AACvE;AAEA,SAAS,iBAAiB,IAAA,EAA2B;AACnD,EAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,SAAiB,IAAA,CAAK,IAAA;AAC/C,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,WAAA,EAAa,OAAO,IAAA;AACtC,EAAA,IAAI,IAAA,CAAK,QAAA,KAAa,MAAA,EAAW,OAAO,EAAA;AACxC,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,QAAA,EAAU,GAAA,IAAO,iBAAiB,KAAK,CAAA;AAChE,EAAA,OAAO,GAAA;AACT;;;AC3GA,IAAM,gBAAA,uBAAuB,GAAA,EAA8B;AAMpD,SAAS,qBAAA,CACd,MAAA,GAAmC,EAAC,EACK;AACzC,EAAA,KAAA,MAAW,YAAY,MAAA,EAAQ,gBAAA,CAAiB,GAAA,CAAI,QAAA,CAAS,MAAM,QAAQ,CAAA;AAC3E,EAAA,MAAM,MAAqC,EAAC;AAC5C,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,QAAQ,KAAK,gBAAA,EAAkB,GAAA,CAAI,IAAI,CAAA,GAAI,QAAA;AAC7D,EAAA,OAAO,MAAA,CAAO,OAAO,GAAG,CAAA;AAC1B;AAMO,SAAS,wBAAwB,QAAA,EAA+B;AACrE,EAAA,gBAAA,CAAiB,GAAA,CAAI,QAAA,CAAS,IAAA,EAAM,QAAQ,CAAA;AAC9C;;;AChBA,IAAM,qBAAA,GAAwB,mBAAA;AAC9B,IAAM,cAAA,uBAAqB,OAAA,EAAiB;AAE5C,IAAMC,aAAAA,GAA8B;AAAA,EAClC,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,CAAO,QAAQ,KAAA,EAAO;AACpB,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,IAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,OAAA,IAAW,OAAA,CAAQ,YAAY,UAAA,EAAY;AACjE,MAAC,QAAmD,KAAA,GAAQ,IAAA;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,IAAI,sBAAsB,OAAO,CAAA,IAAK,CAAC,OAAA,CAAQ,YAAA,CAAa,qBAAqB,CAAA,EAAG;AAClF,MAAA,QAAA,CAAS,OAAA,EAAS,OAAO,SAAS,CAAA;AAClC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAK,QAAA,CAAS,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9C,MAAA,OAAA,CAAQ,SAAA,GAAY,mBAAmB,IAAI,CAAA;AAC3C,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,WAAA,GAAc,IAAA;AAAA,EACxB;AACF,CAAA;AAEA,SAAS,sBAAsB,OAAA,EAA2B;AAIxD,EAAA,OAAO,QAAQ,iBAAA,KAAsB,IAAA;AACvC;AAEA,SAAS,QAAA,CAAS,SAAkB,SAAA,EAAyB;AAC3D,EAAA,IAAI,cAAA,CAAe,GAAA,CAAI,OAAO,CAAA,EAAG;AACjC,EAAA,cAAA,CAAe,IAAI,OAAO,CAAA;AAC1B,EAAA,OAAA,CAAQ,IAAA;AAAA,IACN,4CAA4C,SAAS,CAAA,oBAAA,EAC/C,OAAA,CAAQ,OAAA,CAAQ,aAAa,CAAA,+KAAA;AAAA,GAGrC;AACF;AAEA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,EAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG,OAAO,mBAAmB,KAAK,CAAA;AAC5D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW,OAAO,OAAO,KAAK,CAAA;AAChF,EAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC7B;AAEA,uBAAA,CAAwBA,aAAY,CAAA;;;AChE7B,SAAS,cAAc,KAAA,EAAwB;AACpD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,SAAA,IAAa,OAAO,UAAU,QAAA,EAAU;AACxF,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAA;AAAA,EACT;AACF;;;ACTA,IAAM,gBAAA,GAAkC;AAAA,EACtC,IAAA,EAAM,UAAA;AAAA,EACN,MAAA,CAAO,QAAQ,KAAA,EAAO;AACpB,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,MAAM,IAAA,GAAO,iBAAiB,KAAK,CAAA,GAAI,mBAAmB,KAAK,CAAA,GAAI,cAAc,KAAK,CAAA;AACtF,IAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,OAAA,IAAW,OAAA,CAAQ,YAAY,UAAA,EAAY;AACjE,MAAC,QAAmD,KAAA,GAAQ,IAAA;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,SAAA,GAAY,mBAAmB,IAAI,CAAA;AAAA,EAC7C;AACF,CAAA;AAEA,uBAAA,CAAwB,gBAAgB,CAAA;;;ACZxC,IAAM,gBAAA,GAAkC;AAAA,EACtC,IAAA,EAAM,UAAA;AAAA,EACN,MAAA,CAAO,QAAQ,KAAA,EAAO;AACpB,IAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,MAAA,MAAA,CAAO,OAAA,CAAQ,SAAA,GAAY,aAAA,CAAc,KAAK,CAAA;AAC9C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAA,CAAO,OAAA,CAAQ,SAAA,GAAY,YAAA,CAAa,KAAK,CAAA;AAAA,IAC/C;AAAA,EACF;AACF,CAAA;AAEA,uBAAA,CAAwB,gBAAgB,CAAA;;;ACdxC,IAAM,YAAA,GAA8B;AAAA,EAClC,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,CAAO,QAAQ,KAAA,EAAO;AACpB,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,MAAA,MAAA,CAAO,QAAQ,WAAA,GAAc,EAAA;AAC7B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,cAAc,KAAK,CAAA;AACpE,IAAA,MAAA,CAAO,OAAA,CAAQ,SAAA,GAAY,YAAA,CAAa,IAAI,CAAA;AAAA,EAC9C;AACF,CAAA;AAEA,uBAAA,CAAwB,YAAY,CAAA;;;ACZpC,IAAM,WAAA,GAA6B;AAAA,EACjC,IAAA,EAAM,KAAA;AAAA,EACN,MAAA,CAAO,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC7B,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,IAAA,IAAI,OAAA,CAAQ,YAAY,GAAA,EAAK;AAC3B,MAAA,MAAM,MAAA,GAAS,OAAA;AACf,MAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AACzB,MAAA,MAAM,UAAA,GAAa,SAAA,GAAY,OAAA,CAAQ,SAAA,CAAU,SAAS,CAAA,GAAI,KAAA;AAC9D,MAAA,IAAI,OAAO,UAAA,KAAe,QAAA,IAAY,SAAA,CAAU,UAAU,CAAA,EAAG;AAC3D,QAAA,MAAA,CAAO,IAAA,GAAO,UAAA;AAAA,MAChB;AACA,MAAA,MAAA,CAAO,WAAA,GAAc,IAAA;AACrB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,OAAA,IAAW,OAAA,CAAQ,YAAY,UAAA,EAAY;AACjE,MAAC,QAAmD,KAAA,GAAQ,IAAA;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,WAAA,GAAc,IAAA;AAAA,EACxB;AACF,CAAA;AAEA,uBAAA,CAAwB,WAAW,CAAA;AAInC,uBAAA,CAAwB,EAAE,GAAG,WAAA,EAAa,IAAA,EAAM,SAAS,CAAA;;;ACvBzD,IAAM,aAAA,GAA+B;AAAA,EACnC,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,CAAO,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC7B,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA;AAChC,IAAA,IAAI,QAAQ,MAAA,EAAW;AACvB,IAAA,IAAI,OAAA,CAAQ,YAAY,KAAA,EAAO;AAC7B,MAAA,MAAM,GAAA,GAAM,OAAA;AACZ,MAAA,GAAA,CAAI,GAAA,GAAM,GAAA;AACV,MAAA,MAAM,MAAM,OAAA,CAAQ,KAAA,EAAO,MAAA,CAAO,QAAA,EAAU,QAAQ,SAAS,CAAA;AAC7D,MAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,GAAA,CAAI,GAAA,GAAM,GAAA;AACjC,MAAA;AAAA,IACF;AACA,IAAC,QAAwB,KAAA,CAAM,eAAA,GAAkB,CAAA,KAAA,EAAQ,YAAA,CAAa,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,EAC5E;AACF,CAAA;AAEA,SAAS,UAAU,KAAA,EAA0C;AAC3D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,MAAA;AACxD,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,OAAA,CAAQ,OAAiC,KAAA,EAAoC;AACpF,EAAA,IAAI,KAAA,EAAO,QAAQ,MAAA,IAAa,SAAA,CAAU,MAAM,GAAG,CAAA,SAAU,KAAA,CAAM,GAAA;AACnE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,SAAA,CAAU,KAAK,GAAG,OAAO,KAAA;AAC1D,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,OAAA,CACP,KAAA,EACA,QAAA,EACA,SAAA,EACoB;AACpB,EAAA,IAAI,KAAA,EAAO,GAAA,KAAQ,MAAA,EAAW,OAAO,KAAA,CAAM,GAAA;AAC3C,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,MAAM,OAAA,GAAU,UAAU,QAAQ,CAAA;AAClC,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AAAA,EAC1C;AACA,EAAA,OAAO,MAAA;AACT;AAEA,uBAAA,CAAwB,aAAa,CAAA;;;AC9CrC,IAAMC,eAAAA,GAAgC;AAAA,EACpC,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,CAAO,QAAQ,KAAA,EAAO;AACpB,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,MAAM,KAAA,GAAQC,WAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,UAAU,MAAA,EAAW;AACzB,IAAA,MAAM,MAAM,KAAA,CAAM,GAAA;AAClB,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,CAAC,SAAA,CAAU,GAAG,CAAA,EAAG;AAChD,IAAA,IAAI,OAAA,CAAQ,YAAY,KAAA,EAAO;AAC7B,MAAA,MAAM,GAAA,GAAM,OAAA;AACZ,MAAA,GAAA,CAAI,GAAA,GAAM,GAAA;AACV,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,MAAA,EAAW,GAAA,CAAI,MAAM,KAAA,CAAM,GAAA;AAC7C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,YAAY,GAAA,EAAK;AAC3B,MAAA,MAAM,MAAA,GAAS,OAAA;AACf,MAAA,MAAA,CAAO,IAAA,GAAO,GAAA;AACd,MAAA,MAAA,CAAO,WAAA,GAAc,MAAM,QAAA,IAAY,GAAA;AACvC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,KAAa,MAAA,GAAY,WAAW,KAAA,CAAM,QAAQ,CAAA,GAAI,UAAA,CAAW,GAAG,CAAA;AACxF,IAAA,OAAA,CAAQ,YAAY,CAAA,SAAA,EAAY,mBAAA,CAAoB,GAAG,CAAC,KAAK,KAAK,CAAA,IAAA,CAAA;AAAA,EACpE;AACF,CAAA;AAEA,SAASA,WAAU,KAAA,EAA0C;AAC3D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,MAAA;AACxD,EAAA,OAAO,KAAA;AACT;AAEA,uBAAA,CAAwBD,eAAc,CAAA;;;AC3BtC,IAAME,qBAAAA,GAAsC;AAAA,EAC1C,IAAA,EAAM,cAAA;AAAA,EACN,MAAA,CAAO,QAAQ,KAAA,EAAO;AACpB,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,MAAM,MAAA,GAAS,cAAc,KAAK,CAAA;AAClC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC7B,IAAA,IAAI,QAAQ,OAAA,KAAY,GAAA,IAAO,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACpD,MAAA,MAAM,MAAA,GAAS,OAAA;AACf,MAAA,MAAM,MAAO,KAAA,EAAsC,GAAA;AACnD,MAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,UAAU,GAAG,CAAA,SAAU,IAAA,GAAO,GAAA;AAC7D,MAAA,MAAA,CAAO,WAAA,GAAc,IAAA;AACrB,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,WAAA,GAAc,IAAA;AAAA,EACxB;AACF,CAAA;AAEA,SAAS,cAAc,KAAA,EAAmC;AACxD,EAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,CAAC,EAAE,CAAA;AACrD,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA,CAAM,IAAIC,UAAS,CAAA;AACpD,EAAA,OAAO,CAACA,UAAAA,CAAU,KAAK,CAAC,CAAA;AAC1B;AAEA,SAASA,WAAU,KAAA,EAAwB;AACzC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,IAAI,OAAO,IAAI,KAAA,KAAU,QAAA,IAAY,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,OAAO,GAAA,CAAI,KAAA;AACtE,IAAA,IAAI,OAAO,IAAI,IAAA,KAAS,QAAA,IAAY,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,OAAO,GAAA,CAAI,IAAA;AACpE,IAAA,IAAI,OAAO,IAAI,IAAA,KAAS,QAAA,IAAY,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,OAAO,GAAA,CAAI,IAAA;AACpE,IAAA,IAAI,IAAI,EAAA,KAAO,MAAA,EAAW,OAAO,MAAA,CAAO,IAAI,EAAE,CAAA;AAC9C,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,cAAc,KAAK,CAAA;AAC5B;AAEA,uBAAA,CAAwBD,qBAAoB,CAAA;;;ACrC5C,IAAM,cAAA,GAAgC;AAAA,EACpC,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,CAAO,QAAQ,KAAA,EAAO;AACpB,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,IAAA,IAAI,OAAA,CAAQ,YAAY,QAAA,EAAU;AAChC,MAAC,QAA8B,KAAA,GAAQ,IAAA;AACvC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,OAAA,IAAY,OAAA,CAA6B,SAAS,OAAA,EAAS;AACjF,MAAA,MAAM,KAAA,GAAQ,OAAA;AACd,MAAA,KAAA,CAAM,OAAA,GAAU,MAAM,KAAA,KAAU,IAAA;AAChC,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,WAAA,GAAc,IAAA;AAAA,EACxB;AACF,CAAA;AAEA,SAAS,UAAU,KAAA,EAAwB;AACzC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,SAAU,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AACzE,EAAA,OAAO,cAAc,KAAK,CAAA;AAC5B;AAEA,uBAAA,CAAwB,cAAc,CAAA;AACtC,uBAAA,CAAwB,EAAE,GAAG,cAAA,EAAgB,IAAA,EAAM,SAAS,CAAA;;;AC3B5D,IAAM,gBAAA,GAAkC;AAAA,EACtC,IAAA,EAAM,UAAA;AAAA,EACN,MAAA,CAAO,QAAQ,KAAA,EAAO;AACpB,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,MAAM,OAAA,GAAU,QAAQ,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,OAAA,IAAY,OAAA,CAA6B,SAAS,UAAA,EAAY;AACpF,MAAC,QAA6B,OAAA,GAAU,OAAA;AACxC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,cAAc,CAAA,EAAG;AACxC,MAAA,OAAA,CAAQ,YAAA,CAAa,cAAA,EAAgB,OAAA,GAAU,MAAA,GAAS,OAAO,CAAA;AAC/D,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,WAAA,GAAc,UAAU,MAAA,GAAS,OAAA;AAAA,EAC3C;AACF,CAAA;AAEA,uBAAA,CAAwB,gBAAgB,CAAA;;;ACPxC,IAAM,YAAA,uBAAmB,GAAA,EAA+B;AACxD,IAAM,UAAA,uBAAiB,GAAA,EAAiC;AAExD,IAAM,mBAAA,GAAsB,EAAA;AAE5B,IAAI,UAAA,GAAa,mBAAA;AAwBV,SAAS,eAAA,CACd,QACA,OAAA,EACmB;AACnB,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,MAAA,EAAQ,OAAO,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AACnC,EAAA,IAAI,WAAW,MAAA,EAAW;AAExB,IAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACvB,IAAA,YAAA,CAAa,GAAA,CAAI,KAAK,MAAM,CAAA;AAC5B,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,YAAA,CAAa,QAAQ,OAAO,CAAA;AACvD,EAAA,YAAA,CAAa,GAAA,CAAI,KAAK,SAAS,CAAA;AAC/B,EAAA,WAAA,CAAY,YAAY,CAAA;AACxB,EAAA,OAAO,SAAA;AACT;AAEO,SAAS,iBAAA,CACd,QACA,OAAA,EACqB;AACrB,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,MAAA,EAAQ,OAAO,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA;AACjC,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,UAAA,CAAW,OAAO,GAAG,CAAA;AACrB,IAAA,UAAA,CAAW,GAAA,CAAI,KAAK,MAAM,CAAA;AAC1B,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,OAAO,CAAA;AACzD,EAAA,UAAA,CAAW,GAAA,CAAI,KAAK,SAAS,CAAA;AAC7B,EAAA,WAAA,CAAY,UAAU,CAAA;AACtB,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,QAAA,CAAS,QAA4B,OAAA,EAA0B;AAOtE,EAAA,MAAM,aAAa,MAAA,IAAU,EAAA;AAC7B,EAAA,IAAI,OAAA,KAAY,MAAA,IAAa,OAAA,KAAY,IAAA,EAAM,OAAO,UAAA;AACtD,EAAA,MAAM,UAAA,GAAa,gBAAgB,OAAO,CAAA;AAC1C,EAAA,IAAI,UAAA,KAAe,MAAM,OAAO,UAAA;AAChC,EAAA,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AACpC;AAEA,SAAS,gBAAgB,KAAA,EAAwB;AAC/C,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC5E,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,EAC3D;AACA,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,MAAM,EAAE,IAAA,EAAK;AACtC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,UAAU,MAAA,EAAW;AACzB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC5B;AAEA,SAAS,YAAY,GAAA,EAAiC;AACpD,EAAA,OAAO,GAAA,CAAI,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AACjC,IAAA,IAAI,WAAW,MAAA,EAAW;AAC1B,IAAA,GAAA,CAAI,OAAO,MAAM,CAAA;AAAA,EACnB;AACF;;;AC1GA,IAAM,YAAA,GAA8B;AAAA,EAClC,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,CAAO,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC7B,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,UAAU,EAAA,EAAI;AACzD,MAAA,IAAI,OAAA,CAAQ,YAAY,OAAA,EAAS;AAC/B,QAAC,QAA6B,KAAA,GAAQ,EAAA;AAAA,MACxC,CAAA,MAAA,IAAW,OAAA,CAAQ,OAAA,KAAY,MAAA,EAAQ;AACrC,QAAA,OAAA,CAAQ,gBAAgB,UAAU,CAAA;AAClC,QAAA,OAAA,CAAQ,WAAA,GAAc,EAAA;AAAA,MACxB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,WAAA,GAAc,EAAA;AAAA,MACxB;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAM,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,cAAc,KAAK,CAAA;AACnE,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,GAAG,CAAA;AACzB,IAAA,MAAM,UAAU,CAAC,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA;AAC5C,IAAA,IAAI,OAAA,CAAQ,YAAY,OAAA,EAAS;AAC/B,MAAC,QAA6B,KAAA,GAAQ,OAAA,GAClC,cAAe,OAAA,CAA6B,IAAA,EAAM,IAAI,CAAA,GACtD,GAAA;AACJ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAQ;AAC9B,MAAA,OAAA,CAAQ,aAAa,UAAA,EAAY,OAAA,GAAU,IAAA,CAAK,WAAA,KAAgB,GAAG,CAAA;AACnE,MAAA,OAAA,CAAQ,WAAA,GAAc,OAAA,GAAU,UAAA,CAAW,IAAA,EAAM,OAAO,CAAA,GAAI,GAAA;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,WAAA,GAAc,OAAA,GAAU,UAAA,CAAW,IAAA,EAAM,OAAO,CAAA,GAAI,GAAA;AAAA,EAC9D;AACF,CAAA;AAEA,SAAS,UAAA,CAAW,MAAY,OAAA,EAAgC;AAC9D,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,mBAAA,EAAoB;AACrD,EAAA,IAAI;AACF,IAAA,OAAO,iBAAA,CAAkB,MAAA,EAAQ,EAAE,SAAA,EAAW,QAAA,EAAU,WAAW,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA;AAAA,EAC3F,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAK,WAAA,EAAY;AAAA,EAC1B;AACF;AAEA,SAAS,aAAA,CAAc,MAAc,IAAA,EAAoB;AACvD,EAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,IAAA,CAAK,aAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAC1D,EAAA,IAAI,IAAA,KAAS,kBAAkB,OAAO,IAAA,CAAK,aAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AACpE,EAAA,OAAO,KAAK,WAAA,EAAY;AAC1B;AAEA,uBAAA,CAAwB,YAAY,CAAA;;;AClDpC,IAAM,cAAA,GAAgC;AAAA,EACpC,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,CAAO,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS;AAC7B,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,UAAU,EAAA,EAAI;AACzD,MAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,OAAA,EAAU,QAA6B,KAAA,GAAQ,EAAA;AAAA,mBAC1D,WAAA,GAAc,EAAA;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,OAAO,KAAA,KAAU,QAAA,GAAW,QAAQ,MAAA,CAAO,aAAA,CAAc,KAAK,CAAC,CAAA;AAC3E,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,EAAG;AACrB,MAAA,OAAA,CAAQ,WAAA,GAAc,cAAc,KAAK,CAAA;AACzC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,YAAY,OAAA,EAAS;AAC/B,MAAC,OAAA,CAA6B,KAAA,GAAQ,MAAA,CAAO,GAAG,CAAA;AAChD,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,WAAA,GAAc,MAAA,CAAO,GAAA,EAAK,OAAO,CAAA;AAAA,EAC3C;AACF,CAAA;AAEA,SAAS,MAAA,CAAO,KAAa,OAAA,EAAgC;AAC3D,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,mBAAA,EAAoB;AACrD,EAAA,IAAI;AACF,IAAA,OAAO,eAAA,CAAgB,MAAM,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA;AAAA,EAC3C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,GAAG,CAAA;AAAA,EACnB;AACF;AAEA,uBAAA,CAAwB,cAAc,CAAA;;;ACrBtC,IAAM,aAAA,GAA+B;AAAA,EACnC,IAAA,EAAM,OAAA;AAAA,EACN,MAAA,CAAO,QAAQ,KAAA,EAAO;AACpB,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC3B,IAAA,MAAM,WAAW,MAAA,CAAO,aAAA;AACxB,IAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACjD,MAAA,MAAM,IAAA,GAAO,cAAA,CAAe,QAAA,EAAU,KAAK,CAAA;AAC3C,MAAA,OAAA,CAAQ,SAAA,GAAY,aAAa,IAAI,CAAA;AACrC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,OAAO,cAAA,IAAkB,IAAA;AAC3C,IAAA,OAAA,CAAQ,cAAc,KAAA,CAAM,GAAA,CAAIE,UAAS,CAAA,CAAE,KAAK,SAAS,CAAA;AAAA,EAC3D;AACF,CAAA;AAEA,SAAS,cAAA,CAAe,UAAkB,KAAA,EAAmC;AAC3E,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA,EAAG;AACxC,IAAA,GAAA,IAAO,WAAA,CAAY,QAAA,EAAU,KAAA,CAAM,CAAC,GAAG,CAAC,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,WAAA,CAAY,QAAA,EAAkB,IAAA,EAAe,KAAA,EAAuB;AAC3E,EAAA,IAAI,GAAA,GAAM,QAAA;AACV,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC7C,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAA+B,CAAA,EAAG;AAC1E,MAAA,MAAM,OAAA,GAAU,IAAI,MAAA,CAAO,CAAA,MAAA,EAAS,YAAY,GAAG,CAAC,UAAU,GAAG,CAAA;AACjE,MAAA,GAAA,GAAM,IAAI,OAAA,CAAQ,OAAA,EAAS,WAAW,aAAA,CAAc,KAAK,CAAC,CAAC,CAAA;AAAA,IAC7D;AAAA,EACF,CAAA,MAAO;AACL,IAAA,GAAA,GAAM,IAAI,OAAA,CAAQ,gBAAA,EAAkB,WAAW,aAAA,CAAc,IAAI,CAAC,CAAC,CAAA;AAAA,EACrE;AACA,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,gBAAA,EAAkB,MAAA,CAAO,KAAK,CAAC,CAAA;AACjD,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACpD;AAEA,SAASA,WAAU,KAAA,EAAwB;AACzC,EAAA,OAAO,cAAc,KAAK,CAAA;AAC5B;AAEA,uBAAA,CAAwB,aAAa,CAAA;AAErC,uBAAA,CAAwB,EAAE,GAAG,aAAA,EAAe,IAAA,EAAM,UAAU,CAAA;;;ACpDrD,SAAS,wBAAA,GAAoC;AAClD,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,KAAA;AAC5C,EAAA,OAAO,OAAQ,SAAqC,mBAAA,KAAwB,UAAA;AAC9E;AAOA,eAAsB,kBAAkB,QAAA,EAAqC;AAC3E,EAAA,IAAI,CAAC,0BAAyB,EAAG;AAC/B,IAAA,QAAA,EAAS;AACT,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,QAAS,QAAA,CAAqC,mBAAA;AAGpD,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,QAAA,EAAU,QAAQ,CAAA;AAChD,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,CAAW,QAAA;AAAA,EACnB,CAAA,CAAA,MAAQ;AAAA,EAGR;AACF;;;ACvBA,IAAM,aAAA,GAAgB,kBAAA;AACtB,IAAM,oBAAA,GAAuB,yBAAA;AAC7B,IAAM,yBAAA,GAA4B,8BAAA;AAalC,IAAM,kBAAA,uBAAyB,OAAA,EAAuC;AAuB/D,SAAS,uBAAuB,OAAA,EAAuC;AAC5E,EAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,OAAA,EAAQ,GAAI,OAAA;AACzC,EAAA,MAAM,MAAA,GAAS,UAAU,SAAS,CAAA;AAGlC,EAAA,MAAM,UAAwB,EAAC;AAC/B,EAAA,MAAM,UAAwB,EAAC;AAC/B,EAAA,MAAM,QAAsB,EAAC;AAC7B,EAAA,MAAM,UAAwB,EAAC;AAC/B,EAAA,MAAM,WAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,SAAA,IACtC,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,SAAA,IAC3C,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,SAAA,IACvC,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,SAC/C,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,EAC1B;AAGA,EAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,QAAQ,CAAC,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC9C,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC7B,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA;AAC3C,IAAA,IAAA,EAAM,MAAA,EAAO;AACb,IAAA,UAAA,CAAW,MAAA,EAAQ,MAAM,KAAK,CAAA;AAAA,EAChC;AAIA,EAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,IAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC9B,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA;AAC3C,IAAA,MAAM,cAAc,UAAA,CAAW,QAAA,EAAU,KAAA,CAAM,KAAA,EAAO,MAAM,KAAK,CAAA;AACjE,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,WAAA,EAAa;AAG3B,IAAA,mBAAA,CAAoB,WAAA,EAAa,MAAM,KAAK,CAAA;AAC5C,IAAA,SAAA,CAAU,YAAA,CAAa,aAAa,IAAI,CAAA;AACxC,IAAA,YAAA,CAAa,MAAA,EAAQ,MAAM,KAAK,CAAA;AAAA,EAClC;AACA,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA;AAC9C,IAAA,MAAM,UAAU,UAAA,CAAW,QAAA,EAAU,KAAA,CAAM,KAAA,EAAO,MAAM,KAAK,CAAA;AAC7D,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS;AAC1B,IAAA,oBAAA,CAAqB,OAAA,EAAS,OAAA,EAAS,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA;AAC1D,IAAA,SAAA,CAAU,YAAA,CAAa,SAAS,OAAO,CAAA;AACvC,IAAA,YAAA,CAAa,MAAA,EAAQ,MAAM,KAAK,CAAA;AAAA,EAClC;AAGA,EAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,QAAQ,CAAC,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC9C,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC7B,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,IAAK,IAAA;AAClD,IAAA,MAAM,OAAO,UAAA,CAAW,QAAA,EAAU,KAAA,CAAM,KAAA,EAAO,MAAM,KAAK,CAAA;AAC1D,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,mBAAA,CAAoB,IAAA,EAAM,MAAM,KAAK,CAAA;AACrC,IAAA,SAAA,CAAU,YAAA,CAAa,MAAM,MAAM,CAAA;AACnC,IAAA,YAAA,CAAa,MAAA,EAAQ,MAAM,KAAK,CAAA;AAAA,EAClC;AAMA,EAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AAC3B,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA;AAC/B,IAAA,MAAM,OAAO,GAAA,KAAQ,MAAA,GAAY,SAAA,CAAU,SAAA,EAAW,GAAG,CAAA,GAAI,IAAA;AAC7D,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA,IAAK,IAAA;AAC/C,IAAA,IAAI,SAAS,MAAA,EAAQ;AACrB,IAAA,SAAA,CAAU,YAAA,CAAa,MAAM,MAAM,CAAA;AAAA,EACrC;AACF;AAYA,SAAS,mBAAA,CAAoB,MAAe,KAAA,EAAsB;AAChE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,CAAA,CAAA,EAAI,oBAAoB,CAAA,CAAA,CAAG,CAAA;AAC/D,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,EAAG;AACpC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAa,oBAAoB,CAAA;AAClD,IAAA,IAAI,QAAQ,IAAA,EAAM;AAClB,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,YAAA,CAAa,yBAAyB,CAAA;AAClE,IAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,IAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,KAAA,EAAO,GAAG,CAAA;AAC9C,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC/B,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,EAAC,EAAG,WAAW,CAAA;AACzC,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,sBAAA,CAAuB;AAAA,MACrB,QAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,IAAA;AAAA,MACX,OAEF,CAAC,CAAA;AAAA,EACH;AACF;AAYA,SAAS,oBAAA,CACP,OAAA,EACA,OAAA,EACA,SAAA,EACA,MAAA,EACM;AACN,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,gBAAA,CAAiB,CAAA,CAAA,EAAI,oBAAoB,CAAA,CAAA,CAAG,CAAA;AACrE,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC3B,EAAA,MAAM,OAAA,GAAU,QAAQ,SAAS,CAAA;AACjC,EAAA,MAAM,YAAY,OAAA,KAAY,MAAA,GAAY,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA,GAAI,MAAA;AAChE,EAAA,KAAA,MAAW,OAAA,IAAW,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,EAAG;AAC1C,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,YAAA,CAAa,oBAAoB,CAAA;AACrD,IAAA,IAAI,QAAQ,IAAA,EAAM;AAClB,IAAA,MAAM,OAAA,GAAU,QAAQ,aAAA,CAAc,CAAA,CAAA,EAAI,oBAAoB,CAAA,EAAA,EAAK,SAAA,CAAU,GAAG,CAAC,CAAA,EAAA,CAAI,CAAA;AACrF,IAAA,IAAI,CAAC,OAAA,EAAS;AAId,IAAA,OAAA,CAAQ,YAAY,OAAO,CAAA;AAC3B,IAAA,MAAM,iBACJ,OAAA,CAAQ,YAAA,CAAa,yBAAyB,CAAA,IAC9C,OAAA,CAAQ,aAAa,yBAAyB,CAAA;AAChD,IAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,SAAA,EAAW,GAAG,KAAK,EAAC;AACvD,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,SAAA,EAAW,GAAG,KAAK,EAAC;AACvD,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,UAAA,EAAY,UAAU,CAAA;AAChD,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,sBAAA,CAAuB;AAAA,MACrB,QAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,OAAA;AAAA,MACX,OAEF,CAAC,CAAA;AAAA,EACH;AACF;AAEA,SAAS,eAAA,CAAgB,OAAgB,GAAA,EAA6C;AACpF,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,MAAA;AACxD,EAAA,MAAM,MAAA,GAAU,MAAkC,GAAG,CAAA;AACrD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,OAAO,MAAA;AACnC,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAU,SAAA,EAA0C;AAC3D,EAAA,IAAI,GAAA,GAAM,kBAAA,CAAmB,GAAA,CAAI,SAAS,CAAA;AAC1C,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,GAAA,uBAAU,GAAA,EAAI;AACd,IAAA,kBAAA,CAAmB,GAAA,CAAI,WAAW,GAAG,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,YAAA,CAAa,QAA8B,KAAA,EAAsB;AACxE,EAAA,MAAM,GAAA,GAAM,QAAQ,KAAK,CAAA;AACzB,EAAA,IAAI,QAAQ,MAAA,EAAW;AACvB,EAAA,MAAA,CAAO,GAAA,CAAI,KAAK,KAAK,CAAA;AACvB;AAEA,SAAS,UAAA,CAAW,QAA8B,KAAA,EAAsB;AACtE,EAAA,MAAM,GAAA,GAAM,QAAQ,KAAK,CAAA;AACzB,EAAA,IAAI,QAAQ,MAAA,EAAW;AACvB,EAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AACnB;AAEA,SAAS,QAAQ,KAAA,EAA2B;AAC1C,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ,OAAO,KAAA,CAAM,EAAA;AACxC,EAAA,OAAO,KAAA,CAAM,KAAA;AACf;AAEA,SAAS,QAAQ,KAAA,EAAoC;AACnD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,MAAA;AACxD,EAAA,MAAM,EAAA,GAAM,MAAkC,IAAI,CAAA;AAClD,EAAA,IAAI,OAAO,OAAO,QAAA,IAAY,OAAO,OAAO,QAAA,EAAU,OAAO,OAAO,EAAE,CAAA;AACtE,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,SAAA,CAAU,WAAoB,GAAA,EAA6B;AAClE,EAAA,OAAO,SAAA,CAAU,cAAc,CAAA,CAAA,EAAI,aAAa,KAAK,SAAA,CAAU,GAAG,CAAC,CAAA,EAAA,CAAI,CAAA;AACzE;AAEA,SAAS,UAAU,KAAA,EAAuB;AAExC,EAAA,MAAM,MAAO,UAAA,CAAgE,GAAA;AAC7E,EAAA,IAAI,GAAA,EAAK,MAAA,EAAQ,OAAO,GAAA,CAAI,OAAO,KAAK,CAAA;AACxC,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,iBAAA,EAAmB,MAAM,CAAA;AAChD;AAUA,SAAS,UAAA,CAAW,QAAA,EAAkB,KAAA,EAAgB,KAAA,EAA+B;AACnF,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,IAAA;AAC5C,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,QAAA,EAAU,KAAA,EAAO,KAAK,CAAA;AAClD,EAAA,MAAM,IAAA,GAAO,aAAa,MAAM,CAAA;AAChC,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAC9C,EAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,EAAA,MAAM,KAAA,GAAQ,KAAK,OAAA,CAAQ,iBAAA;AAC3B,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,GAAA,GAAM,QAAQ,KAAK,CAAA;AACzB,EAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,KAAA,CAAM,YAAA,CAAa,eAAe,GAAG,CAAA;AAC5D,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,YAAA,CAAa,QAAA,EAAkB,KAAA,EAAgB,KAAA,EAAuB;AAC7E,EAAA,IAAI,GAAA,GAAM,QAAA;AACV,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,EAAG;AACzE,MAAA,MAAM,OAAA,GAAU,IAAI,MAAA,CAAO,CAAA,MAAA,EAASC,aAAY,GAAG,CAAC,UAAU,GAAG,CAAA;AAGjE,MAAA,MAAM,WAAA,GAAc,UAAA,CAAW,oBAAA,CAAqB,GAAG,CAAC,CAAA;AACxD,MAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,MAAM,WAAW,CAAA;AAAA,IAC9C;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAM,WAAA,GAAc,UAAA,CAAW,oBAAA,CAAqB,KAAK,CAAC,CAAA;AAC1D,IAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,gBAAA,EAAkB,MAAM,WAAW,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,gBAAA,EAAkB,MAAA,CAAO,KAAK,CAAC,CAAA;AACpD;AAEA,SAAS,qBAAqB,KAAA,EAAwB;AACpD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,SAAA,IAAa,OAAO,UAAU,QAAA,EAAU;AACxF,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACA,EAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC7B;AAEA,SAASA,aAAY,KAAA,EAAuB;AAC1C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACpD;;;ACrSA,IAAM,cAAA,uBAAqB,OAAA,EAAqC;AAChE,IAAM,gBAAA,uBAAuB,OAAA,EAAiB;AAE9C,IAAM,uBAAA,GAAyC;AAAA,EAC7C,IAAA,EAAM,kBAAA;AAAA,EACN,MAAA,CAAO,QAAQ,KAAA,EAAO;AACpB,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC3B,IAAA,MAAM,YAAY,MAAA,CAAO,OAAA;AACzB,IAAA,MAAM,WAAW,MAAA,CAAO,aAAA;AACxB,IAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AACnD,MAAA,mBAAA,CAAoB,SAAA,EAAW,OAAO,SAAS,CAAA;AAC/C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,cAAA,CAAe,GAAA,CAAI,SAAS,KAAK,EAAC;AACnD,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,QAAA,EAAU,KAAK,CAAA;AACzC,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,cAAA,CAAe,GAAA,CAAI,SAAA,EAAW,KAAA,CAAM,KAAA,EAA6B,CAAA;AACjE,MAAA;AAAA,IACF;AACA,IAAA,KAAK,kBAAkB,MAAM;AAC3B,MAAA,sBAAA,CAAuB;AAAA,QACrB,QAAA;AAAA,QACA,SAAA;AAAA,QACA,OAEF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,cAAA,CAAe,GAAA,CAAI,SAAA,EAAW,KAAA,CAAM,KAAA,EAA6B,CAAA;AAAA,EACnE;AACF,CAAA;AAEA,SAAS,mBAAA,CAAoB,WAAoB,SAAA,EAAyB;AACxE,EAAA,IAAI,gBAAA,CAAiB,GAAA,CAAI,SAAS,CAAA,EAAG;AACrC,EAAA,gBAAA,CAAiB,IAAI,SAAS,CAAA;AAC9B,EAAA,OAAA,CAAQ,IAAA;AAAA,IACN,kDAAkD,SAAS,CAAA,cAAA,EACrD,SAAA,CAAU,OAAA,CAAQ,aAAa,CAAA,iMAAA;AAAA,GAIvC;AACF;AAEA,uBAAA,CAAwB,uBAAuB,CAAA;;;ACjC/C,IAAM,OAAA,GAAoC;AAAA,EACxCN,aAAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,EAAE,GAAG,WAAA,EAAa,IAAA,EAAM,OAAA,EAAQ;AAAA,EAChC,aAAA;AAAA,EACAC,eAAAA;AAAA,EACAE,qBAAAA;AAAA,EACA,cAAA;AAAA,EACA,EAAE,GAAG,cAAA,EAAgB,IAAA,EAAM,OAAA,EAAQ;AAAA,EACnC,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,EAAE,GAAG,aAAA,EAAe,IAAA,EAAM,QAAA,EAAS;AAAA,EACnC;AACF,CAAA;AAMO,SAASI,sBAAAA,GAAiE;AAC/E,EAAA,OAAO,sBAAc,OAAO,CAAA;AAC9B;;;AC/BO,IAAM,oBAAN,MAAwB;AAAA,EACpB,QAAA,GAAW,IAAI,YAAA,EAAa;AAAA,EAC5B,SAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACT,QAAA,GAAW,KAAA;AAAA,EACX,UAAA,GAAa,KAAA;AAAA,EAEb,WAAA,CAAY,MAAA,GAAkC,EAAC,EAAG;AAChD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,SAAA,EAAU;AACxC,IAAA,IAAA,CAAK,IAAA,GAAO,KAAA,GACR,CAAA,GAAI,IAAA,KAAe;AAEjB,MAAA,OAAA,CAAQ,KAAA,CAAM,gBAAA,EAAkB,GAAG,IAAI,CAAA;AAAA,IACzC,IACA,MAAY;AAAA,IAEZ,CAAA;AAEJ,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,cAAA,CAAe;AAAA,MAClC,GAAI,OAAO,cAAA,KAAmB,MAAA,GAAY,EAAE,iBAAA,EAAmB,MAAA,CAAO,cAAA,EAAe,GAAI,EAAC;AAAA,MAC1F,GAAI,MAAA,CAAO,wBAAA,KAA6B,MAAA,GACpC,EAAE,yBAAyB,CAAC,MAAA,CAAO,wBAAA,EAAyB,GAC5D,EAAC;AAAA,MACL,GAAI,MAAA,CAAO,wBAAA,KAA6B,MAAA,GACpC,EAAE,yBAAyB,CAAC,MAAA,CAAO,wBAAA,EAAyB,GAC5D;AAAC,KACN,CAAA;AAED,IAAA,IAAI,IAAA,CAAK,UAAU,wBAAA,EAA0B;AAC3C,MAAA,IAAA,CAAK,KAAK,uFAAkF,CAAA;AAAA,IAC9F;AAEA,IAAA,MAAM,UAAUA,sBAAAA,EAAsB;AACtC,IAAA,IAAA,CAAK,UAAA,GAAa,EAAE,GAAG,OAAA,EAAQ;AAE/B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,aAAA,CAAc;AAAA,MAChC,QAAQ,IAAA,CAAK,QAAA;AAAA,MACb,QAAQ,MAAA,CAAO,MAAA,CAAO,EAAE,GAAG,QAAQ,CAAA;AAAA,MACnC,qBAAA,EAAuB,CAAC,QAAA,KAAa;AACnC,QAAA,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA,GAAI,QAAA;AAAA,MACnC,CAAA;AAAA,MACA,KAAK,IAAA,CAAK;AAAA,KACX,CAAA;AAED,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,kBAAA,CAAmB;AAAA,MACrC,GAAI,OAAO,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAK,GAAI,EAAC;AAAA,MACzD,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,eAAe,CAAC,MAAA,KAAW,IAAA,CAAK,SAAA,CAAU,QAAQ,MAAM,CAAA;AAAA,MACxD,YAAA,EAAc,IAAA,CAAK,SAAA,CAAU,SAAA,EAAU;AAAA,MACvC,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,GAAI,MAAA,CAAO,SAAA,KAAc,MAAA,IAAa,MAAA,CAAO,cAAc,EAAA,GACvD;AAAA,QACE,SAAA,EAAW;AAAA,UACT,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,GAAI,OAAO,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS,GAAI,EAAC;AAAA,UACrE,GAAI,OAAO,UAAA,KAAe,MAAA,GAAY,EAAE,KAAA,EAAO,MAAA,CAAO,UAAA,EAAW,GAAI,EAAC;AAAA,UACtE,GAAI,OAAO,UAAA,KAAe,MAAA,GAAY,EAAE,OAAA,EAAS,MAAA,CAAO,UAAA,EAAW,GAAI;AAAC;AAC1E,UAEF,EAAC;AAAA,MACL,GAAI,OAAO,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,MAAA,CAAO,UAAA,EAAW,GAAI,EAAC;AAAA,MAC3E,GAAI,OAAO,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,MAAA,CAAO,WAAA,EAAY,GAAI,EAAC;AAAA,MAC9E,GAAI,OAAO,sBAAA,KAA2B,MAAA,GAClC,EAAE,sBAAA,EAAwB,MAAA,CAAO,sBAAA,EAAuB,GACxD,EAAC;AAAA,MACL,GAAI,OAAO,qBAAA,KAA0B,MAAA,GACjC,EAAE,qBAAA,EAAuB,MAAA,CAAO,qBAAA,EAAsB,GACtD,EAAC;AAAA,MACL,GAAI,OAAO,uBAAA,KAA4B,MAAA,GACnC,EAAE,uBAAA,EAAyB,MAAA,CAAO,uBAAA,EAAwB,GAC1D,EAAC;AAAA,MACL,GAAI,OAAO,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,MAAA,CAAO,UAAA,EAAW,GAAI,EAAC;AAAA,MAC3E,GAAI,OAAO,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,MAAA,CAAO,UAAA,EAAW,GAAI,EAAC;AAAA,MAC3E,oBAAoB,MAAM;AACxB,QAAA,IAAA,CAAK,UAAU,YAAA,EAAa;AAAA,MAC9B,CAAA;AAAA,MACA,GAAI,OAAO,aAAA,KAAkB,MAAA,GAAY,EAAE,aAAA,EAAe,MAAA,CAAO,aAAA,EAAc,GAAI,EAAC;AAAA,MACpF,KAAK,IAAA,CAAK;AAAA,KACX,CAAA;AAED,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,SAAA,EAAW,CAAC,CAAA,KAAM;AACjC,MAAA,IAAA,CAAK,SAAA,CAAU,UAAA,CAAW,CAAA,CAAE,MAAM,CAAA;AAAA,IACpC,CAAC,CAAA;AAED,IAAA,IAAI,MAAA,CAAO,cAAc,KAAA,EAAO;AAC9B,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAA,GAAiB;AACf,IAAA,IAAI,IAAA,CAAK,YAAY,OAAO,KAAA;AAC5B,IAAA,IAAI,IAAA,CAAK,UAAU,OAAO,IAAA;AAC1B,IAAA,IAAI,CAAC,kBAAA,EAAmB,EAAG,OAAO,KAAA;AAClC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,OAAO,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAI,KAAK,UAAA,EAAY;AACrB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,IAAA,CAAK,SAAS,OAAA,EAAQ;AACtB,IAAA,MAAM,IAAA,CAAK,SAAS,UAAA,EAAW;AAC/B,IAAA,IAAA,CAAK,SAAS,kBAAA,EAAmB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAI,MAAA,EAA0C;AAClD,IAAA,IAAI,IAAA,CAAK,UAAA,EAAY,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAC3E,IAAA,MAAM,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAM,IAAA,EAA6B;AACvC,IAAA,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,YAAA,GAAqB;AACnB,IAAA,IAAA,CAAK,SAAS,YAAA,EAAa;AAAA,EAC7B;AAAA;AAAA,EAGA,IAAI,MAAA,GAAuB;AACzB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,OAAA,GAA6B;AAC/B,IAAA,OAAO,IAAA,CAAK,SAAS,IAAA,EAAK;AAAA,EAC5B;AAAA;AAAA,EAGA,IAAI,MAAA,GAAsD;AACxD,IAAA,OAAO,KAAK,QAAA,CAAS,MAAA;AAAA,EACvB;AAAA;AAAA,EAGA,IAAI,WAAA,GAAsB;AACxB,IAAA,OAAO,KAAK,QAAA,CAAS,WAAA;AAAA,EACvB;AAAA;AAAA,EAGA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AACF;AAOO,SAAS,eAAA,CAAgB,MAAA,GAAkC,EAAC,EAA6B;AAC9F,EAAA,MAAM,MAAA,GAAS,IAAI,iBAAA,CAAkB,EAAE,GAAG,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAA;AACpE,EAAA,OAAO,MAAA,CAAO,KAAA,EAAM,GAAI,MAAA,GAAS,IAAA;AACnC;;;AClMO,IAAM,cAAA,GAAyB,wvxDAAA;AAC/B,IAAM,kBAAA,GAAuC,EAAE,WAAA,EAAa,0BAAA,EAA4B,MAAM,KAAA,EAAM;;;ACkF3G,IAAMb,oBAAAA,GAAsB,EAAA;AAC5B,IAAM,oBAAA,GAAuB,CAAA;AAC7B,IAAM,iCAAA,GAAoC,EAAA;AAC1C,IAAM,gCAAA,GAAmC,OAAA;AASlC,SAAS,oBAAA,CAAqB,MAAA,GAA6B,EAAC,EAAW;AAC5E,EAAA,IAAI,cAAA,CAAe,WAAW,CAAA,EAAG;AAC/B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,CAAU;AAAA,IACnC,iBAAA,EAAmB,MAAA,CAAO,cAAA,IAAkB,EAAC;AAAA,IAC7C,SAAA,EAAW,OAAO,SAAA,IAAa,EAAA;AAAA,IAC/B,QAAA,EAAU,OAAO,QAAA,IAAY,MAAA;AAAA,IAC7B,UAAA,EAAY,OAAO,UAAA,IAAc,CAAA;AAAA,IACjC,KAAA,EAAO,OAAO,KAAA,IAAS,KAAA;AAAA,IACvB,UAAA,EAAY,OAAO,UAAA,IAAcA,oBAAAA;AAAA,IACjC,UAAA,EAAY,OAAO,UAAA,IAAc,IAAA;AAAA,IACjC,WAAA,EAAa,OAAO,WAAA,IAAe,oBAAA;AAAA,IACnC,qBAAA,EAAuB,OAAO,qBAAA,IAAyB,KAAA;AAAA,IACvD,uBAAA,EAAyB,OAAO,uBAAA,IAA2B,iCAAA;AAAA,IAC3D,sBAAA,EAAwB,OAAO,sBAAA,IAA0B,gCAAA;AAAA,IACzD,wBAAA,EAA0B,OAAO,wBAAA,IAA4B,KAAA;AAAA,IAC7D,wBAAA,EAA0B,OAAO,wBAAA,IAA4B;AAAA;AAAA;AAAA;AAAA,GAI9D,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,SAAS,CAAA;AAI1B,EAAA,MAAM,WAAA,GACJ,kBAAA,CAAmB,WAAA,KAAgB,EAAA,GAAK,QAAQ,kBAAA,CAAmB,WAAA;AACrE,EAAA,OAAO;AAAA,IACL,mCAAmC,WAAW,CAAA,GAAA,CAAA;AAAA,IAC9C,+BAA+B,aAAa,CAAA,CAAA,CAAA;AAAA,IAC5C,CAAA,0BAAA,CAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACb;AAOO,SAAS,iBAAA,CAAkB,IAAA,EAAc,OAAA,GAA8B,EAAC,EAAW;AACxF,EAAA,MAAM,SAAA,GAAY,QAAQ,KAAA,KAAU,MAAA,GAAY,WAAW,WAAA,CAAY,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AAC3F,EAAA,OAAO,CAAA,OAAA,EAAU,SAAS,CAAA,CAAA,EAAI,IAAI,CAAA,SAAA,CAAA;AACpC;AAKO,SAAS,gBAAA,GAAqC;AACnD,EAAA,OAAO,kBAAA;AACT;AAEA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,IAAI,CAAC,qBAAA,CAAsB,IAAA,CAAK,KAAK,CAAA,EAAG;AACtC,IAAA,MAAM,IAAI,WAAW,sDAAsD,CAAA;AAAA,EAC7E;AACA,EAAA,OAAO,KAAA;AACT;;;ACxIA,IAAM,mBAAA,GAAsB,EAAA;AAY5B,IAAI,cAAA;AAuBG,SAAS,aAAa,MAAA,EAAoC;AAC/D,EAAA,cAAA,GAAiB,MAAA,IAAU,MAAA;AAC7B;AAWO,SAAS,gBAAA,CAAiB,QAAgB,mBAAA,EAA6B;AAC5E,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,QAAQ,CAAA,EAAG;AACzC,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,qDAAA,EAAwD,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAC9F;AACA,EAAA,MAAM,SAAS,aAAA,EAAc;AAC7B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAGF;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,KAAK,CAAA;AACnC,EAAA,MAAA,CAAO,gBAAgB,MAAM,CAAA;AAC7B,EAAA,OAAO,gBAAgB,MAAM,CAAA;AAC/B;AAEA,SAAS,aAAA,GAA2C;AAClD,EAAA,IAAI,cAAA,EAAgB,iBAAiB,OAAO,cAAA;AAC5C,EAAA,MAAM,aAAc,UAAA,CAA0C,MAAA;AAC9D,EAAA,IAAI,UAAA,EAAY,iBAAiB,OAAO,UAAA;AACxC,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gBAAgB,KAAA,EAA2B;AAClD,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,EAAO,MAAA,IAAU,MAAA,CAAO,aAAa,IAAI,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,OAAO,IAAA,KAAS,UAAA,GAAa,IAAA,CAAK,MAAM,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAC/F,EAAA,OAAO,MAAA,CAAO,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA,CAAE,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA,CAAE,UAAA,CAAW,GAAA,EAAK,EAAE,CAAA;AAC5E;AA4BO,SAAS,mBAAA,CAAoB,OAAA,GAAiC,EAAC,EAAW;AAC/E,EAAA,MAAM,EAAE,OAAO,IAAA,EAAM,OAAA,GAAU,EAAC,EAAG,SAAA,GAAY,OAAM,GAAI,OAAA;AACzD,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,MAA6B,EAAC;AACpC,EAAA,IAAI,aAAa,CAAC,IAAA,IAAQ,OAAA,CAAQ,MAAA,KAAW,GAAG,OAAO,QAAA;AACvD,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,GAAA,CAAI,KAAK,QAAQ,CAAA;AACjB,IAAA,IAAA,CAAK,IAAI,QAAQ,CAAA;AAAA,EACnB;AACA,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,IAAA,IAAI,QAAQ,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,EAAG;AAC/C,IAAA,IAAA,CAAK,IAAI,OAAO,CAAA;AAChB,IAAA,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,EAClB;AACA,EAAA,OAAO,IAAI,MAAA,GAAS,CAAA,GAAI,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA,GAAI,QAAA;AAC1C;AAYO,SAAS,uBAAA,CACd,KAAA,EACA,OAAA,GAII,EAAC,EACG;AACR,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,WAAW,yCAAyC,CAAA;AACtF,EAAA,MAAM,EAAE,OAAO,IAAA,EAAM,KAAA,GAAQ,EAAC,EAAG,aAAA,GAAgB,OAAM,GAAI,OAAA;AAC3D,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AAC7B,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,CAAG,CAAA;AAC7B,EAAA,IAAI,aAAA,EAAe,KAAA,CAAM,IAAA,CAAK,kBAAkB,CAAA;AAChD,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,OAAA,GAAU,EAAE,IAAA,EAAK;AACvB,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AACvB;AAwBO,SAAS,cAAA,CACd,UACA,SAAA,EACQ;AACR,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAoB;AAC3C,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,EAAG;AACtC,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACtC,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,UAAA,CAAW,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAY,EAAG,EAAE,CAAA;AACxC,MAAA;AAAA,IACF;AACA,IAAA,UAAA,CAAW,GAAA;AAAA,MACT,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,UAAU,EAAE,WAAA,EAAY;AAAA,MACzC,OAAA,CAAQ,KAAA,CAAM,UAAA,GAAa,CAAC,EAAE,IAAA;AAAK,KACrC;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,OAAA,EAAS,WAAW,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9D,IAAA,MAAM,IAAA,GAAO,QAAQ,WAAA,EAAY;AACjC,IAAA,MAAM,WACJ,OAAO,WAAA,KAAgB,WAAW,EAAE,KAAA,EAAO,aAAY,GAAI,WAAA;AAC7D,IAAA,MAAM,IAAA,GAAO,SAAS,IAAA,IAAQ,OAAA;AAC9B,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AACnC,IAAA,IAAI,SAAS,SAAA,IAAa,OAAA,KAAY,MAAA,IAAa,OAAA,CAAQ,WAAW,CAAA,EAAG;AACvE,MAAA,UAAA,CAAW,GAAA,CAAI,IAAA,EAAM,QAAA,CAAS,KAAK,CAAA;AACnC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,KAAA,MAAW,KAAA,IAAS,CAAC,GAAG,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,EAAG,GAAG,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG;AAC7E,MAAA,IAAI,MAAM,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG;AAC3C,MAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,IACnB;AAEA,IAAA,MAAM,cAAc,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,UAAU,QAAQ,CAAA;AAC/D,IAAA,UAAA,CAAW,GAAA,CAAI,OAAO,WAAA,CAAY,MAAA,GAAS,IAAI,WAAA,GAAc,MAAA,EAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EAChF;AAEA,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,UAAA,EAAY;AACtC,IAAA,GAAA,CAAI,IAAA,CAAK,MAAM,MAAA,KAAW,CAAA,GAAI,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,GAAA,CAAI,KAAK,IAAI,CAAA;AACtB;;;AC7LA,IAAM,oBAAA,GAAuB,CAAC,SAAA,EAAW,OAAA,EAAS,aAAa,CAAA;AAgBxD,SAAS,gBAAA,CACd,OAAA,EACA,OAAA,GAAiC,EAAC,EACzB;AACT,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAmB,OAAA,CAAQ,WAAW,CAAC,OAAA,EAAS,YAAA,EAAc,SAAS,CAAC,CAAA;AAC5F,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,oBAAA;AAC3C,EAAA,MAAM,kBAAkB,OAAA,CAAQ,cAAA,IAAkB,IAAA,KAAS,OAAA,CAAQ,IAAI,YAAY,CAAA;AAEnF,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AACxB,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI;AACF,MAAA,GAAA,GAAM,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AACN,MAAA,GAAA,GAAM,MAAA;AAAA,IACR;AACA,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAC/B,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA;AACxC,QAAA,IAAI,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,GAAA,EAAK,OAAO,IAAA;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,kBAAkB,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,gBAAgB,MAAM,QAAA,EAAU;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAA,GAAe,QAAQ,GAAA,CAAI,SAAS,IAAK,OAAA,CAAQ,YAAA,IAAgB,EAAC,GAAK,EAAC;AAC9E,EAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AAC7C,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,IAAI;AACF,QAAA,MAAM,aAAA,GAAgB,IAAI,GAAA,CAAI,OAAO,CAAA,CAAE,MAAA;AACvC,QAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AACtC,UAAA,IAAI;AACF,YAAA,IAAI,IAAI,GAAA,CAAI,WAAW,CAAA,CAAE,MAAA,KAAW,eAAe,OAAO,IAAA;AAAA,UAC5D,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;;;AC7BA,eAAsB,qBACpB,OAAA,EACmB;AACnB,EAAA,MAAM,MAAA,GAAS,WAAW,OAAO,CAAA;AACjC,EAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,EAAW;AAC5B,IAAA,MAAMc,IAAAA,GAAM,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAC,IAAI,kBAAA,CAAmB,OAAA,CAAQ,UAAU,CAAC,CAAA,CAAA,EAAI,kBAAA;AAAA,MAC3E,MAAA,CAAO,QAAQ,EAAE;AAAA,KAClB,CAAA,CAAA,EAAI,MAAA,CAAO,QAAA,EAAU,CAAA,CAAA;AACtB,IAAA,OAAO,WAAA,CAAeA,MAAK,OAAO,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,IAAA,WAAA,CAAY,MAAA,EAAQ,OAAA,CAAQ,KAAA,EAAO,CAAC,OAAO,CAAC,CAAA;AAAA,EAC9C;AACA,EAAA,MAAA,CAAO,GAAA,CAAI,SAAS,GAAG,CAAA;AACvB,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,OAAA,CAAQ,UAAU,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,CAAA;AAC9F,EAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAA4B,GAAA,EAAK,OAAO,CAAA;AAC3D,EAAA,MAAM,KAAA,GAAQ,IAAA,EAAM,IAAA,GAAO,CAAC,CAAA;AAC5B,EAAA,OAAO,KAAA,IAAS,IAAA;AAClB;AAKA,eAAsB,mBACpB,OAAA,EACmB;AACnB,EAAA,MAAM,MAAA,GAAS,WAAW,OAAO,CAAA;AACjC,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAC,CAAA,SAAA,EAAY,kBAAA,CAAmB,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,CAAA;AAClG,EAAA,OAAO,WAAA,CAAe,KAAK,OAAO,CAAA;AACpC;AAEA,SAAS,QAAQ,OAAA,EAA0C;AACzD,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,SAAA,CAAU,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,QAAQ,QAAA,IAAY,MAAA;AAClC,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,GAAI,KAAA,GAAQ,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA,CAAA;AAChE;AAEA,SAAS,WAAW,OAAA,EAAmD;AACrE,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,EAAA,MAAA,CAAO,IAAI,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,KAAA,IAAS,CAAC,CAAC,CAAA;AAC9C,EAAA,IAAI,QAAQ,KAAA,IAAS,IAAA,EAAM,MAAA,CAAO,GAAA,CAAI,SAAS,MAAM,CAAA;AACrD,EAAA,IAAI,QAAQ,MAAA,KAAW,MAAA,SAAkB,GAAA,CAAI,QAAA,EAAU,QAAQ,MAAM,CAAA;AACrE,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,WAAA,CAAY,MAAA,EAAyB,IAAA,EAAoB,IAAA,EAAsB;AACtF,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC/C,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,IAAA,EAAM,GAAG,CAAA;AAC9B,IAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxE,MAAA,WAAA,CAAY,MAAA,EAAQ,OAAuB,QAAQ,CAAA;AACnD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,CAAC,KAAK,CAAA,KAAO,CAAA,KAAM,CAAA,GAAI,GAAA,GAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAI,CAAA,CAAE,KAAK,EAAE,CAAA;AAC3E,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,MAAA,CAAO,GAAA,CAAI,MAAM,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IAC9C,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAA,CAAI,IAAA,EAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAChC;AAAA,EACF;AACF;AAEA,eAAe,WAAA,CAAe,KAAa,OAAA,EAAqD;AAC9F,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA,KAAY,OAAO,KAAA,KAAU,aAAa,KAAA,GAAQ,MAAA,CAAA;AAC1E,EAAA,IAAI,OAAA,KAAY,QAAW,OAAO,IAAA;AAClC,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK;AAAA,MAClC,WAAA,EAAa,SAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,kBAAA;AAAA,QACR,GAAI,OAAA,CAAQ,OAAA,IAAW;AAAC;AAC1B,KACD,CAAA;AACD,IAAA,IAAI,CAAC,QAAA,CAAS,EAAA,EAAI,OAAO,IAAA;AACzB,IAAA,MAAM,IAAA,GAAgB,MAAM,QAAA,CAAS,IAAA,EAAK;AAC1C,IAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,IAAA;AACtD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;AC/JA,IAAM,QAAA,GAAW,gCAAA;AACjB,IAAM,kBAAA,GACJ,2EAAA;AACF,IAAM,YAAA,GACJ,kMAAA;AAEK,IAAM,eAAA,GAAqC;AAAA,EAChD,IAAA,EAAM,WAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,IAAA,EAAM,CAAC,GAAA,KAAQ;AACb,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,IAAA,MAAM,oBAAA,GACJ,OAAO,MAAA,KAAW,WAAA,IAClB,OAAO,MAAA,CAAO,UAAA,KAAe,UAAA,IAC7B,MAAA,CAAO,UAAA,CAAW,kCAAkC,CAAA,CAAE,OAAA;AACxD,IAAA,IAAI,CAAC,QAAA,CAAS,cAAA,CAAe,QAAQ,CAAA,EAAG;AACtC,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,MAAA,KAAA,CAAM,EAAA,GAAK,QAAA;AACX,MAAA,KAAA,CAAM,WAAA,GAAc,uBAAuB,kBAAA,GAAqB,YAAA;AAChE,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,IACjC;AACA,IAAA,MAAM,QAAA,GAAW,uBAAuB,GAAA,GAAO,GAAA;AAC/C,IAAA,GAAA,CAAI,MAAA,CAAO,EAAA,CAAG,eAAA,EAAiB,CAAC,CAAA,KAAM;AACpC,MAAA,MAAM,UAAU,CAAA,CAAE,OAAA;AAClB,MAAA,OAAA,CAAQ,SAAA,CAAU,IAAI,cAAc,CAAA;AACpC,MAAA,MAAA,CAAO,WAAW,MAAM;AACtB,QAAA,OAAA,CAAQ,SAAA,CAAU,OAAO,cAAc,CAAA;AAAA,MACzC,GAAG,QAAQ,CAAA;AAAA,IACb,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EACA,SAAS,MAAM;AACb,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,IAAA,QAAA,CAAS,cAAA,CAAe,QAAQ,CAAA,EAAG,MAAA,EAAO;AAAA,EAC5C;AACF;;;ACtCO,IAAM,WAAA,GAAiC;AAAA,EAC5C,IAAA,EAAM,OAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,IAAA,EAAM,CAAC,GAAA,KAAQ;AACb,IAAA,GAAA,CAAI,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,MAAM;AAC1B,MAAA,GAAA,CAAI,IAAI,MAAM,CAAA;AAAA,IAChB,CAAC,CAAA;AACD,IAAA,GAAA,CAAI,MAAA,CAAO,EAAA,CAAG,SAAA,EAAW,CAAC,CAAA,KAAM;AAC9B,MAAA,GAAA,CAAI,GAAA,CAAI,gBAAA,EAAa,CAAA,CAAE,MAAM,CAAA;AAAA,IAC/B,CAAC,CAAA;AACD,IAAA,GAAA,CAAI,MAAA,CAAO,EAAA,CAAG,YAAA,EAAc,CAAC,CAAA,KAAM;AACjC,MAAA,GAAA,CAAI,GAAA,CAAI,cAAA,EAAgB,CAAA,CAAE,MAAA,EAAQ,GAAG,CAAA;AAAA,IACvC,CAAC,CAAA;AACD,IAAA,GAAA,CAAI,MAAA,CAAO,EAAA,CAAG,cAAA,EAAgB,CAAC,CAAA,KAAM;AACnC,MAAA,GAAA,CAAI,IAAI,cAAA,EAAgB,CAAA,CAAE,cAAc,WAAA,EAAa,CAAA,CAAE,YAAY,QAAQ,CAAA;AAAA,IAC7E,CAAC,CAAA;AACD,IAAA,GAAA,CAAI,MAAA,CAAO,EAAA,CAAG,cAAA,EAAgB,CAAC,CAAA,KAAM;AACnC,MAAA,GAAA,CAAI,GAAA,CAAI,gBAAgB,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,EAAQ,QAAQ,CAAA;AAAA,IACrE,CAAC,CAAA;AACD,IAAA,GAAA,CAAI,MAAA,CAAO,EAAA,CAAG,aAAA,EAAe,CAAC,CAAA,KAAM;AAClC,MAAA,GAAA,CAAI,GAAA,CAAI,aAAA,EAAe,CAAA,CAAE,YAAA,EAAc,IAAA,EAAM,EAAE,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,IAC5E,CAAC,CAAA;AACD,IAAA,GAAA,CAAI,MAAA,CAAO,EAAA,CAAG,OAAA,EAAS,CAAC,CAAA,KAAM;AAC5B,MAAA,GAAA,CAAI,IAAI,UAAA,EAAY,CAAA,CAAE,SAAS,GAAA,EAAK,CAAA,CAAE,MAAM,OAAO,CAAA;AAAA,IACrD,CAAC,CAAA;AAAA,EACH;AACF;;;ACdO,SAAS,qBAAA,GAEd;AACA,EAAA,IAAI,WAAA,GAAc,CAAA;AAClB,EAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,EAAA,IAAI,eAAA,GAAkB,CAAA;AAEtB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,OAAA,EAAS,OAAA;AAAA,IACT,IAAA,EAAM,CAAC,GAAA,KAAQ;AACb,MAAA,GAAA,CAAI,MAAA,CAAO,EAAA,CAAG,aAAA,EAAe,CAAC,CAAA,KAAM;AAClC,QAAA,WAAA,IAAe,CAAA;AACf,QAAA,aAAA,IAAiB,CAAA,CAAE,YAAA;AACnB,QAAA,eAAA,IAAmB,CAAA,CAAE,UAAA;AAAA,MACvB,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,UAAU,OAA0B;AAAA,MAClC,WAAA;AAAA,MACA,aAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAA,EAAmB,WAAA,KAAgB,CAAA,GAAI,CAAA,GAAI,eAAA,GAAkB;AAAA,KAC/D;AAAA,GACF;AACF;;;ACrBA,IAAM,UAAA,GAAa,6BAAA;AAEnB,SAAS,kBAAA,GAA2B;AAClC,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,EAAA,IAAI;AACF,IAAA,cAAA,CAAe,OAAA;AAAA,MACb,UAAA;AAAA,MACA,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM,CAAA,EAAG,MAAA,CAAO,OAAA,EAAS,CAAA,EAAG,MAAA,CAAO,SAAS;AAAA,KACrF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEA,SAAS,qBAAA,GAA8B;AACrC,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,cAAA,CAAe,OAAA,CAAQ,UAAU,CAAA;AAC7C,IAAA,IAAI,QAAQ,IAAA,EAAM;AAClB,IAAA,cAAA,CAAe,WAAW,UAAU,CAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM;AACzC,IAAA,MAAA,CAAO,SAAS,KAAA,CAAM,CAAA,IAAK,CAAA,EAAG,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,EAC5C,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEA,SAAS,sBAAA,GAA+B;AACtC,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,EAAA,kBAAA,EAAmB;AACnB,EAAA,MAAA,CAAO,SAAS,MAAA,EAAO;AACzB;AA8BA,IAAM,sBAAA,GAAyB,iBAAA;AAKxB,SAAS,kBAAA,CAAmB,OAAA,GAAqC,EAAC,EAAsB;AAC7F,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,QAAA;AACrC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,OAAA;AAAA,IACT,IAAA,EAAM,CAAC,GAAA,KAAQ;AAGb,MAAA,qBAAA,EAAsB;AACtB,MAAA,GAAA,CAAI,MAAA,CAAO,EAAA,CAAG,cAAA,EAAgB,MAAM;AAClC,QAAA,GAAA,CAAI,QAAA,EAAU,OAAA,EAAS,GAAA,CAAI,GAAG,CAAA;AAAA,MAChC,CAAC,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAEA,SAAS,GAAA,CACP,QAAA,EACA,OAAA,EACA,GAAA,EACM;AACN,EAAA,IAAI,aAAa,QAAA,EAAU;AAC3B,EAAA,IAAI,aAAa,QAAA,EAAU;AACzB,IAAA,sBAAA,EAAuB;AACvB,IAAA;AAAA,EACF;AACA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,KAAK,QAAA,CAAS,SAAS,GAAG,CAAA;AAC1B,IAAA;AAAA,EACF;AACA,EAAA,KAAK,aAAA,CAAc,SAAS,GAAG,CAAA;AACjC;AAEA,eAAe,QAAA,CACb,SACA,GAAA,EACe;AACf,EAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AACpB,IAAA,GAAA,CAAI,gEAAgE,CAAA;AACpE,IAAA;AAAA,EACF;AACA,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,OAAA,EAAQ;AAAA,EACxB,SAAS,GAAA,EAAK;AACZ,IAAA,GAAA,CAAI,gCAAgC,GAAG,CAAA;AAAA,EACzC;AACF;AAEA,eAAe,aAAA,CACb,SACA,GAAA,EACe;AACf,EAAA,IAAI,OAAO,UAAU,WAAA,EAAa;AAChC,IAAA,GAAA,CAAI,qEAAgE,CAAA;AACpE,IAAA;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAAM,QAAQ,aAAA,IAAiB,sBAAA;AACrC,EAAA,IAAI,EAAA,GAAK,KAAA;AACT,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAI,OAAA,CAAQ,iBAAA,IAAqB;AAAC,OACpC;AAAA,MACA,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,wBAAwB;AAAA,KACxD,CAAA;AACD,IAAA,EAAA,GAAK,QAAA,CAAS,EAAA;AACd,IAAA,IAAI,CAAC,EAAA,EAAI,GAAA,CAAI,mCAAA,EAAqC,SAAS,MAAM,CAAA;AAAA,EACnE,SAAS,GAAA,EAAK;AACZ,IAAA,GAAA,CAAI,oCAAoC,GAAG,CAAA;AAAA,EAC7C;AACA,EAAA,IAAI,CAAC,EAAA,IAAM,OAAA,CAAQ,mBAAA,KAAwB,QAAA,EAAU;AACnD,IAAA,sBAAA,EAAuB;AAAA,EACzB;AACF;;;ACxGO,SAAS,IAAA,CACd,OACA,OAAA,EACwB;AACxB,EAAA,OAAO,eAAA,CAAgB,OAAO,OAAO,CAAA;AACvC;AAiBO,SAAS,UAAA,CACd,QACA,OAAA,EACwB;AACxB,EAAA,MAAM,IAAA,GAAO,WAAW,MAAM,CAAA;AAC9B,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,GAAG,GAAG,OAAO,CAAA;AAChD;AAEA,SAAS,eAAA,CAAgB,OAAe,OAAA,EAA0D;AAChG,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,EAC/D;AACA,EAAA,MAAM,KAAA,GAIF,EAAE,oBAAA,EAAsB,KAAA,EAAM;AAClC,EAAA,IAAI,SAAS,SAAA,KAAc,MAAA,EAAW,KAAA,CAAM,wBAAwB,IAAI,OAAA,CAAQ,SAAA;AAChF,EAAA,IAAI,SAAS,IAAA,KAAS,MAAA,EAAW,KAAA,CAAM,mBAAmB,IAAI,OAAA,CAAQ,IAAA;AACtE,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,WAAW,MAAA,EAA4C;AAC9D,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,MAAM,QAAiB,IAAI,KAAA;AAAA,IACzB,EAAC;AAAA,IACD;AAAA,MACE,GAAA,CAAI,SAAS,IAAA,EAAgC;AAC3C,QAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,MAAA;AAErC,QAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,KAAA;AAC/B,QAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AACd,QAAA,OAAO,KAAA;AAAA,MACT;AAAA;AACF,GACF;AACA,EAAA,IAAI;AACF,IAAA,MAAA,CAAO,KAAc,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AAAA,EAIR;AACA,EAAA,OAAO,IAAA;AACT","file":"index.cjs","sourcesContent":["{\n \"name\": \"payload-live-preview\",\n \"version\": \"1.0.0\",\n \"description\": \"Framework-agnostic live preview for Payload CMS — Astro-first; works with Next.js, SvelteKit, Nuxt, and plain HTML.\",\n \"author\": \"relative23\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"./core\": {\n \"import\": {\n \"types\": \"./dist/core.d.ts\",\n \"default\": \"./dist/core.js\"\n },\n \"require\": {\n \"types\": \"./dist/core.d.cts\",\n \"default\": \"./dist/core.cjs\"\n }\n },\n \"./astro\": {\n \"import\": {\n \"types\": \"./dist/adapters/astro/index.d.ts\",\n \"default\": \"./dist/adapters/astro/index.js\"\n }\n },\n \"./nextjs\": {\n \"import\": {\n \"types\": \"./dist/adapters/nextjs/index.d.ts\",\n \"default\": \"./dist/adapters/nextjs/index.js\"\n }\n },\n \"./sveltekit\": {\n \"import\": {\n \"types\": \"./dist/adapters/sveltekit/index.d.ts\",\n \"default\": \"./dist/adapters/sveltekit/index.js\"\n }\n },\n \"./nuxt\": {\n \"import\": {\n \"types\": \"./dist/adapters/nuxt/index.d.ts\",\n \"default\": \"./dist/adapters/nuxt/index.js\"\n }\n },\n \"./codegen\": {\n \"import\": {\n \"types\": \"./dist/codegen.d.ts\",\n \"default\": \"./dist/codegen.js\"\n },\n \"require\": {\n \"types\": \"./dist/codegen.d.cts\",\n \"default\": \"./dist/codegen.cjs\"\n }\n },\n \"./codegen/astro\": {\n \"import\": {\n \"types\": \"./dist/codegen-astro.d.ts\",\n \"default\": \"./dist/codegen-astro.js\"\n }\n },\n \"./payload\": {\n \"import\": {\n \"types\": \"./dist/payload.d.ts\",\n \"default\": \"./dist/payload.js\"\n },\n \"require\": {\n \"types\": \"./dist/payload.d.cts\",\n \"default\": \"./dist/payload.cjs\"\n }\n },\n \"./astro/RichText.astro\": \"./dist/adapters/astro/RichText.astro\",\n \"./astro/middleware-entry\": {\n \"import\": {\n \"types\": \"./dist/adapters/astro/middleware-entry.d.ts\",\n \"default\": \"./dist/adapters/astro/middleware-entry.js\"\n }\n }\n },\n \"bin\": {\n \"pll-codegen\": \"./dist/codegen-cli.js\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"sideEffects\": false,\n \"scripts\": {\n \"prepare\": \"npm run build:runtime\",\n \"build:runtime\": \"tsx scripts/build-runtime.ts\",\n \"build\": \"npm run build:runtime && tsup && npm run build:assets\",\n \"build:assets\": \"node -e \\\"require('node:fs').copyFileSync('src/adapters/astro/RichText.astro','dist/adapters/astro/RichText.astro')\\\"\",\n \"dev\": \"tsup --watch\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:unit\": \"vitest run tests/unit\",\n \"test:integration\": \"vitest run tests/integration\",\n \"test:e2e\": \"playwright test\",\n \"test:bench\": \"vitest bench tests/benchmarks\",\n \"test:coverage\": \"vitest run --coverage\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint .\",\n \"lint:fix\": \"eslint . --fix\",\n \"format\": \"prettier --write \\\"src/**/*.ts\\\" \\\"tests/**/*.ts\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.ts\\\" \\\"tests/**/*.ts\\\"\",\n \"check\": \"npm run typecheck && npm run lint && npm run test\",\n \"prepublishOnly\": \"npm run check && npm run build\",\n \"changeset\": \"changeset\",\n \"version\": \"changeset version\",\n \"release\": \"npm run build && changeset publish\"\n },\n \"devDependencies\": {\n \"@changesets/cli\": \"^2.31.0\",\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.61.1\",\n \"@types/node\": \"^22.20.1\",\n \"@vitest/coverage-v8\": \"^4.1.10\",\n \"esbuild\": \"^0.28.1\",\n \"eslint\": \"^10.7.0\",\n \"globals\": \"^17.7.0\",\n \"jsdom\": \"^29.1.1\",\n \"prettier\": \"^3.9.5\",\n \"ts-morph\": \"^28.0.0\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.23.0\",\n \"typescript\": \"^5.9.3\",\n \"typescript-eslint\": \"^8.63.0\",\n \"vitest\": \"^4.1.10\"\n },\n \"keywords\": [\n \"payload\",\n \"payload-cms\",\n \"payload-live-preview\",\n \"live-preview\",\n \"cms\",\n \"headless\",\n \"astro\",\n \"nextjs\",\n \"sveltekit\",\n \"nuxt\",\n \"vue\",\n \"svelte\",\n \"schema-driven\",\n \"lexical\",\n \"csp-safe\",\n \"framework-agnostic\"\n ],\n \"peerDependencies\": {\n \"astro\": \">=4.0.0 <8.0.0\",\n \"ts-morph\": \"^28.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"astro\": {\n \"optional\": true\n },\n \"ts-morph\": {\n \"optional\": true\n }\n },\n \"engines\": {\n \"node\": \">=20.19.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/relative23/payload-live-preview.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/relative23/payload-live-preview/issues\"\n },\n \"homepage\": \"https://github.com/relative23/payload-live-preview#readme\"\n}\n","/**\n * Single source of truth for the library version.\n *\n * Both the npm package surface (`src/index.ts`, `src/core-entry.ts`)\n * and the inline runtime (`src/core/runtime.ts`, which gets bundled by\n * esbuild and embedded into `runtime.generated.ts`) read the version\n * from here so they never drift.\n *\n * Imports `package.json` directly — tsc, tsup, and esbuild all inline\n * the value at build time when `resolveJsonModule` is enabled.\n *\n * @module @/version\n */\n\nimport pkg from '../package.json' with { type: 'json' };\n\nexport const VERSION: string = pkg.version;\n","/**\n * Element cache.\n *\n * Stores the mapping from Payload field name to one-or-more cached\n * DOM bindings. Building the cache once at init (and rebuilding it\n * via MutationObserver) is the foundation of update-time performance:\n * an update walks the cache, not the entire DOM.\n *\n * Cache lookup is O(1) by field name; cache iteration is O(n) over\n * the bound elements only.\n *\n * Notes:\n * - Field types are inferred from element attributes when not given\n * explicitly. The resolver lives here so both runtime and tests\n * share the same logic.\n * - The cache holds *direct references* to elements — that is fine\n * for normal lifecycle because we tear down on `destroy()`. We do\n * not use WeakRefs because we need stable iteration order during\n * updates.\n *\n * @module @core/cache\n */\n\nimport type { CachedElement, ElementPredicate, FieldType } from './types';\n\nexport const FIELD_ATTRIBUTE = 'data-payload-field';\nexport const TYPE_ATTRIBUTE = 'data-payload-type';\nexport const TARGET_ATTRIBUTE_ATTRIBUTE = 'data-payload-attribute';\nexport const HREF_ATTRIBUTE = 'data-payload-href';\nexport const SRC_ATTRIBUTE = 'data-payload-src';\nexport const ALT_ATTRIBUTE = 'data-payload-alt';\nexport const ARRAY_TEMPLATE_ATTRIBUTE = 'data-payload-array-template';\nexport const ARRAY_SEPARATOR_ATTRIBUTE = 'data-payload-array-separator';\nexport const LOCALE_ATTRIBUTE = 'data-payload-locale';\n\nconst FIELD_SELECTOR = `[${FIELD_ATTRIBUTE}]`;\n\nconst VALID_FIELD_TYPES: ReadonlySet<FieldType> = new Set<FieldType>([\n 'text',\n 'textarea',\n 'richText',\n 'email',\n 'number',\n 'checkbox',\n 'date',\n 'select',\n 'radio',\n 'array',\n 'blocks',\n 'group',\n 'tabs',\n 'row',\n 'collapsible',\n 'relationship',\n 'upload',\n 'point',\n 'json',\n 'code',\n 'ui',\n 'html',\n 'url',\n 'image',\n 'structural-array',\n]);\n\n/**\n * Statistics produced after each cache rebuild.\n */\nexport interface CacheBuildStats {\n readonly elementCount: number;\n readonly fieldCount: number;\n readonly durationMs: number;\n}\n\nexport interface ElementCacheOptions {\n /** Predicate restricting which elements are accepted. Defaults to \"accept all\". */\n readonly filter?: ElementPredicate;\n}\n\n/**\n * Element cache built from `data-payload-field` annotations.\n *\n * Multiple elements can share the same field name; iteration order\n * within a field is insertion order, mirroring DOM order when built\n * via `buildFromRoot()`.\n */\nexport class ElementCache {\n readonly #entries = new Map<string, CachedElement[]>();\n readonly #elementToEntry = new WeakMap<Element, CachedElement>();\n readonly #filter: ElementPredicate;\n\n constructor(options: ElementCacheOptions = {}) {\n this.#filter = options.filter ?? alwaysTrue;\n }\n\n /**\n * Rebuild the cache from `root`'s descendants. Pre-existing entries\n * are discarded. Returns build statistics so callers can emit\n * cache-refresh events with the durations populated.\n */\n buildFromRoot(root: ParentNode): CacheBuildStats {\n const t0 = performance.now();\n this.#entries.clear();\n\n const elements = root.querySelectorAll(FIELD_SELECTOR);\n let elementCount = 0;\n for (const element of elements) {\n if (!this.#filter(element)) continue;\n const entry = this.#resolveBinding(element);\n if (!entry) continue;\n this.#append(entry);\n this.#elementToEntry.set(element, entry);\n elementCount += 1;\n }\n\n return {\n elementCount,\n fieldCount: this.#entries.size,\n durationMs: performance.now() - t0,\n };\n }\n\n /**\n * Insert a single element into the cache, returning the new entry\n * (or `undefined` if the element does not declare a valid binding).\n */\n add(element: Element): CachedElement | undefined {\n if (!this.#filter(element)) return undefined;\n const entry = this.#resolveBinding(element);\n if (!entry) return undefined;\n this.#append(entry);\n this.#elementToEntry.set(element, entry);\n return entry;\n }\n\n /**\n * Remove the entry bound to `element`, if any. Returns `true` when a\n * binding was actually removed.\n */\n remove(element: Element): boolean {\n const entry = this.#elementToEntry.get(element);\n if (!entry) return false;\n this.#elementToEntry.delete(element);\n const bucket = this.#entries.get(entry.fieldName);\n if (!bucket) return false;\n const index = bucket.indexOf(entry);\n if (index < 0) return false;\n bucket.splice(index, 1);\n if (bucket.length === 0) this.#entries.delete(entry.fieldName);\n return true;\n }\n\n /** Returns the cached bindings for `fieldName`, or `undefined`. */\n get(fieldName: string): readonly CachedElement[] | undefined {\n return this.#entries.get(fieldName);\n }\n\n /** Returns the cache entry for `element`, or `undefined`. */\n getByElement(element: Element): CachedElement | undefined {\n return this.#elementToEntry.get(element);\n }\n\n /** Number of distinct field names currently cached. */\n get fieldCount(): number {\n return this.#entries.size;\n }\n\n /** Total number of cached element bindings. */\n get elementCount(): number {\n let count = 0;\n for (const bucket of this.#entries.values()) count += bucket.length;\n return count;\n }\n\n /** Iterate `[fieldName, bindings]` pairs. */\n entries(): IterableIterator<[string, readonly CachedElement[]]> {\n return this.#entries.entries() as IterableIterator<[string, readonly CachedElement[]]>;\n }\n\n /** Iterate every cached binding. */\n *values(): IterableIterator<CachedElement> {\n for (const bucket of this.#entries.values()) yield* bucket;\n }\n\n /** Test whether `element` is registered with the cache. */\n has(element: Element): boolean {\n return this.#elementToEntry.has(element);\n }\n\n /** Remove every entry. */\n clear(): void {\n this.#entries.clear();\n }\n\n #append(entry: CachedElement): void {\n const bucket = this.#entries.get(entry.fieldName);\n if (bucket) {\n bucket.push(entry);\n return;\n }\n this.#entries.set(entry.fieldName, [entry]);\n }\n\n #resolveBinding(element: Element): CachedElement | undefined {\n const fieldName = element.getAttribute(FIELD_ATTRIBUTE);\n if (fieldName === null || fieldName.length === 0) return undefined;\n const explicit = element.getAttribute(TYPE_ATTRIBUTE);\n const fieldType = resolveFieldType(element);\n const targetAttribute = element.getAttribute(TARGET_ATTRIBUTE_ATTRIBUTE);\n const hrefField = element.getAttribute(HREF_ATTRIBUTE);\n const srcField = element.getAttribute(SRC_ATTRIBUTE);\n const altField = element.getAttribute(ALT_ATTRIBUTE);\n const arrayTemplate = element.getAttribute(ARRAY_TEMPLATE_ATTRIBUTE);\n const arraySeparator = element.getAttribute(ARRAY_SEPARATOR_ATTRIBUTE);\n const locale = element.getAttribute(LOCALE_ATTRIBUTE);\n\n const entry: CachedElement = {\n element,\n fieldName,\n fieldType,\n explicitFieldType: explicit !== null && VALID_FIELD_TYPES.has(explicit as FieldType),\n ...(targetAttribute !== null && targetAttribute.length > 0 ? { targetAttribute } : {}),\n ...(hrefField !== null ? { hrefField } : {}),\n ...(srcField !== null ? { srcField } : {}),\n ...(altField !== null ? { altField } : {}),\n ...(arrayTemplate !== null ? { arrayTemplate } : {}),\n ...(arraySeparator !== null ? { arraySeparator } : {}),\n ...(locale !== null ? { locale } : {}),\n };\n return entry;\n }\n}\n\n/**\n * Resolve the field type for an element by combining the explicit\n * `data-payload-type` attribute with element-tag heuristics. Falls\n * back to `text`.\n */\nexport function resolveFieldType(element: Element): FieldType {\n const explicit = element.getAttribute(TYPE_ATTRIBUTE);\n if (explicit !== null && VALID_FIELD_TYPES.has(explicit as FieldType)) {\n return explicit as FieldType;\n }\n if (element.hasAttribute('data-payload-richtext')) return 'richText';\n if (element.hasAttribute('data-payload-html')) return 'html';\n if (element.hasAttribute('data-payload-structural')) return 'structural-array';\n if (element.hasAttribute('data-payload-array')) return 'array';\n if (element.tagName === 'IMG') return 'image';\n if (element.tagName === 'A') return 'url';\n if (element.tagName === 'TIME') return 'date';\n if (element.tagName === 'INPUT') {\n const inputType = (element as HTMLInputElement).type;\n if (inputType === 'checkbox') return 'checkbox';\n if (inputType === 'number') return 'number';\n if (inputType === 'date' || inputType === 'datetime-local') return 'date';\n }\n return 'text';\n}\n\nfunction alwaysTrue(): boolean {\n return true;\n}\n","/**\n * DOM observers — mutation tracking + visibility tracking.\n *\n * Two purposes:\n *\n * 1. Detect when new `data-payload-field` elements appear, when\n * existing ones disappear, and when the field attribute itself\n * changes. The observer debounces these mutations and then asks\n * its host to rebuild the cache.\n * 2. Track which cached elements are within the viewport (with a\n * configurable rootMargin). Updates for off-screen elements are\n * queued by the scheduler and replayed when the element scrolls\n * into view — solving the \"stale offscreen content\" bug from the\n * legacy implementation.\n *\n * The observers are split from the cache and the scheduler because:\n * - They are environment-specific (need `MutationObserver` and\n * `IntersectionObserver`).\n * - Tests can supply mock observers for deterministic timing.\n *\n * @module @core/observers\n */\n\nimport { FIELD_ATTRIBUTE } from './cache';\n\n/**\n * Callbacks the observer manager invokes back into its host.\n */\nexport interface ObserverCallbacks {\n /** Invoked when the cache likely needs a rebuild. */\n readonly onStructuralChange: () => void;\n /** Invoked when an element enters or leaves the viewport. */\n readonly onVisibilityChange: (element: Element, isVisible: boolean) => void;\n}\n\n/**\n * Tunable parameters for the observer manager.\n */\nexport interface ObserverOptions {\n /** Debounce window for mutation events (ms). Default: 100. */\n readonly mutationDebounceMs?: number;\n /** rootMargin passed to IntersectionObserver. Default: `200px`. */\n readonly intersectionRootMargin?: string;\n}\n\nconst DEFAULT_DEBOUNCE_MS = 100;\nconst DEFAULT_ROOT_MARGIN = '200px';\n\n/**\n * Combined Mutation + Intersection observer.\n *\n * Lifecycle:\n * - `start(root)` attaches the mutation observer to `root`.\n * - `observeElement(el)` adds `el` to the intersection observer.\n * - `unobserveElement(el)` removes it.\n * - `stop()` disconnects everything; safe to call repeatedly.\n */\nexport class ObserverManager {\n readonly #callbacks: ObserverCallbacks;\n readonly #debounceMs: number;\n readonly #rootMargin: string;\n readonly #visible = new Set<Element>();\n #mutation: MutationObserver | null = null;\n #intersection: IntersectionObserver | null = null;\n #debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(callbacks: ObserverCallbacks, options: ObserverOptions = {}) {\n this.#callbacks = callbacks;\n this.#debounceMs = options.mutationDebounceMs ?? DEFAULT_DEBOUNCE_MS;\n this.#rootMargin = options.intersectionRootMargin ?? DEFAULT_ROOT_MARGIN;\n }\n\n /** Begin observing `root` for mutations and create the intersection observer. */\n start(root: Node): void {\n this.#mutation = new MutationObserver((mutations) => {\n this.#handleMutations(mutations);\n });\n this.#mutation.observe(root, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [FIELD_ATTRIBUTE],\n });\n\n this.#intersection = new IntersectionObserver(\n (entries) => {\n this.#handleIntersection(entries);\n },\n { rootMargin: this.#rootMargin, threshold: 0 },\n );\n }\n\n /** Add an element to the intersection observer. */\n observeElement(element: Element): void {\n this.#intersection?.observe(element);\n }\n\n /** Remove an element from the intersection observer. */\n unobserveElement(element: Element): void {\n this.#intersection?.unobserve(element);\n this.#visible.delete(element);\n }\n\n /** Mark an element as currently visible. Useful for tests/seeding. */\n markVisible(element: Element, visible: boolean): void {\n if (visible) this.#visible.add(element);\n else this.#visible.delete(element);\n }\n\n /** Is `element` currently within the (margined) viewport? */\n isVisible(element: Element): boolean {\n return this.#visible.has(element);\n }\n\n /** Disconnect all observers and clear pending timers. */\n stop(): void {\n if (this.#debounceTimer !== null) {\n clearTimeout(this.#debounceTimer);\n this.#debounceTimer = null;\n }\n this.#mutation?.disconnect();\n this.#intersection?.disconnect();\n this.#mutation = null;\n this.#intersection = null;\n this.#visible.clear();\n }\n\n #handleMutations(mutations: readonly MutationRecord[]): void {\n if (!hasStructuralImpact(mutations)) return;\n if (this.#debounceTimer !== null) clearTimeout(this.#debounceTimer);\n this.#debounceTimer = setTimeout(() => {\n this.#debounceTimer = null;\n this.#callbacks.onStructuralChange();\n }, this.#debounceMs);\n }\n\n #handleIntersection(entries: readonly IntersectionObserverEntry[]): void {\n for (const entry of entries) {\n const target = entry.target;\n if (entry.isIntersecting) {\n if (!this.#visible.has(target)) {\n this.#visible.add(target);\n this.#callbacks.onVisibilityChange(target, true);\n }\n } else if (this.#visible.has(target)) {\n this.#visible.delete(target);\n this.#callbacks.onVisibilityChange(target, false);\n }\n }\n }\n}\n\n/**\n * Returns true iff any mutation in the batch affects the live preview\n * tracking attributes. This short-circuits the common case where DOM\n * activity is unrelated to the preview, avoiding spurious rebuilds.\n */\nfunction hasStructuralImpact(mutations: readonly MutationRecord[]): boolean {\n for (const m of mutations) {\n if (m.type === 'attributes' && m.attributeName === FIELD_ATTRIBUTE) return true;\n for (const node of m.addedNodes) {\n if (containsTrackedElement(node)) return true;\n }\n for (const node of m.removedNodes) {\n if (containsTrackedElement(node)) return true;\n }\n }\n return false;\n}\n\nfunction containsTrackedElement(node: Node): boolean {\n if (node.nodeType !== Node.ELEMENT_NODE) return false;\n const element = node as Element;\n if (element.hasAttribute(FIELD_ATTRIBUTE)) return true;\n return element.querySelector(`[${FIELD_ATTRIBUTE}]`) !== null;\n}\n","/**\n * Protocol-version negotiation.\n *\n * ⚠️ Reality check: **stock Payload does not version its live-preview\n * postMessage protocol.** The admin never sends a `protocolVersion`\n * field and ignores extra fields in our `ready` handshake. Observed\n * wire behaviour:\n *\n * - Payload **2.x** sent `fieldSchemaJSON` with the first update\n * (client-side merge era).\n * - Payload **3.x** removed `fieldSchemaJSON` entirely; the official\n * client re-fetches merged documents through the REST API instead.\n * - No Payload version sends `previewToken` or any keepalive.\n *\n * This module therefore only matters for NON-stock admin panels — a\n * custom `window.postMessage` sender can advertise a version and this\n * library will negotiate `min(ours, theirs)` and expose capability\n * flags. Against stock Payload, `theirs` stays `undefined`, negotiation\n * collapses to v1, and nothing is gated on it: schema handling\n * activates whenever `fieldSchemaJSON` is actually present, and token\n * validation only runs when the consumer opts in.\n *\n * Version ladder (this library's own numbering, not Payload's):\n *\n * - **v1** — data + slug + locale (matches stock Payload of any era).\n * - **v2** — remote sends `fieldSchemaJSON` (Payload 2.x behaviour).\n * - **v3** — remote sends `previewToken` (custom senders only).\n * - **v4** — nested-array recursion / richer document events\n * (custom senders only).\n *\n * @module @core/protocol-version\n */\n\nexport const LIBRARY_PROTOCOL_VERSION = 4;\n\n/** Capability flag → minimum protocol version it requires. */\nconst CAPABILITY_REQUIREMENTS: Readonly<Record<string, number>> = {\n basic: 1,\n 'schema-json': 2,\n 'preview-token': 3,\n 'nested-arrays': 4,\n 'recursive-diffs': 4,\n} as const;\n\nexport type ProtocolCapability = keyof typeof CAPABILITY_REQUIREMENTS;\n\nexport interface ProtocolNegotiation {\n /** This library's protocol version. */\n readonly ours: number;\n /** The remote party's version, when known. */\n readonly theirs: number | undefined;\n /** `min(ours, theirs ?? 1)` — the version both sides actually share. */\n readonly negotiated: number;\n /** Capability flags enabled at the negotiated version. */\n readonly capabilities: ReadonlySet<string>;\n}\n\n/**\n * Compute the negotiated view of the protocol.\n *\n * `theirs === undefined` collapses to v1 — assume the remote party is\n * an older Payload that does not advertise a version.\n *\n * Non-finite or non-positive `theirs` values fall back to v1 as well —\n * we never trust an obviously-corrupted negotiation byte.\n */\nexport function negotiateProtocol(theirs: number | undefined): ProtocolNegotiation {\n const sanitisedTheirs =\n typeof theirs === 'number' && Number.isFinite(theirs) && theirs >= 1\n ? Math.floor(theirs)\n : undefined;\n const effectiveTheirs = sanitisedTheirs ?? 1;\n const negotiated = Math.min(LIBRARY_PROTOCOL_VERSION, effectiveTheirs);\n const capabilities = new Set<string>();\n for (const [flag, minVersion] of Object.entries(CAPABILITY_REQUIREMENTS)) {\n if (negotiated >= minVersion) capabilities.add(flag);\n }\n return {\n ours: LIBRARY_PROTOCOL_VERSION,\n ...(sanitisedTheirs !== undefined ? { theirs: sanitisedTheirs } : { theirs: undefined }),\n negotiated,\n capabilities,\n };\n}\n\nexport function hasCapability(\n negotiation: ProtocolNegotiation,\n capability: ProtocolCapability,\n): boolean {\n return negotiation.capabilities.has(capability);\n}\n","/**\n * Message bus — postMessage receive + send with strict validation.\n *\n * Responsibilities:\n *\n * 1. Subscribe to the `message` event and reject anything that does\n * not come from a trusted origin (matcher injected by the caller).\n * 2. Validate message shape with type guards before exposing the\n * payload to downstream code. Anything malformed is dropped.\n * 3. Send the `ready` handshake to potential parent windows.\n *\n * The matcher pattern decouples origin policy from message handling:\n * - the runtime's origin detector decides which origins are valid;\n * - the bus simply asks \"is this origin valid?\" for every message.\n *\n * The bus never throws. Every validation failure becomes either a\n * silent drop or a routed `onInvalid` callback.\n *\n * @module @core/message-bus\n */\n\nimport type {\n PayloadLivePreviewMessage,\n PayloadDocumentEventMessage,\n PayloadProtocolMessage,\n} from '@/types/payload-protocol';\nimport { LIBRARY_PROTOCOL_VERSION } from './protocol-version';\n\nexport type OriginMatcher = (origin: string) => boolean;\n\nexport interface MessageHandlers {\n /** Validated live preview data update. */\n readonly onUpdate: (msg: PayloadLivePreviewMessage, origin: string) => void;\n /** Validated document save event. */\n readonly onDocumentEvent: (msg: PayloadDocumentEventMessage, origin: string) => void;\n /**\n * Invoked when a message is rejected. Optional — used by debug logging.\n *\n * `reason` is one of `origin`, `shape`, `type`, `token`.\n */\n readonly onInvalid?: (reason: 'origin' | 'shape' | 'type' | 'token', origin: string) => void;\n /**\n * Optional preview-token gate. When set, every `payload-live-preview`\n * update message must carry a `previewToken` that this function\n * approves; otherwise the message is dropped with reason `'token'`.\n *\n * Returning a Promise is supported — the bus serialises validation\n * per message. Validation errors are treated as rejection (silent).\n */\n readonly validateToken?: (\n token: string | undefined,\n origin: string,\n ) => boolean | Promise<boolean>;\n}\n\nexport class MessageBus {\n readonly #matcher: OriginMatcher;\n readonly #handlers: MessageHandlers;\n readonly #boundListener: (event: MessageEvent) => void;\n #attached = false;\n\n constructor(matcher: OriginMatcher, handlers: MessageHandlers) {\n this.#matcher = matcher;\n this.#handlers = handlers;\n this.#boundListener = (event: MessageEvent): void => {\n this.#receive(event);\n };\n }\n\n /** Begin listening for window-level `message` events. Idempotent. */\n attach(target: Window = window): void {\n if (this.#attached) return;\n target.addEventListener('message', this.#boundListener);\n this.#attached = true;\n }\n\n /** Stop listening. Idempotent. */\n detach(target: Window = window): void {\n if (!this.#attached) return;\n target.removeEventListener('message', this.#boundListener);\n this.#attached = false;\n }\n\n /**\n * Send a `ready` handshake message to one or more parent windows.\n *\n * `targets` are the windows to notify (parent and/or opener). For\n * each target the message is sent to every `origin` so the Payload\n * admin in the parent receives it regardless of which origin it\n * happens to be served on.\n */\n static sendReady(targets: readonly Window[], origins: readonly string[]): void {\n if (targets.length === 0 || origins.length === 0) return;\n const payload: PayloadLivePreviewMessage = {\n type: 'payload-live-preview',\n ready: true,\n protocolVersion: LIBRARY_PROTOCOL_VERSION,\n };\n for (const target of targets) {\n for (const origin of origins) {\n try {\n target.postMessage(payload, origin);\n } catch {\n // postMessage can throw if the origin string is malformed.\n // Swallow silently — invalid origins are someone else's\n // configuration problem and we already log via onInvalid.\n }\n }\n }\n }\n\n #receive(event: MessageEvent): void {\n const origin = event.origin;\n if (!this.#matcher(origin)) {\n this.#handlers.onInvalid?.('origin', origin);\n return;\n }\n const data: unknown = event.data;\n if (!isObjectMessage(data)) {\n this.#handlers.onInvalid?.('shape', origin);\n return;\n }\n switch (data.type) {\n case 'payload-live-preview':\n this.#dispatchUpdate(data, origin);\n return;\n case 'payload-document-event':\n this.#handlers.onDocumentEvent(data, origin);\n return;\n default:\n this.#handlers.onInvalid?.('type', origin);\n }\n }\n\n #dispatchUpdate(message: PayloadLivePreviewMessage, origin: string): void {\n const validator = this.#handlers.validateToken;\n if (validator === undefined) {\n this.#handlers.onUpdate(message, origin);\n return;\n }\n // The `ready` handshake handshake doesn't carry a token; let it\n // through so the parent learns we're listening even when auth is\n // enabled. Only `data`-bearing updates are gated.\n if (message.ready === true && message.data === undefined) {\n this.#handlers.onUpdate(message, origin);\n return;\n }\n let approved: boolean | Promise<boolean>;\n try {\n approved = validator(message.previewToken, origin);\n } catch {\n this.#handlers.onInvalid?.('token', origin);\n return;\n }\n if (typeof approved === 'boolean') {\n if (approved) this.#handlers.onUpdate(message, origin);\n else this.#handlers.onInvalid?.('token', origin);\n return;\n }\n void approved.then(\n (ok) => {\n if (ok) this.#handlers.onUpdate(message, origin);\n else this.#handlers.onInvalid?.('token', origin);\n },\n () => {\n this.#handlers.onInvalid?.('token', origin);\n },\n );\n }\n}\n\nfunction isObjectMessage(value: unknown): value is PayloadProtocolMessage {\n if (typeof value !== 'object' || value === null) return false;\n if (!('type' in value)) return false;\n return typeof value.type === 'string';\n}\n","/**\n * Connection state + heartbeat.\n *\n * Tracks whether the runtime is currently receiving updates from a\n * trusted origin and fires a callback when the heartbeat times out.\n *\n * The heartbeat is reset on every valid message and considered dead\n * after `timeoutMs` of silence. The host typically responds by\n * re-sending the `ready` handshake to attempt reconnection.\n *\n * @module @core/state\n */\n\nexport type ConnectionStatus = 'disconnected' | 'connecting' | 'connected';\n\nexport interface HeartbeatOptions {\n /**\n * Milliseconds of silence before declaring a timeout. `0` disables\n * the timer entirely — the correct default for the real Payload\n * protocol, which sends messages only on form edits and therefore\n * has no keepalive: any idle-based timeout would produce false\n * disconnects while the editor simply isn't typing.\n */\n readonly timeoutMs?: number;\n /** Callback invoked when the heartbeat times out. */\n readonly onTimeout: () => void;\n}\n\nconst DEFAULT_TIMEOUT_MS = 0;\n\n/**\n * Heartbeat timer with `kick`/`stop` semantics. `kick()` is invoked\n * on every valid incoming message; if it is not called within\n * `timeoutMs` the `onTimeout` callback fires. A `timeoutMs` of `0`\n * (the default) disables the timer.\n */\nexport class HeartbeatTimer {\n readonly #timeoutMs: number;\n readonly #onTimeout: () => void;\n #handle: ReturnType<typeof setTimeout> | null = null;\n #lastKick = 0;\n\n constructor(options: HeartbeatOptions) {\n this.#timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.#onTimeout = options.onTimeout;\n }\n\n /** Reset the timer. Schedules `onTimeout` after `timeoutMs`. */\n kick(): void {\n this.#lastKick = Date.now();\n if (this.#timeoutMs <= 0) return;\n if (this.#handle !== null) clearTimeout(this.#handle);\n this.#handle = setTimeout(() => {\n this.#handle = null;\n this.#onTimeout();\n }, this.#timeoutMs);\n }\n\n /** Cancel any pending timeout. Safe to call repeatedly. */\n stop(): void {\n if (this.#handle === null) return;\n clearTimeout(this.#handle);\n this.#handle = null;\n }\n\n /** Test introspection: timestamp of the most recent kick (ms epoch). */\n get lastKickAt(): number {\n return this.#lastKick;\n }\n\n /** Test introspection: is a timeout currently scheduled? */\n get pending(): boolean {\n return this.#handle !== null;\n }\n}\n\n/**\n * Pure-data connection-status tracker. Exposes transitions through\n * a callback so the host can wire it to its event emitter.\n */\nexport class ConnectionState {\n #status: ConnectionStatus = 'disconnected';\n readonly #onChange: (next: ConnectionStatus, previous: ConnectionStatus) => void;\n\n constructor(onChange: (next: ConnectionStatus, previous: ConnectionStatus) => void) {\n this.#onChange = onChange;\n }\n\n get status(): ConnectionStatus {\n return this.#status;\n }\n\n /** Mark as `connected`; idempotent. Returns true if state transitioned. */\n markConnected(): boolean {\n return this.#transition('connected');\n }\n\n /** Mark as `connecting`; idempotent. */\n markConnecting(): boolean {\n return this.#transition('connecting');\n }\n\n /** Mark as `disconnected`; idempotent. */\n markDisconnected(): boolean {\n return this.#transition('disconnected');\n }\n\n #transition(next: ConnectionStatus): boolean {\n if (this.#status === next) return false;\n const previous = this.#status;\n this.#status = next;\n this.#onChange(next, previous);\n return true;\n }\n}\n","/**\n * Server-side data merging for Payload 3.x.\n *\n * The Payload 3.x admin posts **raw form values** on every edit:\n * relationship and upload fields arrive as bare IDs, and nothing is\n * depth-populated. The official `@payloadcms/live-preview` client\n * solves this by re-fetching the document through the Payload REST\n * API with an `X-Payload-HTTP-Method-Override: GET` request — the\n * server merges the form values into the stored document and returns\n * the populated result.\n *\n * `DataMerger` replicates that exact request shape. It is optional:\n * when no `serverURL` is configured the runtime renders the raw form\n * values directly, which is fine for scalar fields but leaves\n * relationship/upload fields as IDs.\n *\n * Coalescing: only the most recent update matters, so an in-flight\n * request is aborted whenever a newer one starts. Failures degrade\n * gracefully — the caller falls back to the raw values.\n *\n * @module @core/data-merger\n */\n\nexport interface DataMergerOptions {\n /** Payload server origin, e.g. `https://cms.example.com`. */\n readonly serverURL: string;\n /** REST API route prefix. Defaults to `/api`. */\n readonly apiRoute?: string;\n /** Population depth requested from the server. Defaults to `1`. */\n readonly depth?: number;\n /** Injectable fetch implementation (tests, SSR shims). */\n readonly fetchFn?: typeof fetch;\n /** Diagnostic logger. */\n readonly log?: (...args: unknown[]) => void;\n}\n\nexport interface MergeRequest {\n readonly collectionSlug?: string | undefined;\n readonly globalSlug?: string | undefined;\n readonly data: Record<string, unknown>;\n readonly locale?: string | undefined;\n}\n\n/**\n * Outcome of a merge attempt.\n *\n * - `merged` — the server returned a populated document.\n * - `superseded` — a newer update aborted this one; drop it silently.\n * - `unavailable` — not mergeable / fetch failed; fall back to the\n * raw form values.\n */\nexport type MergeResult =\n | { readonly status: 'merged'; readonly doc: Record<string, unknown> }\n | { readonly status: 'superseded' }\n | { readonly status: 'unavailable' };\n\nconst noop = (): void => undefined;\n\nexport class DataMerger {\n readonly #serverURL: string;\n readonly #apiRoute: string;\n readonly #depth: number;\n readonly #fetchFn: typeof fetch | undefined;\n readonly #log: (...args: unknown[]) => void;\n #inflight: AbortController | null = null;\n\n constructor(options: DataMergerOptions) {\n // Normalise: no trailing slash on the origin, leading slash on the route.\n this.#serverURL = options.serverURL.replace(/\\/+$/, '');\n const route = options.apiRoute ?? '/api';\n this.#apiRoute = route.startsWith('/') ? route : `/${route}`;\n this.#depth = options.depth ?? 1;\n this.#fetchFn = options.fetchFn;\n this.#log = options.log ?? noop;\n }\n\n /**\n * Whether this message can be merged at all: collections need an\n * `id` in the form values (the admin always includes one), globals\n * only need their slug.\n */\n canMerge(request: MergeRequest): boolean {\n if (request.globalSlug !== undefined && request.globalSlug !== '') return true;\n if (request.collectionSlug === undefined || request.collectionSlug === '') return false;\n const id = request.data['id'];\n return typeof id === 'string' || typeof id === 'number';\n }\n\n /**\n * Merge raw form values into the stored document via the Payload\n * REST API. See {@link MergeResult} for the outcome semantics.\n */\n async merge(request: MergeRequest): Promise<MergeResult> {\n if (!this.canMerge(request)) return { status: 'unavailable' };\n const fetchFn = this.#fetchFn ?? (typeof fetch === 'function' ? fetch : undefined);\n if (fetchFn === undefined) return { status: 'unavailable' };\n\n this.#inflight?.abort();\n const controller = new AbortController();\n this.#inflight = controller;\n\n const endpoint =\n request.globalSlug !== undefined && request.globalSlug !== ''\n ? `globals/${request.globalSlug}`\n : `${request.collectionSlug}/${String(request.data['id'])}`;\n const url = `${this.#serverURL}${this.#apiRoute}/${encodeURI(endpoint)}`;\n\n try {\n const response = await fetchFn(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n // Payload's REST layer treats this POST as a GET with a body:\n // the body's `data` is merged into the stored document and the\n // populated result is returned.\n 'X-Payload-HTTP-Method-Override': 'GET',\n },\n body: JSON.stringify({\n data: request.data,\n depth: this.#depth,\n // The admin already flattens locales before posting.\n flattenLocales: false,\n ...(request.locale !== undefined ? { locale: request.locale } : {}),\n }),\n signal: controller.signal,\n });\n if (!response.ok) {\n this.#log('merge fetch failed', response.status, url);\n return { status: 'unavailable' };\n }\n const merged: unknown = await response.json();\n if (merged === null || typeof merged !== 'object' || Array.isArray(merged)) {\n this.#log('merge fetch returned non-object', url);\n return { status: 'unavailable' };\n }\n return { status: 'merged', doc: merged as Record<string, unknown> };\n } catch (error) {\n if (controller.signal.aborted) return { status: 'superseded' };\n this.#log('merge fetch error', error);\n return { status: 'unavailable' };\n } finally {\n if (this.#inflight === controller) this.#inflight = null;\n }\n }\n\n /** Abort any in-flight merge request. */\n destroy(): void {\n this.#inflight?.abort();\n this.#inflight = null;\n }\n}\n","/**\n * URL safety validation.\n *\n * Single source of truth for URL-protocol decisions used by both the\n * inline runtime and the high-level client. The previous version of\n * this library had two implementations that subtly disagreed; this\n * module replaces both.\n *\n * Policy:\n * - Allow only the protocols in `SAFE_PROTOCOLS`.\n * - Reject every other protocol explicitly, including `javascript:`,\n * `data:`, `vbscript:`, `file:`, `blob:`, and any custom scheme.\n * - Empty strings are NOT considered safe (this is a tightening from\n * the legacy behaviour and avoids producing `<a href=\"\">` markup).\n *\n * @module @security/url-validator\n */\n\nconst SAFE_PROTOCOLS: ReadonlySet<string> = new Set(['http:', 'https:', 'mailto:', 'tel:']);\n\n// Matches dangerous-scheme prefixes even with leading whitespace that some\n// browsers strip before scheme detection.\nconst DANGEROUS_PROTOCOL_PATTERN = /^\\s*(?:javascript|data|vbscript|file|blob|about)\\s*:/i;\n\nconst RELATIVE_PATH = /^(?:\\.{1,2}\\/|[a-zA-Z0-9_-]+\\/?)/;\n\n/**\n * Returns `true` only when `url` is one of the explicitly allowed forms:\n *\n * - Absolute URL with `http:`, `https:`, `mailto:`, or `tel:` protocol\n * - Protocol-relative URL (`//example.com/...`)\n * - Same-origin absolute path (`/foo`)\n * - Hash or query fragment (`#section`, `?q=1`)\n * - Plain relative path (`foo/bar`, `./foo`, `../foo`)\n */\nexport function isSafeUrl(url: unknown): boolean {\n if (typeof url !== 'string' || url.length === 0) return false;\n const trimmed = url.trim();\n if (trimmed.length === 0) return false;\n\n // Eliminate dangerous schemes before any parsing.\n if (DANGEROUS_PROTOCOL_PATTERN.test(trimmed)) return false;\n\n // Same-document fragments and query-only URLs are always safe.\n if (trimmed.startsWith('#') || trimmed.startsWith('?')) return true;\n\n // Protocol-relative URLs inherit the page scheme; treat as safe.\n if (trimmed.startsWith('//')) return true;\n\n // Same-origin absolute paths are safe.\n if (trimmed.startsWith('/')) return true;\n\n // Try to parse as a fully qualified URL; fall back to a relative-path\n // heuristic if the input has no scheme at all.\n try {\n const parsed = new URL(trimmed);\n return SAFE_PROTOCOLS.has(parsed.protocol);\n } catch {\n return RELATIVE_PATH.test(trimmed);\n }\n}\n\n/**\n * Returns `true` when the URL points to an external HTTP(S) origin.\n * Protocol-relative URLs (`//example.com/...`) count as external —\n * they resolve to another origin and need the same `noopener`\n * hardening as absolute ones.\n *\n * Used by renderers to decide whether to add `target=\"_blank\"` and the\n * `noopener noreferrer` rel attributes to anchors. Inputs that fail\n * `isSafeUrl()` always return `false`.\n */\nexport function isExternalHttpUrl(url: string): boolean {\n if (!isSafeUrl(url)) return false;\n const trimmed = url.trim();\n return /^https?:\\/\\//i.test(trimmed) || /^\\/\\/[^/]/.test(trimmed);\n}\n\n/**\n * The set of protocols this library considers safe. Exposed for tests\n * and consumer introspection; do not mutate.\n */\nexport const SAFE_URL_PROTOCOLS: ReadonlySet<string> = SAFE_PROTOCOLS;\n","/**\n * Policed attribute writes for `data-payload-attribute` bindings.\n *\n * The binding writes an incoming CMS value into an arbitrary attribute\n * (`<img data-payload-field=\"hero\" data-payload-attribute=\"src\">`,\n * `<time ... data-payload-attribute=\"datetime\">`). Because the value is\n * remote-controlled, the write path enforces:\n *\n * - no event handlers (`on*`), no `style`, no `srcdoc`,\n * no `formaction`/`form`, no `id`/`name` (DOM clobbering);\n * - URL-bearing attributes (`href`, `src`, `poster`, `cite`,\n * `action`, `xlink:href`) must pass `isSafeUrl`;\n * - `srcset` is refused outright (multi-URL syntax — bind `src`\n * instead);\n * - non-scalar values are refused.\n *\n * @module @core/attribute-binding\n */\n\nimport { isSafeUrl } from '@security/url-validator';\n\nconst BLOCKED_ATTRIBUTES: ReadonlySet<string> = new Set([\n 'style',\n 'srcdoc',\n 'formaction',\n 'form',\n 'id',\n 'name',\n 'is',\n 'srcset',\n 'imagesrcset',\n]);\n\nconst URL_ATTRIBUTES: ReadonlySet<string> = new Set([\n 'href',\n 'src',\n 'poster',\n 'cite',\n 'action',\n 'xlink:href',\n 'data',\n]);\n\nexport type AttributeApplyResult = 'applied' | 'blocked';\n\n/**\n * Write `value` to `attribute` on `element`, subject to the policy in\n * the module docblock. Returns `'blocked'` (without touching the DOM)\n * when the write is refused.\n */\nexport function applyAttributeBinding(\n element: Element,\n attribute: string,\n value: unknown,\n): AttributeApplyResult {\n const name = attribute.toLowerCase().trim();\n if (name.length === 0) return 'blocked';\n if (name.startsWith('on')) return 'blocked';\n if (BLOCKED_ATTRIBUTES.has(name)) return 'blocked';\n\n if (value === null || value === undefined) {\n element.removeAttribute(name);\n return 'applied';\n }\n if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean') {\n return 'blocked';\n }\n const stringValue = String(value);\n\n if (URL_ATTRIBUTES.has(name) && !isSafeUrl(stringValue)) return 'blocked';\n\n element.setAttribute(name, stringValue);\n return 'applied';\n}\n","/**\n * Update scheduler — debounce + RAF batching + offscreen replay.\n *\n * The scheduler is the heart of the update pipeline:\n *\n * 1. Incoming updates are debounced. Rapid typing in the admin\n * panel collapses into a single DOM write per debounce window.\n * 2. After the debounce, the actual writes run inside\n * `requestAnimationFrame` so they batch with the browser's\n * paint cycle.\n * 3. Elements that are not currently within the viewport are not\n * written — their *latest* value is stored in a per-element\n * replay buffer. When the element becomes visible, the buffered\n * value is applied. This fixes the stale-offscreen-content bug\n * from the legacy implementation.\n *\n * The scheduler does not touch the DOM directly. It calls an injected\n * `applyUpdate(target, value)` function so renderer dispatch lives\n * outside this module, keeping the scheduler dependency-free and\n * easily testable.\n *\n * @module @core/update-scheduler\n */\n\nimport type { CachedElement } from './types';\n\nexport interface ScheduledUpdate {\n readonly target: CachedElement;\n readonly value: unknown;\n readonly allFields: Record<string, unknown>;\n}\n\n/**\n * Function the scheduler invokes to apply a single update.\n *\n * Renderer dispatch and any sanitization happens inside this callback;\n * the scheduler is intentionally ignorant of field types.\n */\nexport type ApplyUpdate = (update: ScheduledUpdate) => void;\n\nexport interface UpdateSchedulerOptions {\n /** Debounce window in ms. Default: 50. */\n readonly debounceMs?: number;\n /**\n * Visibility predicate. The scheduler defers updates for elements\n * that return `false` here, replaying them when the host signals\n * visibility via `notifyVisible()`.\n */\n readonly isVisible: (element: Element) => boolean;\n /**\n * `true` to skip the visibility optimization (apply every update\n * immediately regardless of viewport). Useful for tests and for\n * pages with few bindings. Default: `false`.\n */\n readonly disableVisibilityGate?: boolean;\n /** Threshold (in cached elements) above which the gate activates. Default: 50. */\n readonly visibilityGateThreshold?: number;\n /** Function returning the current cache size (used by the threshold). */\n readonly getCacheSize: () => number;\n /** Hook fired after every flush. Used by tests + analytics. */\n readonly onFlush?: (stats: FlushStats) => void;\n /**\n * Function used to schedule the actual DOM-write callback. Defaults\n * to `requestAnimationFrame` when available. Tests inject a synchronous\n * stand-in.\n */\n readonly scheduleFrame?: (callback: FrameRequestCallback) => number;\n /** Counterpart to `scheduleFrame` for cancellation. */\n readonly cancelFrame?: (handle: number) => void;\n}\n\nexport interface FlushStats {\n readonly applied: number;\n readonly deferred: number;\n readonly durationMs: number;\n}\n\nconst DEFAULT_DEBOUNCE_MS = 50;\nconst DEFAULT_VISIBILITY_THRESHOLD = 50;\n\n/**\n * Buffer entry — one per (field, element) pair. The latest write\n * supersedes any pending one.\n */\ninterface BufferEntry {\n readonly target: CachedElement;\n value: unknown;\n allFields: Record<string, unknown>;\n}\n\nexport class UpdateScheduler {\n readonly #apply: ApplyUpdate;\n readonly #debounceMs: number;\n readonly #isVisible: (element: Element) => boolean;\n readonly #gateThreshold: number;\n readonly #gateDisabled: boolean;\n readonly #getCacheSize: () => number;\n readonly #onFlush: ((stats: FlushStats) => void) | undefined;\n readonly #scheduleFrame: (callback: FrameRequestCallback) => number;\n readonly #cancelFrame: (handle: number) => void;\n\n /** Per-element latest pending value, applied on next flush. */\n #pending = new Map<Element, BufferEntry>();\n /** Per-element value to apply when element becomes visible. */\n readonly #replay = new Map<Element, BufferEntry>();\n\n #debounceTimer: ReturnType<typeof setTimeout> | null = null;\n #frameHandle: number | null = null;\n\n constructor(apply: ApplyUpdate, options: UpdateSchedulerOptions) {\n this.#apply = apply;\n this.#debounceMs = options.debounceMs ?? DEFAULT_DEBOUNCE_MS;\n this.#isVisible = options.isVisible;\n this.#gateThreshold = options.visibilityGateThreshold ?? DEFAULT_VISIBILITY_THRESHOLD;\n this.#gateDisabled = options.disableVisibilityGate ?? false;\n this.#getCacheSize = options.getCacheSize;\n this.#onFlush = options.onFlush;\n this.#scheduleFrame =\n options.scheduleFrame ??\n (typeof requestAnimationFrame === 'function'\n ? requestAnimationFrame.bind(globalThis)\n : (cb) => {\n return setTimeout(() => {\n cb(performance.now());\n }, 0) as unknown as number;\n });\n this.#cancelFrame =\n options.cancelFrame ??\n (typeof cancelAnimationFrame === 'function'\n ? cancelAnimationFrame.bind(globalThis)\n : (handle) => {\n clearTimeout(handle as unknown as ReturnType<typeof setTimeout>);\n });\n }\n\n /**\n * Queue an update. The same `(element)` pair is coalesced — only the\n * most-recent value survives until the next flush.\n */\n schedule(update: ScheduledUpdate): void {\n const existing = this.#pending.get(update.target.element);\n if (existing) {\n existing.value = update.value;\n existing.allFields = update.allFields;\n } else {\n this.#pending.set(update.target.element, {\n target: update.target,\n value: update.value,\n allFields: update.allFields,\n });\n }\n this.#armDebounce();\n }\n\n /**\n * Flush every pending write immediately, bypassing the debounce.\n * Useful for tests and for `destroy()` to drain in-flight work.\n */\n flushNow(): FlushStats {\n if (this.#debounceTimer !== null) {\n clearTimeout(this.#debounceTimer);\n this.#debounceTimer = null;\n }\n return this.#flush();\n }\n\n /**\n * Signal that an element has become visible. Any buffered value for\n * that element is applied immediately.\n */\n notifyVisible(element: Element): void {\n const entry = this.#replay.get(element);\n if (!entry) return;\n this.#replay.delete(element);\n this.#apply(entry);\n }\n\n /**\n * Discard any replay state for an element. Called when the element\n * leaves the cache.\n */\n forget(element: Element): void {\n this.#pending.delete(element);\n this.#replay.delete(element);\n }\n\n /** Cancel timers and drop buffered state. */\n destroy(): void {\n if (this.#debounceTimer !== null) {\n clearTimeout(this.#debounceTimer);\n this.#debounceTimer = null;\n }\n if (this.#frameHandle !== null) {\n this.#cancelFrame(this.#frameHandle);\n this.#frameHandle = null;\n }\n this.#pending.clear();\n this.#replay.clear();\n }\n\n /** Test introspection: number of pending writes. */\n get pendingCount(): number {\n return this.#pending.size;\n }\n\n /** Test introspection: number of buffered offscreen replays. */\n get replayCount(): number {\n return this.#replay.size;\n }\n\n #armDebounce(): void {\n if (this.#debounceTimer !== null) clearTimeout(this.#debounceTimer);\n this.#debounceTimer = setTimeout(() => {\n this.#debounceTimer = null;\n this.#requestFrame();\n }, this.#debounceMs);\n }\n\n #requestFrame(): void {\n if (this.#frameHandle !== null) this.#cancelFrame(this.#frameHandle);\n this.#frameHandle = this.#scheduleFrame(() => {\n this.#frameHandle = null;\n this.#flush();\n });\n }\n\n #flush(): FlushStats {\n const t0 = performance.now();\n const gateActive = !this.#gateDisabled && this.#getCacheSize() > this.#gateThreshold;\n const pending = this.#pending;\n this.#pending = new Map();\n\n let applied = 0;\n let deferred = 0;\n for (const entry of pending.values()) {\n if (gateActive && !this.#isVisible(entry.target.element)) {\n this.#replay.set(entry.target.element, entry);\n deferred += 1;\n continue;\n }\n // If the element later went off-screen between schedule and flush,\n // we still apply: it was visible at schedule time, so the user\n // will see the change as soon as they scroll back.\n this.#apply(entry);\n applied += 1;\n }\n const stats: FlushStats = {\n applied,\n deferred,\n durationMs: performance.now() - t0,\n };\n this.#onFlush?.(stats);\n return stats;\n }\n}\n","/**\n * Locale detection.\n *\n * The runtime needs a sensible default locale for date/number renders\n * before Payload tells us the active locale. Order of precedence:\n *\n * 1. The `lang` attribute on `<html>`.\n * 2. `navigator.language`.\n * 3. The hard-coded fallback `'en'`.\n *\n * The previous version of this library defaulted to `'de'` — a German\n * default that surprised consumers in other locales. We now use the\n * browser hint and fall back to English.\n *\n * @module @detection/locale\n */\n\nconst FALLBACK_LOCALE = 'en';\n\n/**\n * Returns a BCP-47 locale string suitable for `Intl.*` constructors.\n *\n * Always returns a non-empty string. When no signal is available the\n * fallback (`'en'`) is returned.\n */\nexport function detectInitialLocale(): string {\n const fromHtml = readHtmlLang();\n if (fromHtml !== undefined) return fromHtml;\n const fromNavigator = readNavigatorLanguage();\n if (fromNavigator !== undefined) return fromNavigator;\n return FALLBACK_LOCALE;\n}\n\nfunction readHtmlLang(): string | undefined {\n if (typeof document === 'undefined') return undefined;\n const lang = document.documentElement.getAttribute('lang');\n return lang === null || lang.length === 0 ? undefined : lang;\n}\n\nfunction readNavigatorLanguage(): string | undefined {\n if (typeof navigator === 'undefined') return undefined;\n const lang = navigator.language;\n return typeof lang === 'string' && lang.length > 0 ? lang : undefined;\n}\n","/**\n * Screen-reader live region.\n *\n * Mounts a single visually-hidden `<div role=\"status\" aria-live=\"polite\">`\n * into the document and pushes short messages to it on connect /\n * after-update / disconnect events.\n *\n * Why this matters: an editor using assistive technology hears\n * \"Vorschau verbunden\" / \"5 Inhalte aktualisiert\" instead of silently\n * watching the page mutate. The v0.1.0 line had this feature; the\n * 1.0.0 rewrite restores it.\n *\n * Design rules:\n * - **Exactly one** announcer per document, regardless of how many\n * `LivePreviewClient` instances run on the page. Subsequent\n * constructions are no-ops and reuse the existing element.\n * - Polite — never interrupts ongoing speech (`aria-live=\"polite\"`).\n * - Throttled — clears itself after a short window so re-announcement\n * of the same string is heard a second time. Without the clear,\n * screen readers de-duplicate identical messages.\n * - Localized — strings come from the active locale via\n * `detectInitialLocale()`. Untranslated locales fall back to\n * English.\n *\n * @module @core/a11y\n */\n\nimport { detectInitialLocale } from '@detection/locale';\n\nconst ELEMENT_ID = 'payload-live-preview-a11y';\nconst CLEAR_DELAY_MS = 1500;\nconst STYLE = [\n 'position:absolute',\n 'width:1px',\n 'height:1px',\n 'padding:0',\n 'margin:-1px',\n 'overflow:hidden',\n 'clip:rect(0 0 0 0)',\n 'clip-path:inset(50%)',\n 'white-space:nowrap',\n 'border:0',\n].join(';');\n\ninterface Messages {\n readonly connected: string;\n readonly disconnected: string;\n readonly updated: (count: number) => string;\n}\n\nconst FALLBACK_STRINGS: Messages = {\n connected: 'Live preview connected',\n disconnected: 'Live preview disconnected',\n updated: (n) => `${String(n)} ${n === 1 ? 'change' : 'changes'} applied`,\n};\n\nconst STRINGS: Readonly<Record<string, Messages>> = {\n en: FALLBACK_STRINGS,\n de: {\n connected: 'Vorschau verbunden',\n disconnected: 'Vorschau getrennt',\n updated: (n) => `${String(n)} ${n === 1 ? 'Änderung' : 'Änderungen'} angewendet`,\n },\n};\n\nfunction resolveStrings(locale: string): Messages {\n const lang = locale.split(/[-_]/)[0]?.toLowerCase() ?? 'en';\n return STRINGS[lang] ?? FALLBACK_STRINGS;\n}\n\n/**\n * Per-document live region. Constructing an announcer reuses any\n * existing instance — the first caller \"wins\" and the others share\n * the same DOM node.\n */\nexport class A11yAnnouncer {\n #element: HTMLElement | null = null;\n readonly #strings: Messages;\n #clearTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(locale: string = detectInitialLocale()) {\n this.#strings = resolveStrings(locale);\n // The live region is mounted lazily on first announcement: the\n // announcer is constructed during runtime bootstrap, which can run\n // from a <head> inline script while `document.body` is still null.\n }\n\n /**\n * Create (or adopt) the shared live-region element. Returns `null`\n * when no DOM is available yet — announcements are then dropped,\n * which is fine: they are progress niceties, not state.\n */\n #mount(): HTMLElement | null {\n if (this.#element !== null && this.#element.isConnected) return this.#element;\n // lib.dom types body as always-present, but during <head> execution\n // it genuinely is null.\n if (typeof document === 'undefined' || (document.body as HTMLElement | null) === null) {\n return null;\n }\n let element: HTMLElement | null = document.getElementById(ELEMENT_ID);\n if (!element) {\n element = document.createElement('div');\n element.id = ELEMENT_ID;\n element.setAttribute('role', 'status');\n element.setAttribute('aria-live', 'polite');\n element.setAttribute('aria-atomic', 'true');\n element.setAttribute('style', STYLE);\n document.body.appendChild(element);\n }\n this.#element = element;\n return element;\n }\n\n /** Announce that the preview successfully connected. */\n announceConnected(): void {\n this.#say(this.#strings.connected);\n }\n\n /** Announce that the preview lost its connection. */\n announceDisconnected(): void {\n this.#say(this.#strings.disconnected);\n }\n\n /** Announce that `count` updates were applied. */\n announceUpdate(count: number): void {\n if (count <= 0) return;\n this.#say(this.#strings.updated(count));\n }\n\n /**\n * Remove the live region from the document. Called by the runtime\n * during `destroy()`. Idempotent.\n */\n detach(): void {\n if (this.#clearTimer !== null) {\n clearTimeout(this.#clearTimer);\n this.#clearTimer = null;\n }\n if (this.#element?.parentNode) {\n this.#element.parentNode.removeChild(this.#element);\n }\n }\n\n #say(message: string): void {\n const element = this.#mount();\n if (!element) return;\n element.textContent = message;\n if (this.#clearTimer !== null) clearTimeout(this.#clearTimer);\n this.#clearTimer = setTimeout(() => {\n this.#clearTimer = null;\n if (this.#element) this.#element.textContent = '';\n }, CLEAR_DELAY_MS);\n }\n}\n","/**\n * Schema walker.\n *\n * Walks a parsed Payload field schema and produces a flat index from\n * dotted-path field names (e.g., `hero.title`, `sections.0.heading`)\n * to the corresponding schema descriptor.\n *\n * The index is consumed by:\n * - The runtime, to decide which field-type renderer applies.\n * - The diff engine, to know when a structural change occurred.\n *\n * Tabs/rows/collapsibles are *structural* fields that have no `name`;\n * they are flattened into their inner fields.\n *\n * @module @schema/walker\n */\n\nimport type {\n PayloadBlockSchema,\n PayloadFieldSchema,\n PayloadFieldType,\n} from '@/types/payload-protocol';\n\n/**\n * Read-only view of a flattened schema. Keys are dotted-paths;\n * values are the original schema entries.\n */\nexport type SchemaIndex = ReadonlyMap<string, PayloadFieldSchema>;\n\nconst STRUCTURAL_TYPES: ReadonlySet<PayloadFieldType> = new Set<PayloadFieldType>([\n 'tabs',\n 'row',\n 'collapsible',\n]);\n\n/**\n * Walk `schemas` recursively and build a flat index. The base path is\n * appended to every produced key. Pass an empty string at the\n * top-level entry point.\n */\nexport function buildSchemaIndex(\n schemas: readonly PayloadFieldSchema[],\n basePath = '',\n): SchemaIndex {\n const out = new Map<string, PayloadFieldSchema>();\n walk(schemas, basePath, out);\n return out;\n}\n\nfunction walk(\n schemas: readonly PayloadFieldSchema[],\n basePath: string,\n out: Map<string, PayloadFieldSchema>,\n): void {\n for (const schema of schemas) {\n if (STRUCTURAL_TYPES.has(schema.type)) {\n if (schema.fields) walk(schema.fields, basePath, out);\n continue;\n }\n if (schema.type === 'group') {\n const path = basePath === '' ? schema.name : `${basePath}.${schema.name}`;\n out.set(path, schema);\n if (schema.fields) walk(schema.fields, path, out);\n continue;\n }\n const path = basePath === '' ? schema.name : `${basePath}.${schema.name}`;\n out.set(path, schema);\n if (schema.type === 'array' && schema.fields) {\n walk(schema.fields, `${path}.*`, out);\n } else if (schema.type === 'blocks' && schema.blocks) {\n for (const block of schema.blocks) {\n walk(block.fields, `${path}.*.${block.slug}`, out);\n }\n }\n }\n}\n\n/**\n * Look up the schema entry for `fieldPath`, walking through array\n * (`.*`) and block (`.*.<slug>`) segments. Returns `undefined` when\n * the path is not represented in the schema.\n */\nexport function lookupSchema(\n index: SchemaIndex,\n fieldPath: string,\n): PayloadFieldSchema | undefined {\n if (index.has(fieldPath)) return index.get(fieldPath);\n // Replace array indices (numeric segments) with wildcards.\n const wildcardPath = fieldPath.replace(/\\.\\d+(?=\\.|$)/g, '.*');\n if (index.has(wildcardPath)) return index.get(wildcardPath);\n return undefined;\n}\n\n/**\n * Discover the block schema for a `blocks` field at `arrayPath`,\n * given the runtime value carries a `blockType` discriminator.\n */\nexport function lookupBlockSchema(\n index: SchemaIndex,\n blocksFieldPath: string,\n blockType: string,\n): PayloadBlockSchema | undefined {\n const schema = lookupSchema(index, blocksFieldPath);\n if (!schema?.blocks) return undefined;\n return schema.blocks.find((b) => b.slug === blockType);\n}\n","/**\n * Structural diff for arrays and blocks.\n *\n * Compares the previous and next data shapes for an array field and\n * produces a minimal patch describing what changed:\n *\n * - `insert` → an item was inserted at index `i`\n * - `remove` → an item was removed at index `i`\n * - `move` → an item moved from `from` to `to`\n * - `update` → an item at index `i` had its scalar fields change\n * - `replace` → an item's block-type changed; treat as remove + insert\n *\n * The diff is *id-keyed* when items carry an `id` field (Payload's\n * default) — that lets us detect moves reliably. Without ids we fall\n * back to a positional diff.\n *\n * @module @schema/diff\n */\n\nexport type ArrayPatch =\n | { readonly kind: 'insert'; readonly index: number; readonly value: unknown }\n | { readonly kind: 'remove'; readonly index: number; readonly value: unknown }\n | {\n readonly kind: 'move';\n readonly from: number;\n readonly to: number;\n readonly value: unknown;\n }\n | { readonly kind: 'update'; readonly index: number; readonly value: unknown }\n | {\n readonly kind: 'replace';\n readonly index: number;\n readonly oldValue: unknown;\n readonly value: unknown;\n };\n\n/**\n * Identify items by their `id` field when present.\n */\nfunction getId(item: unknown): string | number | undefined {\n if (typeof item !== 'object' || item === null) return undefined;\n const id = (item as Record<string, unknown>)['id'];\n if (typeof id === 'string' || typeof id === 'number') return id;\n return undefined;\n}\n\nfunction getBlockType(item: unknown): string | undefined {\n if (typeof item !== 'object' || item === null) return undefined;\n const blockType = (item as Record<string, unknown>)['blockType'];\n return typeof blockType === 'string' ? blockType : undefined;\n}\n\n/**\n * Compute the patch transforming `prev` into `next`.\n *\n * - When items have stable `id` values, moves and updates are\n * detected accurately.\n * - When ids are absent, the diff is positional (replacement-only),\n * which still keeps the host consistent but cannot animate moves.\n */\nexport function diffArray(\n prev: readonly unknown[],\n next: readonly unknown[],\n): readonly ArrayPatch[] {\n const haveIds = next.every((item) => getId(item) !== undefined);\n if (haveIds) return diffById(prev, next);\n return diffByPosition(prev, next);\n}\n\nfunction diffById(prev: readonly unknown[], next: readonly unknown[]): readonly ArrayPatch[] {\n const patches: ArrayPatch[] = [];\n const prevIndexById = new Map<string | number, number>();\n for (let i = 0; i < prev.length; i += 1) {\n const id = getId(prev[i]);\n if (id !== undefined) prevIndexById.set(id, i);\n }\n\n const consumedFromPrev = new Set<number>();\n for (let to = 0; to < next.length; to += 1) {\n const item = next[to];\n const id = getId(item);\n if (id === undefined) {\n patches.push({ kind: 'insert', index: to, value: item });\n continue;\n }\n const from = prevIndexById.get(id);\n if (from === undefined) {\n patches.push({ kind: 'insert', index: to, value: item });\n continue;\n }\n consumedFromPrev.add(from);\n const prevItem = prev[from];\n if (getBlockType(prevItem) !== getBlockType(item)) {\n patches.push({ kind: 'replace', index: to, oldValue: prevItem, value: item });\n continue;\n }\n if (from !== to) {\n patches.push({ kind: 'move', from, to, value: item });\n }\n if (!shallowEqual(prevItem, item)) {\n patches.push({ kind: 'update', index: to, value: item });\n }\n }\n\n for (let i = 0; i < prev.length; i += 1) {\n if (consumedFromPrev.has(i)) continue;\n patches.push({ kind: 'remove', index: i, value: prev[i] });\n }\n return patches;\n}\n\nfunction diffByPosition(prev: readonly unknown[], next: readonly unknown[]): readonly ArrayPatch[] {\n const patches: ArrayPatch[] = [];\n const min = Math.min(prev.length, next.length);\n for (let i = 0; i < min; i += 1) {\n if (!shallowEqual(prev[i], next[i])) {\n patches.push({ kind: 'update', index: i, value: next[i] });\n }\n }\n if (next.length > prev.length) {\n for (let i = prev.length; i < next.length; i += 1) {\n patches.push({ kind: 'insert', index: i, value: next[i] });\n }\n }\n if (prev.length > next.length) {\n for (let i = next.length; i < prev.length; i += 1) {\n patches.push({ kind: 'remove', index: i, value: prev[i] });\n }\n }\n return patches;\n}\n\nfunction shallowEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) return false;\n const aRec = a as Record<string, unknown>;\n const bRec = b as Record<string, unknown>;\n const aKeys = Object.keys(aRec);\n const bKeys = Object.keys(bRec);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n // Any reference difference triggers an update. Deep equality is\n // intentionally avoided — the renderer reconciles deeper diffs.\n if (!Object.is(aRec[key], bRec[key])) return false;\n }\n return true;\n}\n","/**\n * Translate Payload field types into our internal renderer names.\n *\n * Payload's type vocabulary is mostly 1:1 with ours, with a handful\n * of structural containers that get absorbed (the walker already\n * flattens `tabs`/`row`/`collapsible`, so the renderer never sees\n * them). Unknown / unmapped types fall back to `text` — that keeps\n * the preview functional even for new Payload field types we haven't\n * specifically renderer-supported yet.\n *\n * @module @schema/field-type-map\n */\n\nimport type { FieldType } from '@core/types';\nimport type { PayloadFieldType } from '@/types/payload-protocol';\n\nconst MAP: Readonly<Record<PayloadFieldType, FieldType>> = {\n text: 'text',\n textarea: 'textarea',\n richText: 'richText',\n email: 'email',\n number: 'number',\n checkbox: 'checkbox',\n date: 'date',\n select: 'select',\n radio: 'radio',\n array: 'array',\n blocks: 'blocks',\n group: 'text', // group itself has no display; bound element shows nothing useful\n tabs: 'text', // structural — walker should have stripped this\n row: 'text',\n collapsible: 'text',\n relationship: 'relationship',\n upload: 'upload',\n point: 'text',\n json: 'text',\n code: 'text',\n ui: 'text',\n};\n\n/**\n * Resolve a Payload field type to the renderer name we ship with.\n * Returns `undefined` when the type isn't in the table (unknown / new\n * Payload type) so the caller can decide whether to fall back to the\n * DOM-attribute or to `text`.\n */\nexport function payloadTypeToRenderer(type: string): FieldType | undefined {\n if (Object.prototype.hasOwnProperty.call(MAP, type)) {\n return MAP[type as PayloadFieldType];\n }\n return undefined;\n}\n","/**\n * Live preview runtime — the orchestrator that wires every primitive\n * into a single, manageable lifecycle.\n *\n * This module is the *seam* between the inline IIFE (Phase 6) and the\n * high-level client (Phase 12). Both import from here and add their\n * own glue:\n *\n * - The inline runtime instantiates `LivePreviewRuntime` with the\n * minimum required configuration and exposes a small global API.\n * - The high-level client instantiates the same runtime but layers\n * events, plugins, and configurable callbacks on top.\n *\n * The runtime never speaks postMessage directly — it relies on\n * `MessageBus`. It never queries the DOM during updates — it relies\n * on `ElementCache`. The separation keeps each module testable in\n * isolation while letting this file express the high-level flow.\n *\n * @module @core/lifecycle\n */\n\nimport type {\n PayloadDocumentEventMessage,\n PayloadFieldSchema,\n PayloadLivePreviewData,\n PayloadLivePreviewMessage,\n} from '@/types/payload-protocol';\nimport type { EventEmitter } from '@events/emitter';\nimport type { OriginMatcher } from './message-bus';\nimport type { CachedElement, FieldRenderer, FieldType, RenderContext } from './types';\nimport { ElementCache } from './cache';\nimport { ObserverManager } from './observers';\nimport { MessageBus } from './message-bus';\nimport { ConnectionState, HeartbeatTimer } from './state';\nimport { DataMerger } from './data-merger';\nimport { applyAttributeBinding } from './attribute-binding';\nimport { UpdateScheduler, type FlushStats, type ScheduledUpdate } from './update-scheduler';\nimport { A11yAnnouncer } from './a11y';\nimport {\n buildSchemaIndex,\n lookupSchema,\n payloadTypeToRenderer,\n type SchemaIndex,\n} from '@schema/index';\nimport {\n LIBRARY_PROTOCOL_VERSION,\n negotiateProtocol,\n type ProtocolNegotiation,\n} from './protocol-version';\n\nconst READY_RETRY_DELAYS_MS = [0, 500, 1000, 2000] as const;\n\nexport interface RuntimeOptions {\n /** Document root containing the bindings. Defaults to `document`. */\n readonly root?: Document | Element;\n /** Map from field type to renderer. */\n readonly renderers: Readonly<Record<string, FieldRenderer>>;\n /** Origin matcher for incoming messages. */\n readonly originMatcher: OriginMatcher;\n /** Origins to broadcast `ready` to during the handshake. */\n readonly readyTargets: readonly string[];\n /** Event emitter (per-instance). */\n readonly emitter: EventEmitter;\n /** Debounce window in ms. */\n readonly debounceMs?: number;\n /** Heartbeat timeout. */\n readonly heartbeatMs?: number;\n /** Optional rootMargin for the IntersectionObserver. */\n readonly intersectionRootMargin?: string;\n /** When true, every update applies regardless of visibility. */\n readonly disableVisibilityGate?: boolean;\n /** Cache-size threshold above which off-screen updates are queued for replay. Default 50. */\n readonly visibilityGateThreshold?: number;\n /**\n * Mount an `aria-live` region and announce connect/update/disconnect\n * to assistive technology. Default `true`. Set `false` for runtimes\n * that already provide their own screen-reader announcements.\n */\n readonly enableA11y?: boolean;\n /**\n * Locale used to pick announcement strings. Defaults to the value\n * detected from `<html lang>` / `navigator.language` / `'en'`.\n */\n readonly a11yLocale?: string;\n /** Hook called when the runtime decides to (re)send the ready handshake. */\n readonly sendReady?: (origins: readonly string[]) => void;\n /**\n * Hook called when the heartbeat times out. Lets the host release\n * any origin lock so a different allow-listed origin can reconnect.\n * The default `LivePreviewClient` wires this to `OriginDetector.unlockOrigin()`.\n */\n readonly onHeartbeatTimeout?: () => void;\n /**\n * Optional preview-token validator. When provided, every data\n * update message must carry a `previewToken` that this function\n * approves; otherwise the message is dropped.\n *\n * ⚠️ `previewToken` is an extension of this library — the stock\n * Payload admin never sends one. Enable only when a custom admin\n * component attaches the token; otherwise every real update would\n * be dropped.\n */\n readonly validateToken?: (\n token: string | undefined,\n origin: string,\n ) => boolean | Promise<boolean>;\n /**\n * Server-side data merging (Payload 3.x). When configured, every\n * update is re-fetched through the Payload REST API so relationship\n * and upload fields arrive populated instead of as bare IDs — the\n * same strategy the official `@payloadcms/live-preview` client uses.\n * Failures fall back to rendering the raw form values.\n */\n readonly dataMerge?: {\n /** Payload server origin, e.g. `https://cms.example.com`. */\n readonly serverURL: string;\n /** REST API route prefix. Defaults to `/api`. */\n readonly apiRoute?: string;\n /** Population depth. Defaults to `1`. */\n readonly depth?: number;\n /** Injectable fetch implementation (tests). */\n readonly fetchFn?: typeof fetch;\n };\n /** Hook for the inline runtime to log to the console in debug mode. */\n readonly log?: (...args: unknown[]) => void;\n /**\n * Diagnostic warning channel — used by the runtime to surface\n * consumer-side mistakes that would otherwise produce silent\n * confusion (e.g., update arrived for a field that has no\n * `[data-payload-field]` anchor). Defaults to `console.warn`.\n *\n * Distinct from `log` because warnings should reach the editor\n * even when general debug logging is disabled — every warning is\n * deduped per field name so the channel cannot be spammed.\n */\n readonly warn?: (...args: unknown[]) => void;\n}\n\nexport class LivePreviewRuntime {\n readonly #emitter: EventEmitter;\n readonly #cache: ElementCache;\n readonly #observers: ObserverManager;\n readonly #scheduler: UpdateScheduler;\n readonly #bus: MessageBus;\n readonly #state: ConnectionState;\n readonly #heartbeat: HeartbeatTimer;\n readonly #renderers: Readonly<Record<string, FieldRenderer>>;\n readonly #root: Document | Element;\n readonly #readyTargets: readonly string[];\n readonly #sendReady: (origins: readonly string[]) => void;\n readonly #onHeartbeatTimeoutHook: (() => void) | undefined;\n readonly #log: (...args: unknown[]) => void;\n readonly #warn: (...args: unknown[]) => void;\n readonly #readyTimers: ReturnType<typeof setTimeout>[] = [];\n readonly #a11y: A11yAnnouncer | null;\n readonly #merger: DataMerger | null;\n\n #currentLocale: string | undefined;\n #currentSchema: readonly PayloadFieldSchema[] | undefined;\n #schemaIndex: SchemaIndex | undefined;\n #protocolNegotiation: ProtocolNegotiation = negotiateProtocol(undefined);\n #started = false;\n #deferredStart: (() => void) | null = null;\n #updateCount = 0;\n /**\n * Field names we've already warned about as \"orphan updates\" — updates\n * arrived for them but no `[data-payload-field=…]` anchor exists.\n * Set-membership prevents the diagnostic from spamming the console\n * during continuous editing.\n */\n readonly #warnedOrphanFields = new Set<string>();\n\n constructor(options: RuntimeOptions) {\n this.#emitter = options.emitter;\n this.#renderers = options.renderers;\n this.#root =\n options.root ?? (typeof document !== 'undefined' ? document : (null as unknown as Document));\n this.#readyTargets = options.readyTargets;\n this.#sendReady = options.sendReady ?? defaultSendReady;\n this.#onHeartbeatTimeoutHook = options.onHeartbeatTimeout;\n this.#log = options.log ?? noopLogger;\n this.#warn = options.warn ?? defaultWarn;\n this.#a11y = createA11y(options);\n this.#merger =\n options.dataMerge !== undefined\n ? new DataMerger({\n serverURL: options.dataMerge.serverURL,\n ...(options.dataMerge.apiRoute !== undefined\n ? { apiRoute: options.dataMerge.apiRoute }\n : {}),\n ...(options.dataMerge.depth !== undefined ? { depth: options.dataMerge.depth } : {}),\n ...(options.dataMerge.fetchFn !== undefined\n ? { fetchFn: options.dataMerge.fetchFn }\n : {}),\n log: (...args) => {\n this.#log(...args);\n },\n })\n : null;\n\n this.#cache = new ElementCache();\n this.#observers = new ObserverManager(\n {\n onStructuralChange: () => {\n this.#rebuildCache();\n },\n onVisibilityChange: (element, visible) => {\n if (visible) this.#scheduler.notifyVisible(element);\n },\n },\n {\n ...(options.intersectionRootMargin !== undefined\n ? { intersectionRootMargin: options.intersectionRootMargin }\n : {}),\n },\n );\n this.#scheduler = new UpdateScheduler(\n (update) => {\n this.#applyUpdate(update);\n },\n {\n ...(options.debounceMs !== undefined ? { debounceMs: options.debounceMs } : {}),\n ...(options.disableVisibilityGate !== undefined\n ? { disableVisibilityGate: options.disableVisibilityGate }\n : {}),\n ...(options.visibilityGateThreshold !== undefined\n ? { visibilityGateThreshold: options.visibilityGateThreshold }\n : {}),\n isVisible: (element) => this.#observers.isVisible(element),\n getCacheSize: () => this.#cache.elementCount,\n onFlush: (stats) => {\n this.#onFlush(stats);\n },\n },\n );\n this.#bus = new MessageBus(options.originMatcher, {\n onUpdate: (msg, origin) => {\n this.#handleUpdate(msg, origin);\n },\n onDocumentEvent: (msg, origin) => {\n this.#handleDocumentEvent(msg, origin);\n },\n onInvalid: (reason, origin) => {\n if (reason === 'token') {\n const error = new Error(`Preview token rejected (origin: ${origin})`);\n void this.#emitter.emit('error', { error, context: 'token' });\n }\n this.#log('message rejected:', reason, origin);\n },\n ...(options.validateToken !== undefined ? { validateToken: options.validateToken } : {}),\n });\n this.#state = new ConnectionState((next, prev) => {\n this.#log('connection', prev, '→', next);\n });\n this.#heartbeat = new HeartbeatTimer({\n ...(options.heartbeatMs !== undefined ? { timeoutMs: options.heartbeatMs } : {}),\n onTimeout: () => {\n this.#onHeartbeatTimeout();\n },\n });\n }\n\n /**\n * Start the runtime: build cache, attach observers, listen for\n * messages, broadcast `ready`. Returns `true` if it actually started\n * (it will refuse to start a second time).\n *\n * When the script executes while the document is still parsing\n * (e.g. injected via `<script>` in `<head>` — Astro's `head-inline`\n * stage), `document.body` does not exist yet and attaching the\n * MutationObserver would throw. In that case the actual startup is\n * deferred until `DOMContentLoaded`; `start()` still returns `true`\n * and `destroy()` cancels the pending startup.\n */\n start(): boolean {\n if (this.#started) return false;\n this.#started = true;\n\n const root = this.#root;\n if (root instanceof Document && root.readyState === 'loading') {\n const onReady = (): void => {\n this.#deferredStart = null;\n this.#startNow();\n };\n this.#deferredStart = onReady;\n root.addEventListener('DOMContentLoaded', onReady, { once: true });\n return true;\n }\n\n this.#startNow();\n return true;\n }\n\n #startNow(): void {\n this.#buildCacheAndObserve();\n this.#observers.start(this.#root instanceof Document ? this.#root.body : this.#root);\n this.#bus.attach();\n this.#emitInit();\n\n // Re-broadcast ready several times to absorb parent-side init latency.\n for (const delay of READY_RETRY_DELAYS_MS) {\n if (delay === 0) {\n this.#sendReady(this.#readyTargets);\n } else {\n const handle = setTimeout(() => {\n this.#sendReady(this.#readyTargets);\n }, delay);\n this.#readyTimers.push(handle);\n }\n }\n }\n\n /** Tear down all observers, timers, and listeners. Idempotent. */\n destroy(): void {\n if (!this.#started) return;\n this.#started = false;\n if (this.#deferredStart !== null) {\n const root = this.#root;\n if (root instanceof Document) {\n root.removeEventListener('DOMContentLoaded', this.#deferredStart);\n }\n this.#deferredStart = null;\n void this.#emitter.emit('destroy', { timestamp: Date.now() });\n return;\n }\n for (const handle of this.#readyTimers) clearTimeout(handle);\n this.#readyTimers.length = 0;\n this.#heartbeat.stop();\n this.#bus.detach();\n this.#observers.stop();\n this.#scheduler.destroy();\n this.#merger?.destroy();\n this.#cache.clear();\n const wasConnected = this.#state.status === 'connected';\n this.#state.markDisconnected();\n if (wasConnected) {\n this.#a11y?.announceDisconnected();\n void this.#emitter.emit('disconnect', { reason: 'destroy', timestamp: Date.now() });\n }\n this.#a11y?.detach();\n void this.#emitter.emit('destroy', { timestamp: Date.now() });\n }\n\n /** Re-scan the DOM and re-register every binding. */\n refreshCache(): void {\n this.#rebuildCache();\n }\n\n /** Current connection status, exposed for the high-level client. */\n get status(): 'disconnected' | 'connecting' | 'connected' {\n return this.#state.status;\n }\n\n /** Read-only view of the element cache. */\n get cache(): ElementCache {\n return this.#cache;\n }\n\n /** Read-only view of how many updates have been received. */\n get updateCount(): number {\n return this.#updateCount;\n }\n\n /**\n * Negotiated protocol view — `min(library, remote)`. Useful for\n * consumers that want to branch on protocol capabilities without\n * hard-coding version numbers. Updates lazily as the remote party's\n * version arrives on incoming messages.\n */\n get protocol(): ProtocolNegotiation {\n return this.#protocolNegotiation;\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // Internals\n // ──────────────────────────────────────────────────────────────────────────\n\n #buildCacheAndObserve(): void {\n const stats = this.#cache.buildFromRoot(this.#root);\n this.#log('cache built', stats);\n void this.#emitter.emit('cacheRefresh', stats);\n for (const entry of this.#cache.values()) {\n this.#observers.observeElement(entry.element);\n }\n }\n\n #rebuildCache(): void {\n for (const entry of this.#cache.values()) {\n this.#observers.unobserveElement(entry.element);\n this.#scheduler.forget(entry.element);\n }\n this.#buildCacheAndObserve();\n }\n\n #emitInit(): void {\n void this.#emitter.emit('init', { timestamp: Date.now() });\n }\n\n #applyNegotiation(remoteVersion: number): void {\n const next = negotiateProtocol(remoteVersion);\n if (next.negotiated === this.#protocolNegotiation.negotiated) return;\n this.#protocolNegotiation = next;\n this.#log(\n 'protocol negotiated',\n `ours=${LIBRARY_PROTOCOL_VERSION}`,\n `theirs=${remoteVersion}`,\n `negotiated=${next.negotiated}`,\n );\n }\n\n #handleUpdate(message: PayloadLivePreviewMessage, origin: string): void {\n this.#heartbeat.kick();\n if (message.protocolVersion !== undefined) {\n this.#applyNegotiation(message.protocolVersion);\n }\n if (message.data === undefined) {\n return;\n }\n if (this.#state.markConnected()) {\n this.#a11y?.announceConnected();\n void this.#emitter.emit('connect', { origin, timestamp: Date.now() });\n }\n this.#updateCount += 1;\n if (message.locale !== undefined) this.#currentLocale = message.locale;\n if (message.fieldSchemaJSON !== undefined) {\n this.#currentSchema = message.fieldSchemaJSON;\n this.#schemaIndex = buildSchemaIndex(message.fieldSchemaJSON);\n }\n\n void this.#resolveIncomingFields(message).then((fields) => {\n if (fields === null) return; // superseded by a newer update\n\n const data: PayloadLivePreviewData = {\n fields,\n ...(this.#currentSchema !== undefined ? { schema: this.#currentSchema } : {}),\n ...(message.globalSlug !== undefined ? { globalSlug: message.globalSlug } : {}),\n ...(message.collectionSlug !== undefined ? { collectionSlug: message.collectionSlug } : {}),\n ...(this.#currentLocale !== undefined ? { locale: this.#currentLocale } : {}),\n };\n\n let cancelled = false;\n void this.#emitter\n .emit('beforeUpdate', {\n data,\n cancel: (): void => {\n cancelled = true;\n },\n })\n .then(() => {\n if (cancelled) return;\n this.#scheduleAllFields(data);\n });\n });\n }\n\n /**\n * Resolve the field values to render for an incoming update. With a\n * configured `DataMerger` the raw form values are exchanged for the\n * server-populated document; without one (or on failure) the raw\n * values pass through unchanged. Returns `null` when a newer update\n * superseded this one mid-flight.\n */\n async #resolveIncomingFields(\n message: PayloadLivePreviewMessage,\n ): Promise<Record<string, unknown> | null> {\n // #handleUpdate has already returned when `data` is undefined.\n const raw = message.data ?? {};\n if (this.#merger === null) return raw;\n const result = await this.#merger.merge({\n collectionSlug: message.collectionSlug,\n globalSlug: message.globalSlug,\n data: raw,\n locale: this.#currentLocale,\n });\n if (result.status === 'merged') return result.doc;\n if (result.status === 'superseded') return null;\n return raw;\n }\n\n #handleDocumentEvent(_message: PayloadDocumentEventMessage, _origin: string): void {\n void this.#emitter.emit('documentSave', { timestamp: Date.now() });\n }\n\n #scheduleAllFields(data: PayloadLivePreviewData): void {\n for (const [fieldName, bindings] of this.#cache.entries()) {\n const value = resolveFieldValue(data.fields, fieldName, this.#currentLocale);\n if (value === undefined) continue;\n for (const target of bindings) {\n const update: ScheduledUpdate = {\n target,\n value,\n allFields: data.fields,\n };\n this.#scheduler.schedule(update);\n }\n }\n this.#diagnoseOrphanFields(data.fields);\n }\n\n /**\n * Walk the incoming `data` payload and warn (via `this.#log`) when an\n * editable-looking field arrives for which **no `[data-payload-field]`\n * anchor exists** in the page. This is the most common live-preview\n * footgun: an SSR template renders the binding only when the field is\n * non-empty, so editing a previously-empty field has nowhere to land.\n *\n * The warning is gated by:\n * - `this.#log` being a real logger (no-op when debug disabled)\n * - per-field deduplication via `#warnedOrphanFields`\n * - scalar value heuristic (objects/arrays don't get warned)\n * - a small ignore-list of system fields Payload always ships\n *\n * The method intentionally lives on the runtime — not on the cache —\n * because it depends on the locale and on schema knowledge that the\n * cache does not own.\n */\n #diagnoseOrphanFields(fields: Record<string, unknown>): void {\n if (this.#cache.elementCount === 0) return;\n const boundNames = new Set<string>();\n for (const [name] of this.#cache.entries()) boundNames.add(name);\n for (const [rawName, value] of Object.entries(fields)) {\n if (this.#warnedOrphanFields.has(rawName)) continue;\n if (SYSTEM_FIELD_NAMES.has(rawName)) continue;\n if (!isLiveBindableScalar(value)) continue;\n const baseName = stripLocaleSuffix(rawName, this.#currentLocale);\n if (boundNames.has(rawName) || boundNames.has(baseName)) continue;\n this.#warnedOrphanFields.add(rawName);\n this.#warn(\n `[live-preview] update arrived for field \"${rawName}\" but no ` +\n `<… data-payload-field=\"${baseName}\"> element exists on this page. ` +\n `Render the binding anchor unconditionally in your template so ` +\n `live edits to an initially-empty field have somewhere to land.`,\n );\n }\n }\n\n #applyUpdate(update: ScheduledUpdate): void {\n const schemaEntry =\n this.#schemaIndex !== undefined\n ? lookupSchema(this.#schemaIndex, update.target.fieldName)\n : undefined;\n let resolvedType = this.#resolveFieldType(update.target, schemaEntry?.type);\n // Payload 3.x sends no field schema, so rich-text fields would fall\n // through to the `text` heuristic and render \"[object Object]\".\n // A Lexical value is unmistakable — upgrade the renderer on sight.\n if (\n resolvedType === 'text' &&\n update.target.explicitFieldType !== true &&\n looksLikeLexicalRoot(update.value)\n ) {\n resolvedType = 'richText';\n }\n const renderer = this.#renderers[resolvedType];\n const previous = readElementSnapshot(update.target.element);\n const context: RenderContext = {\n allFields: update.allFields,\n locale: this.#currentLocale,\n schema: schemaEntry,\n };\n try {\n if (update.target.targetAttribute !== undefined) {\n const outcome = applyAttributeBinding(\n update.target.element,\n update.target.targetAttribute,\n update.value,\n );\n if (outcome === 'blocked') {\n this.#warn(\n `[live-preview] refused to write field \"${update.target.fieldName}\" ` +\n `into attribute \"${update.target.targetAttribute}\" (unsafe attribute or value)`,\n );\n }\n } else if (renderer) {\n renderer.render(update.target, update.value, context);\n } else {\n this.#log('no renderer for', resolvedType);\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n void this.#emitter.emit('error', { error, context: 'renderer' });\n return;\n }\n void this.#emitter.emit('elementUpdate', {\n element: update.target.element,\n fieldName: update.target.fieldName,\n previousValue: previous,\n nextValue: update.value,\n });\n }\n\n /**\n * Resolve the renderer name for an update. Explicit consumer DOM\n * attributes (`data-payload-type`) always win; otherwise the schema\n * type maps to a renderer; otherwise the cache's tag-based heuristic\n * stands.\n */\n #resolveFieldType(target: CachedElement, schemaType: string | undefined): FieldType {\n if (target.explicitFieldType) return target.fieldType;\n if (schemaType !== undefined) {\n const mapped = payloadTypeToRenderer(schemaType);\n if (mapped !== undefined) return mapped;\n }\n return target.fieldType;\n }\n\n #onFlush(stats: FlushStats): void {\n if (stats.applied === 0 && stats.deferred === 0) return;\n if (stats.applied > 0) this.#a11y?.announceUpdate(stats.applied);\n void this.#emitter.emit('afterUpdate', {\n data: {\n fields: {},\n ...(this.#currentLocale !== undefined ? { locale: this.#currentLocale } : {}),\n },\n updatedCount: stats.applied,\n durationMs: stats.durationMs,\n });\n }\n\n #onHeartbeatTimeout(): void {\n if (this.#state.markDisconnected()) {\n this.#a11y?.announceDisconnected();\n void this.#emitter.emit('disconnect', { reason: 'timeout', timestamp: Date.now() });\n }\n try {\n this.#onHeartbeatTimeoutHook?.();\n } catch (err) {\n this.#log('onHeartbeatTimeout hook threw:', err);\n }\n this.#sendReady(this.#readyTargets);\n }\n}\n\nfunction createA11y(options: RuntimeOptions): A11yAnnouncer | null {\n if (options.enableA11y === false) return null;\n return options.a11yLocale !== undefined\n ? new A11yAnnouncer(options.a11yLocale)\n : new A11yAnnouncer();\n}\n\nfunction noopLogger(): void {\n // Intentionally empty — debug logging is opt-in via RuntimeOptions.log.\n}\n\n/**\n * Structural check for a Lexical root payload. Mirrors\n * `isLexicalContent` from `@lexical/render` — duplicated here (four\n * lines) so the lightweight `./core` entry does not transitively pull\n * the entire Lexical renderer just for this shape test.\n */\nfunction looksLikeLexicalRoot(value: unknown): boolean {\n if (typeof value !== 'object' || value === null) return false;\n if (!('root' in value)) return false;\n const root = value.root;\n if (typeof root !== 'object' || root === null) return false;\n return Array.isArray((root as { children?: unknown }).children);\n}\n\n/**\n * Default `warn` channel — routes to `console.warn` so consumer-side\n * mistakes (orphan field updates, etc.) reach the developer even when\n * debug logging is off. Falls back to a no-op when `console` is\n * unavailable (some sandboxes).\n */\nfunction defaultWarn(...args: unknown[]): void {\n if (typeof console !== 'undefined' && typeof console.warn === 'function') {\n console.warn(...args);\n }\n}\n\n/**\n * Default ready broadcaster used when the host does not inject one.\n * Posts to `window.parent` and `window.opener` for each origin.\n */\nfunction defaultSendReady(origins: readonly string[]): void {\n if (typeof window === 'undefined') return;\n const targets: Window[] = [];\n if (window.parent !== window) targets.push(window.parent);\n if (window.opener instanceof Window) targets.push(window.opener);\n MessageBus.sendReady(targets, origins);\n}\n\n/**\n * Resolve a field value from the update payload, walking nested dotted\n * paths and trying locale-suffixed fallbacks when a locale is active.\n *\n * Hardened against prototype pollution: keys `__proto__`, `prototype`,\n * and `constructor` short-circuit to `undefined`.\n */\nconst BLOCKED_KEYS = new Set(['__proto__', 'prototype', 'constructor']);\n\n/**\n * Top-level Payload document fields the live-preview engine ships in\n * every update but consumers almost never want to bind to. Suppressing\n * them keeps the orphan-field diagnostic focused on the user's own\n * editable fields.\n */\nconst SYSTEM_FIELD_NAMES: ReadonlySet<string> = new Set([\n 'id',\n '_id',\n 'createdAt',\n 'updatedAt',\n 'createdBy',\n 'updatedBy',\n '_status',\n 'globalType',\n 'collection',\n 'locale',\n 'localized',\n]);\n\n/**\n * Decide whether a value looks like something a `<p data-payload-field>`\n * anchor would render. Strings, numbers, booleans, dates → yes. Objects\n * (Lexical content, relationships, uploads) and arrays → no.\n */\nfunction isLiveBindableScalar(value: unknown): boolean {\n if (value === null || value === undefined) return false;\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'bigint'\n );\n}\n\n/**\n * Strip a trailing `_<locale>` suffix from a field name. Used by the\n * orphan-field diagnostic so a localized variant of a bound field\n * (e.g., `heroTitle_en`) doesn't fire a false warning when the binding\n * is `heroTitle`.\n */\nfunction stripLocaleSuffix(name: string, locale: string | undefined): string {\n if (!locale) return name;\n const suffix = `_${locale}`;\n return name.endsWith(suffix) ? name.slice(0, -suffix.length) : name;\n}\nexport function resolveFieldValue(\n fields: Record<string, unknown>,\n path: string,\n locale: string | undefined,\n): unknown {\n const direct = readSafe(fields, path);\n if (direct !== undefined) return direct;\n if (path.includes('.')) {\n const segments = path.split('.');\n let current: unknown = fields;\n for (const segment of segments) {\n if (BLOCKED_KEYS.has(segment)) return undefined;\n if (current === null || typeof current !== 'object') return undefined;\n current = (current as Record<string, unknown>)[segment];\n }\n if (current !== undefined) return current;\n }\n if (locale !== undefined) {\n const localised = readSafe(fields, `${path}_${locale}`);\n if (localised !== undefined) return localised;\n }\n return undefined;\n}\n\nfunction readSafe(obj: Record<string, unknown>, key: string): unknown {\n if (BLOCKED_KEYS.has(key)) return undefined;\n if (!Object.prototype.hasOwnProperty.call(obj, key)) return undefined;\n return obj[key];\n}\n\nfunction readElementSnapshot(element: Element): unknown {\n if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') {\n return (element as HTMLInputElement).value;\n }\n if (element.tagName === 'IMG') {\n return (element as HTMLImageElement).src;\n }\n return element.textContent;\n}\n\nexport type { CachedElement };\n","/**\n * Per-instance, type-safe event emitter.\n *\n * Replaces the legacy module-level singleton. Each `LivePreviewClient`\n * instantiates its own emitter so that calling `destroy()` on one\n * instance cannot clobber listeners attached to another.\n *\n * Design notes:\n *\n * - Generic over an event map type. The default `LivePreviewEventMap`\n * captures every event this library emits, but the implementation\n * is reusable for any map.\n * - Handlers may be `async`. They are awaited sequentially in\n * registration order. This is intentional: `beforeUpdate.cancel()`\n * and similar synchronization rely on stable ordering.\n * - Errors thrown by one handler are logged via `console.error` and\n * do not prevent later handlers from running.\n * - `once()` semantics: registered into a separate map; the entire\n * set for an event is cleared after dispatch, even if individual\n * handlers throw.\n *\n * @module @events/emitter\n */\n\nimport type { EventHandler, LivePreviewEventMap, Unsubscribe } from './types';\n\ntype AnyHandler = EventHandler<unknown>;\n\n// The constraint `object` (not `Record<string, unknown>`) accommodates\n// interfaces with readonly properties and exact-optional fields without\n// forcing consumers to weaken their type definitions.\nexport class EventEmitter<TMap extends object = LivePreviewEventMap> {\n readonly #regular = new Map<keyof TMap, Set<AnyHandler>>();\n readonly #once = new Map<keyof TMap, Set<AnyHandler>>();\n\n /**\n * Subscribe `handler` to `event`. Returns an unsubscribe function;\n * call it to remove the handler. The handler is invoked for every\n * subsequent emit until unsubscribed.\n */\n on<E extends keyof TMap>(event: E, handler: EventHandler<TMap[E]>): Unsubscribe {\n return this.#register(this.#regular, event, handler as AnyHandler);\n }\n\n /**\n * Subscribe `handler` for a single emit. After the first dispatch,\n * the handler is removed automatically.\n */\n once<E extends keyof TMap>(event: E, handler: EventHandler<TMap[E]>): Unsubscribe {\n return this.#register(this.#once, event, handler as AnyHandler);\n }\n\n /**\n * Remove `handler` from `event`. Works for both `on`- and\n * `once`-registered handlers. No-op when the handler isn't registered.\n */\n off<E extends keyof TMap>(event: E, handler: EventHandler<TMap[E]>): void {\n this.#regular.get(event)?.delete(handler as AnyHandler);\n this.#once.get(event)?.delete(handler as AnyHandler);\n }\n\n /**\n * Dispatch `payload` to every handler registered for `event`.\n *\n * Handlers run sequentially in registration order — regular ones\n * first, then `once` handlers. Async handlers are awaited. Synchronous\n * exceptions are caught, logged, and isolated to the offending handler.\n */\n async emit<E extends keyof TMap>(event: E, payload: TMap[E]): Promise<void> {\n const regular = this.#regular.get(event);\n if (regular) {\n for (const handler of [...regular]) await this.#invoke(handler, payload, event);\n }\n const once = this.#once.get(event);\n if (once && once.size > 0) {\n const snapshot = [...once];\n this.#once.delete(event);\n for (const handler of snapshot) await this.#invoke(handler, payload, event);\n }\n }\n\n /**\n * Number of handlers currently registered for `event`.\n * Sum of `on` and `once` registrations.\n */\n listenerCount(event: keyof TMap): number {\n return (this.#regular.get(event)?.size ?? 0) + (this.#once.get(event)?.size ?? 0);\n }\n\n /**\n * Remove every handler. Pass an event name to limit the removal to\n * one event; omit it to clear every event on this emitter.\n *\n * Crucially this only affects the current instance — there is no\n * shared global state.\n */\n removeAllListeners(event?: keyof TMap): void {\n if (event === undefined) {\n this.#regular.clear();\n this.#once.clear();\n return;\n }\n this.#regular.delete(event);\n this.#once.delete(event);\n }\n\n /**\n * Snapshot of all event names that currently have at least one\n * registered handler. Useful for debugging.\n */\n eventNames(): (keyof TMap)[] {\n const names = new Set<keyof TMap>();\n for (const key of this.#regular.keys()) names.add(key);\n for (const key of this.#once.keys()) names.add(key);\n return [...names];\n }\n\n #register(\n bucket: Map<keyof TMap, Set<AnyHandler>>,\n event: keyof TMap,\n handler: AnyHandler,\n ): Unsubscribe {\n let set = bucket.get(event);\n if (!set) {\n set = new Set();\n bucket.set(event, set);\n }\n set.add(handler);\n return () => {\n bucket.get(event)?.delete(handler);\n };\n }\n\n async #invoke(handler: AnyHandler, payload: unknown, event: keyof TMap): Promise<void> {\n try {\n await handler(payload);\n } catch (err) {\n const label =\n typeof event === 'string' || typeof event === 'number' ? String(event) : '<event>';\n console.error(`[live-preview] handler for \"${label}\" threw:`, err);\n }\n }\n}\n","/**\n * Environment introspection helpers.\n *\n * The detection layer needs to know whether the runtime is currently\n * running inside an iframe, in a popup, in development mode, and\n * whether environment variables are accessible. None of these checks\n * is dramatic on its own, but having a single, tested module avoids\n * the duplicated, subtly-different `typeof process` snippets that\n * accumulated in the legacy implementation.\n *\n * @module @detection/environment\n */\n\n/**\n * Returns `true` when the current window is inside an iframe.\n *\n * Uses a try/catch around `window.self !== window.top` because the\n * comparison throws in cross-origin iframes — and that very throw is\n * itself a definitive \"yes, I am in an iframe\" signal.\n */\nexport function isInIframe(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return window.self !== window.top;\n } catch {\n return true;\n }\n}\n\n/**\n * Returns `true` when the current window was opened via `window.open()`\n * and the opener reference is still accessible.\n */\nexport function isInPopup(): boolean {\n if (typeof window === 'undefined') return false;\n return window.opener != null;\n}\n\n/**\n * Returns `true` when running in a preview-capable context: iframe or\n * popup. Anything else (top-level navigation) should skip live preview\n * initialisation entirely.\n */\nexport function isInPreviewContext(): boolean {\n return isInIframe() || isInPopup();\n}\n\n/**\n * Returns `true` when the runtime appears to be in development mode.\n *\n * Detection order:\n * 1. `process.env.NODE_ENV !== 'production'`\n * 2. `import.meta.env.DEV === true` (Vite / Astro / SvelteKit)\n * 3. `window.location.hostname` is `localhost`/`127.0.0.1`\n *\n * Returns `false` when none of those are available.\n */\nexport function isDevMode(): boolean {\n const nodeEnv = readNodeEnv();\n if (nodeEnv !== undefined) return nodeEnv !== 'production';\n const importMetaDev = readImportMetaDev();\n if (importMetaDev !== undefined) return importMetaDev;\n if (typeof window !== 'undefined') {\n const host = window.location.hostname;\n if (host === 'localhost' || host === '127.0.0.1') return true;\n }\n return false;\n}\n\n/**\n * Read a named environment variable from whichever runtime exposes it.\n *\n * The variable is first looked up via `process.env`, then via Vite's\n * `import.meta.env`. Returns `undefined` when neither has a value.\n */\nexport function getEnvVar(name: string): string | undefined {\n if (typeof process !== 'undefined') {\n const value = process.env[name];\n if (typeof value === 'string' && value.length > 0) return value;\n }\n const meta = tryReadImportMetaEnv();\n if (meta) {\n const value = meta[name];\n if (typeof value === 'string' && value.length > 0) return value;\n }\n return undefined;\n}\n\nfunction readNodeEnv(): string | undefined {\n if (typeof process === 'undefined') return undefined;\n const value = process.env['NODE_ENV'];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction readImportMetaDev(): boolean | undefined {\n const meta = tryReadImportMetaEnv();\n if (!meta) return undefined;\n const dev = meta['DEV'];\n return typeof dev === 'boolean' ? dev : undefined;\n}\n\n/**\n * Compile-time flag injected by `scripts/build-runtime.ts`. Inside the\n * inline IIFE `import.meta` can never exist (classic scripts have no\n * module meta, and no bundler rewrites the inline tag), so the probe\n * below is statically disabled there — probing would run `new\n * Function`, which pages with a strict `script-src` (no\n * `unsafe-eval`) report as a CSP violation on every load.\n */\ndeclare const __INLINE_RUNTIME_BUILD__: boolean | undefined;\n\nlet importMetaEnvCache: Record<string, unknown> | null | undefined;\n\n/**\n * Safely read `import.meta.env` without throwing in runtimes that do\n * not support `import.meta`. Returns `undefined` when unavailable.\n *\n * The indirection through `Function('return import.meta...')` is\n * intentional: parsing `import.meta` in CJS bundles fails at parse\n * time. By wrapping it in `Function`, the parse happens lazily and\n * crashes are caught at call time. The result is memoised so the\n * probe (an eval in CSP terms) runs at most once per page.\n */\nfunction tryReadImportMetaEnv(): Record<string, unknown> | undefined {\n if (typeof __INLINE_RUNTIME_BUILD__ !== 'undefined' && __INLINE_RUNTIME_BUILD__) {\n return undefined;\n }\n if (importMetaEnvCache !== undefined) return importMetaEnvCache ?? undefined;\n importMetaEnvCache = null;\n try {\n // eslint-disable-next-line @typescript-eslint/no-implied-eval -- intentional lazy parse\n const reader = new Function(\n 'try { return import.meta && import.meta.env; } catch (_) { return undefined; }',\n ) as () => unknown;\n const result = reader();\n if (result && typeof result === 'object') {\n importMetaEnvCache = result as Record<string, unknown>;\n return importMetaEnvCache;\n }\n } catch {\n // ignore\n }\n return undefined;\n}\n","/**\n * Origin detection and matching.\n *\n * Builds the set of trusted Payload admin origins and exposes a fast\n * matcher used by the message bus. Three sources, in precedence order:\n *\n * 1. Explicit origins passed via configuration. Always trusted.\n * 2. `document.referrer` — **only when no explicit origins are\n * configured**. The browser writes the embedder's origin here\n * when the iframe loads; using it as a fallback gives a\n * zero-config path, but it must never widen an explicit\n * allow-list (the referrer is whoever framed the page, which in\n * an attack is the attacker).\n * 3. Localhost pattern (any port on `localhost` / `127.0.0.1`),\n * enabled when development mode is detected. Replaces the\n * legacy hand-rolled port list.\n *\n * Once the parent's origin is *confirmed* through a successful message\n * handshake, callers can call `lockOrigin()` to drop every other\n * candidate, making subsequent matches exact.\n *\n * @module @detection/origin\n */\n\nimport { getEnvVar, isDevMode, isInIframe } from './environment';\n\nconst LOCALHOST_PATTERN = /^https?:\\/\\/(localhost|127\\.0\\.0\\.1)(?::\\d+)?$/i;\nconst VALID_ORIGIN_PATTERN = /^https?:\\/\\/[^/?#\\s]+$/i;\n\nconst ENV_VAR_NAMES = [\n 'PAYLOAD_ADMIN_ORIGIN',\n 'PUBLIC_PAYLOAD_ADMIN_ORIGIN',\n 'NEXT_PUBLIC_PAYLOAD_ADMIN_ORIGIN',\n] as const;\n\nexport interface OriginDetectorOptions {\n /** Explicit additional origins to trust. Always allowed. */\n readonly additionalOrigins?: readonly string[];\n /** Set to `false` to opt out of `document.referrer` detection. */\n readonly enableReferrerDetection?: boolean;\n /** Set to `false` to opt out of localhost-pattern matching. */\n readonly enableLocalhostMatching?: boolean;\n /**\n * Override the dev-mode detection. When `undefined`, dev mode is\n * inferred from the runtime (see `isDevMode`).\n */\n readonly forceDevMode?: boolean;\n /** Override `document.referrer` for tests. */\n readonly referrer?: string;\n}\n\n/**\n * Holds the resolved origin policy and exposes a matcher.\n *\n * The detector is stateful: it starts with the union of all candidate\n * sources, then narrows down to a single, verified origin once\n * `lockOrigin()` is called by the message bus on first valid handshake.\n */\nexport class OriginDetector {\n readonly #explicitOrigins: ReadonlySet<string>;\n readonly #referrerOrigin: string | undefined;\n readonly #allowLocalhost: boolean;\n readonly #referrerWasAvailable: boolean;\n #lockedOrigin: string | undefined;\n\n constructor(options: OriginDetectorOptions = {}) {\n const explicit = new Set<string>();\n for (const origin of options.additionalOrigins ?? []) {\n const normalised = normaliseOrigin(origin);\n if (normalised !== undefined) explicit.add(normalised);\n }\n for (const envName of ENV_VAR_NAMES) {\n const value = getEnvVar(envName);\n if (value === undefined) continue;\n for (const raw of value.split(',')) {\n const normalised = normaliseOrigin(raw);\n if (normalised !== undefined) explicit.add(normalised);\n }\n }\n this.#explicitOrigins = explicit;\n\n const useReferrer = options.enableReferrerDetection ?? true;\n let referrerOrigin: string | undefined;\n if (useReferrer) {\n const referrer =\n options.referrer ?? (typeof document !== 'undefined' ? document.referrer : '');\n if (referrer.length > 0) {\n try {\n const origin = new URL(referrer).origin;\n if (origin && origin !== 'null') referrerOrigin = origin;\n } catch {\n // ignore — referrer is opaque\n }\n }\n }\n this.#referrerOrigin = referrerOrigin;\n this.#referrerWasAvailable = referrerOrigin !== undefined;\n\n const allowLocalhost =\n (options.enableLocalhostMatching ?? true) && (options.forceDevMode ?? isDevMode());\n this.#allowLocalhost = allowLocalhost;\n }\n\n /**\n * Returns `true` when `origin` is trusted under the current policy.\n *\n * If an origin has been locked, only that exact value matches.\n * Otherwise explicit origins and (in dev mode) localhost-pattern\n * matches are accepted. The referrer-derived origin is a **fallback,\n * not a union member**: it only counts when NO explicit origins are\n * configured. `document.referrer` always names whoever actually\n * framed the page — if it were unioned with the explicit list, any\n * site embedding the page in an iframe would become a trusted\n * postMessage sender despite the consumer having pinned the admin\n * origin explicitly.\n */\n matches(origin: string): boolean {\n if (origin.length === 0 || origin === 'null') return false;\n if (this.#lockedOrigin !== undefined) return origin === this.#lockedOrigin;\n if (this.#explicitOrigins.has(origin)) return true;\n if (\n this.#explicitOrigins.size === 0 &&\n this.#referrerOrigin !== undefined &&\n origin === this.#referrerOrigin\n ) {\n return true;\n }\n if (this.#allowLocalhost && LOCALHOST_PATTERN.test(origin)) return true;\n return false;\n }\n\n /**\n * Narrow the trusted set to a single origin after a successful\n * handshake. Subsequent calls to `matches()` only allow `origin`.\n *\n * Returns `true` if locking succeeded; `false` if the candidate is\n * not currently considered trusted (which would defeat the purpose\n * of locking).\n */\n lockOrigin(origin: string): boolean {\n if (!this.matches(origin)) return false;\n this.#lockedOrigin = origin;\n return true;\n }\n\n /**\n * Release the origin lock so any allow-listed origin is trusted\n * again until the next successful handshake. The lifecycle calls\n * this on heartbeat timeout — after the trusted parent disappears,\n * a different (still-allowed) origin should be free to reconnect.\n *\n * Returns the previously-locked origin, or `undefined` when nothing\n * was locked.\n */\n unlockOrigin(): string | undefined {\n const previous = this.#lockedOrigin;\n this.#lockedOrigin = undefined;\n return previous;\n }\n\n /** The currently locked origin, or `undefined`. */\n get lockedOrigin(): string | undefined {\n return this.#lockedOrigin;\n }\n\n /**\n * Snapshot of every origin currently allowed by the policy. Used by\n * the message bus to broadcast `ready` messages.\n *\n * Localhost pattern matches are expanded into the common dev ports\n * so the handshake can find a Payload running on its usual port.\n */\n enumerate(): string[] {\n if (this.#lockedOrigin !== undefined) return [this.#lockedOrigin];\n const result = new Set<string>(this.#explicitOrigins);\n // Referrer is a zero-config fallback only — mirroring matches().\n if (this.#explicitOrigins.size === 0 && this.#referrerOrigin !== undefined) {\n result.add(this.#referrerOrigin);\n }\n if (this.#allowLocalhost) {\n for (const port of LOCALHOST_HANDSHAKE_PORTS) {\n result.add(`http://localhost:${String(port)}`);\n result.add(`http://127.0.0.1:${String(port)}`);\n }\n }\n return [...result];\n }\n\n /**\n * Reports whether `document.referrer` contributed at least one\n * origin. Useful for surfacing a console warning when running in\n * production without an explicit origin and the referrer is absent\n * (because of a `Referrer-Policy: no-referrer` header).\n */\n get referrerWasAvailable(): boolean {\n return this.#referrerWasAvailable;\n }\n\n /**\n * Indicates whether the detector is operating in a \"production-without-\n * explicit-origin\" configuration. When `true`, the host should log a\n * loud warning — silent connection failure is the worst outcome.\n */\n get isProductionUnconfigured(): boolean {\n if (!isInIframe()) return false;\n if (this.#explicitOrigins.size > 0) return false;\n if (this.#allowLocalhost) return false;\n if (this.#referrerOrigin !== undefined) return false;\n return true;\n }\n\n /**\n * `true` when the referrer is the ONLY trust source (no explicit\n * origins, no localhost matching). In that mode any site that frames\n * the page becomes a trusted postMessage sender — `document.referrer`\n * always names the actual embedder. Content is still sanitized, but\n * the origin allow-list no longer restricts who may drive it. Hosts\n * should surface a warning suggesting explicit `allowedOrigins` and\n * a `frame-ancestors` policy in production.\n */\n get isReferrerOnlyTrust(): boolean {\n if (this.#explicitOrigins.size > 0) return false;\n if (this.#allowLocalhost) return false;\n return this.#referrerOrigin !== undefined;\n }\n}\n\n/**\n * Common ports the inline runtime tries when broadcasting `ready` to\n * a localhost Payload admin. The detection itself uses a pattern, but\n * the handshake needs concrete targets.\n */\nconst LOCALHOST_HANDSHAKE_PORTS: readonly number[] = [\n 3000, 3001, 3333, 4000, 4321, 5000, 5173, 5174, 8000, 8080, 8888, 9000,\n];\n\n/**\n * Validate and canonicalise an origin string. Returns `undefined` for\n * inputs that are not absolute `http(s)://host[:port]` origins.\n */\nexport function normaliseOrigin(value: string): string | undefined {\n const trimmed = value.trim();\n if (trimmed.length === 0) return undefined;\n try {\n const url = new URL(trimmed);\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return undefined;\n if (!VALID_ORIGIN_PATTERN.test(url.origin)) return undefined;\n return url.origin;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Pure-functional check used in inline scripts where instantiating a\n * full `OriginDetector` is overkill. The exported helper is also handy\n * for tests and for consumers that want to mimic the matcher policy\n * without holding state.\n */\nexport function isLocalhostOrigin(origin: string): boolean {\n return LOCALHOST_PATTERN.test(origin);\n}\n","/**\n * Per-instance plugin manager.\n *\n * Holds the plugins registered on one `LivePreviewClient`. Plugins\n * are isolated from each other and from other client instances —\n * there is no shared global state.\n *\n * @module @plugins/manager\n */\n\nimport type { EventEmitter } from '@events/emitter';\nimport type { FieldRenderer } from '@core/types';\nimport type { FieldTransform, LivePreviewPlugin, PluginContext } from './types';\n\nexport interface PluginManagerOptions {\n readonly events: EventEmitter;\n readonly config: Readonly<Record<string, unknown>>;\n readonly registerFieldRenderer: (renderer: FieldRenderer) => void;\n readonly log: (...args: unknown[]) => void;\n}\n\nexport class PluginManager {\n readonly #events: EventEmitter;\n readonly #config: Readonly<Record<string, unknown>>;\n readonly #registerRenderer: (renderer: FieldRenderer) => void;\n readonly #log: (...args: unknown[]) => void;\n readonly #plugins = new Map<string, LivePreviewPlugin>();\n readonly #transforms = new Map<string, FieldTransform[]>();\n\n constructor(options: PluginManagerOptions) {\n this.#events = options.events;\n this.#config = options.config;\n this.#registerRenderer = options.registerFieldRenderer;\n this.#log = options.log;\n }\n\n /**\n * Register a plugin and run its `init` hook. Duplicate names are\n * ignored (with a debug warning). Errors thrown by `init` are\n * caught and surfaced via the error logger; the plugin is *not*\n * added to the registry in that case.\n */\n async register(plugin: LivePreviewPlugin): Promise<void> {\n if (this.#plugins.has(plugin.name)) {\n this.#log(`plugin \"${plugin.name}\" already registered`);\n return;\n }\n const context: PluginContext = {\n events: this.#events,\n registerFieldRenderer: (renderer) => {\n this.#registerRenderer(renderer);\n },\n registerTransform: (fieldName, transform) => {\n this.#addTransform(fieldName, transform);\n },\n getConfig: () => this.#config,\n log: (...args) => {\n this.#log(`[${plugin.name}]`, ...args);\n },\n };\n try {\n await plugin.init(context);\n this.#plugins.set(plugin.name, plugin);\n this.#log(`plugin \"${plugin.name}\" registered`);\n } catch (err) {\n this.#log(`plugin \"${plugin.name}\" init failed:`, err);\n }\n }\n\n /**\n * Remove a plugin and call its `destroy` hook.\n */\n async unregister(name: string): Promise<void> {\n const plugin = this.#plugins.get(name);\n if (!plugin) return;\n this.#plugins.delete(name);\n if (plugin.destroy) {\n try {\n await plugin.destroy();\n } catch (err) {\n this.#log(`plugin \"${name}\" destroy failed:`, err);\n }\n }\n }\n\n /**\n * Destroy every registered plugin. Used by `LivePreviewClient.destroy`.\n * Errors from individual plugins are isolated.\n */\n async destroyAll(): Promise<void> {\n const names = [...this.#plugins.keys()];\n for (const name of names) await this.unregister(name);\n this.#transforms.clear();\n }\n\n /**\n * Apply every transform registered for `fieldName` to `value`, in\n * registration order. Returns the transformed value.\n */\n applyTransforms(\n fieldName: string,\n value: unknown,\n context: { readonly element: Element; readonly allFields: Record<string, unknown> },\n ): unknown {\n const transforms = this.#transforms.get(fieldName);\n if (!transforms || transforms.length === 0) return value;\n let result: unknown = value;\n for (const transform of transforms) {\n try {\n result = transform(result, {\n fieldName,\n element: context.element,\n allFields: context.allFields,\n });\n } catch (err) {\n this.#log(`transform for \"${fieldName}\" threw:`, err);\n return value;\n }\n }\n return result;\n }\n\n /** Names of currently registered plugins. */\n list(): readonly string[] {\n return [...this.#plugins.keys()];\n }\n\n /** Test introspection — number of plugins. */\n get size(): number {\n return this.#plugins.size;\n }\n\n #addTransform(fieldName: string, transform: FieldTransform): void {\n const existing = this.#transforms.get(fieldName);\n if (existing) existing.push(transform);\n else this.#transforms.set(fieldName, [transform]);\n }\n}\n","/**\n * HTML sanitizer.\n *\n * Uses the browser's parser (via `<template>`) for accurate sanitization\n * and walks the resulting DOM tree to:\n *\n * 1. Strip elements not on the allow-list (scripts removed entirely;\n * others are unwrapped to their text content).\n * 2. Strip every attribute not on the per-tag allow-list, including\n * every `on*` event handler.\n * 3. Validate `href`, `src`, and `srcset` values via `isSafeUrl`.\n * 4. Force `rel=\"noopener noreferrer\"` on external `<a>` elements.\n * 5. Strip `<style>` and any inline `style` attributes entirely\n * (CSS-injection vector eliminated).\n *\n * The DOM dependency is intentional — string-only sanitizers are\n * historically brittle. The function throws `SanitizerEnvironmentError`\n * when no DOM is available so callers fail loudly instead of producing\n * unsanitized output.\n *\n * @module @security/sanitizer\n */\n\nimport { isSafeUrl, isExternalHttpUrl } from './url-validator';\n\n/**\n * HTML elements that pass through sanitization with their content\n * intact. Anything not in this set is unwrapped (text preserved,\n * markup removed) unless it is on the `REMOVE_COMPLETELY` set, in\n * which case it is deleted with its children.\n */\nconst ALLOWED_TAGS: ReadonlySet<string> = new Set([\n 'p',\n 'br',\n 'strong',\n 'b',\n 'em',\n 'i',\n 'u',\n 's',\n 'strike',\n 'mark',\n 'small',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'ul',\n 'ol',\n 'li',\n 'dl',\n 'dt',\n 'dd',\n 'blockquote',\n 'code',\n 'pre',\n 'kbd',\n 'samp',\n 'var',\n 'a',\n 'span',\n 'div',\n 'section',\n 'article',\n 'aside',\n 'header',\n 'footer',\n 'nav',\n 'figure',\n 'figcaption',\n 'img',\n 'picture',\n 'source',\n 'audio',\n 'video',\n 'sub',\n 'sup',\n 'hr',\n 'time',\n 'abbr',\n 'cite',\n 'q',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'tr',\n 'th',\n 'td',\n 'caption',\n 'colgroup',\n 'col',\n]);\n\n/**\n * Elements removed entirely (children included). Distinct from the\n * unwrapping fallback because their contents are themselves harmful\n * (script source, CSS, raw HTML, etc.).\n */\nconst REMOVE_COMPLETELY: ReadonlySet<string> = new Set([\n 'script',\n 'style',\n 'iframe',\n 'object',\n 'embed',\n 'link',\n 'meta',\n 'base',\n 'form',\n 'input',\n 'button',\n 'select',\n 'textarea',\n 'svg',\n 'math',\n 'template',\n 'frame',\n 'frameset',\n 'noframes',\n 'noscript',\n]);\n\nconst ATTR_GLOBAL: ReadonlySet<string> = new Set([\n 'id',\n 'class',\n 'lang',\n 'dir',\n 'title',\n 'role',\n 'tabindex',\n]);\n\nconst ATTR_ARIA_PREFIX = 'aria-';\nconst ATTR_DATA_PREFIX = 'data-';\n\nconst ATTR_BY_TAG: Readonly<Record<string, ReadonlySet<string>>> = {\n a: new Set(['href', 'target', 'rel', 'download', 'hreflang', 'type']),\n img: new Set(['src', 'srcset', 'sizes', 'alt', 'width', 'height', 'loading', 'decoding']),\n picture: new Set([]),\n source: new Set(['src', 'srcset', 'sizes', 'type', 'media']),\n audio: new Set(['src', 'controls', 'autoplay', 'loop', 'muted', 'preload']),\n video: new Set([\n 'src',\n 'poster',\n 'controls',\n 'autoplay',\n 'loop',\n 'muted',\n 'preload',\n 'width',\n 'height',\n 'playsinline',\n ]),\n time: new Set(['datetime']),\n abbr: new Set(['title']),\n q: new Set(['cite']),\n blockquote: new Set(['cite']),\n table: new Set(['summary']),\n th: new Set(['colspan', 'rowspan', 'scope', 'headers', 'abbr']),\n td: new Set(['colspan', 'rowspan', 'headers']),\n col: new Set(['span']),\n colgroup: new Set(['span']),\n ol: new Set(['start', 'reversed', 'type']),\n li: new Set(['value']),\n code: new Set(['class']),\n pre: new Set(['class']),\n};\n\nconst URL_ATTRIBUTES: ReadonlySet<string> = new Set(['href', 'src', 'cite', 'poster']);\n\n/**\n * Thrown when `sanitizeHtml` is invoked in an environment without a\n * `document` (e.g., server-side rendering). Callers should catch this\n * and either degrade to plain-text rendering or route the work to a\n * deferred client-side render.\n */\nexport class SanitizerEnvironmentError extends Error {\n override readonly name = 'SanitizerEnvironmentError';\n}\n\nexport interface SanitizeOptions {\n /** Extra tags to allow beyond the built-in list. Lower-case, untrimmed. */\n readonly additionalAllowedTags?: readonly string[];\n /** Extra per-tag attributes to allow. Tag and attribute names must be lower-case. */\n readonly additionalAllowedAttributes?: Readonly<Record<string, readonly string[]>>;\n}\n\ninterface ResolvedPolicy {\n readonly allowedTags: ReadonlySet<string>;\n readonly attrByTag: ReadonlyMap<string, ReadonlySet<string>>;\n}\n\nfunction resolvePolicy(options: SanitizeOptions | undefined): ResolvedPolicy {\n if (!options) {\n const attrMap = new Map<string, ReadonlySet<string>>();\n for (const [tag, attrs] of Object.entries(ATTR_BY_TAG)) attrMap.set(tag, attrs);\n return { allowedTags: ALLOWED_TAGS, attrByTag: attrMap };\n }\n const allowed = new Set(ALLOWED_TAGS);\n for (const tag of options.additionalAllowedTags ?? []) allowed.add(tag);\n const attrMap = new Map<string, ReadonlySet<string>>();\n for (const [tag, attrs] of Object.entries(ATTR_BY_TAG)) attrMap.set(tag, attrs);\n for (const [tag, attrs] of Object.entries(options.additionalAllowedAttributes ?? {})) {\n const existing = attrMap.get(tag);\n const merged = new Set(existing ?? []);\n for (const attr of attrs) merged.add(attr);\n attrMap.set(tag, merged);\n }\n return { allowedTags: allowed, attrByTag: attrMap };\n}\n\n/**\n * Minimal `Document`-shaped surface the sanitizer needs. Any DOM\n * implementation (browser, jsdom, linkedom, happy-dom, parse5 + a\n * thin adapter) that produces `<template>`-style elements works.\n */\nexport interface SanitizerDocument {\n createElement: (tagName: string) => {\n innerHTML: string;\n readonly content: ParentNode;\n };\n}\n\nlet documentOverride: SanitizerDocument | undefined;\n\n/**\n * Inject a `Document` implementation for the sanitizer to use when\n * `globalThis.document` is unavailable.\n *\n * Server-side renderers (Node, Bun, Deno without DOM globals) can wire\n * this up once at startup with any of the popular pure-JS DOM\n * libraries:\n *\n * ```ts\n * // linkedom — recommended (smallest, fastest)\n * import { parseHTML } from 'linkedom';\n * import { setSanitizerDocument } from 'payload-live-preview';\n * const { document } = parseHTML('<!doctype html><html><body></body></html>');\n * setSanitizerDocument(document);\n * ```\n *\n * ```ts\n * // jsdom — heavier, but already in many SSR pipelines\n * import { JSDOM } from 'jsdom';\n * setSanitizerDocument(new JSDOM().window.document);\n * ```\n *\n * Pass `null` to clear a previous override (mostly useful for tests).\n */\nexport function setSanitizerDocument(doc: SanitizerDocument | null): void {\n documentOverride = doc ?? undefined;\n}\n\n/**\n * Sanitize `html` and return safe HTML.\n *\n * The function never returns `undefined`/`null`. On malformed input the\n * browser parser silently recovers and the sanitizer continues from\n * the recovered tree.\n *\n * @throws {SanitizerEnvironmentError} when no DOM is available.\n */\nexport function sanitizeHtml(html: string, options?: SanitizeOptions): string {\n const doc = resolveDocument();\n if (!doc) {\n throw new SanitizerEnvironmentError(\n 'sanitizeHtml requires a DOM. Inject one via setSanitizerDocument() for SSR ' +\n '(linkedom, jsdom, happy-dom, …) or use the plain-text path on the server.',\n );\n }\n if (html === '') return '';\n\n const policy = resolvePolicy(options);\n const template = doc.createElement('template');\n template.innerHTML = html;\n sanitizeFragment(template.content, policy);\n return template.innerHTML;\n}\n\nfunction resolveDocument(): SanitizerDocument | undefined {\n if (documentOverride) return documentOverride;\n if (typeof document === 'undefined') return undefined;\n return document;\n}\n\n/**\n * Whether `sanitizeHtml` currently has a DOM to work with — either the\n * global `document` or an override injected via `setSanitizerDocument`.\n * Callers that treat sanitization as an optional defence-in-depth layer\n * (e.g. `lexicalToHtml` during SSR) use this to decide whether the\n * backstop is available instead of probing the `document` global\n * directly, which would ignore the override.\n */\nexport function hasSanitizerDocument(): boolean {\n return resolveDocument() !== undefined;\n}\n\nfunction sanitizeFragment(node: ParentNode, policy: ResolvedPolicy): void {\n // Iterate over a snapshot — we mutate children during the walk.\n for (const child of Array.from(node.childNodes)) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n sanitizeElement(child as Element, policy);\n } else if (child.nodeType === Node.COMMENT_NODE) {\n child.remove();\n }\n }\n}\n\nfunction sanitizeElement(element: Element, policy: ResolvedPolicy): void {\n const tag = element.tagName.toLowerCase();\n\n if (REMOVE_COMPLETELY.has(tag)) {\n element.remove();\n return;\n }\n\n if (!policy.allowedTags.has(tag)) {\n // Unwrap: replace element with its sanitized children.\n sanitizeFragment(element, policy);\n const parent = element.parentNode;\n if (parent) {\n while (element.firstChild) parent.insertBefore(element.firstChild, element);\n element.remove();\n }\n return;\n }\n\n sanitizeAttributes(element, tag, policy);\n\n // Apply rel hardening to external links after attribute sanitization.\n if (tag === 'a') hardenAnchor(element);\n\n sanitizeFragment(element, policy);\n}\n\nfunction sanitizeAttributes(element: Element, tag: string, policy: ResolvedPolicy): void {\n const tagAttrs = policy.attrByTag.get(tag);\n\n for (const attr of Array.from(element.attributes)) {\n const name = attr.name.toLowerCase();\n\n // Strip every event-handler attribute.\n if (name.startsWith('on')) {\n element.removeAttribute(attr.name);\n continue;\n }\n // Strip every style attribute — CSS-injection vector.\n if (name === 'style') {\n element.removeAttribute(attr.name);\n continue;\n }\n // Allow global, ARIA, and data-* attributes universally. They can\n // carry arbitrary strings but no executable sinks (event handlers\n // and `style` were already stripped above).\n if (\n ATTR_GLOBAL.has(name) ||\n name.startsWith(ATTR_ARIA_PREFIX) ||\n name.startsWith(ATTR_DATA_PREFIX)\n ) {\n continue;\n }\n if (tagAttrs?.has(name)) {\n if (URL_ATTRIBUTES.has(name) && !isSafeUrl(attr.value)) {\n element.removeAttribute(attr.name);\n } else if (name === 'srcset' && !isSafeSrcset(attr.value)) {\n element.removeAttribute(attr.name);\n }\n continue;\n }\n element.removeAttribute(attr.name);\n }\n}\n\n/**\n * Validate every candidate URL inside a `srcset` value. The attribute\n * holds a comma-separated list of `<url> [<descriptor>]` pairs; each\n * URL must individually pass `isSafeUrl`. Rejecting the whole\n * attribute on any bad candidate is deliberate — partial rewriting\n * would silently change rendering semantics.\n */\nfunction isSafeSrcset(value: string): boolean {\n const candidates = value.split(',');\n for (const candidate of candidates) {\n const trimmed = candidate.trim();\n if (trimmed.length === 0) continue;\n const url = trimmed.split(/\\s+/, 1)[0];\n if (url === undefined || url.length === 0 || !isSafeUrl(url)) return false;\n }\n return true;\n}\n\nfunction hardenAnchor(anchor: Element): void {\n const href = anchor.getAttribute('href');\n if (!href) return;\n if (!isExternalHttpUrl(href)) return;\n anchor.setAttribute('rel', 'noopener noreferrer');\n if (!anchor.hasAttribute('target')) anchor.setAttribute('target', '_blank');\n}\n\n/**\n * Built-in allow-lists, exposed for documentation and tests.\n */\nexport const SANITIZER_POLICY = Object.freeze({\n allowedTags: ALLOWED_TAGS,\n removeCompletely: REMOVE_COMPLETELY,\n globalAttributes: ATTR_GLOBAL,\n attributesByTag: ATTR_BY_TAG,\n urlAttributes: URL_ATTRIBUTES,\n});\n","/**\n * Lexical node-renderer registry.\n *\n * Each Payload Lexical node type maps to one renderer module under\n * `./nodes/`. The registry pattern keeps each node's logic in its own\n * file (clean separation of concerns) and lets consumers register\n * custom renderers via the plugin system without touching this module.\n *\n * @module @lexical/registry\n */\n\nimport type { LexicalNode } from './types';\n\n/**\n * Context passed to node renderers. Includes the recursive renderer\n * for children and the `alignment` resolver so block-level nodes can\n * apply paragraph/heading alignment uniformly.\n */\nexport interface RenderNodeContext {\n /**\n * Render an arbitrary list of children. Handles whitespace, falls\n * through to text renderers, and honours the registry. Renderers\n * call this to render their own descendants.\n */\n readonly renderChildren: (children: readonly LexicalNode[]) => string;\n /**\n * Resolve the textual alignment for a block-level node. Returns\n * `undefined` when no alignment is specified.\n */\n readonly resolveAlignment: (node: LexicalNode) => string | undefined;\n /**\n * Resolve the indent count for a node. Used to build inline indent\n * styles for paragraphs and list items.\n */\n readonly resolveIndent: (node: LexicalNode) => number;\n}\n\n/** Renderer signature: `(node, ctx) => htmlString`. */\nexport type NodeRenderer = (node: LexicalNode, context: RenderNodeContext) => string;\n\n/**\n * Mutable registry. Built-in node renderers populate the map at\n * import time; consumer code may extend it via `register`.\n */\nconst registry = new Map<string, NodeRenderer>();\n\n/**\n * Register or replace the renderer for `type`.\n */\nexport function register(type: string, renderer: NodeRenderer): void {\n registry.set(type, renderer);\n}\n\n/** Look up the renderer for `type`, or `undefined`. */\nexport function lookup(type: string): NodeRenderer | undefined {\n return registry.get(type);\n}\n\n/** Snapshot of registered node types. Useful for diagnostics. */\nexport function registeredTypes(): readonly string[] {\n return [...registry.keys()];\n}\n\n/** Test-only helper: clear the registry. */\nexport function __resetForTests(): void {\n registry.clear();\n}\n","/**\n * Shared utilities for Lexical node renderers.\n *\n * @module @lexical/utils\n */\n\nimport type { LexicalNode } from './types';\n\nconst ALIGNMENT_NUMERIC: Readonly<Record<number, string>> = {\n 1: 'left',\n 2: 'center',\n 3: 'right',\n 4: 'justify',\n};\n\nconst ALIGNMENT_STRING = new Set(['left', 'center', 'right', 'justify', 'start', 'end']);\n\n/**\n * Resolve the `text-align` value for a block-level Lexical node.\n *\n * Payload's Lexical serializer historically emits both string formats\n * (`'left'`) and a numeric bitmask in `format`. We honour both forms.\n */\nexport function resolveAlignment(node: LexicalNode): string | undefined {\n const fmt = node.format;\n if (typeof fmt === 'string' && ALIGNMENT_STRING.has(fmt)) return fmt;\n if (typeof fmt === 'number') {\n const mapped = ALIGNMENT_NUMERIC[fmt];\n if (mapped !== undefined) return mapped;\n }\n return undefined;\n}\n\n/**\n * Resolve the indent depth for a node. Defaults to `0`.\n */\nexport function resolveIndent(node: LexicalNode): number {\n const indent = node.indent;\n return typeof indent === 'number' && indent > 0 ? indent : 0;\n}\n\n/**\n * Build the `dir=\"...\"` attribute for a node when a direction is set.\n */\nexport function dirAttribute(node: LexicalNode): string {\n if (node.direction === 'rtl') return ' dir=\"rtl\"';\n if (node.direction === 'ltr') return ' dir=\"ltr\"';\n return '';\n}\n\n/**\n * Build a `style` attribute combining `text-align` and `padding-inline-start`\n * (the standard way Lexical maps indent to CSS).\n */\nexport function styleAttribute(node: LexicalNode): string {\n const align = resolveAlignment(node);\n const indent = resolveIndent(node);\n const styles: string[] = [];\n if (align !== undefined) styles.push(`text-align:${align}`);\n if (indent > 0) styles.push(`padding-inline-start:${String(indent * 40)}px`);\n if (styles.length === 0) return '';\n return ` style=\"${styles.join(';')}\"`;\n}\n","/**\n * HTML-escape primitives.\n *\n * Implementations follow the OWASP XSS Prevention Cheat Sheet: each\n * special character is replaced with its decimal or hex entity. The\n * functions are isomorphic — they have no dependency on the DOM and\n * can run in any JavaScript environment (browser, Node, Deno, Bun).\n *\n * @module @security/escape\n */\n\nconst HTML_ESCAPES: Readonly<Record<string, string>> = Object.freeze({\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n '/': '&#x2F;',\n '`': '&#x60;',\n '=': '&#x3D;',\n});\n\nconst HTML_ESCAPE_PATTERN = /[&<>\"'/`=]/g;\n\n/**\n * Escape every HTML-significant character in `text` so the result is\n * safe to interpolate into any HTML context (element body or attribute).\n *\n * - Coerces non-strings via `String(value)`; pass `null`/`undefined`\n * intentionally — they become `\"null\"`/`\"undefined\"`.\n * - Cannot fail; returns `\"\"` for the empty input.\n */\nexport function escapeHtml(text: string): string {\n if (text === '') return '';\n // The regex character class and the HTML_ESCAPES map are intentionally\n // coupled — every match is guaranteed to be a key in the map.\n // eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style\n return text.replace(HTML_ESCAPE_PATTERN, (char) => HTML_ESCAPES[char] as string);\n}\n\n/**\n * Escape characters that have special meaning inside a CSS `url(...)`\n * literal so an attacker cannot break out of a value.\n *\n * Use only when constructing CSS at runtime (e.g.,\n * `style.backgroundImage`). Combined with a passing `isSafeUrl()` this\n * eliminates the CSS-injection vector for media URLs.\n */\nexport function escapeCssUrl(value: string): string {\n return value.replace(/['\"()\\\\]/g, '\\\\$&');\n}\n\nconst ATTR_ESCAPES: Readonly<Record<string, string>> = Object.freeze({\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n});\n\nconst ATTR_ESCAPE_PATTERN = /[&<>\"']/g;\n\n/**\n * Escape characters that would break out of a double-quoted HTML\n * attribute value. Stricter than `escapeHtml` for body content but\n * preserves URL characters (`/`, `=`, etc.) that are common in\n * `href` and `src` values.\n *\n * Only call this for values that have already been validated as safe\n * URLs or trusted strings; it does NOT block dangerous protocols.\n */\nexport function escapeHtmlAttribute(value: string): string {\n if (value === '') return '';\n // eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style\n return value.replace(ATTR_ESCAPE_PATTERN, (char) => ATTR_ESCAPES[char] as string);\n}\n\n/**\n * Escape newlines into `<br>` tags after HTML-escaping the input.\n *\n * The order is critical: escape first, then introduce the `<br>` markers.\n * Reversing the order would let an attacker inject HTML by smuggling\n * `<br>` boundaries around malicious content.\n */\nexport function escapeAndLinebreak(text: string): string {\n return escapeHtml(text).replace(/\\r\\n|\\r|\\n/g, '<br>');\n}\n","/**\n * Public Lexical node types.\n *\n * Mirrors the shape Payload's Lexical serializer emits in\n * `fields.<richTextField>` payloads. We only require the discriminator\n * `type` field and the optional `children` array — every other\n * property is opaque and forwarded as-is to the renderer that handles\n * the node type.\n *\n * @module @lexical/types\n */\n\n/**\n * Bitmask of Lexical text-format flags.\n *\n * Multiple flags can be combined: `BOLD | ITALIC = 3`.\n */\nexport const TextFormat = {\n BOLD: 1,\n ITALIC: 2,\n STRIKETHROUGH: 4,\n UNDERLINE: 8,\n CODE: 16,\n SUBSCRIPT: 32,\n SUPERSCRIPT: 64,\n HIGHLIGHT: 128,\n} as const;\n\n/**\n * Generic Lexical node. Concrete renderers consume specific subtypes\n * through narrow type guards in their own modules.\n */\nexport interface LexicalNode {\n readonly type: string;\n readonly version?: number;\n readonly format?: number | string;\n readonly indent?: number;\n readonly direction?: 'ltr' | 'rtl' | null;\n readonly children?: readonly LexicalNode[];\n readonly text?: string;\n readonly [extra: string]: unknown;\n}\n\n/**\n * Root of a Lexical document.\n */\nexport interface LexicalRoot {\n readonly root: {\n readonly type?: string;\n readonly children: readonly LexicalNode[];\n readonly direction?: 'ltr' | 'rtl' | null;\n readonly format?: number | string;\n readonly indent?: number;\n readonly [extra: string]: unknown;\n };\n}\n","/**\n * Renderer for Lexical `text` nodes.\n *\n * Applies every standard format flag in a stable order so identical\n * inputs always produce identical output (important for snapshot tests\n * and tree-diff workflows).\n *\n * @module @lexical/nodes/text\n */\n\nimport { escapeHtml } from '@security/escape';\nimport type { LexicalNode } from '../types';\nimport { TextFormat } from '../types';\nimport { register, type NodeRenderer } from '../registry';\n\nconst textRenderer: NodeRenderer = (node: LexicalNode): string => {\n const raw = typeof node.text === 'string' ? node.text : '';\n let out = escapeHtml(raw);\n const format = typeof node.format === 'number' ? node.format : 0;\n if ((format & TextFormat.CODE) !== 0) out = `<code>${out}</code>`;\n if ((format & TextFormat.BOLD) !== 0) out = `<strong>${out}</strong>`;\n if ((format & TextFormat.ITALIC) !== 0) out = `<em>${out}</em>`;\n if ((format & TextFormat.UNDERLINE) !== 0) out = `<u>${out}</u>`;\n if ((format & TextFormat.STRIKETHROUGH) !== 0) out = `<s>${out}</s>`;\n if ((format & TextFormat.SUBSCRIPT) !== 0) out = `<sub>${out}</sub>`;\n if ((format & TextFormat.SUPERSCRIPT) !== 0) out = `<sup>${out}</sup>`;\n if ((format & TextFormat.HIGHLIGHT) !== 0) out = `<mark>${out}</mark>`;\n return out;\n};\n\nregister('text', textRenderer);\n\nexport { textRenderer };\n","/**\n * Renderer for Lexical `paragraph` nodes.\n *\n * Honours `direction`, `format` (alignment), and `indent`.\n *\n * @module @lexical/nodes/paragraph\n */\n\nimport { register, type NodeRenderer } from '../registry';\nimport { dirAttribute, styleAttribute } from '../utils';\n\nconst paragraphRenderer: NodeRenderer = (node, ctx): string => {\n const children = ctx.renderChildren(node.children ?? []);\n return `<p${dirAttribute(node)}${styleAttribute(node)}>${children}</p>`;\n};\n\nregister('paragraph', paragraphRenderer);\n\nexport { paragraphRenderer };\n","/**\n * Renderer for Lexical `heading` nodes.\n *\n * Validates the `tag` against the standard H1-H6 set; falls back to\n * `h2` for unknown values (Lexical occasionally emits non-standard\n * tags during transient editor states).\n *\n * @module @lexical/nodes/heading\n */\n\nimport { register, type NodeRenderer } from '../registry';\nimport { dirAttribute, styleAttribute } from '../utils';\n\nconst VALID_TAGS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']);\n\nconst headingRenderer: NodeRenderer = (node, ctx): string => {\n const tagRaw = typeof node['tag'] === 'string' ? node['tag'].toLowerCase() : 'h2';\n const tag = VALID_TAGS.has(tagRaw) ? tagRaw : 'h2';\n const children = ctx.renderChildren(node.children ?? []);\n return `<${tag}${dirAttribute(node)}${styleAttribute(node)}>${children}</${tag}>`;\n};\n\nregister('heading', headingRenderer);\n\nexport { headingRenderer };\n","/**\n * Renderer for Lexical `list` and `listitem` nodes.\n *\n * Recognises three list types:\n * - `bullet` → `<ul>`\n * - `number` → `<ol>` (forwards `start` and `reversed` when present)\n * - `check` → `<ul role=\"list\">` with `aria-checked` per item\n *\n * @module @lexical/nodes/list\n */\n\nimport { escapeHtml } from '@security/escape';\nimport { register, type NodeRenderer } from '../registry';\nimport { dirAttribute, styleAttribute } from '../utils';\n\nconst listRenderer: NodeRenderer = (node, ctx): string => {\n const listType = typeof node['listType'] === 'string' ? node['listType'] : 'bullet';\n const tag = listType === 'number' ? 'ol' : 'ul';\n const startAttr =\n listType === 'number' && typeof node['start'] === 'number' && node['start'] > 1\n ? ` start=\"${String(node['start'])}\"`\n : '';\n const checkAttr = listType === 'check' ? ' role=\"list\"' : '';\n const children = ctx.renderChildren(node.children ?? []);\n return `<${tag}${dirAttribute(node)}${styleAttribute(node)}${startAttr}${checkAttr}>${children}</${tag}>`;\n};\n\nconst listItemRenderer: NodeRenderer = (node, ctx): string => {\n const children = ctx.renderChildren(node.children ?? []);\n if (typeof node['checked'] === 'boolean') {\n const state = node['checked'] ? 'true' : 'false';\n return `<li role=\"checkbox\" aria-checked=\"${state}\"${styleAttribute(node)}>${children}</li>`;\n }\n const valueAttr =\n typeof node['value'] === 'number' ? ` value=\"${escapeHtml(String(node['value']))}\"` : '';\n return `<li${dirAttribute(node)}${styleAttribute(node)}${valueAttr}>${children}</li>`;\n};\n\nregister('list', listRenderer);\nregister('listitem', listItemRenderer);\n\nexport { listRenderer, listItemRenderer };\n","/**\n * Renderer for Lexical `link` and `autolink` nodes.\n *\n * URLs are validated by `isSafeUrl`; unsafe URLs cause the renderer to\n * emit just the link's children, dropping the `<a>` wrapper entirely.\n *\n * External HTTP(S) targets get `target=\"_blank\"` and `rel=\"noopener\n * noreferrer\"` automatically.\n *\n * @module @lexical/nodes/link\n */\n\nimport { escapeHtml, escapeHtmlAttribute } from '@security/escape';\nimport { isExternalHttpUrl, isSafeUrl } from '@security/url-validator';\nimport { register, type NodeRenderer } from '../registry';\n\nconst linkRenderer: NodeRenderer = (node, ctx): string => {\n const url = typeof node['url'] === 'string' ? node['url'] : '';\n const children = ctx.renderChildren(node.children ?? []);\n\n if (url.length === 0 || !isSafeUrl(url)) return children;\n\n const targetAttr = isExternalHttpUrl(url)\n ? ' target=\"_blank\" rel=\"noopener noreferrer\"'\n : buildOptionalAttrs(node);\n const titleAttr =\n typeof node['title'] === 'string' ? ` title=\"${escapeHtml(node['title'])}\"` : '';\n return `<a href=\"${escapeHtmlAttribute(url)}\"${targetAttr}${titleAttr}>${children}</a>`;\n};\n\n/**\n * For non-external links Payload may still embed an explicit `target`.\n * We honour it but never let the consumer skip the `noopener noreferrer`\n * pair for `target=\"_blank\"` — security-critical.\n */\nfunction buildOptionalAttrs(node: Record<string, unknown>): string {\n const target = typeof node['target'] === 'string' ? node['target'] : '';\n if (target.length === 0) return '';\n const safeTarget = escapeHtml(target);\n if (target === '_blank') return ` target=\"_blank\" rel=\"noopener noreferrer\"`;\n return ` target=\"${safeTarget}\"`;\n}\n\nregister('link', linkRenderer);\nregister('autolink', linkRenderer);\n\nexport { linkRenderer };\n","/**\n * Renderer for Lexical `quote` nodes.\n *\n * @module @lexical/nodes/quote\n */\n\nimport { register, type NodeRenderer } from '../registry';\nimport { dirAttribute, styleAttribute } from '../utils';\n\nconst quoteRenderer: NodeRenderer = (node, ctx): string => {\n const children = ctx.renderChildren(node.children ?? []);\n return `<blockquote${dirAttribute(node)}${styleAttribute(node)}>${children}</blockquote>`;\n};\n\nregister('quote', quoteRenderer);\n\nexport { quoteRenderer };\n","/**\n * Renderer for Lexical `code` (block-level fenced code) and inline\n * `code-highlight` nodes.\n *\n * Block code: `<pre><code class=\"language-...\">` (language sanitised).\n * Inline highlight tokens: `<code class=\"...\">`.\n *\n * @module @lexical/nodes/code\n */\n\nimport { escapeHtml } from '@security/escape';\nimport { register, type NodeRenderer } from '../registry';\nimport type { LexicalNode } from '../types';\n\nconst codeRenderer: NodeRenderer = (node): string => {\n const language = sanitizeLangClass(typeof node['language'] === 'string' ? node['language'] : '');\n const inner = extractText(node);\n const langClass = language === '' ? '' : ` class=\"language-${language}\"`;\n return `<pre><code${langClass}>${escapeHtml(inner)}</code></pre>`;\n};\n\nconst codeHighlightRenderer: NodeRenderer = (node): string => {\n const text = typeof node.text === 'string' ? node.text : '';\n const highlight =\n typeof node['highlightType'] === 'string'\n ? ` class=\"token-${sanitizeLangClass(node['highlightType'])}\"`\n : '';\n return `<span${highlight}>${escapeHtml(text)}</span>`;\n};\n\nregister('code', codeRenderer);\nregister('code-highlight', codeHighlightRenderer);\n\nexport { codeRenderer, codeHighlightRenderer };\n\nfunction extractText(node: LexicalNode): string {\n if (typeof node.text === 'string') return node.text;\n if (!node.children) return '';\n let out = '';\n for (const child of node.children) out += extractText(child);\n return out;\n}\n\nfunction sanitizeLangClass(value: string): string {\n return value.replace(/[^a-zA-Z0-9_-]/g, '');\n}\n","/**\n * Renderers for `linebreak`, `horizontalrule`, and `tab` Lexical nodes.\n *\n * @module @lexical/nodes/linebreak\n */\n\nimport { register, type NodeRenderer } from '../registry';\n\nconst linebreakRenderer: NodeRenderer = () => '<br>';\nconst horizontalRuleRenderer: NodeRenderer = () => '<hr>';\nconst tabRenderer: NodeRenderer = () => '\\t';\n\nregister('linebreak', linebreakRenderer);\nregister('horizontalrule', horizontalRuleRenderer);\nregister('tab', tabRenderer);\n\nexport { linebreakRenderer, horizontalRuleRenderer, tabRenderer };\n","/**\n * Renderer for Lexical `upload` nodes — Payload's inline-media block.\n *\n * Recognises the standard Payload upload shape:\n * {\n * type: 'upload',\n * relationTo: 'media',\n * value: { url, alt, width, height, mimeType, ... },\n * }\n *\n * Renders an `<img>` for raster/SVG MIME types, a `<video>` for video\n * MIME types, a fallback `<a>` link otherwise. URLs are validated by\n * `isSafeUrl` — unsafe URLs collapse to an empty string rather than\n * exposing the user to a redirect-style attack.\n *\n * @module @lexical/nodes/upload\n */\n\nimport { escapeHtml, escapeHtmlAttribute } from '@security/escape';\nimport { isSafeUrl } from '@security/url-validator';\nimport { register, type NodeRenderer } from '../registry';\n\ninterface UploadValue {\n readonly url?: string;\n readonly alt?: string;\n readonly width?: number;\n readonly height?: number;\n readonly mimeType?: string;\n readonly filename?: string;\n}\n\nconst uploadRenderer: NodeRenderer = (node): string => {\n const value = readUploadValue(node);\n if (value === undefined) return '';\n const url = value.url;\n if (typeof url !== 'string' || !isSafeUrl(url)) return '';\n\n const mime = typeof value.mimeType === 'string' ? value.mimeType : '';\n if (mime.startsWith('video/')) return renderVideo(value, url);\n if (mime.startsWith('audio/')) return renderAudio(value, url);\n if (mime === '' || mime.startsWith('image/')) return renderImage(value, url);\n return renderFallbackLink(value, url);\n};\n\nregister('upload', uploadRenderer);\n\nexport { uploadRenderer };\n\nfunction readUploadValue(node: Record<string, unknown>): UploadValue | undefined {\n const raw = node['value'];\n if (typeof raw !== 'object' || raw === null) return undefined;\n return raw;\n}\n\nfunction renderImage(value: UploadValue, url: string): string {\n const alt = typeof value.alt === 'string' ? escapeHtml(value.alt) : '';\n const width = typeof value.width === 'number' ? ` width=\"${String(value.width)}\"` : '';\n const height = typeof value.height === 'number' ? ` height=\"${String(value.height)}\"` : '';\n return `<img src=\"${escapeHtmlAttribute(url)}\" alt=\"${alt}\"${width}${height} loading=\"lazy\" decoding=\"async\">`;\n}\n\nfunction renderVideo(value: UploadValue, url: string): string {\n const width = typeof value.width === 'number' ? ` width=\"${String(value.width)}\"` : '';\n const height = typeof value.height === 'number' ? ` height=\"${String(value.height)}\"` : '';\n const type =\n typeof value.mimeType === 'string' ? ` type=\"${escapeHtmlAttribute(value.mimeType)}\"` : '';\n return `<video controls${width}${height}><source src=\"${escapeHtmlAttribute(url)}\"${type}></video>`;\n}\n\nfunction renderAudio(value: UploadValue, url: string): string {\n const type =\n typeof value.mimeType === 'string' ? ` type=\"${escapeHtmlAttribute(value.mimeType)}\"` : '';\n return `<audio controls><source src=\"${escapeHtmlAttribute(url)}\"${type}></audio>`;\n}\n\nfunction renderFallbackLink(value: UploadValue, url: string): string {\n const label = typeof value.filename === 'string' ? escapeHtml(value.filename) : escapeHtml(url);\n return `<a href=\"${escapeHtmlAttribute(url)}\" target=\"_blank\" rel=\"noopener noreferrer\">${label}</a>`;\n}\n","/**\n * Renderer for Lexical `relationship` nodes — inline references to\n * documents in other collections.\n *\n * We do not know how the consumer wants to render relationships, so\n * we emit a semantic `<a>` (or `<span>` when no URL field is present)\n * and tag it with `data-relation-to` so consumers can post-process.\n *\n * @module @lexical/nodes/relationship\n */\n\nimport { escapeHtml, escapeHtmlAttribute } from '@security/escape';\nimport { isSafeUrl } from '@security/url-validator';\nimport { register, type NodeRenderer } from '../registry';\n\ninterface RelationshipValue {\n readonly title?: string;\n readonly name?: string;\n readonly slug?: string;\n readonly id?: string | number;\n readonly url?: string;\n}\n\nconst relationshipRenderer: NodeRenderer = (node): string => {\n const relationTo = typeof node['relationTo'] === 'string' ? node['relationTo'] : '';\n const value = readValue(node);\n const label = pickLabel(value, relationTo);\n const safeLabel = escapeHtml(label);\n const relAttr = relationTo === '' ? '' : ` data-relation-to=\"${escapeHtml(relationTo)}\"`;\n\n const url = value?.url;\n if (typeof url === 'string' && isSafeUrl(url)) {\n return `<a href=\"${escapeHtmlAttribute(url)}\"${relAttr}>${safeLabel}</a>`;\n }\n return `<span${relAttr}>${safeLabel}</span>`;\n};\n\nregister('relationship', relationshipRenderer);\n\nexport { relationshipRenderer };\n\nfunction readValue(node: Record<string, unknown>): RelationshipValue | undefined {\n const raw = node['value'];\n if (typeof raw !== 'object' || raw === null) return undefined;\n return raw;\n}\n\nfunction pickLabel(value: RelationshipValue | undefined, relationTo: string): string {\n if (value === undefined) return relationTo === '' ? '#' : `#${relationTo}`;\n if (typeof value.title === 'string' && value.title.length > 0) return value.title;\n if (typeof value.name === 'string' && value.name.length > 0) return value.name;\n if (typeof value.slug === 'string' && value.slug.length > 0) return value.slug;\n if (value.id !== undefined) return String(value.id);\n return relationTo === '' ? '#' : `#${relationTo}`;\n}\n","/**\n * Block-renderer sub-registry.\n *\n * Payload's BlocksFeature emits Lexical `block` nodes with a\n * `blockType` slug. The default `block`-node renderer (in\n * `../nodes/block.ts`) only emits a generic\n * `<div data-block-type=\"…\">` — useful as a hook, but unhelpful when\n * the consumer wants out-of-the-box rendering for common block types.\n *\n * This registry maps `blockType` → renderer. Default renderers ship\n * for the most common Payload block patterns (callout, image,\n * video, code, cta). Custom slugs override defaults via\n * `registerBlockRenderer(slug, renderer)`.\n *\n * @module @lexical/blocks/registry\n */\n\nimport type { LexicalNode } from '../types';\n\n/**\n * Context passed to a block renderer. Includes the recursive\n * `renderChildren` function so blocks that house nested Lexical\n * content can delegate back to the main renderer.\n */\nexport interface BlockRenderContext {\n /** Renders a list of Lexical children to HTML. */\n readonly renderChildren: (children: readonly LexicalNode[]) => string;\n}\n\n/**\n * Renderer signature. Receives the block node *and* its already-read\n * `fields` payload (the parser pulls these out so individual block\n * renderers don't have to reach into `node['fields']` themselves).\n */\nexport type BlockRenderer = (\n fields: Record<string, unknown>,\n context: BlockRenderContext,\n) => string;\n\nconst registry = new Map<string, BlockRenderer>();\n\n/** Register or replace the renderer for `blockType`. */\nexport function registerBlockRenderer(blockType: string, renderer: BlockRenderer): void {\n registry.set(blockType, renderer);\n}\n\n/** Look up the renderer for `blockType`, or `undefined`. */\nexport function lookupBlockRenderer(blockType: string): BlockRenderer | undefined {\n return registry.get(blockType);\n}\n\n/** Snapshot of registered block types — useful for diagnostics. */\nexport function registeredBlockTypes(): readonly string[] {\n return [...registry.keys()];\n}\n\n/** Test-only: clear the registry. */\nexport function __resetBlockRegistryForTests(): void {\n registry.clear();\n}\n","/**\n * Renderer for Lexical `block` nodes — Payload's custom-blocks feature\n * (the `BlocksFeature` of `@payloadcms/richtext-lexical`).\n *\n * The Lexical serializer emits a block as:\n * {\n * type: 'block',\n * fields: { blockType: 'callout', text: '...', ... },\n * }\n *\n * Dispatch order:\n *\n * 1. The blocks sub-registry (`./blocks/registry.ts`) is consulted\n * first. Consumers opt into the default renderer set via\n * `registerDefaultBlocks()`; custom slugs override via\n * `registerBlockRenderer()`.\n * 2. Falling through, the generic renderer emits a\n * `<div data-block-type=\"…\">` annotated with each field as a\n * `data-block-<key>` attribute, so consumer CSS / hydration can\n * pick the block up.\n *\n * @module @lexical/nodes/block\n */\n\nimport { escapeHtml } from '@security/escape';\nimport { lookupBlockRenderer } from '../blocks/registry';\nimport { register, type NodeRenderer } from '../registry';\n\nconst blockRenderer: NodeRenderer = (node, ctx): string => {\n const fields = readFields(node);\n const blockTypeRaw = typeof fields['blockType'] === 'string' ? fields['blockType'] : '';\n const slug = sanitizeIdent(blockTypeRaw);\n\n if (blockTypeRaw !== '') {\n const custom = lookupBlockRenderer(blockTypeRaw) ?? lookupBlockRenderer(slug);\n if (custom) {\n return custom(fields, { renderChildren: ctx.renderChildren });\n }\n }\n\n const attrs: string[] = [];\n if (slug !== '') attrs.push(`data-block-type=\"${escapeHtml(slug)}\"`);\n for (const [key, value] of Object.entries(fields)) {\n if (key === 'blockType' || key === 'id') continue;\n if (value === null || value === undefined) continue;\n const stringValue =\n typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'\n ? String(value)\n : JSON.stringify(value);\n attrs.push(`data-block-${sanitizeIdent(key)}=\"${escapeHtml(stringValue)}\"`);\n }\n const attrString = attrs.length === 0 ? '' : ` ${attrs.join(' ')}`;\n return `<div${attrString}></div>`;\n};\n\nregister('block', blockRenderer);\n\nexport { blockRenderer };\n\nfunction readFields(node: Record<string, unknown>): Record<string, unknown> {\n const raw = node['fields'];\n if (typeof raw !== 'object' || raw === null) return {};\n return raw as Record<string, unknown>;\n}\n\nfunction sanitizeIdent(value: string): string {\n return value.replace(/[^a-zA-Z0-9_-]/g, '-').toLowerCase();\n}\n","/**\n * Top-level Lexical → HTML renderer.\n *\n * Walks the document tree, dispatching each node to the renderer\n * registered for its `type`. Unknown nodes are handled gracefully:\n * children are rendered (so the user sees content), the wrapper is\n * skipped.\n *\n * @module @lexical/render\n */\n\nimport { sanitizeHtml, hasSanitizerDocument } from '@security/sanitizer';\nimport { lookup, register, type RenderNodeContext } from './registry';\nimport type { LexicalNode, LexicalRoot } from './types';\nimport { resolveAlignment, resolveIndent } from './utils';\n\n// Named imports + explicit `register()` calls. The previous\n// architecture relied on each node module calling `register()` as a\n// side effect at import time, but bundlers that honour the package's\n// `sideEffects: false` field tree-shake side-effect-only imports.\n// Wiring the registry from a single point eliminates that risk —\n// every renderer is unambiguously referenced as a value.\nimport { textRenderer } from './nodes/text';\nimport { paragraphRenderer } from './nodes/paragraph';\nimport { headingRenderer } from './nodes/heading';\nimport { listRenderer, listItemRenderer } from './nodes/list';\nimport { linkRenderer } from './nodes/link';\nimport { quoteRenderer } from './nodes/quote';\nimport { codeRenderer, codeHighlightRenderer } from './nodes/code';\nimport { linebreakRenderer, horizontalRuleRenderer, tabRenderer } from './nodes/linebreak';\nimport { uploadRenderer } from './nodes/upload';\nimport { relationshipRenderer } from './nodes/relationship';\nimport { blockRenderer } from './nodes/block';\n\nregister('text', textRenderer);\nregister('paragraph', paragraphRenderer);\nregister('heading', headingRenderer);\nregister('list', listRenderer);\nregister('listitem', listItemRenderer);\nregister('link', linkRenderer);\nregister('autolink', linkRenderer);\nregister('quote', quoteRenderer);\nregister('code', codeRenderer);\nregister('code-highlight', codeHighlightRenderer);\nregister('linebreak', linebreakRenderer);\nregister('horizontalrule', horizontalRuleRenderer);\nregister('tab', tabRenderer);\nregister('upload', uploadRenderer);\nregister('relationship', relationshipRenderer);\nregister('block', blockRenderer);\n\nconst RENDER_CONTEXT: RenderNodeContext = {\n renderChildren,\n resolveAlignment,\n resolveIndent,\n};\n\nexport interface LexicalRenderOptions {\n /**\n * When `true` (default), the resulting HTML is passed through the\n * isomorphic `sanitizeHtml()` for defence-in-depth.\n */\n readonly sanitize?: boolean;\n}\n\n/**\n * Identify whether a value looks like a Lexical root payload.\n */\nexport function isLexicalContent(value: unknown): value is LexicalRoot {\n if (typeof value !== 'object' || value === null) return false;\n if (!('root' in value)) return false;\n const root = value.root;\n if (typeof root !== 'object' || root === null) return false;\n if (!('children' in root)) return false;\n return Array.isArray(root.children);\n}\n\n/**\n * Convert a Lexical root payload to an HTML string. By default the\n * result is sanitised through `sanitizeHtml`. The renderer is\n * security-first; per-node renderers already escape text and validate\n * URLs, but the final sanitiser closes any gap.\n */\nexport function lexicalToHtml(content: LexicalRoot, options: LexicalRenderOptions = {}): string {\n if (!isLexicalContent(content)) return '';\n const html = renderChildren(content.root.children);\n if (options.sanitize === false) return html;\n // Honour `setSanitizerDocument()` overrides (SSR with linkedom/jsdom)\n // instead of probing the `document` global — otherwise the sanitize\n // backstop would silently disappear server-side even when the\n // consumer wired a DOM for exactly this purpose. Without any DOM the\n // per-node renderers' escaping still guarantees safe output for the\n // built-in node set; custom block renderers should sanitize their own\n // output when SSR-rendering without a sanitizer document.\n if (!hasSanitizerDocument()) return html;\n return sanitizeHtml(html);\n}\n\n/**\n * Extract the plain text content of a Lexical document.\n *\n * Paragraphs are separated by `\\n`. Used by the text/textarea renderer\n * when a rich-text value is bound to a non-rich-text element.\n */\nexport function lexicalToPlainText(content: LexicalRoot): string {\n if (!isLexicalContent(content)) return '';\n return content.root.children.map(extractPlainText).join('\\n').trim();\n}\n\nfunction renderChildren(children: readonly LexicalNode[]): string {\n let out = '';\n for (const child of children) out += renderNode(child);\n return out;\n}\n\nfunction renderNode(node: LexicalNode): string {\n const renderer = lookup(node.type);\n if (renderer) return renderer(node, RENDER_CONTEXT);\n // Unknown node type — preserve content by rendering children verbatim.\n return node.children !== undefined ? renderChildren(node.children) : '';\n}\n\nfunction extractPlainText(node: LexicalNode): string {\n if (typeof node.text === 'string') return node.text;\n if (node.type === 'linebreak') return '\\n';\n if (node.children === undefined) return '';\n let out = '';\n for (const child of node.children) out += extractPlainText(child);\n return out;\n}\n","/**\n * Field-renderer registry.\n *\n * Maps a `FieldType` to the function that mutates a DOM element with\n * the new value. The registry pattern decouples the lifecycle from the\n * concrete renderers, so:\n *\n * - Tests can substitute mock renderers.\n * - Plugins can register custom renderers via the high-level client.\n * - New field types ship without touching `lifecycle.ts`.\n *\n * The built-in renderers are collected through `registerBuiltinRenderer`\n * from each renderer module. To avoid tree-shaking, the explicit\n * aggregator `buildBuiltinRenderers` accepts an *additional* renderer\n * array — `@field-types/index` invokes it with every concrete renderer\n * so the references stay reachable.\n *\n * @module @field-types/registry\n */\n\nimport type { FieldRenderer, FieldType } from '@core/types';\n\nconst builtinRenderers = new Map<FieldType, FieldRenderer>();\n\n/**\n * Snapshot the built-in renderer map. Returned object is a fresh,\n * frozen plain object so consumers cannot mutate the registry.\n */\nexport function buildBuiltinRenderers(\n extras: readonly FieldRenderer[] = [],\n): Readonly<Record<string, FieldRenderer>> {\n for (const renderer of extras) builtinRenderers.set(renderer.name, renderer);\n const out: Record<string, FieldRenderer> = {};\n for (const [type, renderer] of builtinRenderers) out[type] = renderer;\n return Object.freeze(out);\n}\n\n/**\n * Register a built-in renderer. Called from each individual renderer\n * module's side-effecting registration.\n */\nexport function registerBuiltinRenderer(renderer: FieldRenderer): void {\n builtinRenderers.set(renderer.name, renderer);\n}\n\n/**\n * Test-only helper: clear the built-in renderer map.\n */\nexport function __resetBuiltinRenderersForTests(): void {\n builtinRenderers.clear();\n}\n","/**\n * `text` field renderer.\n *\n * Accepts any scalar and renders it via `textContent` (which is XSS-\n * safe by definition). Lexical content is reduced to plain text so\n * the renderer can serve as a sensible fallback for non-rich-text\n * bindings.\n *\n * Defensive design: when the bound element has structured *element*\n * children (not just text), replacing `textContent` would nuke that\n * markup. The renderer detects this case and:\n *\n * - If the element has `data-payload-text` → still does the replace\n * (explicit opt-in: \"yes I want my structured markup nuked\").\n * - Otherwise → logs a one-time console warning and skips the write,\n * preserving the consumer's layout. This protects against the\n * common annotation mistake of decorating a container that holds\n * styled children instead of plain text.\n *\n * @module @field-types/text\n */\n\nimport { isLexicalContent, lexicalToPlainText } from '@lexical/render';\nimport { escapeAndLinebreak } from '@security/escape';\nimport type { FieldRenderer } from '@core/types';\nimport { registerBuiltinRenderer } from './registry';\n\nconst TEXT_OPT_IN_ATTRIBUTE = 'data-payload-text';\nconst warnedElements = new WeakSet<Element>();\n\nconst textRenderer: FieldRenderer = {\n name: 'text',\n render(target, value) {\n const element = target.element;\n const text = toPlainString(value);\n if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') {\n (element as HTMLInputElement | HTMLTextAreaElement).value = text;\n return;\n }\n if (hasStructuredChildren(element) && !element.hasAttribute(TEXT_OPT_IN_ATTRIBUTE)) {\n warnOnce(element, target.fieldName);\n return;\n }\n if (text.includes('\\n') || text.includes('\\r')) {\n element.innerHTML = escapeAndLinebreak(text);\n return;\n }\n element.textContent = text;\n },\n};\n\nfunction hasStructuredChildren(element: Element): boolean {\n // Elements with at least one element child (not a text node) are\n // considered \"structured\" — typically a template uses styled wrappers\n // around the actual field value.\n return element.firstElementChild !== null;\n}\n\nfunction warnOnce(element: Element, fieldName: string): void {\n if (warnedElements.has(element)) return;\n warnedElements.add(element);\n console.warn(\n `[live-preview] Skipping text update for \"${fieldName}\" — the bound ` +\n `<${element.tagName.toLowerCase()}> has structured child elements. ` +\n `Either move data-payload-field to the element whose textContent is the ` +\n `field value, or opt in with data-payload-text to replace the structure.`,\n );\n}\n\nfunction toPlainString(value: unknown): string {\n if (value === null || value === undefined) return '';\n if (isLexicalContent(value)) return lexicalToPlainText(value);\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return JSON.stringify(value);\n}\n\nregisterBuiltinRenderer(textRenderer);\n\nexport { textRenderer };\n","/**\n * Shared helpers for field renderers.\n *\n * @module @field-types/utils\n */\n\n/**\n * Coerce an unknown value to a safe display string.\n *\n * Primitives render as their natural representation. Objects render\n * as their JSON form — never as the default `[object Object]`. `null`\n * and `undefined` collapse to the empty string.\n */\nexport function safeStringify(value: unknown): string {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {\n return String(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return '';\n }\n}\n","/**\n * `textarea` field renderer.\n *\n * Differs from `text` only in that newlines are always preserved via\n * `<br>` insertion in non-input elements, even for single-line inputs.\n *\n * @module @field-types/textarea\n */\n\nimport { isLexicalContent, lexicalToPlainText } from '@lexical/render';\nimport { escapeAndLinebreak } from '@security/escape';\nimport type { FieldRenderer } from '@core/types';\nimport { registerBuiltinRenderer } from './registry';\nimport { safeStringify } from './utils';\n\nconst textareaRenderer: FieldRenderer = {\n name: 'textarea',\n render(target, value) {\n const element = target.element;\n const text = isLexicalContent(value) ? lexicalToPlainText(value) : safeStringify(value);\n if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') {\n (element as HTMLInputElement | HTMLTextAreaElement).value = text;\n return;\n }\n element.innerHTML = escapeAndLinebreak(text);\n },\n};\n\nregisterBuiltinRenderer(textareaRenderer);\n\nexport { textareaRenderer };\n","/**\n * `richText` field renderer.\n *\n * Accepts a Lexical root payload (Payload 3.x) or a plain HTML string\n * (Slate legacy + future-proofing). HTML goes through `sanitizeHtml`\n * before being injected; Lexical content is already sanitised by\n * `lexicalToHtml`.\n *\n * @module @field-types/rich-text\n */\n\nimport { isLexicalContent, lexicalToHtml } from '@lexical/render';\nimport { sanitizeHtml } from '@security/sanitizer';\nimport type { FieldRenderer } from '@core/types';\nimport { registerBuiltinRenderer } from './registry';\n\nconst richTextRenderer: FieldRenderer = {\n name: 'richText',\n render(target, value) {\n if (isLexicalContent(value)) {\n target.element.innerHTML = lexicalToHtml(value);\n return;\n }\n if (typeof value === 'string') {\n target.element.innerHTML = sanitizeHtml(value);\n }\n },\n};\n\nregisterBuiltinRenderer(richTextRenderer);\n\nexport { richTextRenderer };\n","/**\n * `html` field renderer.\n *\n * Used when the consumer explicitly opts into raw-HTML rendering with\n * `data-payload-type=\"html\"`. The value is always run through\n * `sanitizeHtml` first. Non-string values are coerced via `String()`.\n *\n * @module @field-types/html\n */\n\nimport { sanitizeHtml } from '@security/sanitizer';\nimport type { FieldRenderer } from '@core/types';\nimport { registerBuiltinRenderer } from './registry';\nimport { safeStringify } from './utils';\n\nconst htmlRenderer: FieldRenderer = {\n name: 'html',\n render(target, value) {\n if (value === null || value === undefined) {\n target.element.textContent = '';\n return;\n }\n const html = typeof value === 'string' ? value : safeStringify(value);\n target.element.innerHTML = sanitizeHtml(html);\n },\n};\n\nregisterBuiltinRenderer(htmlRenderer);\n\nexport { htmlRenderer };\n","/**\n * `url`/`email` field renderer.\n *\n * Sets the text content to the value and, when the element is an\n * `<a>`, updates the `href` attribute as well — pulling from a sibling\n * field when `data-payload-href` is set.\n *\n * @module @field-types/url\n */\n\nimport { isSafeUrl } from '@security/url-validator';\nimport type { FieldRenderer } from '@core/types';\nimport { registerBuiltinRenderer } from './registry';\nimport { safeStringify } from './utils';\n\nconst urlRenderer: FieldRenderer = {\n name: 'url',\n render(target, value, context) {\n const element = target.element;\n const text = safeStringify(value);\n if (element.tagName === 'A') {\n const anchor = element as HTMLAnchorElement;\n const hrefField = target.hrefField;\n const hrefSource = hrefField ? context.allFields[hrefField] : value;\n if (typeof hrefSource === 'string' && isSafeUrl(hrefSource)) {\n anchor.href = hrefSource;\n }\n anchor.textContent = text;\n return;\n }\n if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') {\n (element as HTMLInputElement | HTMLTextAreaElement).value = text;\n return;\n }\n element.textContent = text;\n },\n};\n\nregisterBuiltinRenderer(urlRenderer);\n\n// `email` shares semantics with `url` once the value is set — Payload\n// emits a string for both.\nregisterBuiltinRenderer({ ...urlRenderer, name: 'email' });\n\nexport { urlRenderer };\n","/**\n * `image` field renderer.\n *\n * For `<img>` elements: set `src`/`alt` from the value (which may be a\n * Payload media object or a plain URL string).\n *\n * For other elements: set the CSS `background-image` with CSS-escaped\n * URL — combined with `isSafeUrl()` this eliminates the CSS-injection\n * vector and lets consumers style hero sections with background images.\n *\n * @module @field-types/image\n */\n\nimport { escapeCssUrl } from '@security/escape';\nimport { isSafeUrl } from '@security/url-validator';\nimport type { FieldRenderer } from '@core/types';\nimport type { PayloadMedia } from './types';\nimport { registerBuiltinRenderer } from './registry';\n\nconst imageRenderer: FieldRenderer = {\n name: 'image',\n render(target, value, context) {\n const element = target.element;\n const media = readMedia(value);\n const url = pickUrl(media, value);\n if (url === undefined) return;\n if (element.tagName === 'IMG') {\n const img = element as HTMLImageElement;\n img.src = url;\n const alt = pickAlt(media, target.altField, context.allFields);\n if (alt !== undefined) img.alt = alt;\n return;\n }\n (element as HTMLElement).style.backgroundImage = `url('${escapeCssUrl(url)}')`;\n },\n};\n\nfunction readMedia(value: unknown): PayloadMedia | undefined {\n if (typeof value !== 'object' || value === null) return undefined;\n return value;\n}\n\nfunction pickUrl(media: PayloadMedia | undefined, value: unknown): string | undefined {\n if (media?.url !== undefined && isSafeUrl(media.url)) return media.url;\n if (typeof value === 'string' && isSafeUrl(value)) return value;\n return undefined;\n}\n\nfunction pickAlt(\n media: PayloadMedia | undefined,\n altField: string | undefined,\n allFields: Record<string, unknown>,\n): string | undefined {\n if (media?.alt !== undefined) return media.alt;\n if (altField !== undefined) {\n const sibling = allFields[altField];\n if (typeof sibling === 'string') return sibling;\n }\n return undefined;\n}\n\nregisterBuiltinRenderer(imageRenderer);\n\nexport { imageRenderer };\n","/**\n * `upload` field renderer.\n *\n * Treats the value like an image upload when bound to an `<img>` element,\n * otherwise renders a download-style anchor with the filename.\n *\n * @module @field-types/upload\n */\n\nimport { escapeHtml, escapeHtmlAttribute } from '@security/escape';\nimport { isSafeUrl } from '@security/url-validator';\nimport type { FieldRenderer } from '@core/types';\nimport type { PayloadMedia } from './types';\nimport { registerBuiltinRenderer } from './registry';\n\nconst uploadRenderer: FieldRenderer = {\n name: 'upload',\n render(target, value) {\n const element = target.element;\n const media = readMedia(value);\n if (media === undefined) return;\n const url = media.url;\n if (typeof url !== 'string' || !isSafeUrl(url)) return;\n if (element.tagName === 'IMG') {\n const img = element as HTMLImageElement;\n img.src = url;\n if (media.alt !== undefined) img.alt = media.alt;\n return;\n }\n if (element.tagName === 'A') {\n const anchor = element as HTMLAnchorElement;\n anchor.href = url;\n anchor.textContent = media.filename ?? url;\n return;\n }\n const label = media.filename !== undefined ? escapeHtml(media.filename) : escapeHtml(url);\n element.innerHTML = `<a href=\"${escapeHtmlAttribute(url)}\">${label}</a>`;\n },\n};\n\nfunction readMedia(value: unknown): PayloadMedia | undefined {\n if (typeof value !== 'object' || value === null) return undefined;\n return value;\n}\n\nregisterBuiltinRenderer(uploadRenderer);\n\nexport { uploadRenderer };\n","/**\n * `relationship` field renderer.\n *\n * Renders the relation's `title` / `name` / `slug` / `id` (in that\n * order of preference). When the bound element is an `<a>` and the\n * value carries a `url`, the anchor's `href` is updated.\n *\n * Has-many relationships render the labels joined by \", \".\n *\n * @module @field-types/relationship\n */\n\nimport { isSafeUrl } from '@security/url-validator';\nimport type { FieldRenderer } from '@core/types';\nimport type { PayloadRelationship } from './types';\nimport { registerBuiltinRenderer } from './registry';\nimport { safeStringify } from './utils';\n\nconst relationshipRenderer: FieldRenderer = {\n name: 'relationship',\n render(target, value) {\n const element = target.element;\n const labels = collectLabels(value);\n const text = labels.join(', ');\n if (element.tagName === 'A' && !Array.isArray(value)) {\n const anchor = element as HTMLAnchorElement;\n const url = (value as PayloadRelationship | null)?.url;\n if (typeof url === 'string' && isSafeUrl(url)) anchor.href = url;\n anchor.textContent = text;\n return;\n }\n element.textContent = text;\n },\n};\n\nfunction collectLabels(value: unknown): readonly string[] {\n if (value === null || value === undefined) return [''];\n if (Array.isArray(value)) return value.map(pickLabel);\n return [pickLabel(value)];\n}\n\nfunction pickLabel(value: unknown): string {\n if (typeof value === 'object' && value !== null) {\n const rel = value as PayloadRelationship;\n if (typeof rel.title === 'string' && rel.title.length > 0) return rel.title;\n if (typeof rel.name === 'string' && rel.name.length > 0) return rel.name;\n if (typeof rel.slug === 'string' && rel.slug.length > 0) return rel.slug;\n if (rel.id !== undefined) return String(rel.id);\n return '';\n }\n return safeStringify(value);\n}\n\nregisterBuiltinRenderer(relationshipRenderer);\n\nexport { relationshipRenderer };\n","/**\n * `select` / `radio` field renderer.\n *\n * For `<select>` and `<input type=\"radio\">` elements: updates the\n * value/checked state. For arbitrary elements: text content.\n *\n * For has-many `select` fields the value is an array — we render the\n * joined labels.\n *\n * @module @field-types/select\n */\n\nimport type { FieldRenderer } from '@core/types';\nimport { registerBuiltinRenderer } from './registry';\nimport { safeStringify } from './utils';\n\nconst selectRenderer: FieldRenderer = {\n name: 'select',\n render(target, value) {\n const element = target.element;\n const text = stringify(value);\n if (element.tagName === 'SELECT') {\n (element as HTMLSelectElement).value = text;\n return;\n }\n if (element.tagName === 'INPUT' && (element as HTMLInputElement).type === 'radio') {\n const radio = element as HTMLInputElement;\n radio.checked = radio.value === text;\n return;\n }\n element.textContent = text;\n },\n};\n\nfunction stringify(value: unknown): string {\n if (Array.isArray(value)) return value.map((v) => stringify(v)).join(', ');\n return safeStringify(value);\n}\n\nregisterBuiltinRenderer(selectRenderer);\nregisterBuiltinRenderer({ ...selectRenderer, name: 'radio' });\n\nexport { selectRenderer };\n","/**\n * `checkbox` field renderer.\n *\n * `<input type=\"checkbox\">`: updates `checked`.\n * `aria-checked`-capable elements: writes the attribute.\n * Other elements: text content `true` / `false`.\n *\n * @module @field-types/checkbox\n */\n\nimport type { FieldRenderer } from '@core/types';\nimport { registerBuiltinRenderer } from './registry';\n\nconst checkboxRenderer: FieldRenderer = {\n name: 'checkbox',\n render(target, value) {\n const element = target.element;\n const checked = Boolean(value);\n if (element.tagName === 'INPUT' && (element as HTMLInputElement).type === 'checkbox') {\n (element as HTMLInputElement).checked = checked;\n return;\n }\n if (element.hasAttribute('aria-checked')) {\n element.setAttribute('aria-checked', checked ? 'true' : 'false');\n return;\n }\n element.textContent = checked ? 'true' : 'false';\n },\n};\n\nregisterBuiltinRenderer(checkboxRenderer);\n\nexport { checkboxRenderer };\n","/**\n * Shared Intl formatter cache.\n *\n * Constructing `Intl.NumberFormat` / `Intl.DateTimeFormat` per call is\n * surprisingly expensive in tight loops — V8 cannot fully optimise them\n * because the locale → ICU resolution happens behind a `try { … }`.\n * On benchmark traces from the structural-array renderer, formatter\n * construction can dominate render time for arrays of 50+ numeric or\n * date fields.\n *\n * This module memoises formatters by a `(locale, options)` key. The\n * cache is module-scoped — formatters are pure functions of their key,\n * so the same `Intl.NumberFormat('de-DE')` instance is safe to share\n * across every consumer of the library on the page.\n *\n * A bounded LRU keeps the cache from growing without limit when a\n * page renders a wide variety of locales (admin tools, language\n * switchers). The default limit (64) is generous for normal sites and\n * tight enough that any leak would be visible in dev tools.\n *\n * @module @core/intl-cache\n */\n\nconst NUMBER_CACHE = new Map<string, Intl.NumberFormat>();\nconst DATE_CACHE = new Map<string, Intl.DateTimeFormat>();\n\nconst DEFAULT_MAX_ENTRIES = 64;\n\nlet maxEntries = DEFAULT_MAX_ENTRIES;\n\n/** Internal test helper — purges every cached formatter. */\nexport function __resetIntlCache(): void {\n NUMBER_CACHE.clear();\n DATE_CACHE.clear();\n maxEntries = DEFAULT_MAX_ENTRIES;\n}\n\n/** Adjust the LRU bound. Returns the previous value. */\nexport function setIntlCacheLimit(limit: number): number {\n if (!Number.isFinite(limit) || limit < 1) return maxEntries;\n const previous = maxEntries;\n maxEntries = Math.floor(limit);\n trimToLimit(NUMBER_CACHE);\n trimToLimit(DATE_CACHE);\n return previous;\n}\n\n/** Read-only telemetry — useful for tests and dev observability. */\nexport function intlCacheSize(): { readonly numbers: number; readonly dates: number } {\n return { numbers: NUMBER_CACHE.size, dates: DATE_CACHE.size };\n}\n\nexport function getNumberFormat(\n locale: string | undefined,\n options?: Intl.NumberFormatOptions,\n): Intl.NumberFormat {\n const key = buildKey(locale, options);\n const cached = NUMBER_CACHE.get(key);\n if (cached !== undefined) {\n // Touch → mark as MRU.\n NUMBER_CACHE.delete(key);\n NUMBER_CACHE.set(key, cached);\n return cached;\n }\n const formatter = new Intl.NumberFormat(locale, options);\n NUMBER_CACHE.set(key, formatter);\n trimToLimit(NUMBER_CACHE);\n return formatter;\n}\n\nexport function getDateTimeFormat(\n locale: string | undefined,\n options?: Intl.DateTimeFormatOptions,\n): Intl.DateTimeFormat {\n const key = buildKey(locale, options);\n const cached = DATE_CACHE.get(key);\n if (cached !== undefined) {\n DATE_CACHE.delete(key);\n DATE_CACHE.set(key, cached);\n return cached;\n }\n const formatter = new Intl.DateTimeFormat(locale, options);\n DATE_CACHE.set(key, formatter);\n trimToLimit(DATE_CACHE);\n return formatter;\n}\n\nfunction buildKey(locale: string | undefined, options: unknown): string {\n // `locale` first so the cache stays human-readable in dev tools.\n // `options` is JSON-encoded with a stable key order so equivalent\n // option objects hit the same slot regardless of authoring style.\n // An options object that stringifies to `{}` (all values undefined,\n // or genuinely empty) collapses to no suffix so it shares the same\n // cache slot as a bare call.\n const localePart = locale ?? '';\n if (options === undefined || options === null) return localePart;\n const serialised = stableStringify(options);\n if (serialised === '{}') return localePart;\n return `${localePart}|${serialised}`;\n}\n\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n if (Array.isArray(value)) {\n return `[${value.map((v) => stableStringify(v)).join(',')}]`;\n }\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record).sort();\n const parts: string[] = [];\n for (const key of keys) {\n const inner = record[key];\n if (inner === undefined) continue;\n parts.push(`${JSON.stringify(key)}:${stableStringify(inner)}`);\n }\n return `{${parts.join(',')}}`;\n}\n\nfunction trimToLimit(map: Map<string, unknown>): void {\n while (map.size > maxEntries) {\n const oldest = map.keys().next().value;\n if (oldest === undefined) break;\n map.delete(oldest);\n }\n}\n","/**\n * `date` field renderer.\n *\n * Uses `Intl.DateTimeFormat` with the active locale (defaults to\n * `navigator.language`, never the legacy hard-coded `'de'`). Recognises\n * `<time>` elements and updates their `datetime` attribute for SEO and\n * accessibility.\n *\n * @module @field-types/date\n */\n\nimport { detectInitialLocale } from '@detection/locale';\nimport { getDateTimeFormat } from '@core/intl-cache';\nimport type { FieldRenderer, RenderContext } from '@core/types';\nimport { registerBuiltinRenderer } from './registry';\nimport { safeStringify } from './utils';\n\nconst dateRenderer: FieldRenderer = {\n name: 'date',\n render(target, value, context) {\n const element = target.element;\n if (value === null || value === undefined || value === '') {\n if (element.tagName === 'INPUT') {\n (element as HTMLInputElement).value = '';\n } else if (element.tagName === 'TIME') {\n element.removeAttribute('datetime');\n element.textContent = '';\n } else {\n element.textContent = '';\n }\n return;\n }\n const iso = typeof value === 'string' ? value : safeStringify(value);\n const date = new Date(iso);\n const isValid = !Number.isNaN(date.getTime());\n if (element.tagName === 'INPUT') {\n (element as HTMLInputElement).value = isValid\n ? toIsoForInput((element as HTMLInputElement).type, date)\n : iso;\n return;\n }\n if (element.tagName === 'TIME') {\n element.setAttribute('datetime', isValid ? date.toISOString() : iso);\n element.textContent = isValid ? formatDate(date, context) : iso;\n return;\n }\n element.textContent = isValid ? formatDate(date, context) : iso;\n },\n};\n\nfunction formatDate(date: Date, context: RenderContext): string {\n const locale = context.locale ?? detectInitialLocale();\n try {\n return getDateTimeFormat(locale, { dateStyle: 'medium', timeStyle: 'short' }).format(date);\n } catch {\n return date.toISOString();\n }\n}\n\nfunction toIsoForInput(type: string, date: Date): string {\n if (type === 'date') return date.toISOString().slice(0, 10);\n if (type === 'datetime-local') return date.toISOString().slice(0, 16);\n return date.toISOString();\n}\n\nregisterBuiltinRenderer(dateRenderer);\n\nexport { dateRenderer };\n","/**\n * `number` field renderer.\n *\n * Inputs get `valueAsNumber`. Other elements get the value formatted\n * via `Intl.NumberFormat` with the active locale.\n *\n * @module @field-types/number\n */\n\nimport { detectInitialLocale } from '@detection/locale';\nimport { getNumberFormat } from '@core/intl-cache';\nimport type { FieldRenderer, RenderContext } from '@core/types';\nimport { registerBuiltinRenderer } from './registry';\nimport { safeStringify } from './utils';\n\nconst numberRenderer: FieldRenderer = {\n name: 'number',\n render(target, value, context) {\n const element = target.element;\n if (value === null || value === undefined || value === '') {\n if (element.tagName === 'INPUT') (element as HTMLInputElement).value = '';\n else element.textContent = '';\n return;\n }\n const num = typeof value === 'number' ? value : Number(safeStringify(value));\n if (Number.isNaN(num)) {\n element.textContent = safeStringify(value);\n return;\n }\n if (element.tagName === 'INPUT') {\n (element as HTMLInputElement).value = String(num);\n return;\n }\n element.textContent = format(num, context);\n },\n};\n\nfunction format(num: number, context: RenderContext): string {\n const locale = context.locale ?? detectInitialLocale();\n try {\n return getNumberFormat(locale).format(num);\n } catch {\n return String(num);\n }\n}\n\nregisterBuiltinRenderer(numberRenderer);\n\nexport { numberRenderer };\n","/**\n * `array` / `blocks` field renderer.\n *\n * Supports two modes:\n *\n * 1. **Template mode** (consumer sets `data-payload-array-template`):\n * each array item is interpolated into the template. Placeholders\n * are `{{key}}` for object fields, `{{value}}` for primitives,\n * and `{{index}}` for the loop counter. All replacements go\n * through `escapeHtml`.\n *\n * 2. **Separator mode** (no template): primitives are joined by\n * `data-payload-array-separator` (default `\", \"`). Object items\n * are serialised via `JSON.stringify` so the consumer sees the\n * raw data instead of `[object Object]`.\n *\n * @module @field-types/array\n */\n\nimport { escapeHtml } from '@security/escape';\nimport { sanitizeHtml } from '@security/sanitizer';\nimport type { FieldRenderer } from '@core/types';\nimport { registerBuiltinRenderer } from './registry';\nimport { safeStringify } from './utils';\n\nconst arrayRenderer: FieldRenderer = {\n name: 'array',\n render(target, value) {\n const element = target.element;\n if (!Array.isArray(value)) return;\n const template = target.arrayTemplate;\n if (template !== undefined && template.length > 0) {\n const html = renderTemplate(template, value);\n element.innerHTML = sanitizeHtml(html);\n return;\n }\n const separator = target.arraySeparator ?? ', ';\n element.textContent = value.map(stringify).join(separator);\n },\n};\n\nfunction renderTemplate(template: string, items: readonly unknown[]): string {\n let out = '';\n for (let i = 0; i < items.length; i += 1) {\n out += interpolate(template, items[i], i);\n }\n return out;\n}\n\nfunction interpolate(template: string, item: unknown, index: number): string {\n let out = template;\n if (typeof item === 'object' && item !== null) {\n for (const [key, value] of Object.entries(item as Record<string, unknown>)) {\n const pattern = new RegExp(`\\\\{\\\\{${escapeRegex(key)}\\\\}\\\\}`, 'g');\n out = out.replace(pattern, escapeHtml(safeStringify(value)));\n }\n } else {\n out = out.replace(/\\{\\{value\\}\\}/g, escapeHtml(safeStringify(item)));\n }\n out = out.replace(/\\{\\{index\\}\\}/g, String(index));\n return out;\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction stringify(value: unknown): string {\n return safeStringify(value);\n}\n\nregisterBuiltinRenderer(arrayRenderer);\n// `blocks` shares the template-driven behaviour.\nregisterBuiltinRenderer({ ...arrayRenderer, name: 'blocks' });\n\nexport { arrayRenderer };\n","/**\n * Cross-browser wrapper around the View-Transitions API.\n *\n * Used by structural updates (array reorder/insert/remove) so the host\n * page can animate between states without a single line of consumer\n * code. Browsers without the API fall through to immediate execution\n * — the contract `runWithTransition(callback)` is a no-op shell.\n *\n * @module @core/view-transitions\n */\n\ninterface ViewTransitionLike {\n readonly finished: Promise<void>;\n}\ntype DocumentWithTransitions = Document & {\n startViewTransition?: (callback: () => void) => ViewTransitionLike;\n};\n\n/**\n * Returns `true` when the host browser supports View-Transitions.\n */\nexport function viewTransitionsSupported(): boolean {\n if (typeof document === 'undefined') return false;\n return typeof (document as DocumentWithTransitions).startViewTransition === 'function';\n}\n\n/**\n * Run `callback` inside a View-Transition if supported. Returns a\n * promise that resolves after the transition completes. Falls back\n * to executing the callback synchronously and resolving immediately.\n */\nexport async function runWithTransition(callback: () => void): Promise<void> {\n if (!viewTransitionsSupported()) {\n callback();\n return;\n }\n // `startViewTransition` is non-null because of the support check above.\n const start = (document as DocumentWithTransitions).startViewTransition as (\n callback: () => void,\n ) => ViewTransitionLike;\n const transition = start.call(document, callback);\n try {\n await transition.finished;\n } catch {\n // Browsers reject `finished` when the transition is interrupted —\n // not an error, just means a later update superseded us.\n }\n}\n","/**\n * Apply `ArrayPatch[]` to a DOM container.\n *\n * The structural applier turns the diff produced by `@schema/diff`\n * into individual DOM operations — `insertBefore`, `removeChild`,\n * `replaceChild`, in-place text update — instead of rebuilding the\n * whole list. The result is:\n *\n * - smaller paint area (browsers can keep most nodes alive),\n * - View-Transitions animate moves automatically,\n * - consumer JS state on existing child elements survives.\n *\n * Each child element is paired with the `id` of its source item via\n * the `data-payload-key` attribute. Items without an `id` use their\n * positional index — which means moves degrade to update-in-place,\n * but inserts/removes still work.\n *\n * @module @core/structural-applier\n */\n\nimport { escapeHtml } from '@security/escape';\nimport { sanitizeHtml } from '@security/sanitizer';\nimport { diffArray, type ArrayPatch } from '@schema/diff';\n\nconst KEY_ATTRIBUTE = 'data-payload-key';\nconst NESTED_KEY_ATTRIBUTE = 'data-payload-nested-key';\nconst NESTED_TEMPLATE_ATTRIBUTE = 'data-payload-nested-template';\n\n/**\n * Per-container memory of the last value rendered for each item key.\n * Used by recursive diffs: when an item updates, we need to know which\n * of its nested arrays *previously* held what, so we can compute the\n * minimal nested patch instead of rebuilding the whole sub-tree.\n *\n * The map is keyed by the container element (per-instance state — no\n * module singletons), then by the item's key from `readKey()`. Items\n * without an `id` aren't tracked, which is fine because they cannot\n * survive a positional diff anyway.\n */\nconst previousItemValues = new WeakMap<Element, Map<string, unknown>>();\n\nexport interface StructuralApplyOptions {\n readonly template: string;\n readonly container: Element;\n readonly patches: readonly ArrayPatch[];\n /**\n * The full new array, so inserts/replaces can render items by index.\n * The diff carries `value`, but a single value isn't enough to\n * render the item *via* a template — we still need the index to\n * substitute `{{index}}` correctly. The applier picks the value at\n * the patch's `to`/`index` from this snapshot.\n */\n readonly nextItems: readonly unknown[];\n}\n\n/**\n * Apply patches in a deterministic order: removes first (so indices\n * stay valid), then inserts, then moves, then updates.\n *\n * The applier mutates `container` in place. After the call, the\n * container's children mirror `nextItems`.\n */\nexport function applyStructuralPatches(options: StructuralApplyOptions): void {\n const { template, container, patches } = options;\n const memory = getMemory(container);\n\n // Bucket the patches so we can apply each kind in a safe order.\n const removes: ArrayPatch[] = [];\n const inserts: ArrayPatch[] = [];\n const moves: ArrayPatch[] = [];\n const updates: ArrayPatch[] = [];\n const replaces: ArrayPatch[] = [];\n for (const patch of patches) {\n if (patch.kind === 'remove') removes.push(patch);\n else if (patch.kind === 'insert') inserts.push(patch);\n else if (patch.kind === 'move') moves.push(patch);\n else if (patch.kind === 'update') updates.push(patch);\n else replaces.push(patch);\n }\n\n // Removes first — apply in descending index so earlier indices stay valid.\n removes.sort((a, b) => indexOf(b) - indexOf(a));\n for (const patch of removes) {\n if (patch.kind !== 'remove') continue;\n const node = container.children[patch.index];\n node?.remove();\n forgetItem(memory, patch.value);\n }\n\n // Replaces and updates touch existing nodes — index now refers to\n // the post-remove list, which is what `next` reports.\n for (const patch of replaces) {\n if (patch.kind !== 'replace') continue;\n const node = container.children[patch.index];\n const replacement = renderItem(template, patch.value, patch.index);\n if (!node || !replacement) continue;\n // Block-type changed — nested DOM has a different shape, so we\n // populate the new item's slots from scratch instead of transplanting.\n populateNestedSlots(replacement, patch.value);\n container.replaceChild(replacement, node);\n rememberItem(memory, patch.value);\n }\n for (const patch of updates) {\n if (patch.kind !== 'update') continue;\n const oldNode = container.children[patch.index];\n const newNode = renderItem(template, patch.value, patch.index);\n if (!oldNode || !newNode) continue;\n reconcileNestedSlots(oldNode, newNode, patch.value, memory);\n container.replaceChild(newNode, oldNode);\n rememberItem(memory, patch.value);\n }\n\n // Inserts: apply in ascending order so later indices stay valid.\n inserts.sort((a, b) => indexOf(a) - indexOf(b));\n for (const patch of inserts) {\n if (patch.kind !== 'insert') continue;\n const before = container.children[patch.index] ?? null;\n const node = renderItem(template, patch.value, patch.index);\n if (!node) continue;\n populateNestedSlots(node, patch.value);\n container.insertBefore(node, before);\n rememberItem(memory, patch.value);\n }\n\n // Moves last — by this point only the original nodes that didn't get\n // replaced/removed are still in the DOM, so the `from` index is now\n // shifted by earlier removes/inserts. We rely on `data-payload-key`\n // to relocate the node reliably.\n for (const patch of moves) {\n if (patch.kind !== 'move') continue;\n const key = readKey(patch.value);\n const node = key !== undefined ? findByKey(container, key) : null;\n if (!node) continue;\n const before = container.children[patch.to] ?? null;\n if (node === before) continue;\n container.insertBefore(node, before);\n }\n}\n\n/**\n * Walk every nested-array slot inside a freshly-rendered item and\n * populate its initial children. Called on `insert` and `replace`\n * (where the slot starts empty in the new DOM).\n *\n * A nested slot is any descendant element carrying both\n * `data-payload-nested-key` (which property of the item value holds\n * the nested array) and `data-payload-nested-template` (the inner\n * template for each nested child).\n */\nfunction populateNestedSlots(item: Element, value: unknown): void {\n const slots = item.querySelectorAll(`[${NESTED_KEY_ATTRIBUTE}]`);\n for (const slot of Array.from(slots)) {\n const key = slot.getAttribute(NESTED_KEY_ATTRIBUTE);\n if (key === null) continue;\n const nestedTemplate = slot.getAttribute(NESTED_TEMPLATE_ATTRIBUTE);\n if (!nestedTemplate) continue;\n const nestedItems = readNestedArray(value, key);\n if (nestedItems === undefined) continue;\n const patches = diffArray([], nestedItems);\n if (patches.length === 0) continue;\n applyStructuralPatches({\n template: nestedTemplate,\n container: slot,\n patches,\n nextItems: nestedItems,\n });\n }\n}\n\n/**\n * Update path — preserve nested-slot DOM identity across an item\n * update. The freshly-rendered `newItem` has empty nested slots; we\n * transplant the corresponding live slots from `oldItem` into it and\n * then recursively diff each one against the previous nested value.\n *\n * This is the heart of B5: a label change on an outer card no longer\n * blows away the inner CTA list, and a CTA reorder no longer rebuilds\n * its parent card.\n */\nfunction reconcileNestedSlots(\n oldItem: Element,\n newItem: Element,\n nextValue: unknown,\n memory: Map<string, unknown>,\n): void {\n const oldSlots = oldItem.querySelectorAll(`[${NESTED_KEY_ATTRIBUTE}]`);\n if (oldSlots.length === 0) return;\n const itemKey = readKey(nextValue);\n const prevValue = itemKey !== undefined ? memory.get(itemKey) : undefined;\n for (const oldSlot of Array.from(oldSlots)) {\n const key = oldSlot.getAttribute(NESTED_KEY_ATTRIBUTE);\n if (key === null) continue;\n const newSlot = newItem.querySelector(`[${NESTED_KEY_ATTRIBUTE}=\"${cssEscape(key)}\"]`);\n if (!newSlot) continue;\n // Transplant the live slot into the new item — its children carry\n // any state (focus, animations, plugin bindings) that we want to\n // preserve.\n newSlot.replaceWith(oldSlot);\n const nestedTemplate =\n oldSlot.getAttribute(NESTED_TEMPLATE_ATTRIBUTE) ??\n newSlot.getAttribute(NESTED_TEMPLATE_ATTRIBUTE);\n if (!nestedTemplate) continue;\n const nextNested = readNestedArray(nextValue, key) ?? [];\n const prevNested = readNestedArray(prevValue, key) ?? [];\n const patches = diffArray(prevNested, nextNested);\n if (patches.length === 0) continue;\n applyStructuralPatches({\n template: nestedTemplate,\n container: oldSlot,\n patches,\n nextItems: nextNested,\n });\n }\n}\n\nfunction readNestedArray(value: unknown, key: string): readonly unknown[] | undefined {\n if (typeof value !== 'object' || value === null) return undefined;\n const nested = (value as Record<string, unknown>)[key];\n if (!Array.isArray(nested)) return undefined;\n return nested as readonly unknown[];\n}\n\nfunction getMemory(container: Element): Map<string, unknown> {\n let map = previousItemValues.get(container);\n if (!map) {\n map = new Map();\n previousItemValues.set(container, map);\n }\n return map;\n}\n\nfunction rememberItem(memory: Map<string, unknown>, value: unknown): void {\n const key = readKey(value);\n if (key === undefined) return;\n memory.set(key, value);\n}\n\nfunction forgetItem(memory: Map<string, unknown>, value: unknown): void {\n const key = readKey(value);\n if (key === undefined) return;\n memory.delete(key);\n}\n\nfunction indexOf(patch: ArrayPatch): number {\n if (patch.kind === 'move') return patch.to;\n return patch.index;\n}\n\nfunction readKey(value: unknown): string | undefined {\n if (typeof value !== 'object' || value === null) return undefined;\n const id = (value as Record<string, unknown>)['id'];\n if (typeof id === 'string' || typeof id === 'number') return String(id);\n return undefined;\n}\n\nfunction findByKey(container: Element, key: string): Element | null {\n return container.querySelector(`[${KEY_ATTRIBUTE}=\"${cssEscape(key)}\"]`);\n}\n\nfunction cssEscape(value: string): string {\n // jsdom does not expose CSS.escape in older versions; fall through.\n const css = (globalThis as { CSS?: { escape?: (input: string) => string } }).CSS;\n if (css?.escape) return css.escape(value);\n return value.replace(/[^a-zA-Z0-9_-]/g, '\\\\$&');\n}\n\n/**\n * Render one template item, with its `id` stamped on the root as\n * `data-payload-key` so subsequent diffs can find it again.\n *\n * The template body is sanitised — the same defense-in-depth applied\n * elsewhere — and parsed via `<template>` so we get a real Element\n * back instead of a string concatenation.\n */\nfunction renderItem(template: string, value: unknown, index: number): Element | null {\n if (typeof document === 'undefined') return null;\n const filled = fillTemplate(template, value, index);\n const safe = sanitizeHtml(filled);\n const host = document.createElement('template');\n host.innerHTML = safe;\n const first = host.content.firstElementChild;\n if (!first) return null;\n const key = readKey(value);\n if (key !== undefined) first.setAttribute(KEY_ATTRIBUTE, key);\n return first;\n}\n\nfunction fillTemplate(template: string, value: unknown, index: number): string {\n let out = template;\n if (typeof value === 'object' && value !== null) {\n for (const [key, raw] of Object.entries(value as Record<string, unknown>)) {\n const pattern = new RegExp(`\\\\{\\\\{${escapeRegex(key)}\\\\}\\\\}`, 'g');\n // Function replacement: a literal `$&`/`$'` in the field value\n // must not trigger String.replace's substitution patterns.\n const replacement = escapeHtml(stringifyForTemplate(raw));\n out = out.replace(pattern, () => replacement);\n }\n } else {\n const replacement = escapeHtml(stringifyForTemplate(value));\n out = out.replace(/\\{\\{value\\}\\}/g, () => replacement);\n }\n return out.replace(/\\{\\{index\\}\\}/g, String(index));\n}\n\nfunction stringifyForTemplate(value: unknown): string {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {\n return String(value);\n }\n return JSON.stringify(value);\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport { KEY_ATTRIBUTE };\n","/**\n * `structural-array` renderer.\n *\n * Activates for elements that opt into structural updates via the\n * `data-payload-structural` attribute. Instead of rebuilding the\n * container's `innerHTML` on every update, the renderer diffs the\n * previous and next item lists and applies the minimal patch.\n *\n * The previous state is held in a `WeakMap` keyed by the container —\n * each element therefore has its own diff history. The renderer is\n * also wrapped in a View-Transition so reorders animate where\n * supported.\n *\n * @module @field-types/structural-array\n */\n\nimport { runWithTransition } from '@core/view-transitions';\nimport { applyStructuralPatches } from '@core/structural-applier';\nimport { diffArray } from '@schema/diff';\nimport type { FieldRenderer } from '@core/types';\nimport { registerBuiltinRenderer } from './registry';\n\nconst previousValues = new WeakMap<Element, readonly unknown[]>();\nconst warnedContainers = new WeakSet<Element>();\n\nconst structuralArrayRenderer: FieldRenderer = {\n name: 'structural-array',\n render(target, value) {\n if (!Array.isArray(value)) return;\n const container = target.element;\n const template = target.arrayTemplate;\n if (template === undefined || template.length === 0) {\n warnMissingTemplate(container, target.fieldName);\n return;\n }\n const previous = previousValues.get(container) ?? [];\n const patches = diffArray(previous, value);\n if (patches.length === 0) {\n previousValues.set(container, value.slice() as readonly unknown[]);\n return;\n }\n void runWithTransition(() => {\n applyStructuralPatches({\n template,\n container,\n patches,\n nextItems: value,\n });\n });\n previousValues.set(container, value.slice() as readonly unknown[]);\n },\n};\n\nfunction warnMissingTemplate(container: Element, fieldName: string): void {\n if (warnedContainers.has(container)) return;\n warnedContainers.add(container);\n console.warn(\n `[live-preview] Skipping structural update for \"${fieldName}\" — the ` +\n `<${container.tagName.toLowerCase()}> with data-payload-structural is missing ` +\n `data-payload-array-template. Add an inline template (e.g., ` +\n `data-payload-array-template=\"<li>{{label}}</li>\") so the renderer can ` +\n `materialise new items.`,\n );\n}\n\nregisterBuiltinRenderer(structuralArrayRenderer);\n\nexport { structuralArrayRenderer };\n","/**\n * Public barrel for built-in field renderers.\n *\n * Each renderer is imported as a named binding (not a side-effect)\n * and assembled into the registry through `buildBuiltinRenderers`.\n * The bundler keeps every reference reachable, so the registry is\n * fully populated at runtime even under `sideEffects: false`.\n *\n * @module @field-types\n */\n\nimport type { FieldRenderer } from '@core/types';\nimport { textRenderer } from './text';\nimport { textareaRenderer } from './textarea';\nimport { richTextRenderer } from './rich-text';\nimport { htmlRenderer } from './html';\nimport { urlRenderer } from './url';\nimport { imageRenderer } from './image';\nimport { uploadRenderer } from './upload';\nimport { relationshipRenderer } from './relationship';\nimport { selectRenderer } from './select';\nimport { checkboxRenderer } from './checkbox';\nimport { dateRenderer } from './date';\nimport { numberRenderer } from './number';\nimport { arrayRenderer } from './array';\nimport { structuralArrayRenderer } from './structural-array';\nimport {\n buildBuiltinRenderers as buildRegistry,\n registerBuiltinRenderer,\n __resetBuiltinRenderersForTests,\n} from './registry';\n\nconst BUILTIN: readonly FieldRenderer[] = [\n textRenderer,\n textareaRenderer,\n richTextRenderer,\n htmlRenderer,\n urlRenderer,\n { ...urlRenderer, name: 'email' },\n imageRenderer,\n uploadRenderer,\n relationshipRenderer,\n selectRenderer,\n { ...selectRenderer, name: 'radio' },\n checkboxRenderer,\n dateRenderer,\n numberRenderer,\n arrayRenderer,\n { ...arrayRenderer, name: 'blocks' },\n structuralArrayRenderer,\n];\n\n/**\n * Built-in renderer map. Calling this from the runtime adds every\n * concrete renderer to the registry and snapshots the result.\n */\nexport function buildBuiltinRenderers(): Readonly<Record<string, FieldRenderer>> {\n return buildRegistry(BUILTIN);\n}\n\nexport { registerBuiltinRenderer, __resetBuiltinRenderersForTests };\nexport type { PayloadMedia, PayloadRelationship } from './types';\n","/**\n * Public, high-level `LivePreviewClient`.\n *\n * The client wraps a `LivePreviewRuntime` with:\n *\n * - Per-instance event emitter (no singleton).\n * - Per-instance plugin manager.\n * - Custom-renderer registration.\n * - Field-name transforms applied before renderer dispatch.\n *\n * Consumers who want full programmatic control instantiate\n * `LivePreviewClient` directly. Consumers who just want a working\n * inline preview should use `generateInlineScript()` instead.\n *\n * @module @client\n */\n\nimport type { FieldRenderer } from '@core/types';\nimport { LivePreviewRuntime } from '@core/lifecycle';\nimport { EventEmitter } from '@events/emitter';\nimport { OriginDetector } from '@detection/origin';\nimport { PluginManager } from '@plugins/manager';\nimport type { LivePreviewPlugin } from '@plugins/types';\nimport { isDevMode, isInPreviewContext } from '@detection/environment';\nimport { buildBuiltinRenderers } from '@field-types/index';\nimport type { LivePreviewClientConfig } from './config';\n\nexport class LivePreviewClient {\n readonly #emitter = new EventEmitter();\n readonly #detector: OriginDetector;\n readonly #renderers: Record<string, FieldRenderer>;\n readonly #runtime: LivePreviewRuntime;\n readonly #plugins: PluginManager;\n readonly #log: (...args: unknown[]) => void;\n #started = false;\n #destroyed = false;\n\n constructor(config: LivePreviewClientConfig = {}) {\n const debug = config.debug ?? isDevMode();\n this.#log = debug\n ? (...args): void => {\n // eslint-disable-next-line no-console -- opt-in debug channel\n console.debug('[live-preview]', ...args);\n }\n : (): void => {\n /* silent */\n };\n\n this.#detector = new OriginDetector({\n ...(config.allowedOrigins !== undefined ? { additionalOrigins: config.allowedOrigins } : {}),\n ...(config.disableReferrerDetection !== undefined\n ? { enableReferrerDetection: !config.disableReferrerDetection }\n : {}),\n ...(config.disableLocalhostMatching !== undefined\n ? { enableLocalhostMatching: !config.disableLocalhostMatching }\n : {}),\n });\n\n if (this.#detector.isProductionUnconfigured) {\n this.#log('no trusted origin could be detected — set allowedOrigins or PAYLOAD_ADMIN_ORIGIN');\n }\n\n const builtin = buildBuiltinRenderers();\n this.#renderers = { ...builtin };\n\n this.#plugins = new PluginManager({\n events: this.#emitter,\n config: Object.freeze({ ...config }),\n registerFieldRenderer: (renderer) => {\n this.#renderers[renderer.name] = renderer;\n },\n log: this.#log,\n });\n\n this.#runtime = new LivePreviewRuntime({\n ...(config.root !== undefined ? { root: config.root } : {}),\n renderers: this.#renderers,\n originMatcher: (origin) => this.#detector.matches(origin),\n readyTargets: this.#detector.enumerate(),\n emitter: this.#emitter,\n ...(config.serverURL !== undefined && config.serverURL !== ''\n ? {\n dataMerge: {\n serverURL: config.serverURL,\n ...(config.apiRoute !== undefined ? { apiRoute: config.apiRoute } : {}),\n ...(config.mergeDepth !== undefined ? { depth: config.mergeDepth } : {}),\n ...(config.mergeFetch !== undefined ? { fetchFn: config.mergeFetch } : {}),\n },\n }\n : {}),\n ...(config.debounceMs !== undefined ? { debounceMs: config.debounceMs } : {}),\n ...(config.heartbeatMs !== undefined ? { heartbeatMs: config.heartbeatMs } : {}),\n ...(config.intersectionRootMargin !== undefined\n ? { intersectionRootMargin: config.intersectionRootMargin }\n : {}),\n ...(config.disableVisibilityGate !== undefined\n ? { disableVisibilityGate: config.disableVisibilityGate }\n : {}),\n ...(config.visibilityGateThreshold !== undefined\n ? { visibilityGateThreshold: config.visibilityGateThreshold }\n : {}),\n ...(config.enableA11y !== undefined ? { enableA11y: config.enableA11y } : {}),\n ...(config.a11yLocale !== undefined ? { a11yLocale: config.a11yLocale } : {}),\n onHeartbeatTimeout: () => {\n this.#detector.unlockOrigin();\n },\n ...(config.validateToken !== undefined ? { validateToken: config.validateToken } : {}),\n log: this.#log,\n });\n\n this.#emitter.on('connect', (e) => {\n this.#detector.lockOrigin(e.origin);\n });\n\n if (config.autoStart !== false) {\n this.start();\n }\n }\n\n /**\n * Start the runtime. Returns `true` when the runtime actually\n * started (it may refuse to start outside a preview context).\n */\n start(): boolean {\n if (this.#destroyed) return false;\n if (this.#started) return true;\n if (!isInPreviewContext()) return false;\n this.#started = true;\n return this.#runtime.start();\n }\n\n /**\n * Stop the runtime and tear down every plugin. Idempotent.\n */\n async destroy(): Promise<void> {\n if (this.#destroyed) return;\n this.#destroyed = true;\n this.#runtime.destroy();\n await this.#plugins.destroyAll();\n this.#emitter.removeAllListeners();\n }\n\n /**\n * Register a plugin.\n */\n async use(plugin: LivePreviewPlugin): Promise<void> {\n if (this.#destroyed) throw new Error('LivePreviewClient: already destroyed');\n await this.#plugins.register(plugin);\n }\n\n /**\n * Unregister a plugin by name.\n */\n async unuse(name: string): Promise<void> {\n await this.#plugins.unregister(name);\n }\n\n /** Rebuild the element cache manually. */\n refreshCache(): void {\n this.#runtime.refreshCache();\n }\n\n /** Read-only access to the event emitter for `on`/`once`/`off`. */\n get events(): EventEmitter {\n return this.#emitter;\n }\n\n /** Names of currently registered plugins. */\n get plugins(): readonly string[] {\n return this.#plugins.list();\n }\n\n /** Current connection status. */\n get status(): 'disconnected' | 'connecting' | 'connected' {\n return this.#runtime.status;\n }\n\n /** Number of valid updates received so far. */\n get updateCount(): number {\n return this.#runtime.updateCount;\n }\n\n /** `true` once `destroy()` has been called. */\n get destroyed(): boolean {\n return this.#destroyed;\n }\n}\n\n/**\n * Convenience factory: instantiate the client, returning `null` when\n * the page is not currently a preview context (top-level navigation).\n * Useful for SSR-style integrations that import this from any context.\n */\nexport function initLivePreview(config: LivePreviewClientConfig = {}): LivePreviewClient | null {\n const client = new LivePreviewClient({ ...config, autoStart: false });\n return client.start() ? client : null;\n}\n\nexport type { LivePreviewClientConfig } from './config';\n","// Auto-generated by scripts/build-runtime.ts — do not edit.\nexport interface RuntimeBuildInfo { readonly generatedAt: string; readonly size: number }\nexport const RUNTIME_SOURCE: string = \"\\\"use strict\\\";(()=>{var Jr=Object.defineProperty;var Dn=t=>{throw TypeError(t)};var Zr=(t,e,n)=>e in t?Jr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var $n=(t,e,n)=>Zr(t,typeof e!=\\\"symbol\\\"?e+\\\"\\\":e,n),Ot=(t,e,n)=>e.has(t)||Dn(\\\"Cannot \\\"+n);var i=(t,e,n)=>(Ot(t,e,\\\"read from private field\\\"),n?n.call(t):e.get(t)),l=(t,e,n)=>e.has(t)?Dn(\\\"Cannot add the same private member more than once\\\"):e instanceof WeakSet?e.add(t):e.set(t,n),d=(t,e,n,r)=>(Ot(t,e,\\\"write to private field\\\"),r?r.call(t,n):e.set(t,n),n),f=(t,e,n)=>(Ot(t,e,\\\"access private method\\\"),n);var F,_,te,Pt,Ft,bt=class{constructor(){l(this,te);l(this,F,new Map);l(this,_,new Map)}on(e,n){return f(this,te,Pt).call(this,i(this,F),e,n)}once(e,n){return f(this,te,Pt).call(this,i(this,_),e,n)}off(e,n){i(this,F).get(e)?.delete(n),i(this,_).get(e)?.delete(n)}async emit(e,n){let r=i(this,F).get(e);if(r)for(let s of[...r])await f(this,te,Ft).call(this,s,n,e);let o=i(this,_).get(e);if(o&&o.size>0){let s=[...o];i(this,_).delete(e);for(let a of s)await f(this,te,Ft).call(this,a,n,e)}}listenerCount(e){return(i(this,F).get(e)?.size??0)+(i(this,_).get(e)?.size??0)}removeAllListeners(e){if(e===void 0){i(this,F).clear(),i(this,_).clear();return}i(this,F).delete(e),i(this,_).delete(e)}eventNames(){let e=new Set;for(let n of i(this,F).keys())e.add(n);for(let n of i(this,_).keys())e.add(n);return[...e]}};F=new WeakMap,_=new WeakMap,te=new WeakSet,Pt=function(e,n,r){let o=e.get(n);return o||(o=new Set,e.set(n,o)),o.add(r),()=>{e.get(n)?.delete(r)}},Ft=async function(e,n,r){try{await e(n)}catch(o){let s=typeof r==\\\"string\\\"||typeof r==\\\"number\\\"?String(r):\\\"<event>\\\";console.error(`[live-preview] handler for \\\"${s}\\\" threw:`,o)}};var le=\\\"data-payload-field\\\",Un=\\\"data-payload-type\\\",Qr=\\\"data-payload-attribute\\\",ei=\\\"data-payload-href\\\",ti=\\\"data-payload-src\\\",ni=\\\"data-payload-alt\\\",ri=\\\"data-payload-array-template\\\",ii=\\\"data-payload-array-separator\\\",oi=\\\"data-payload-locale\\\",si=`[${le}]`,Hn=new Set([\\\"text\\\",\\\"textarea\\\",\\\"richText\\\",\\\"email\\\",\\\"number\\\",\\\"checkbox\\\",\\\"date\\\",\\\"select\\\",\\\"radio\\\",\\\"array\\\",\\\"blocks\\\",\\\"group\\\",\\\"tabs\\\",\\\"row\\\",\\\"collapsible\\\",\\\"relationship\\\",\\\"upload\\\",\\\"point\\\",\\\"json\\\",\\\"code\\\",\\\"ui\\\",\\\"html\\\",\\\"url\\\",\\\"image\\\",\\\"structural-array\\\"]),k,W,Te,ne,Dt,$t,Rt=class{constructor(e={}){l(this,ne);l(this,k,new Map);l(this,W,new WeakMap);l(this,Te);d(this,Te,e.filter??di)}buildFromRoot(e){let n=performance.now();i(this,k).clear();let r=e.querySelectorAll(si),o=0;for(let s of r){if(!i(this,Te).call(this,s))continue;let a=f(this,ne,$t).call(this,s);a&&(f(this,ne,Dt).call(this,a),i(this,W).set(s,a),o+=1)}return{elementCount:o,fieldCount:i(this,k).size,durationMs:performance.now()-n}}add(e){if(!i(this,Te).call(this,e))return;let n=f(this,ne,$t).call(this,e);if(n)return f(this,ne,Dt).call(this,n),i(this,W).set(e,n),n}remove(e){let n=i(this,W).get(e);if(!n)return!1;i(this,W).delete(e);let r=i(this,k).get(n.fieldName);if(!r)return!1;let o=r.indexOf(n);return o<0?!1:(r.splice(o,1),r.length===0&&i(this,k).delete(n.fieldName),!0)}get(e){return i(this,k).get(e)}getByElement(e){return i(this,W).get(e)}get fieldCount(){return i(this,k).size}get elementCount(){let e=0;for(let n of i(this,k).values())e+=n.length;return e}entries(){return i(this,k).entries()}*values(){for(let e of i(this,k).values())yield*e}has(e){return i(this,W).has(e)}clear(){i(this,k).clear()}};k=new WeakMap,W=new WeakMap,Te=new WeakMap,ne=new WeakSet,Dt=function(e){let n=i(this,k).get(e.fieldName);if(n){n.push(e);return}i(this,k).set(e.fieldName,[e])},$t=function(e){let n=e.getAttribute(le);if(n===null||n.length===0)return;let r=e.getAttribute(Un),o=ai(e),s=e.getAttribute(Qr),a=e.getAttribute(ei),u=e.getAttribute(ti),m=e.getAttribute(ni),w=e.getAttribute(ri),c=e.getAttribute(ii),b=e.getAttribute(oi);return{element:e,fieldName:n,fieldType:o,explicitFieldType:r!==null&&Hn.has(r),...s!==null&&s.length>0?{targetAttribute:s}:{},...a!==null?{hrefField:a}:{},...u!==null?{srcField:u}:{},...m!==null?{altField:m}:{},...w!==null?{arrayTemplate:w}:{},...c!==null?{arraySeparator:c}:{},...b!==null?{locale:b}:{}}};function ai(t){let e=t.getAttribute(Un);if(e!==null&&Hn.has(e))return e;if(t.hasAttribute(\\\"data-payload-richtext\\\"))return\\\"richText\\\";if(t.hasAttribute(\\\"data-payload-html\\\"))return\\\"html\\\";if(t.hasAttribute(\\\"data-payload-structural\\\"))return\\\"structural-array\\\";if(t.hasAttribute(\\\"data-payload-array\\\"))return\\\"array\\\";if(t.tagName===\\\"IMG\\\")return\\\"image\\\";if(t.tagName===\\\"A\\\")return\\\"url\\\";if(t.tagName===\\\"TIME\\\")return\\\"date\\\";if(t.tagName===\\\"INPUT\\\"){let n=t.type;if(n===\\\"checkbox\\\")return\\\"checkbox\\\";if(n===\\\"number\\\")return\\\"number\\\";if(n===\\\"date\\\"||n===\\\"datetime-local\\\")return\\\"date\\\"}return\\\"text\\\"}function di(){return!0}var li=100,ui=\\\"200px\\\",ue,De,$e,M,ce,re,D,we,jn,Vn,Tt=class{constructor(e,n={}){l(this,we);l(this,ue);l(this,De);l(this,$e);l(this,M,new Set);l(this,ce,null);l(this,re,null);l(this,D,null);d(this,ue,e),d(this,De,n.mutationDebounceMs??li),d(this,$e,n.intersectionRootMargin??ui)}start(e){d(this,ce,new MutationObserver(n=>{f(this,we,jn).call(this,n)})),i(this,ce).observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[le]}),d(this,re,new IntersectionObserver(n=>{f(this,we,Vn).call(this,n)},{rootMargin:i(this,$e),threshold:0}))}observeElement(e){i(this,re)?.observe(e)}unobserveElement(e){i(this,re)?.unobserve(e),i(this,M).delete(e)}markVisible(e,n){n?i(this,M).add(e):i(this,M).delete(e)}isVisible(e){return i(this,M).has(e)}stop(){i(this,D)!==null&&(clearTimeout(i(this,D)),d(this,D,null)),i(this,ce)?.disconnect(),i(this,re)?.disconnect(),d(this,ce,null),d(this,re,null),i(this,M).clear()}};ue=new WeakMap,De=new WeakMap,$e=new WeakMap,M=new WeakMap,ce=new WeakMap,re=new WeakMap,D=new WeakMap,we=new WeakSet,jn=function(e){ci(e)&&(i(this,D)!==null&&clearTimeout(i(this,D)),d(this,D,setTimeout(()=>{d(this,D,null),i(this,ue).onStructuralChange()},i(this,De))))},Vn=function(e){for(let n of e){let r=n.target;n.isIntersecting?i(this,M).has(r)||(i(this,M).add(r),i(this,ue).onVisibilityChange(r,!0)):i(this,M).has(r)&&(i(this,M).delete(r),i(this,ue).onVisibilityChange(r,!1))}};function ci(t){for(let e of t){if(e.type===\\\"attributes\\\"&&e.attributeName===le)return!0;for(let n of e.addedNodes)if(Bn(n))return!0;for(let n of e.removedNodes)if(Bn(n))return!0}return!1}function Bn(t){if(t.nodeType!==Node.ELEMENT_NODE)return!1;let e=t;return e.hasAttribute(le)?!0:e.querySelector(`[${le}]`)!==null}var fi={basic:1,\\\"schema-json\\\":2,\\\"preview-token\\\":3,\\\"nested-arrays\\\":4,\\\"recursive-diffs\\\":4};function Ut(t){let e=typeof t==\\\"number\\\"&&Number.isFinite(t)&&t>=1?Math.floor(t):void 0,r=Math.min(4,e??1),o=new Set;for(let[s,a]of Object.entries(fi))r>=a&&o.add(s);return{ours:4,...e!==void 0?{theirs:e}:{theirs:void 0},negotiated:r,capabilities:o}}var He,v,xe,fe,ve,Gn,Wn,Ue=class{constructor(e,n){l(this,ve);l(this,He);l(this,v);l(this,xe);l(this,fe,!1);d(this,He,e),d(this,v,n),d(this,xe,r=>{f(this,ve,Gn).call(this,r)})}attach(e=window){i(this,fe)||(e.addEventListener(\\\"message\\\",i(this,xe)),d(this,fe,!0))}detach(e=window){i(this,fe)&&(e.removeEventListener(\\\"message\\\",i(this,xe)),d(this,fe,!1))}static sendReady(e,n){if(e.length===0||n.length===0)return;let r={type:\\\"payload-live-preview\\\",ready:!0,protocolVersion:4};for(let o of e)for(let s of n)try{o.postMessage(r,s)}catch{}}};He=new WeakMap,v=new WeakMap,xe=new WeakMap,fe=new WeakMap,ve=new WeakSet,Gn=function(e){let n=e.origin;if(!i(this,He).call(this,n)){i(this,v).onInvalid?.(\\\"origin\\\",n);return}let r=e.data;if(!pi(r)){i(this,v).onInvalid?.(\\\"shape\\\",n);return}switch(r.type){case\\\"payload-live-preview\\\":f(this,ve,Wn).call(this,r,n);return;case\\\"payload-document-event\\\":i(this,v).onDocumentEvent(r,n);return;default:i(this,v).onInvalid?.(\\\"type\\\",n)}},Wn=function(e,n){let r=i(this,v).validateToken;if(r===void 0){i(this,v).onUpdate(e,n);return}if(e.ready===!0&&e.data===void 0){i(this,v).onUpdate(e,n);return}let o;try{o=r(e.previewToken,n)}catch{i(this,v).onInvalid?.(\\\"token\\\",n);return}if(typeof o==\\\"boolean\\\"){o?i(this,v).onUpdate(e,n):i(this,v).onInvalid?.(\\\"token\\\",n);return}o.then(s=>{s?i(this,v).onUpdate(e,n):i(this,v).onInvalid?.(\\\"token\\\",n)},()=>{i(this,v).onInvalid?.(\\\"token\\\",n)})};function pi(t){return typeof t!=\\\"object\\\"||t===null||!(\\\"type\\\"in t)?!1:typeof t.type==\\\"string\\\"}var Ee,Be,C,je,xt=class{constructor(e){l(this,Ee);l(this,Be);l(this,C,null);l(this,je,0);d(this,Ee,e.timeoutMs??0),d(this,Be,e.onTimeout)}kick(){d(this,je,Date.now()),!(i(this,Ee)<=0)&&(i(this,C)!==null&&clearTimeout(i(this,C)),d(this,C,setTimeout(()=>{d(this,C,null),i(this,Be).call(this)},i(this,Ee))))}stop(){i(this,C)!==null&&(clearTimeout(i(this,C)),d(this,C,null))}get lastKickAt(){return i(this,je)}get pending(){return i(this,C)!==null}};Ee=new WeakMap,Be=new WeakMap,C=new WeakMap,je=new WeakMap;var pe,Ve,ke,wt,vt=class{constructor(e){l(this,ke);l(this,pe,\\\"disconnected\\\");l(this,Ve);d(this,Ve,e)}get status(){return i(this,pe)}markConnected(){return f(this,ke,wt).call(this,\\\"connected\\\")}markConnecting(){return f(this,ke,wt).call(this,\\\"connecting\\\")}markDisconnected(){return f(this,ke,wt).call(this,\\\"disconnected\\\")}};pe=new WeakMap,Ve=new WeakMap,ke=new WeakSet,wt=function(e){if(i(this,pe)===e)return!1;let n=i(this,pe);return d(this,pe,e),i(this,Ve).call(this,e,n),!0};var mi=()=>{},ze,Ge,We,Ye,me,Y,Et=class{constructor(e){l(this,ze);l(this,Ge);l(this,We);l(this,Ye);l(this,me);l(this,Y,null);d(this,ze,e.serverURL.replace(/\\\\/+$/,\\\"\\\"));let n=e.apiRoute??\\\"/api\\\";d(this,Ge,n.startsWith(\\\"/\\\")?n:`/${n}`),d(this,We,e.depth??1),d(this,Ye,e.fetchFn),d(this,me,e.log??mi)}canMerge(e){if(e.globalSlug!==void 0&&e.globalSlug!==\\\"\\\")return!0;if(e.collectionSlug===void 0||e.collectionSlug===\\\"\\\")return!1;let n=e.data.id;return typeof n==\\\"string\\\"||typeof n==\\\"number\\\"}async merge(e){if(!this.canMerge(e))return{status:\\\"unavailable\\\"};let n=i(this,Ye)??(typeof fetch==\\\"function\\\"?fetch:void 0);if(n===void 0)return{status:\\\"unavailable\\\"};i(this,Y)?.abort();let r=new AbortController;d(this,Y,r);let o=e.globalSlug!==void 0&&e.globalSlug!==\\\"\\\"?`globals/${e.globalSlug}`:`${e.collectionSlug}/${String(e.data.id)}`,s=`${i(this,ze)}${i(this,Ge)}/${encodeURI(o)}`;try{let a=await n(s,{method:\\\"POST\\\",credentials:\\\"include\\\",headers:{\\\"Content-Type\\\":\\\"application/json\\\",\\\"X-Payload-HTTP-Method-Override\\\":\\\"GET\\\"},body:JSON.stringify({data:e.data,depth:i(this,We),flattenLocales:!1,...e.locale!==void 0?{locale:e.locale}:{}}),signal:r.signal});if(!a.ok)return i(this,me).call(this,\\\"merge fetch failed\\\",a.status,s),{status:\\\"unavailable\\\"};let u=await a.json();return u===null||typeof u!=\\\"object\\\"||Array.isArray(u)?(i(this,me).call(this,\\\"merge fetch returned non-object\\\",s),{status:\\\"unavailable\\\"}):{status:\\\"merged\\\",doc:u}}catch(a){return r.signal.aborted?{status:\\\"superseded\\\"}:(i(this,me).call(this,\\\"merge fetch error\\\",a),{status:\\\"unavailable\\\"})}finally{i(this,Y)===r&&d(this,Y,null)}}destroy(){i(this,Y)?.abort(),d(this,Y,null)}};ze=new WeakMap,Ge=new WeakMap,We=new WeakMap,Ye=new WeakMap,me=new WeakMap,Y=new WeakMap;var hi=new Set([\\\"http:\\\",\\\"https:\\\",\\\"mailto:\\\",\\\"tel:\\\"]),yi=/^\\\\s*(?:javascript|data|vbscript|file|blob|about)\\\\s*:/i,gi=/^(?:\\\\.{1,2}\\\\/|[a-zA-Z0-9_-]+\\\\/?)/;function R(t){if(typeof t!=\\\"string\\\"||t.length===0)return!1;let e=t.trim();if(e.length===0||yi.test(e))return!1;if(e.startsWith(\\\"#\\\")||e.startsWith(\\\"?\\\")||e.startsWith(\\\"//\\\")||e.startsWith(\\\"/\\\"))return!0;try{let n=new URL(e);return hi.has(n.protocol)}catch{return gi.test(e)}}function kt(t){if(!R(t))return!1;let e=t.trim();return/^https?:\\\\/\\\\//i.test(e)||/^\\\\/\\\\/[^/]/.test(e)}var bi=new Set([\\\"style\\\",\\\"srcdoc\\\",\\\"formaction\\\",\\\"form\\\",\\\"id\\\",\\\"name\\\",\\\"is\\\",\\\"srcset\\\",\\\"imagesrcset\\\"]),Ri=new Set([\\\"href\\\",\\\"src\\\",\\\"poster\\\",\\\"cite\\\",\\\"action\\\",\\\"xlink:href\\\",\\\"data\\\"]);function Yn(t,e,n){let r=e.toLowerCase().trim();if(r.length===0||r.startsWith(\\\"on\\\")||bi.has(r))return\\\"blocked\\\";if(n==null)return t.removeAttribute(r),\\\"applied\\\";if(typeof n!=\\\"string\\\"&&typeof n!=\\\"number\\\"&&typeof n!=\\\"boolean\\\")return\\\"blocked\\\";let o=String(n);return Ri.has(r)&&!R(o)?\\\"blocked\\\":(t.setAttribute(r,o),\\\"applied\\\")}var Se,qe,Ke,Xe,Je,Ze,Qe,et,Ae,$,q,S,U,K,qn,Kn,Ht,St=class{constructor(e,n){l(this,K);l(this,Se);l(this,qe);l(this,Ke);l(this,Xe);l(this,Je);l(this,Ze);l(this,Qe);l(this,et);l(this,Ae);l(this,$,new Map);l(this,q,new Map);l(this,S,null);l(this,U,null);d(this,Se,e),d(this,qe,n.debounceMs??50),d(this,Ke,n.isVisible),d(this,Xe,n.visibilityGateThreshold??50),d(this,Je,n.disableVisibilityGate??!1),d(this,Ze,n.getCacheSize),d(this,Qe,n.onFlush),d(this,et,n.scheduleFrame??(typeof requestAnimationFrame==\\\"function\\\"?requestAnimationFrame.bind(globalThis):r=>setTimeout(()=>{r(performance.now())},0))),d(this,Ae,n.cancelFrame??(typeof cancelAnimationFrame==\\\"function\\\"?cancelAnimationFrame.bind(globalThis):r=>{clearTimeout(r)}))}schedule(e){let n=i(this,$).get(e.target.element);n?(n.value=e.value,n.allFields=e.allFields):i(this,$).set(e.target.element,{target:e.target,value:e.value,allFields:e.allFields}),f(this,K,qn).call(this)}flushNow(){return i(this,S)!==null&&(clearTimeout(i(this,S)),d(this,S,null)),f(this,K,Ht).call(this)}notifyVisible(e){let n=i(this,q).get(e);n&&(i(this,q).delete(e),i(this,Se).call(this,n))}forget(e){i(this,$).delete(e),i(this,q).delete(e)}destroy(){i(this,S)!==null&&(clearTimeout(i(this,S)),d(this,S,null)),i(this,U)!==null&&(i(this,Ae).call(this,i(this,U)),d(this,U,null)),i(this,$).clear(),i(this,q).clear()}get pendingCount(){return i(this,$).size}get replayCount(){return i(this,q).size}};Se=new WeakMap,qe=new WeakMap,Ke=new WeakMap,Xe=new WeakMap,Je=new WeakMap,Ze=new WeakMap,Qe=new WeakMap,et=new WeakMap,Ae=new WeakMap,$=new WeakMap,q=new WeakMap,S=new WeakMap,U=new WeakMap,K=new WeakSet,qn=function(){i(this,S)!==null&&clearTimeout(i(this,S)),d(this,S,setTimeout(()=>{d(this,S,null),f(this,K,Kn).call(this)},i(this,qe)))},Kn=function(){i(this,U)!==null&&i(this,Ae).call(this,i(this,U)),d(this,U,i(this,et).call(this,()=>{d(this,U,null),f(this,K,Ht).call(this)}))},Ht=function(){var u;let e=performance.now(),n=!i(this,Je)&&i(this,Ze).call(this)>i(this,Xe),r=i(this,$);d(this,$,new Map);let o=0,s=0;for(let m of r.values()){if(n&&!i(this,Ke).call(this,m.target.element)){i(this,q).set(m.target.element,m),s+=1;continue}i(this,Se).call(this,m),o+=1}let a={applied:o,deferred:s,durationMs:performance.now()-e};return(u=i(this,Qe))==null||u.call(this,a),a};function Le(){let t=Ti();if(t!==void 0)return t;let e=wi();return e!==void 0?e:\\\"en\\\"}function Ti(){if(typeof document>\\\"u\\\")return;let t=document.documentElement.getAttribute(\\\"lang\\\");return t===null||t.length===0?void 0:t}function wi(){if(typeof navigator>\\\"u\\\")return;let t=navigator.language;return typeof t==\\\"string\\\"&&t.length>0?t:void 0}var Xn=\\\"payload-live-preview-a11y\\\",xi=1500,vi=[\\\"position:absolute\\\",\\\"width:1px\\\",\\\"height:1px\\\",\\\"padding:0\\\",\\\"margin:-1px\\\",\\\"overflow:hidden\\\",\\\"clip:rect(0 0 0 0)\\\",\\\"clip-path:inset(50%)\\\",\\\"white-space:nowrap\\\",\\\"border:0\\\"].join(\\\";\\\"),Jn={connected:\\\"Live preview connected\\\",disconnected:\\\"Live preview disconnected\\\",updated:t=>`${String(t)} ${t===1?\\\"change\\\":\\\"changes\\\"} applied`},Ei={en:Jn,de:{connected:\\\"Vorschau verbunden\\\",disconnected:\\\"Vorschau getrennt\\\",updated:t=>`${String(t)} ${t===1?\\\"\\\\xC4nderung\\\":\\\"\\\\xC4nderungen\\\"} angewendet`}};function ki(t){let e=t.split(/[-_]/)[0]?.toLowerCase()??\\\"en\\\";return Ei[e]??Jn}var I,he,H,ie,Zn,At,tt=class{constructor(e=Le()){l(this,ie);l(this,I,null);l(this,he);l(this,H,null);d(this,he,ki(e))}announceConnected(){f(this,ie,At).call(this,i(this,he).connected)}announceDisconnected(){f(this,ie,At).call(this,i(this,he).disconnected)}announceUpdate(e){e<=0||f(this,ie,At).call(this,i(this,he).updated(e))}detach(){i(this,H)!==null&&(clearTimeout(i(this,H)),d(this,H,null)),i(this,I)?.parentNode&&i(this,I).parentNode.removeChild(i(this,I))}};I=new WeakMap,he=new WeakMap,H=new WeakMap,ie=new WeakSet,Zn=function(){if(i(this,I)!==null&&i(this,I).isConnected)return i(this,I);if(typeof document>\\\"u\\\"||document.body===null)return null;let e=document.getElementById(Xn);return e||(e=document.createElement(\\\"div\\\"),e.id=Xn,e.setAttribute(\\\"role\\\",\\\"status\\\"),e.setAttribute(\\\"aria-live\\\",\\\"polite\\\"),e.setAttribute(\\\"aria-atomic\\\",\\\"true\\\"),e.setAttribute(\\\"style\\\",vi),document.body.appendChild(e)),d(this,I,e),e},At=function(e){let n=f(this,ie,Zn).call(this);n&&(n.textContent=e,i(this,H)!==null&&clearTimeout(i(this,H)),d(this,H,setTimeout(()=>{d(this,H,null),i(this,I)&&(i(this,I).textContent=\\\"\\\")},xi)))};var Si=new Set([\\\"tabs\\\",\\\"row\\\",\\\"collapsible\\\"]);function Bt(t,e=\\\"\\\"){let n=new Map;return nt(t,e,n),n}function nt(t,e,n){for(let r of t){if(Si.has(r.type)){r.fields&&nt(r.fields,e,n);continue}if(r.type===\\\"group\\\"){let s=e===\\\"\\\"?r.name:`${e}.${r.name}`;n.set(s,r),r.fields&&nt(r.fields,s,n);continue}let o=e===\\\"\\\"?r.name:`${e}.${r.name}`;if(n.set(o,r),r.type===\\\"array\\\"&&r.fields)nt(r.fields,`${o}.*`,n);else if(r.type===\\\"blocks\\\"&&r.blocks)for(let s of r.blocks)nt(s.fields,`${o}.*.${s.slug}`,n)}}function jt(t,e){if(t.has(e))return t.get(e);let n=e.replace(/\\\\.\\\\d+(?=\\\\.|$)/g,\\\".*\\\");if(t.has(n))return t.get(n)}function Vt(t){if(typeof t!=\\\"object\\\"||t===null)return;let e=t.id;if(typeof e==\\\"string\\\"||typeof e==\\\"number\\\")return e}function Qn(t){if(typeof t!=\\\"object\\\"||t===null)return;let e=t.blockType;return typeof e==\\\"string\\\"?e:void 0}function rt(t,e){return e.every(r=>Vt(r)!==void 0)?Ai(t,e):Li(t,e)}function Ai(t,e){let n=[],r=new Map;for(let s=0;s<t.length;s+=1){let a=Vt(t[s]);a!==void 0&&r.set(a,s)}let o=new Set;for(let s=0;s<e.length;s+=1){let a=e[s],u=Vt(a);if(u===void 0){n.push({kind:\\\"insert\\\",index:s,value:a});continue}let m=r.get(u);if(m===void 0){n.push({kind:\\\"insert\\\",index:s,value:a});continue}o.add(m);let w=t[m];if(Qn(w)!==Qn(a)){n.push({kind:\\\"replace\\\",index:s,oldValue:w,value:a});continue}m!==s&&n.push({kind:\\\"move\\\",from:m,to:s,value:a}),er(w,a)||n.push({kind:\\\"update\\\",index:s,value:a})}for(let s=0;s<t.length;s+=1)o.has(s)||n.push({kind:\\\"remove\\\",index:s,value:t[s]});return n}function Li(t,e){let n=[],r=Math.min(t.length,e.length);for(let o=0;o<r;o+=1)er(t[o],e[o])||n.push({kind:\\\"update\\\",index:o,value:e[o]});if(e.length>t.length)for(let o=t.length;o<e.length;o+=1)n.push({kind:\\\"insert\\\",index:o,value:e[o]});if(t.length>e.length)for(let o=e.length;o<t.length;o+=1)n.push({kind:\\\"remove\\\",index:o,value:t[o]});return n}function er(t,e){if(Object.is(t,e))return!0;if(typeof t!=\\\"object\\\"||typeof e!=\\\"object\\\"||t===null||e===null)return!1;let n=t,r=e,o=Object.keys(n),s=Object.keys(r);if(o.length!==s.length)return!1;for(let a of o)if(!Object.is(n[a],r[a]))return!1;return!0}var tr={text:\\\"text\\\",textarea:\\\"textarea\\\",richText:\\\"richText\\\",email:\\\"email\\\",number:\\\"number\\\",checkbox:\\\"checkbox\\\",date:\\\"date\\\",select:\\\"select\\\",radio:\\\"radio\\\",array:\\\"array\\\",blocks:\\\"blocks\\\",group:\\\"text\\\",tabs:\\\"text\\\",row:\\\"text\\\",collapsible:\\\"text\\\",relationship:\\\"relationship\\\",upload:\\\"upload\\\",point:\\\"text\\\",json:\\\"text\\\",code:\\\"text\\\",ui:\\\"text\\\"};function zt(t){if(Object.prototype.hasOwnProperty.call(tr,t))return tr[t]}var Mi=[0,500,1e3,2e3],E,A,X,oe,Me,J,Ie,it,B,ye,ge,ot,O,Ne,_e,Z,be,N,Ce,Oe,Pe,Re,se,st,at,h,Gt,Wt,Yt,rr,ir,or,sr,ar,dr,lr,ur,cr,fr,pr,Lt=class{constructor(e){l(this,h);l(this,E);l(this,A);l(this,X);l(this,oe);l(this,Me);l(this,J);l(this,Ie);l(this,it);l(this,B);l(this,ye);l(this,ge);l(this,ot);l(this,O);l(this,Ne);l(this,_e,[]);l(this,Z);l(this,be);l(this,N);l(this,Ce);l(this,Oe);l(this,Pe,Ut(void 0));l(this,Re,!1);l(this,se,null);l(this,st,0);l(this,at,new Set);d(this,E,e.emitter),d(this,it,e.renderers),d(this,B,e.root??(typeof document<\\\"u\\\"?document:null)),d(this,ye,e.readyTargets),d(this,ge,e.sendReady??Oi),d(this,ot,e.onHeartbeatTimeout),d(this,O,e.log??Ni),d(this,Ne,e.warn??Ci),d(this,Z,Ii(e)),d(this,be,e.dataMerge!==void 0?new Et({serverURL:e.dataMerge.serverURL,...e.dataMerge.apiRoute!==void 0?{apiRoute:e.dataMerge.apiRoute}:{},...e.dataMerge.depth!==void 0?{depth:e.dataMerge.depth}:{},...e.dataMerge.fetchFn!==void 0?{fetchFn:e.dataMerge.fetchFn}:{},log:(...n)=>{i(this,O).call(this,...n)}}):null),d(this,A,new Rt),d(this,X,new Tt({onStructuralChange:()=>{f(this,h,Yt).call(this)},onVisibilityChange:(n,r)=>{r&&i(this,oe).notifyVisible(n)}},{...e.intersectionRootMargin!==void 0?{intersectionRootMargin:e.intersectionRootMargin}:{}})),d(this,oe,new St(n=>{f(this,h,ur).call(this,n)},{...e.debounceMs!==void 0?{debounceMs:e.debounceMs}:{},...e.disableVisibilityGate!==void 0?{disableVisibilityGate:e.disableVisibilityGate}:{},...e.visibilityGateThreshold!==void 0?{visibilityGateThreshold:e.visibilityGateThreshold}:{},isVisible:n=>i(this,X).isVisible(n),getCacheSize:()=>i(this,A).elementCount,onFlush:n=>{f(this,h,fr).call(this,n)}})),d(this,Me,new Ue(e.originMatcher,{onUpdate:(n,r)=>{f(this,h,or).call(this,n,r)},onDocumentEvent:(n,r)=>{f(this,h,ar).call(this,n,r)},onInvalid:(n,r)=>{if(n===\\\"token\\\"){let o=new Error(`Preview token rejected (origin: ${r})`);i(this,E).emit(\\\"error\\\",{error:o,context:\\\"token\\\"})}i(this,O).call(this,\\\"message rejected:\\\",n,r)},...e.validateToken!==void 0?{validateToken:e.validateToken}:{}})),d(this,J,new vt((n,r)=>{i(this,O).call(this,\\\"connection\\\",r,\\\"\\\\u2192\\\",n)})),d(this,Ie,new xt({...e.heartbeatMs!==void 0?{timeoutMs:e.heartbeatMs}:{},onTimeout:()=>{f(this,h,pr).call(this)}}))}start(){if(i(this,Re))return!1;d(this,Re,!0);let e=i(this,B);if(e instanceof Document&&e.readyState===\\\"loading\\\"){let n=()=>{d(this,se,null),f(this,h,Gt).call(this)};return d(this,se,n),e.addEventListener(\\\"DOMContentLoaded\\\",n,{once:!0}),!0}return f(this,h,Gt).call(this),!0}destroy(){if(!i(this,Re))return;if(d(this,Re,!1),i(this,se)!==null){let n=i(this,B);n instanceof Document&&n.removeEventListener(\\\"DOMContentLoaded\\\",i(this,se)),d(this,se,null),i(this,E).emit(\\\"destroy\\\",{timestamp:Date.now()});return}for(let n of i(this,_e))clearTimeout(n);i(this,_e).length=0,i(this,Ie).stop(),i(this,Me).detach(),i(this,X).stop(),i(this,oe).destroy(),i(this,be)?.destroy(),i(this,A).clear();let e=i(this,J).status===\\\"connected\\\";i(this,J).markDisconnected(),e&&(i(this,Z)?.announceDisconnected(),i(this,E).emit(\\\"disconnect\\\",{reason:\\\"destroy\\\",timestamp:Date.now()})),i(this,Z)?.detach(),i(this,E).emit(\\\"destroy\\\",{timestamp:Date.now()})}refreshCache(){f(this,h,Yt).call(this)}get status(){return i(this,J).status}get cache(){return i(this,A)}get updateCount(){return i(this,st)}get protocol(){return i(this,Pe)}};E=new WeakMap,A=new WeakMap,X=new WeakMap,oe=new WeakMap,Me=new WeakMap,J=new WeakMap,Ie=new WeakMap,it=new WeakMap,B=new WeakMap,ye=new WeakMap,ge=new WeakMap,ot=new WeakMap,O=new WeakMap,Ne=new WeakMap,_e=new WeakMap,Z=new WeakMap,be=new WeakMap,N=new WeakMap,Ce=new WeakMap,Oe=new WeakMap,Pe=new WeakMap,Re=new WeakMap,se=new WeakMap,st=new WeakMap,at=new WeakMap,h=new WeakSet,Gt=function(){f(this,h,Wt).call(this),i(this,X).start(i(this,B)instanceof Document?i(this,B).body:i(this,B)),i(this,Me).attach(),f(this,h,rr).call(this);for(let e of Mi)if(e===0)i(this,ge).call(this,i(this,ye));else{let n=setTimeout(()=>{i(this,ge).call(this,i(this,ye))},e);i(this,_e).push(n)}},Wt=function(){let e=i(this,A).buildFromRoot(i(this,B));i(this,O).call(this,\\\"cache built\\\",e),i(this,E).emit(\\\"cacheRefresh\\\",e);for(let n of i(this,A).values())i(this,X).observeElement(n.element)},Yt=function(){for(let e of i(this,A).values())i(this,X).unobserveElement(e.element),i(this,oe).forget(e.element);f(this,h,Wt).call(this)},rr=function(){i(this,E).emit(\\\"init\\\",{timestamp:Date.now()})},ir=function(e){let n=Ut(e);n.negotiated!==i(this,Pe).negotiated&&(d(this,Pe,n),i(this,O).call(this,\\\"protocol negotiated\\\",`ours=${4}`,`theirs=${e}`,`negotiated=${n.negotiated}`))},or=function(e,n){i(this,Ie).kick(),e.protocolVersion!==void 0&&f(this,h,ir).call(this,e.protocolVersion),e.data!==void 0&&(i(this,J).markConnected()&&(i(this,Z)?.announceConnected(),i(this,E).emit(\\\"connect\\\",{origin:n,timestamp:Date.now()})),d(this,st,i(this,st)+1),e.locale!==void 0&&d(this,N,e.locale),e.fieldSchemaJSON!==void 0&&(d(this,Ce,e.fieldSchemaJSON),d(this,Oe,Bt(e.fieldSchemaJSON))),f(this,h,sr).call(this,e).then(r=>{if(r===null)return;let o={fields:r,...i(this,Ce)!==void 0?{schema:i(this,Ce)}:{},...e.globalSlug!==void 0?{globalSlug:e.globalSlug}:{},...e.collectionSlug!==void 0?{collectionSlug:e.collectionSlug}:{},...i(this,N)!==void 0?{locale:i(this,N)}:{}},s=!1;i(this,E).emit(\\\"beforeUpdate\\\",{data:o,cancel:()=>{s=!0}}).then(()=>{s||f(this,h,dr).call(this,o)})}))},sr=async function(e){let n=e.data??{};if(i(this,be)===null)return n;let r=await i(this,be).merge({collectionSlug:e.collectionSlug,globalSlug:e.globalSlug,data:n,locale:i(this,N)});return r.status===\\\"merged\\\"?r.doc:r.status===\\\"superseded\\\"?null:n},ar=function(e,n){i(this,E).emit(\\\"documentSave\\\",{timestamp:Date.now()})},dr=function(e){for(let[n,r]of i(this,A).entries()){let o=$i(e.fields,n,i(this,N));if(o!==void 0)for(let s of r){let a={target:s,value:o,allFields:e.fields};i(this,oe).schedule(a)}}f(this,h,lr).call(this,e.fields)},lr=function(e){if(i(this,A).elementCount===0)return;let n=new Set;for(let[r]of i(this,A).entries())n.add(r);for(let[r,o]of Object.entries(e)){if(i(this,at).has(r)||Pi.has(r)||!Fi(o))continue;let s=Di(r,i(this,N));n.has(r)||n.has(s)||(i(this,at).add(r),i(this,Ne).call(this,`[live-preview] update arrived for field \\\"${r}\\\" but no <\\\\u2026 data-payload-field=\\\"${s}\\\"> element exists on this page. Render the binding anchor unconditionally in your template so live edits to an initially-empty field have somewhere to land.`))}},ur=function(e){let n=i(this,Oe)!==void 0?jt(i(this,Oe),e.target.fieldName):void 0,r=f(this,h,cr).call(this,e.target,n?.type);r===\\\"text\\\"&&e.target.explicitFieldType!==!0&&_i(e.value)&&(r=\\\"richText\\\");let o=i(this,it)[r],s=Ui(e.target.element),a={allFields:e.allFields,locale:i(this,N),schema:n};try{e.target.targetAttribute!==void 0?Yn(e.target.element,e.target.targetAttribute,e.value)===\\\"blocked\\\"&&i(this,Ne).call(this,`[live-preview] refused to write field \\\"${e.target.fieldName}\\\" into attribute \\\"${e.target.targetAttribute}\\\" (unsafe attribute or value)`):o?o.render(e.target,e.value,a):i(this,O).call(this,\\\"no renderer for\\\",r)}catch(u){let m=u instanceof Error?u:new Error(String(u));i(this,E).emit(\\\"error\\\",{error:m,context:\\\"renderer\\\"});return}i(this,E).emit(\\\"elementUpdate\\\",{element:e.target.element,fieldName:e.target.fieldName,previousValue:s,nextValue:e.value})},cr=function(e,n){if(e.explicitFieldType)return e.fieldType;if(n!==void 0){let r=zt(n);if(r!==void 0)return r}return e.fieldType},fr=function(e){e.applied===0&&e.deferred===0||(e.applied>0&&i(this,Z)?.announceUpdate(e.applied),i(this,E).emit(\\\"afterUpdate\\\",{data:{fields:{},...i(this,N)!==void 0?{locale:i(this,N)}:{}},updatedCount:e.applied,durationMs:e.durationMs}))},pr=function(){var e;i(this,J).markDisconnected()&&(i(this,Z)?.announceDisconnected(),i(this,E).emit(\\\"disconnect\\\",{reason:\\\"timeout\\\",timestamp:Date.now()}));try{(e=i(this,ot))==null||e.call(this)}catch(n){i(this,O).call(this,\\\"onHeartbeatTimeout hook threw:\\\",n)}i(this,ge).call(this,i(this,ye))};function Ii(t){return t.enableA11y===!1?null:t.a11yLocale!==void 0?new tt(t.a11yLocale):new tt}function Ni(){}function _i(t){if(typeof t!=\\\"object\\\"||t===null||!(\\\"root\\\"in t))return!1;let e=t.root;return typeof e!=\\\"object\\\"||e===null?!1:Array.isArray(e.children)}function Ci(...t){typeof console<\\\"u\\\"&&typeof console.warn==\\\"function\\\"&&console.warn(...t)}function Oi(t){if(typeof window>\\\"u\\\")return;let e=[];window.parent!==window&&e.push(window.parent),window.opener instanceof Window&&e.push(window.opener),Ue.sendReady(e,t)}var mr=new Set([\\\"__proto__\\\",\\\"prototype\\\",\\\"constructor\\\"]),Pi=new Set([\\\"id\\\",\\\"_id\\\",\\\"createdAt\\\",\\\"updatedAt\\\",\\\"createdBy\\\",\\\"updatedBy\\\",\\\"_status\\\",\\\"globalType\\\",\\\"collection\\\",\\\"locale\\\",\\\"localized\\\"]);function Fi(t){return t==null?!1:typeof t==\\\"string\\\"||typeof t==\\\"number\\\"||typeof t==\\\"boolean\\\"||typeof t==\\\"bigint\\\"}function Di(t,e){if(!e)return t;let n=`_${e}`;return t.endsWith(n)?t.slice(0,-n.length):t}function $i(t,e,n){let r=nr(t,e);if(r!==void 0)return r;if(e.includes(\\\".\\\")){let o=e.split(\\\".\\\"),s=t;for(let a of o){if(mr.has(a)||s===null||typeof s!=\\\"object\\\")return;s=s[a]}if(s!==void 0)return s}if(n!==void 0){let o=nr(t,`${e}_${n}`);if(o!==void 0)return o}}function nr(t,e){if(!mr.has(e)&&Object.prototype.hasOwnProperty.call(t,e))return t[e]}function Ui(t){return t.tagName===\\\"INPUT\\\"||t.tagName===\\\"TEXTAREA\\\"?t.value:t.tagName===\\\"IMG\\\"?t.src:t.textContent}function dt(){if(typeof window>\\\"u\\\")return!1;try{return window.self!==window.top}catch{return!0}}function qt(){return typeof window>\\\"u\\\"?!1:window.opener!=null}function Kt(){return dt()||qt()}function hr(){let t=Hi();if(t!==void 0)return t!==\\\"production\\\";let e=Bi();if(e!==void 0)return e;if(typeof window<\\\"u\\\"){let n=window.location.hostname;if(n===\\\"localhost\\\"||n===\\\"127.0.0.1\\\")return!0}return!1}function yr(t){if(typeof process<\\\"u\\\"){let n=process.env[t];if(typeof n==\\\"string\\\"&&n.length>0)return n}let e=void 0;if(e){let n=e[t];if(typeof n==\\\"string\\\"&&n.length>0)return n}}function Hi(){if(typeof process>\\\"u\\\")return;let t=\\\"production\\\";return typeof t==\\\"string\\\"?t:void 0}function Bi(){let t=void 0;if(!t)return;let e=t.DEV;return typeof e==\\\"boolean\\\"?e:void 0}var ji=/^https?:\\\\/\\\\/(localhost|127\\\\.0\\\\.0\\\\.1)(?::\\\\d+)?$/i,Vi=/^https?:\\\\/\\\\/[^/?#\\\\s]+$/i,zi=[\\\"PAYLOAD_ADMIN_ORIGIN\\\",\\\"PUBLIC_PAYLOAD_ADMIN_ORIGIN\\\",\\\"NEXT_PUBLIC_PAYLOAD_ADMIN_ORIGIN\\\"],j,V,ae,lt,P,Mt=class{constructor(e={}){l(this,j);l(this,V);l(this,ae);l(this,lt);l(this,P);let n=new Set;for(let a of e.additionalOrigins??[]){let u=gr(a);u!==void 0&&n.add(u)}for(let a of zi){let u=yr(a);if(u!==void 0)for(let m of u.split(\\\",\\\")){let w=gr(m);w!==void 0&&n.add(w)}}d(this,j,n);let r=e.enableReferrerDetection??!0,o;if(r){let a=e.referrer??(typeof document<\\\"u\\\"?document.referrer:\\\"\\\");if(a.length>0)try{let u=new URL(a).origin;u&&u!==\\\"null\\\"&&(o=u)}catch{}}d(this,V,o),d(this,lt,o!==void 0);let s=(e.enableLocalhostMatching??!0)&&(e.forceDevMode??hr());d(this,ae,s)}matches(e){return e.length===0||e===\\\"null\\\"?!1:i(this,P)!==void 0?e===i(this,P):!!(i(this,j).has(e)||i(this,j).size===0&&i(this,V)!==void 0&&e===i(this,V)||i(this,ae)&&ji.test(e))}lockOrigin(e){return this.matches(e)?(d(this,P,e),!0):!1}unlockOrigin(){let e=i(this,P);return d(this,P,void 0),e}get lockedOrigin(){return i(this,P)}enumerate(){if(i(this,P)!==void 0)return[i(this,P)];let e=new Set(i(this,j));if(i(this,j).size===0&&i(this,V)!==void 0&&e.add(i(this,V)),i(this,ae))for(let n of Gi)e.add(`http://localhost:${String(n)}`),e.add(`http://127.0.0.1:${String(n)}`);return[...e]}get referrerWasAvailable(){return i(this,lt)}get isProductionUnconfigured(){return!(!dt()||i(this,j).size>0||i(this,ae)||i(this,V)!==void 0)}get isReferrerOnlyTrust(){return i(this,j).size>0||i(this,ae)?!1:i(this,V)!==void 0}};j=new WeakMap,V=new WeakMap,ae=new WeakMap,lt=new WeakMap,P=new WeakMap;var Gi=[3e3,3001,3333,4e3,4321,5e3,5173,5174,8e3,8080,8888,9e3];function gr(t){let e=t.trim();if(e.length!==0)try{let n=new URL(e);return n.protocol!==\\\"http:\\\"&&n.protocol!==\\\"https:\\\"||!Vi.test(n.origin)?void 0:n.origin}catch{return}}var br={name:\\\"payload-live-preview\\\",version:\\\"1.0.0\\\",description:\\\"Framework-agnostic live preview for Payload CMS \\\\u2014 Astro-first; works with Next.js, SvelteKit, Nuxt, and plain HTML.\\\",author:\\\"relative23\\\",license:\\\"MIT\\\",type:\\\"module\\\",main:\\\"./dist/index.cjs\\\",module:\\\"./dist/index.js\\\",types:\\\"./dist/index.d.ts\\\",exports:{\\\".\\\":{import:{types:\\\"./dist/index.d.ts\\\",default:\\\"./dist/index.js\\\"},require:{types:\\\"./dist/index.d.cts\\\",default:\\\"./dist/index.cjs\\\"}},\\\"./core\\\":{import:{types:\\\"./dist/core.d.ts\\\",default:\\\"./dist/core.js\\\"},require:{types:\\\"./dist/core.d.cts\\\",default:\\\"./dist/core.cjs\\\"}},\\\"./astro\\\":{import:{types:\\\"./dist/adapters/astro/index.d.ts\\\",default:\\\"./dist/adapters/astro/index.js\\\"}},\\\"./nextjs\\\":{import:{types:\\\"./dist/adapters/nextjs/index.d.ts\\\",default:\\\"./dist/adapters/nextjs/index.js\\\"}},\\\"./sveltekit\\\":{import:{types:\\\"./dist/adapters/sveltekit/index.d.ts\\\",default:\\\"./dist/adapters/sveltekit/index.js\\\"}},\\\"./nuxt\\\":{import:{types:\\\"./dist/adapters/nuxt/index.d.ts\\\",default:\\\"./dist/adapters/nuxt/index.js\\\"}},\\\"./codegen\\\":{import:{types:\\\"./dist/codegen.d.ts\\\",default:\\\"./dist/codegen.js\\\"},require:{types:\\\"./dist/codegen.d.cts\\\",default:\\\"./dist/codegen.cjs\\\"}},\\\"./codegen/astro\\\":{import:{types:\\\"./dist/codegen-astro.d.ts\\\",default:\\\"./dist/codegen-astro.js\\\"}},\\\"./payload\\\":{import:{types:\\\"./dist/payload.d.ts\\\",default:\\\"./dist/payload.js\\\"},require:{types:\\\"./dist/payload.d.cts\\\",default:\\\"./dist/payload.cjs\\\"}},\\\"./astro/RichText.astro\\\":\\\"./dist/adapters/astro/RichText.astro\\\",\\\"./astro/middleware-entry\\\":{import:{types:\\\"./dist/adapters/astro/middleware-entry.d.ts\\\",default:\\\"./dist/adapters/astro/middleware-entry.js\\\"}}},bin:{\\\"pll-codegen\\\":\\\"./dist/codegen-cli.js\\\"},files:[\\\"dist\\\",\\\"README.md\\\",\\\"LICENSE\\\"],sideEffects:!1,scripts:{prepare:\\\"npm run build:runtime\\\",\\\"build:runtime\\\":\\\"tsx scripts/build-runtime.ts\\\",build:\\\"npm run build:runtime && tsup && npm run build:assets\\\",\\\"build:assets\\\":`node -e \\\"require('node:fs').copyFileSync('src/adapters/astro/RichText.astro','dist/adapters/astro/RichText.astro')\\\"`,dev:\\\"tsup --watch\\\",test:\\\"vitest run\\\",\\\"test:watch\\\":\\\"vitest\\\",\\\"test:unit\\\":\\\"vitest run tests/unit\\\",\\\"test:integration\\\":\\\"vitest run tests/integration\\\",\\\"test:e2e\\\":\\\"playwright test\\\",\\\"test:bench\\\":\\\"vitest bench tests/benchmarks\\\",\\\"test:coverage\\\":\\\"vitest run --coverage\\\",typecheck:\\\"tsc --noEmit\\\",lint:\\\"eslint .\\\",\\\"lint:fix\\\":\\\"eslint . --fix\\\",format:'prettier --write \\\"src/**/*.ts\\\" \\\"tests/**/*.ts\\\"',\\\"format:check\\\":'prettier --check \\\"src/**/*.ts\\\" \\\"tests/**/*.ts\\\"',check:\\\"npm run typecheck && npm run lint && npm run test\\\",prepublishOnly:\\\"npm run check && npm run build\\\",changeset:\\\"changeset\\\",version:\\\"changeset version\\\",release:\\\"npm run build && changeset publish\\\"},devDependencies:{\\\"@changesets/cli\\\":\\\"^2.31.0\\\",\\\"@eslint/js\\\":\\\"^10.0.1\\\",\\\"@playwright/test\\\":\\\"^1.61.1\\\",\\\"@types/node\\\":\\\"^22.20.1\\\",\\\"@vitest/coverage-v8\\\":\\\"^4.1.10\\\",esbuild:\\\"^0.28.1\\\",eslint:\\\"^10.7.0\\\",globals:\\\"^17.7.0\\\",jsdom:\\\"^29.1.1\\\",prettier:\\\"^3.9.5\\\",\\\"ts-morph\\\":\\\"^28.0.0\\\",tsup:\\\"^8.5.1\\\",tsx:\\\"^4.23.0\\\",typescript:\\\"^5.9.3\\\",\\\"typescript-eslint\\\":\\\"^8.63.0\\\",vitest:\\\"^4.1.10\\\"},keywords:[\\\"payload\\\",\\\"payload-cms\\\",\\\"payload-live-preview\\\",\\\"live-preview\\\",\\\"cms\\\",\\\"headless\\\",\\\"astro\\\",\\\"nextjs\\\",\\\"sveltekit\\\",\\\"nuxt\\\",\\\"vue\\\",\\\"svelte\\\",\\\"schema-driven\\\",\\\"lexical\\\",\\\"csp-safe\\\",\\\"framework-agnostic\\\"],peerDependencies:{astro:\\\">=4.0.0 <8.0.0\\\",\\\"ts-morph\\\":\\\"^28.0.0\\\"},peerDependenciesMeta:{astro:{optional:!0},\\\"ts-morph\\\":{optional:!0}},engines:{node:\\\">=20.19.0\\\"},publishConfig:{access:\\\"public\\\",provenance:!0},repository:{type:\\\"git\\\",url:\\\"https://github.com/relative23/payload-live-preview.git\\\"},bugs:{url:\\\"https://github.com/relative23/payload-live-preview/issues\\\"},homepage:\\\"https://github.com/relative23/payload-live-preview#readme\\\"};var Rr=br.version;var Xt=new Set([\\\"p\\\",\\\"br\\\",\\\"strong\\\",\\\"b\\\",\\\"em\\\",\\\"i\\\",\\\"u\\\",\\\"s\\\",\\\"strike\\\",\\\"mark\\\",\\\"small\\\",\\\"h1\\\",\\\"h2\\\",\\\"h3\\\",\\\"h4\\\",\\\"h5\\\",\\\"h6\\\",\\\"ul\\\",\\\"ol\\\",\\\"li\\\",\\\"dl\\\",\\\"dt\\\",\\\"dd\\\",\\\"blockquote\\\",\\\"code\\\",\\\"pre\\\",\\\"kbd\\\",\\\"samp\\\",\\\"var\\\",\\\"a\\\",\\\"span\\\",\\\"div\\\",\\\"section\\\",\\\"article\\\",\\\"aside\\\",\\\"header\\\",\\\"footer\\\",\\\"nav\\\",\\\"figure\\\",\\\"figcaption\\\",\\\"img\\\",\\\"picture\\\",\\\"source\\\",\\\"audio\\\",\\\"video\\\",\\\"sub\\\",\\\"sup\\\",\\\"hr\\\",\\\"time\\\",\\\"abbr\\\",\\\"cite\\\",\\\"q\\\",\\\"table\\\",\\\"thead\\\",\\\"tbody\\\",\\\"tfoot\\\",\\\"tr\\\",\\\"th\\\",\\\"td\\\",\\\"caption\\\",\\\"colgroup\\\",\\\"col\\\"]),wr=new Set([\\\"script\\\",\\\"style\\\",\\\"iframe\\\",\\\"object\\\",\\\"embed\\\",\\\"link\\\",\\\"meta\\\",\\\"base\\\",\\\"form\\\",\\\"input\\\",\\\"button\\\",\\\"select\\\",\\\"textarea\\\",\\\"svg\\\",\\\"math\\\",\\\"template\\\",\\\"frame\\\",\\\"frameset\\\",\\\"noframes\\\",\\\"noscript\\\"]),xr=new Set([\\\"id\\\",\\\"class\\\",\\\"lang\\\",\\\"dir\\\",\\\"title\\\",\\\"role\\\",\\\"tabindex\\\"]),Yi=\\\"aria-\\\",qi=\\\"data-\\\",Jt={a:new Set([\\\"href\\\",\\\"target\\\",\\\"rel\\\",\\\"download\\\",\\\"hreflang\\\",\\\"type\\\"]),img:new Set([\\\"src\\\",\\\"srcset\\\",\\\"sizes\\\",\\\"alt\\\",\\\"width\\\",\\\"height\\\",\\\"loading\\\",\\\"decoding\\\"]),picture:new Set([]),source:new Set([\\\"src\\\",\\\"srcset\\\",\\\"sizes\\\",\\\"type\\\",\\\"media\\\"]),audio:new Set([\\\"src\\\",\\\"controls\\\",\\\"autoplay\\\",\\\"loop\\\",\\\"muted\\\",\\\"preload\\\"]),video:new Set([\\\"src\\\",\\\"poster\\\",\\\"controls\\\",\\\"autoplay\\\",\\\"loop\\\",\\\"muted\\\",\\\"preload\\\",\\\"width\\\",\\\"height\\\",\\\"playsinline\\\"]),time:new Set([\\\"datetime\\\"]),abbr:new Set([\\\"title\\\"]),q:new Set([\\\"cite\\\"]),blockquote:new Set([\\\"cite\\\"]),table:new Set([\\\"summary\\\"]),th:new Set([\\\"colspan\\\",\\\"rowspan\\\",\\\"scope\\\",\\\"headers\\\",\\\"abbr\\\"]),td:new Set([\\\"colspan\\\",\\\"rowspan\\\",\\\"headers\\\"]),col:new Set([\\\"span\\\"]),colgroup:new Set([\\\"span\\\"]),ol:new Set([\\\"start\\\",\\\"reversed\\\",\\\"type\\\"]),li:new Set([\\\"value\\\"]),code:new Set([\\\"class\\\"]),pre:new Set([\\\"class\\\"])},vr=new Set([\\\"href\\\",\\\"src\\\",\\\"cite\\\",\\\"poster\\\"]),Zt=class extends Error{constructor(){super(...arguments);$n(this,\\\"name\\\",\\\"SanitizerEnvironmentError\\\")}};function Ki(t){if(!t){let r=new Map;for(let[o,s]of Object.entries(Jt))r.set(o,s);return{allowedTags:Xt,attrByTag:r}}let e=new Set(Xt);for(let r of t.additionalAllowedTags??[])e.add(r);let n=new Map;for(let[r,o]of Object.entries(Jt))n.set(r,o);for(let[r,o]of Object.entries(t.additionalAllowedAttributes??{})){let s=n.get(r),a=new Set(s??[]);for(let u of o)a.add(u);n.set(r,a)}return{allowedTags:e,attrByTag:n}}var Tr;function z(t,e){let n=Er();if(!n)throw new Zt(\\\"sanitizeHtml requires a DOM. Inject one via setSanitizerDocument() for SSR (linkedom, jsdom, happy-dom, \\\\u2026) or use the plain-text path on the server.\\\");if(t===\\\"\\\")return\\\"\\\";let r=Ki(e),o=n.createElement(\\\"template\\\");return o.innerHTML=t,Qt(o.content,r),o.innerHTML}function Er(){if(Tr)return Tr;if(!(typeof document>\\\"u\\\"))return document}function kr(){return Er()!==void 0}function Qt(t,e){for(let n of Array.from(t.childNodes))n.nodeType===Node.ELEMENT_NODE?Xi(n,e):n.nodeType===Node.COMMENT_NODE&&n.remove()}function Xi(t,e){let n=t.tagName.toLowerCase();if(wr.has(n)){t.remove();return}if(!e.allowedTags.has(n)){Qt(t,e);let r=t.parentNode;if(r){for(;t.firstChild;)r.insertBefore(t.firstChild,t);t.remove()}return}Ji(t,n,e),n===\\\"a\\\"&&Qi(t),Qt(t,e)}function Ji(t,e,n){let r=n.attrByTag.get(e);for(let o of Array.from(t.attributes)){let s=o.name.toLowerCase();if(s.startsWith(\\\"on\\\")){t.removeAttribute(o.name);continue}if(s===\\\"style\\\"){t.removeAttribute(o.name);continue}if(!(xr.has(s)||s.startsWith(Yi)||s.startsWith(qi))){if(r?.has(s)){(vr.has(s)&&!R(o.value)||s===\\\"srcset\\\"&&!Zi(o.value))&&t.removeAttribute(o.name);continue}t.removeAttribute(o.name)}}}function Zi(t){let e=t.split(\\\",\\\");for(let n of e){let r=n.trim();if(r.length===0)continue;let o=r.split(/\\\\s+/,1)[0];if(o===void 0||o.length===0||!R(o))return!1}return!0}function Qi(t){let e=t.getAttribute(\\\"href\\\");e&&kt(e)&&(t.setAttribute(\\\"rel\\\",\\\"noopener noreferrer\\\"),t.hasAttribute(\\\"target\\\")||t.setAttribute(\\\"target\\\",\\\"_blank\\\"))}var Ws=Object.freeze({allowedTags:Xt,removeCompletely:wr,globalAttributes:xr,attributesByTag:Jt,urlAttributes:vr});var Sr=new Map;function p(t,e){Sr.set(t,e)}function Ar(t){return Sr.get(t)}var eo={1:\\\"left\\\",2:\\\"center\\\",3:\\\"right\\\",4:\\\"justify\\\"},to=new Set([\\\"left\\\",\\\"center\\\",\\\"right\\\",\\\"justify\\\",\\\"start\\\",\\\"end\\\"]);function en(t){let e=t.format;if(typeof e==\\\"string\\\"&&to.has(e))return e;if(typeof e==\\\"number\\\"){let n=eo[e];if(n!==void 0)return n}}function tn(t){let e=t.indent;return typeof e==\\\"number\\\"&&e>0?e:0}function Q(t){return t.direction===\\\"rtl\\\"?' dir=\\\"rtl\\\"':t.direction===\\\"ltr\\\"?' dir=\\\"ltr\\\"':\\\"\\\"}function G(t){let e=en(t),n=tn(t),r=[];return e!==void 0&&r.push(`text-align:${e}`),n>0&&r.push(`padding-inline-start:${String(n*40)}px`),r.length===0?\\\"\\\":` style=\\\"${r.join(\\\";\\\")}\\\"`}var no=Object.freeze({\\\"&\\\":\\\"&amp;\\\",\\\"<\\\":\\\"&lt;\\\",\\\">\\\":\\\"&gt;\\\",'\\\"':\\\"&quot;\\\",\\\"'\\\":\\\"&#x27;\\\",\\\"/\\\":\\\"&#x2F;\\\",\\\"`\\\":\\\"&#x60;\\\",\\\"=\\\":\\\"&#x3D;\\\"}),ro=/[&<>\\\"'/`=]/g;function g(t){return t===\\\"\\\"?\\\"\\\":t.replace(ro,e=>no[e])}function Lr(t){return t.replace(/['\\\"()\\\\\\\\]/g,\\\"\\\\\\\\$&\\\")}var io=Object.freeze({\\\"&\\\":\\\"&amp;\\\",\\\"<\\\":\\\"&lt;\\\",\\\">\\\":\\\"&gt;\\\",'\\\"':\\\"&quot;\\\",\\\"'\\\":\\\"&#x27;\\\"}),oo=/[&<>\\\"']/g;function L(t){return t===\\\"\\\"?\\\"\\\":t.replace(oo,e=>io[e])}function It(t){return g(t).replace(/\\\\r\\\\n|\\\\r|\\\\n/g,\\\"<br>\\\")}var ee={BOLD:1,ITALIC:2,STRIKETHROUGH:4,UNDERLINE:8,CODE:16,SUBSCRIPT:32,SUPERSCRIPT:64,HIGHLIGHT:128};var nn=t=>{let e=typeof t.text==\\\"string\\\"?t.text:\\\"\\\",n=g(e),r=typeof t.format==\\\"number\\\"?t.format:0;return(r&ee.CODE)!==0&&(n=`<code>${n}</code>`),(r&ee.BOLD)!==0&&(n=`<strong>${n}</strong>`),(r&ee.ITALIC)!==0&&(n=`<em>${n}</em>`),(r&ee.UNDERLINE)!==0&&(n=`<u>${n}</u>`),(r&ee.STRIKETHROUGH)!==0&&(n=`<s>${n}</s>`),(r&ee.SUBSCRIPT)!==0&&(n=`<sub>${n}</sub>`),(r&ee.SUPERSCRIPT)!==0&&(n=`<sup>${n}</sup>`),(r&ee.HIGHLIGHT)!==0&&(n=`<mark>${n}</mark>`),n};p(\\\"text\\\",nn);var rn=(t,e)=>{let n=e.renderChildren(t.children??[]);return`<p${Q(t)}${G(t)}>${n}</p>`};p(\\\"paragraph\\\",rn);var so=new Set([\\\"h1\\\",\\\"h2\\\",\\\"h3\\\",\\\"h4\\\",\\\"h5\\\",\\\"h6\\\"]),on=(t,e)=>{let n=typeof t.tag==\\\"string\\\"?t.tag.toLowerCase():\\\"h2\\\",r=so.has(n)?n:\\\"h2\\\",o=e.renderChildren(t.children??[]);return`<${r}${Q(t)}${G(t)}>${o}</${r}>`};p(\\\"heading\\\",on);var sn=(t,e)=>{let n=typeof t.listType==\\\"string\\\"?t.listType:\\\"bullet\\\",r=n===\\\"number\\\"?\\\"ol\\\":\\\"ul\\\",o=n===\\\"number\\\"&&typeof t.start==\\\"number\\\"&&t.start>1?` start=\\\"${String(t.start)}\\\"`:\\\"\\\",s=n===\\\"check\\\"?' role=\\\"list\\\"':\\\"\\\",a=e.renderChildren(t.children??[]);return`<${r}${Q(t)}${G(t)}${o}${s}>${a}</${r}>`},an=(t,e)=>{let n=e.renderChildren(t.children??[]);if(typeof t.checked==\\\"boolean\\\")return`<li role=\\\"checkbox\\\" aria-checked=\\\"${t.checked?\\\"true\\\":\\\"false\\\"}\\\"${G(t)}>${n}</li>`;let r=typeof t.value==\\\"number\\\"?` value=\\\"${g(String(t.value))}\\\"`:\\\"\\\";return`<li${Q(t)}${G(t)}${r}>${n}</li>`};p(\\\"list\\\",sn);p(\\\"listitem\\\",an);var ut=(t,e)=>{let n=typeof t.url==\\\"string\\\"?t.url:\\\"\\\",r=e.renderChildren(t.children??[]);if(n.length===0||!R(n))return r;let o=kt(n)?' target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\"':ao(t),s=typeof t.title==\\\"string\\\"?` title=\\\"${g(t.title)}\\\"`:\\\"\\\";return`<a href=\\\"${L(n)}\\\"${o}${s}>${r}</a>`};function ao(t){let e=typeof t.target==\\\"string\\\"?t.target:\\\"\\\";if(e.length===0)return\\\"\\\";let n=g(e);return e===\\\"_blank\\\"?' target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\"':` target=\\\"${n}\\\"`}p(\\\"link\\\",ut);p(\\\"autolink\\\",ut);var dn=(t,e)=>{let n=e.renderChildren(t.children??[]);return`<blockquote${Q(t)}${G(t)}>${n}</blockquote>`};p(\\\"quote\\\",dn);var ln=t=>{let e=Ir(typeof t.language==\\\"string\\\"?t.language:\\\"\\\"),n=Mr(t);return`<pre><code${e===\\\"\\\"?\\\"\\\":` class=\\\"language-${e}\\\"`}>${g(n)}</code></pre>`},un=t=>{let e=typeof t.text==\\\"string\\\"?t.text:\\\"\\\";return`<span${typeof t.highlightType==\\\"string\\\"?` class=\\\"token-${Ir(t.highlightType)}\\\"`:\\\"\\\"}>${g(e)}</span>`};p(\\\"code\\\",ln);p(\\\"code-highlight\\\",un);function Mr(t){if(typeof t.text==\\\"string\\\")return t.text;if(!t.children)return\\\"\\\";let e=\\\"\\\";for(let n of t.children)e+=Mr(n);return e}function Ir(t){return t.replace(/[^a-zA-Z0-9_-]/g,\\\"\\\")}var cn=()=>\\\"<br>\\\",fn=()=>\\\"<hr>\\\",pn=()=>\\\"\\t\\\";p(\\\"linebreak\\\",cn);p(\\\"horizontalrule\\\",fn);p(\\\"tab\\\",pn);var mn=t=>{let e=lo(t);if(e===void 0)return\\\"\\\";let n=e.url;if(typeof n!=\\\"string\\\"||!R(n))return\\\"\\\";let r=typeof e.mimeType==\\\"string\\\"?e.mimeType:\\\"\\\";return r.startsWith(\\\"video/\\\")?co(e,n):r.startsWith(\\\"audio/\\\")?fo(e,n):r===\\\"\\\"||r.startsWith(\\\"image/\\\")?uo(e,n):po(e,n)};p(\\\"upload\\\",mn);function lo(t){let e=t.value;if(!(typeof e!=\\\"object\\\"||e===null))return e}function uo(t,e){let n=typeof t.alt==\\\"string\\\"?g(t.alt):\\\"\\\",r=typeof t.width==\\\"number\\\"?` width=\\\"${String(t.width)}\\\"`:\\\"\\\",o=typeof t.height==\\\"number\\\"?` height=\\\"${String(t.height)}\\\"`:\\\"\\\";return`<img src=\\\"${L(e)}\\\" alt=\\\"${n}\\\"${r}${o} loading=\\\"lazy\\\" decoding=\\\"async\\\">`}function co(t,e){let n=typeof t.width==\\\"number\\\"?` width=\\\"${String(t.width)}\\\"`:\\\"\\\",r=typeof t.height==\\\"number\\\"?` height=\\\"${String(t.height)}\\\"`:\\\"\\\",o=typeof t.mimeType==\\\"string\\\"?` type=\\\"${L(t.mimeType)}\\\"`:\\\"\\\";return`<video controls${n}${r}><source src=\\\"${L(e)}\\\"${o}></video>`}function fo(t,e){let n=typeof t.mimeType==\\\"string\\\"?` type=\\\"${L(t.mimeType)}\\\"`:\\\"\\\";return`<audio controls><source src=\\\"${L(e)}\\\"${n}></audio>`}function po(t,e){let n=typeof t.filename==\\\"string\\\"?g(t.filename):g(e);return`<a href=\\\"${L(e)}\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">${n}</a>`}var hn=t=>{let e=typeof t.relationTo==\\\"string\\\"?t.relationTo:\\\"\\\",n=mo(t),r=ho(n,e),o=g(r),s=e===\\\"\\\"?\\\"\\\":` data-relation-to=\\\"${g(e)}\\\"`,a=n?.url;return typeof a==\\\"string\\\"&&R(a)?`<a href=\\\"${L(a)}\\\"${s}>${o}</a>`:`<span${s}>${o}</span>`};p(\\\"relationship\\\",hn);function mo(t){let e=t.value;if(!(typeof e!=\\\"object\\\"||e===null))return e}function ho(t,e){return t===void 0?e===\\\"\\\"?\\\"#\\\":`#${e}`:typeof t.title==\\\"string\\\"&&t.title.length>0?t.title:typeof t.name==\\\"string\\\"&&t.name.length>0?t.name:typeof t.slug==\\\"string\\\"&&t.slug.length>0?t.slug:t.id!==void 0?String(t.id):e===\\\"\\\"?\\\"#\\\":`#${e}`}var yo=new Map;function yn(t){return yo.get(t)}var gn=(t,e)=>{let n=go(t),r=typeof n.blockType==\\\"string\\\"?n.blockType:\\\"\\\",o=Nr(r);if(r!==\\\"\\\"){let u=yn(r)??yn(o);if(u)return u(n,{renderChildren:e.renderChildren})}let s=[];o!==\\\"\\\"&&s.push(`data-block-type=\\\"${g(o)}\\\"`);for(let[u,m]of Object.entries(n)){if(u===\\\"blockType\\\"||u===\\\"id\\\"||m==null)continue;let w=typeof m==\\\"string\\\"||typeof m==\\\"number\\\"||typeof m==\\\"boolean\\\"?String(m):JSON.stringify(m);s.push(`data-block-${Nr(u)}=\\\"${g(w)}\\\"`)}return`<div${s.length===0?\\\"\\\":` ${s.join(\\\" \\\")}`}></div>`};p(\\\"block\\\",gn);function go(t){let e=t.fields;return typeof e!=\\\"object\\\"||e===null?{}:e}function Nr(t){return t.replace(/[^a-zA-Z0-9_-]/g,\\\"-\\\").toLowerCase()}p(\\\"text\\\",nn);p(\\\"paragraph\\\",rn);p(\\\"heading\\\",on);p(\\\"list\\\",sn);p(\\\"listitem\\\",an);p(\\\"link\\\",ut);p(\\\"autolink\\\",ut);p(\\\"quote\\\",dn);p(\\\"code\\\",ln);p(\\\"code-highlight\\\",un);p(\\\"linebreak\\\",cn);p(\\\"horizontalrule\\\",fn);p(\\\"tab\\\",pn);p(\\\"upload\\\",mn);p(\\\"relationship\\\",hn);p(\\\"block\\\",gn);var bo={renderChildren:bn,resolveAlignment:en,resolveIndent:tn};function de(t){if(typeof t!=\\\"object\\\"||t===null||!(\\\"root\\\"in t))return!1;let e=t.root;return typeof e!=\\\"object\\\"||e===null||!(\\\"children\\\"in e)?!1:Array.isArray(e.children)}function _r(t,e={}){if(!de(t))return\\\"\\\";let n=bn(t.root.children);return e.sanitize===!1||!kr()?n:z(n)}function Nt(t){return de(t)?t.root.children.map(Cr).join(`\\n`).trim():\\\"\\\"}function bn(t){let e=\\\"\\\";for(let n of t)e+=Ro(n);return e}function Ro(t){let e=Ar(t.type);return e?e(t,bo):t.children!==void 0?bn(t.children):\\\"\\\"}function Cr(t){if(typeof t.text==\\\"string\\\")return t.text;if(t.type===\\\"linebreak\\\")return`\\n`;if(t.children===void 0)return\\\"\\\";let e=\\\"\\\";for(let n of t.children)e+=Cr(n);return e}var Rn=new Map;function Or(t=[]){for(let n of t)Rn.set(n.name,n);let e={};for(let[n,r]of Rn)e[n]=r;return Object.freeze(e)}function y(t){Rn.set(t.name,t)}var To=\\\"data-payload-text\\\",Pr=new WeakSet,Tn={name:\\\"text\\\",render(t,e){let n=t.element,r=vo(e);if(n.tagName===\\\"INPUT\\\"||n.tagName===\\\"TEXTAREA\\\"){n.value=r;return}if(wo(n)&&!n.hasAttribute(To)){xo(n,t.fieldName);return}if(r.includes(`\\n`)||r.includes(\\\"\\\\r\\\")){n.innerHTML=It(r);return}n.textContent=r}};function wo(t){return t.firstElementChild!==null}function xo(t,e){Pr.has(t)||(Pr.add(t),console.warn(`[live-preview] Skipping text update for \\\"${e}\\\" \\\\u2014 the bound <${t.tagName.toLowerCase()}> has structured child elements. Either move data-payload-field to the element whose textContent is the field value, or opt in with data-payload-text to replace the structure.`))}function vo(t){return t==null?\\\"\\\":de(t)?Nt(t):typeof t==\\\"string\\\"?t:typeof t==\\\"number\\\"||typeof t==\\\"boolean\\\"?String(t):JSON.stringify(t)}y(Tn);function T(t){if(t==null)return\\\"\\\";if(typeof t==\\\"string\\\")return t;if(typeof t==\\\"number\\\"||typeof t==\\\"boolean\\\"||typeof t==\\\"bigint\\\")return String(t);try{return JSON.stringify(t)}catch{return\\\"\\\"}}var wn={name:\\\"textarea\\\",render(t,e){let n=t.element,r=de(e)?Nt(e):T(e);if(n.tagName===\\\"INPUT\\\"||n.tagName===\\\"TEXTAREA\\\"){n.value=r;return}n.innerHTML=It(r)}};y(wn);var xn={name:\\\"richText\\\",render(t,e){if(de(e)){t.element.innerHTML=_r(e);return}typeof e==\\\"string\\\"&&(t.element.innerHTML=z(e))}};y(xn);var vn={name:\\\"html\\\",render(t,e){if(e==null){t.element.textContent=\\\"\\\";return}let n=typeof e==\\\"string\\\"?e:T(e);t.element.innerHTML=z(n)}};y(vn);var ct={name:\\\"url\\\",render(t,e,n){let r=t.element,o=T(e);if(r.tagName===\\\"A\\\"){let s=r,a=t.hrefField,u=a?n.allFields[a]:e;typeof u==\\\"string\\\"&&R(u)&&(s.href=u),s.textContent=o;return}if(r.tagName===\\\"INPUT\\\"||r.tagName===\\\"TEXTAREA\\\"){r.value=o;return}r.textContent=o}};y(ct);y({...ct,name:\\\"email\\\"});var En={name:\\\"image\\\",render(t,e,n){let r=t.element,o=Eo(e),s=ko(o,e);if(s!==void 0){if(r.tagName===\\\"IMG\\\"){let a=r;a.src=s;let u=So(o,t.altField,n.allFields);u!==void 0&&(a.alt=u);return}r.style.backgroundImage=`url('${Lr(s)}')`}}};function Eo(t){if(!(typeof t!=\\\"object\\\"||t===null))return t}function ko(t,e){if(t?.url!==void 0&&R(t.url))return t.url;if(typeof e==\\\"string\\\"&&R(e))return e}function So(t,e,n){if(t?.alt!==void 0)return t.alt;if(e!==void 0){let r=n[e];if(typeof r==\\\"string\\\")return r}}y(En);var kn={name:\\\"upload\\\",render(t,e){let n=t.element,r=Ao(e);if(r===void 0)return;let o=r.url;if(typeof o!=\\\"string\\\"||!R(o))return;if(n.tagName===\\\"IMG\\\"){let a=n;a.src=o,r.alt!==void 0&&(a.alt=r.alt);return}if(n.tagName===\\\"A\\\"){let a=n;a.href=o,a.textContent=r.filename??o;return}let s=r.filename!==void 0?g(r.filename):g(o);n.innerHTML=`<a href=\\\"${L(o)}\\\">${s}</a>`}};function Ao(t){if(!(typeof t!=\\\"object\\\"||t===null))return t}y(kn);var Sn={name:\\\"relationship\\\",render(t,e){let n=t.element,o=Lo(e).join(\\\", \\\");if(n.tagName===\\\"A\\\"&&!Array.isArray(e)){let s=n,a=e?.url;typeof a==\\\"string\\\"&&R(a)&&(s.href=a),s.textContent=o;return}n.textContent=o}};function Lo(t){return t==null?[\\\"\\\"]:Array.isArray(t)?t.map(Fr):[Fr(t)]}function Fr(t){if(typeof t==\\\"object\\\"&&t!==null){let e=t;return typeof e.title==\\\"string\\\"&&e.title.length>0?e.title:typeof e.name==\\\"string\\\"&&e.name.length>0?e.name:typeof e.slug==\\\"string\\\"&&e.slug.length>0?e.slug:e.id!==void 0?String(e.id):\\\"\\\"}return T(t)}y(Sn);var ft={name:\\\"select\\\",render(t,e){let n=t.element,r=Dr(e);if(n.tagName===\\\"SELECT\\\"){n.value=r;return}if(n.tagName===\\\"INPUT\\\"&&n.type===\\\"radio\\\"){let o=n;o.checked=o.value===r;return}n.textContent=r}};function Dr(t){return Array.isArray(t)?t.map(e=>Dr(e)).join(\\\", \\\"):T(t)}y(ft);y({...ft,name:\\\"radio\\\"});var An={name:\\\"checkbox\\\",render(t,e){let n=t.element,r=!!e;if(n.tagName===\\\"INPUT\\\"&&n.type===\\\"checkbox\\\"){n.checked=r;return}if(n.hasAttribute(\\\"aria-checked\\\")){n.setAttribute(\\\"aria-checked\\\",r?\\\"true\\\":\\\"false\\\");return}n.textContent=r?\\\"true\\\":\\\"false\\\"}};y(An);var pt=new Map,mt=new Map,Mo=64,Io=Mo;function $r(t,e){let n=Hr(t,e),r=pt.get(n);if(r!==void 0)return pt.delete(n),pt.set(n,r),r;let o=new Intl.NumberFormat(t,e);return pt.set(n,o),Br(pt),o}function Ur(t,e){let n=Hr(t,e),r=mt.get(n);if(r!==void 0)return mt.delete(n),mt.set(n,r),r;let o=new Intl.DateTimeFormat(t,e);return mt.set(n,o),Br(mt),o}function Hr(t,e){let n=t??\\\"\\\";if(e==null)return n;let r=Ln(e);return r===\\\"{}\\\"?n:`${n}|${r}`}function Ln(t){if(t===null||typeof t!=\\\"object\\\")return JSON.stringify(t);if(Array.isArray(t))return`[${t.map(o=>Ln(o)).join(\\\",\\\")}]`;let e=t,n=Object.keys(e).sort(),r=[];for(let o of n){let s=e[o];s!==void 0&&r.push(`${JSON.stringify(o)}:${Ln(s)}`)}return`{${r.join(\\\",\\\")}}`}function Br(t){for(;t.size>Io;){let e=t.keys().next().value;if(e===void 0)break;t.delete(e)}}var Mn={name:\\\"date\\\",render(t,e,n){let r=t.element;if(e==null||e===\\\"\\\"){r.tagName===\\\"INPUT\\\"?r.value=\\\"\\\":(r.tagName===\\\"TIME\\\"&&r.removeAttribute(\\\"datetime\\\"),r.textContent=\\\"\\\");return}let o=typeof e==\\\"string\\\"?e:T(e),s=new Date(o),a=!Number.isNaN(s.getTime());if(r.tagName===\\\"INPUT\\\"){r.value=a?No(r.type,s):o;return}if(r.tagName===\\\"TIME\\\"){r.setAttribute(\\\"datetime\\\",a?s.toISOString():o),r.textContent=a?jr(s,n):o;return}r.textContent=a?jr(s,n):o}};function jr(t,e){let n=e.locale??Le();try{return Ur(n,{dateStyle:\\\"medium\\\",timeStyle:\\\"short\\\"}).format(t)}catch{return t.toISOString()}}function No(t,e){return t===\\\"date\\\"?e.toISOString().slice(0,10):t===\\\"datetime-local\\\"?e.toISOString().slice(0,16):e.toISOString()}y(Mn);var In={name:\\\"number\\\",render(t,e,n){let r=t.element;if(e==null||e===\\\"\\\"){r.tagName===\\\"INPUT\\\"?r.value=\\\"\\\":r.textContent=\\\"\\\";return}let o=typeof e==\\\"number\\\"?e:Number(T(e));if(Number.isNaN(o)){r.textContent=T(e);return}if(r.tagName===\\\"INPUT\\\"){r.value=String(o);return}r.textContent=_o(o,n)}};function _o(t,e){let n=e.locale??Le();try{return $r(n).format(t)}catch{return String(t)}}y(In);var ht={name:\\\"array\\\",render(t,e){let n=t.element;if(!Array.isArray(e))return;let r=t.arrayTemplate;if(r!==void 0&&r.length>0){let s=Co(r,e);n.innerHTML=z(s);return}let o=t.arraySeparator??\\\", \\\";n.textContent=e.map(Fo).join(o)}};function Co(t,e){let n=\\\"\\\";for(let r=0;r<e.length;r+=1)n+=Oo(t,e[r],r);return n}function Oo(t,e,n){let r=t;if(typeof e==\\\"object\\\"&&e!==null)for(let[o,s]of Object.entries(e)){let a=new RegExp(`\\\\\\\\{\\\\\\\\{${Po(o)}\\\\\\\\}\\\\\\\\}`,\\\"g\\\");r=r.replace(a,g(T(s)))}else r=r.replace(/\\\\{\\\\{value\\\\}\\\\}/g,g(T(e)));return r=r.replace(/\\\\{\\\\{index\\\\}\\\\}/g,String(n)),r}function Po(t){return t.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g,\\\"\\\\\\\\$&\\\")}function Fo(t){return T(t)}y(ht);y({...ht,name:\\\"blocks\\\"});function Do(){return typeof document>\\\"u\\\"?!1:typeof document.startViewTransition==\\\"function\\\"}async function Vr(t){if(!Do()){t();return}let n=document.startViewTransition.call(document,t);try{await n.finished}catch{}}var Yr=\\\"data-payload-key\\\",yt=\\\"data-payload-nested-key\\\",Cn=\\\"data-payload-nested-template\\\",zr=new WeakMap;function Ct(t){let{template:e,container:n,patches:r}=t,o=Uo(n),s=[],a=[],u=[],m=[],w=[];for(let c of r)c.kind===\\\"remove\\\"?s.push(c):c.kind===\\\"insert\\\"?a.push(c):c.kind===\\\"move\\\"?u.push(c):c.kind===\\\"update\\\"?m.push(c):w.push(c);s.sort((c,b)=>_t(b)-_t(c));for(let c of s){if(c.kind!==\\\"remove\\\")continue;n.children[c.index]?.remove(),Ho(o,c.value)}for(let c of w){if(c.kind!==\\\"replace\\\")continue;let b=n.children[c.index],x=_n(e,c.value,c.index);!b||!x||(Gr(x,c.value),n.replaceChild(x,b),Nn(o,c.value))}for(let c of m){if(c.kind!==\\\"update\\\")continue;let b=n.children[c.index],x=_n(e,c.value,c.index);!b||!x||($o(b,x,c.value,o),n.replaceChild(x,b),Nn(o,c.value))}a.sort((c,b)=>_t(c)-_t(b));for(let c of a){if(c.kind!==\\\"insert\\\")continue;let b=n.children[c.index]??null,x=_n(e,c.value,c.index);x&&(Gr(x,c.value),n.insertBefore(x,b),Nn(o,c.value))}for(let c of u){if(c.kind!==\\\"move\\\")continue;let b=gt(c.value),x=b!==void 0?Bo(n,b):null;if(!x)continue;let Fe=n.children[c.to]??null;x!==Fe&&n.insertBefore(x,Fe)}}function Gr(t,e){let n=t.querySelectorAll(`[${yt}]`);for(let r of Array.from(n)){let o=r.getAttribute(yt);if(o===null)continue;let s=r.getAttribute(Cn);if(!s)continue;let a=On(e,o);if(a===void 0)continue;let u=rt([],a);u.length!==0&&Ct({template:s,container:r,patches:u,nextItems:a})}}function $o(t,e,n,r){let o=t.querySelectorAll(`[${yt}]`);if(o.length===0)return;let s=gt(n),a=s!==void 0?r.get(s):void 0;for(let u of Array.from(o)){let m=u.getAttribute(yt);if(m===null)continue;let w=e.querySelector(`[${yt}=\\\"${qr(m)}\\\"]`);if(!w)continue;w.replaceWith(u);let c=u.getAttribute(Cn)??w.getAttribute(Cn);if(!c)continue;let b=On(n,m)??[],x=On(a,m)??[],Fe=rt(x,b);Fe.length!==0&&Ct({template:c,container:u,patches:Fe,nextItems:b})}}function On(t,e){if(typeof t!=\\\"object\\\"||t===null)return;let n=t[e];if(Array.isArray(n))return n}function Uo(t){let e=zr.get(t);return e||(e=new Map,zr.set(t,e)),e}function Nn(t,e){let n=gt(e);n!==void 0&&t.set(n,e)}function Ho(t,e){let n=gt(e);n!==void 0&&t.delete(n)}function _t(t){return t.kind===\\\"move\\\"?t.to:t.index}function gt(t){if(typeof t!=\\\"object\\\"||t===null)return;let e=t.id;if(typeof e==\\\"string\\\"||typeof e==\\\"number\\\")return String(e)}function Bo(t,e){return t.querySelector(`[${Yr}=\\\"${qr(e)}\\\"]`)}function qr(t){let e=globalThis.CSS;return e?.escape?e.escape(t):t.replace(/[^a-zA-Z0-9_-]/g,\\\"\\\\\\\\$&\\\")}function _n(t,e,n){if(typeof document>\\\"u\\\")return null;let r=jo(t,e,n),o=z(r),s=document.createElement(\\\"template\\\");s.innerHTML=o;let a=s.content.firstElementChild;if(!a)return null;let u=gt(e);return u!==void 0&&a.setAttribute(Yr,u),a}function jo(t,e,n){let r=t;if(typeof e==\\\"object\\\"&&e!==null)for(let[o,s]of Object.entries(e)){let a=new RegExp(`\\\\\\\\{\\\\\\\\{${Vo(o)}\\\\\\\\}\\\\\\\\}`,\\\"g\\\"),u=g(Wr(s));r=r.replace(a,()=>u)}else{let o=g(Wr(e));r=r.replace(/\\\\{\\\\{value\\\\}\\\\}/g,()=>o)}return r.replace(/\\\\{\\\\{index\\\\}\\\\}/g,String(n))}function Wr(t){return t==null?\\\"\\\":typeof t==\\\"string\\\"?t:typeof t==\\\"number\\\"||typeof t==\\\"boolean\\\"||typeof t==\\\"bigint\\\"?String(t):JSON.stringify(t)}function Vo(t){return t.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g,\\\"\\\\\\\\$&\\\")}var Pn=new WeakMap,Kr=new WeakSet,Fn={name:\\\"structural-array\\\",render(t,e){if(!Array.isArray(e))return;let n=t.element,r=t.arrayTemplate;if(r===void 0||r.length===0){zo(n,t.fieldName);return}let o=Pn.get(n)??[],s=rt(o,e);if(s.length===0){Pn.set(n,e.slice());return}Vr(()=>{Ct({template:r,container:n,patches:s,nextItems:e})}),Pn.set(n,e.slice())}};function zo(t,e){Kr.has(t)||(Kr.add(t),console.warn(`[live-preview] Skipping structural update for \\\"${e}\\\" \\\\u2014 the <${t.tagName.toLowerCase()}> with data-payload-structural is missing data-payload-array-template. Add an inline template (e.g., data-payload-array-template=\\\"<li>{{label}}</li>\\\") so the renderer can materialise new items.`))}y(Fn);var Go=[Tn,wn,xn,vn,ct,{...ct,name:\\\"email\\\"},En,kn,Sn,ft,{...ft,name:\\\"radio\\\"},An,Mn,In,ht,{...ht,name:\\\"blocks\\\"},Fn];function Xr(){return Or(Go)}function Wo(){if(typeof window>\\\"u\\\"||!Kt())return;let t=window.__livePreview;if(t!==void 0)return t;let e=Yo(),n=new Mt({additionalOrigins:e.additionalOrigins,enableReferrerDetection:!e.disableReferrerDetection,enableLocalhostMatching:!e.disableLocalhostMatching});n.isProductionUnconfigured?console.warn(\\\"[live-preview] No trusted origin could be detected. Set the PAYLOAD_ADMIN_ORIGIN env var or pass `allowedOrigins` to generateInlineScript().\\\"):n.isReferrerOnlyTrust&&console.warn(\\\"[live-preview] Trusting the embedding page via document.referrer only \\\\u2014 any site that frames this page could post preview updates. Pass explicit `allowedOrigins` and serve a `frame-ancestors` CSP for production.\\\");let r=new bt,o=Xr(),s=new Lt({renderers:o,originMatcher:u=>n.matches(u),readyTargets:n.enumerate(),emitter:r,...typeof e.serverURL==\\\"string\\\"&&e.serverURL!==\\\"\\\"?{dataMerge:{serverURL:e.serverURL,...typeof e.apiRoute==\\\"string\\\"?{apiRoute:e.apiRoute}:{},...typeof e.mergeDepth==\\\"number\\\"?{depth:e.mergeDepth}:{}}}:{},debounceMs:e.debounceMs,heartbeatMs:e.heartbeatMs,intersectionRootMargin:e.intersectionRootMargin,disableVisibilityGate:e.disableVisibilityGate,visibilityGateThreshold:e.visibilityGateThreshold,enableA11y:e.enableA11y,onHeartbeatTimeout:()=>{n.unlockOrigin()},...e.debug?{log:(...u)=>{console.debug(\\\"[live-preview]\\\",...u)}}:{}});r.on(\\\"connect\\\",u=>{n.lockOrigin(u.origin)}),s.start();let a=Object.freeze({version:Rr,destroy:()=>{s.destroy()},refresh:()=>{s.refreshCache()},enumerateOrigins:()=>n.enumerate()});return Object.defineProperty(window,\\\"__livePreview\\\",{value:a,writable:!1,configurable:!0}),a}function Yo(){let t=typeof __LIVE_PREVIEW_CONFIG__>\\\"u\\\"?void 0:__LIVE_PREVIEW_CONFIG__;return t!==void 0?t:{additionalOrigins:[],serverURL:\\\"\\\",apiRoute:\\\"/api\\\",mergeDepth:1,debug:!1,debounceMs:50,enableA11y:!0,heartbeatMs:0,disableVisibilityGate:!1,visibilityGateThreshold:50,intersectionRootMargin:\\\"200px\\\",disableReferrerDetection:!1,disableLocalhostMatching:!1}}var qo=typeof __INLINE_BUILD__>\\\"u\\\"?!1:__INLINE_BUILD__;qo&&Wo();var Ol={isInIframe:dt,isInPopup:qt,isInPreviewContext:Kt};})();\\n\";\nexport const RUNTIME_BUILD_INFO: RuntimeBuildInfo = { generatedAt: \"2026-07-11T16:51:06.280Z\", size: 57982 };\n","/**\n * Inline script generator.\n *\n * Wraps the build-time-generated runtime IIFE with consumer-provided\n * configuration. Returns a JavaScript string suitable for embedding\n * via `<script>` in any framework.\n *\n * The runtime body is identical to the one used by the high-level\n * client because both originate from `src/core/runtime.ts`. There is\n * no parallel implementation to drift out of sync.\n *\n * @module @inline/generator\n */\n\nimport { RUNTIME_SOURCE, RUNTIME_BUILD_INFO, type RuntimeBuildInfo } from './runtime.generated';\n\nexport interface InlineScriptConfig {\n /** Additional trusted origins to merge with auto-detected ones. */\n readonly allowedOrigins?: readonly string[];\n /**\n * Payload server origin, e.g. `https://cms.example.com`. When set,\n * every incoming update is re-fetched through the Payload REST API\n * (`X-Payload-HTTP-Method-Override: GET`, same strategy as the\n * official client) so relationship and upload fields render\n * populated instead of as bare IDs. Strongly recommended for\n * Payload 3.x. Requires the preview page to be able to reach the\n * API with credentials (same-site cookies or CORS `credentials`).\n */\n readonly serverURL?: string;\n /** REST API route prefix used with `serverURL`. Defaults to `/api`. */\n readonly apiRoute?: string;\n /** Population depth used with `serverURL`. Defaults to `1`. */\n readonly mergeDepth?: number;\n /** Enable verbose console logging. Defaults to `false`. */\n readonly debug?: boolean;\n /** Debounce window for incoming updates in ms. Defaults to `50`. */\n readonly debounceMs?: number;\n /** Enable screen-reader live region. Defaults to `true`. */\n readonly enableA11y?: boolean;\n /**\n * Heartbeat timeout in ms. Defaults to `0` (disabled). The Payload\n * admin only posts messages on form edits — there is no protocol\n * keepalive — so an idle-based timeout would fire spurious\n * disconnects while the editor pauses. Enable only if your admin\n * setup sends periodic messages.\n */\n readonly heartbeatMs?: number;\n /**\n * Bypass the visibility-gate optimisation and apply every update\n * regardless of viewport position. Default `false` — the gate kicks\n * in when the cache exceeds `visibilityGateThreshold` entries.\n */\n readonly disableVisibilityGate?: boolean;\n /**\n * Cache-size threshold above which the visibility gate activates.\n * Default `50`. Off-screen elements above this threshold are queued\n * for replay on intersection instead of being updated immediately.\n */\n readonly visibilityGateThreshold?: number;\n /**\n * `rootMargin` passed to the `IntersectionObserver` watching the\n * cached elements. Default `'200px'`. Increase to pre-render\n * further off-screen content; decrease for tighter visibility.\n */\n readonly intersectionRootMargin?: string;\n /**\n * Opt out of `document.referrer`-based origin auto-detection.\n * Useful when the page is loaded under `Referrer-Policy: no-referrer`\n * and you want predictable behaviour. Default `false`.\n */\n readonly disableReferrerDetection?: boolean;\n /**\n * Opt out of the dev-mode localhost-pattern matcher (any port on\n * `localhost` / `127.0.0.1`). Useful when running locally against\n * a production-like origin list. Default `false`.\n */\n readonly disableLocalhostMatching?: boolean;\n /**\n * Optional CSP nonce for the generated `<script>` tag. When provided\n * via `wrapWithScriptTag()` the nonce is set on the tag. Useful for\n * strict CSP policies that disallow `unsafe-inline`.\n */\n readonly nonce?: string;\n}\n\nconst DEFAULT_DEBOUNCE_MS = 50;\nconst DEFAULT_HEARTBEAT_MS = 0;\nconst DEFAULT_VISIBILITY_GATE_THRESHOLD = 50;\nconst DEFAULT_INTERSECTION_ROOT_MARGIN = '200px';\n\n/**\n * Build an inline script body. The result is a self-contained IIFE\n * with the build-time runtime, prefixed by a configuration block.\n *\n * The string does NOT include the `<script>` tags — use\n * `wrapWithScriptTag()` when you need them.\n */\nexport function generateInlineScript(config: InlineScriptConfig = {}): string {\n if (RUNTIME_SOURCE.length === 0) {\n throw new Error(\n '[live-preview] runtime.generated.ts is empty. Run `npm run build:runtime` before bundling.',\n );\n }\n const configLiteral = JSON.stringify({\n additionalOrigins: config.allowedOrigins ?? [],\n serverURL: config.serverURL ?? '',\n apiRoute: config.apiRoute ?? '/api',\n mergeDepth: config.mergeDepth ?? 1,\n debug: config.debug ?? false,\n debounceMs: config.debounceMs ?? DEFAULT_DEBOUNCE_MS,\n enableA11y: config.enableA11y ?? true,\n heartbeatMs: config.heartbeatMs ?? DEFAULT_HEARTBEAT_MS,\n disableVisibilityGate: config.disableVisibilityGate ?? false,\n visibilityGateThreshold: config.visibilityGateThreshold ?? DEFAULT_VISIBILITY_GATE_THRESHOLD,\n intersectionRootMargin: config.intersectionRootMargin ?? DEFAULT_INTERSECTION_ROOT_MARGIN,\n disableReferrerDetection: config.disableReferrerDetection ?? false,\n disableLocalhostMatching: config.disableLocalhostMatching ?? false,\n // `<` must never appear literally inside an inline <script> body —\n // a consumer-supplied string containing `</script>` would otherwise\n // terminate the tag early.\n }).replace(/</g, '\\\\u003C');\n // The IIFE declares its own scope. We inject the config via a global\n // assignment that the bundled runtime reads back through the\n // `__LIVE_PREVIEW_CONFIG__` constant placeholder.\n const generatedAt =\n RUNTIME_BUILD_INFO.generatedAt === '' ? 'dev' : RUNTIME_BUILD_INFO.generatedAt;\n return [\n `/* payload-live-preview runtime ${generatedAt} */`,\n `var __LIVE_PREVIEW_CONFIG__=${configLiteral};`,\n `var __INLINE_BUILD__=true;`,\n RUNTIME_SOURCE,\n ].join('\\n');\n}\n\n/**\n * Wrap an inline script body in a `<script>` tag. When a nonce is\n * provided it is added as the `nonce` attribute so CSP policies that\n * require `'nonce-...'` accept the script.\n */\nexport function wrapWithScriptTag(body: string, options: { nonce?: string } = {}): string {\n const nonceAttr = options.nonce !== undefined ? ` nonce=\"${escapeNonce(options.nonce)}\"` : '';\n return `<script${nonceAttr}>${body}</script>`;\n}\n\n/**\n * Snapshot of the build-time information for diagnostics.\n */\nexport function runtimeBuildInfo(): RuntimeBuildInfo {\n return RUNTIME_BUILD_INFO;\n}\n\nfunction escapeNonce(nonce: string): string {\n if (!/^[A-Za-z0-9+/=_-]+$/.test(nonce)) {\n throw new RangeError('wrapWithScriptTag: nonce contains invalid characters');\n }\n return nonce;\n}\n","/**\n * Content-Security-Policy helpers.\n *\n * Two responsibilities:\n *\n * 1. Generate cryptographic nonces so consumers can opt into a strict\n * `script-src 'nonce-...'` policy and avoid `'unsafe-inline'`.\n * 2. Build the `frame-ancestors` directive value, restricting which\n * origins may embed the preview page in an iframe.\n *\n * Both functions are isomorphic — they work in browsers, Node, and\n * edge runtimes that expose Web Crypto via `globalThis.crypto`.\n *\n * @module @security/csp\n */\n\n/**\n * Default byte-length for nonces. 16 bytes → 22 base64url characters,\n * which exceeds the 128-bit entropy threshold recommended by OWASP.\n */\nconst DEFAULT_NONCE_BYTES = 16;\n\n/**\n * Minimal Web-Crypto surface area we actually call. The full `Crypto`\n * type drags in browser-only declarations that don't typecheck cleanly\n * against Node's `webcrypto` shape — this narrower interface accepts\n * both without an unsafe cast.\n */\ninterface WebCryptoLike {\n getRandomValues: <T extends ArrayBufferView | null>(array: T) => T;\n}\n\nlet cryptoOverride: WebCryptoLike | undefined;\n\n/**\n * Inject a Web Crypto implementation to use when `globalThis.crypto`\n * is unavailable.\n *\n * Node.js exposed `globalThis.crypto` globally starting with v19. On\n * Node 18 (still LTS at time of writing) consumers can flip the\n * `--experimental-global-webcrypto` flag *or* call this function once\n * at startup:\n *\n * ```ts\n * import { webcrypto } from 'node:crypto';\n * import { setCspCrypto } from 'payload-live-preview';\n * setCspCrypto(webcrypto as { getRandomValues: typeof webcrypto.getRandomValues });\n * ```\n *\n * Browser bundles never need to call this — `globalThis.crypto` is\n * always present there, and the override only matters when the global\n * is missing.\n *\n * Pass `null` to clear a previous override (mostly useful for tests).\n */\nexport function setCspCrypto(crypto: WebCryptoLike | null): void {\n cryptoOverride = crypto ?? undefined;\n}\n\n/**\n * Generate a base64url-encoded cryptographic nonce.\n *\n * Uses `crypto.getRandomValues` everywhere — falls back to throwing\n * if no Web Crypto implementation is available, because a predictable\n * nonce would silently defeat the entire CSP.\n *\n * @param bytes Number of random bytes (defaults to 16 → 128-bit entropy).\n */\nexport function generateCspNonce(bytes: number = DEFAULT_NONCE_BYTES): string {\n if (!Number.isInteger(bytes) || bytes < 8) {\n throw new RangeError(`generateCspNonce: bytes must be an integer >= 8, got ${String(bytes)}`);\n }\n const crypto = resolveCrypto();\n if (!crypto) {\n throw new Error(\n 'generateCspNonce: Web Crypto is unavailable. On Node 18 call setCspCrypto(webcrypto) ' +\n \"once at startup, or run with --experimental-global-webcrypto. We won't fabricate \" +\n 'a predictable nonce — that would silently defeat the entire CSP.',\n );\n }\n const buffer = new Uint8Array(bytes);\n crypto.getRandomValues(buffer);\n return base64UrlEncode(buffer);\n}\n\nfunction resolveCrypto(): WebCryptoLike | undefined {\n if (cryptoOverride?.getRandomValues) return cryptoOverride;\n const fromGlobal = (globalThis as { crypto?: WebCryptoLike }).crypto;\n if (fromGlobal?.getRandomValues) return fromGlobal;\n return undefined;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n let binary = '';\n for (const byte of bytes) binary += String.fromCharCode(byte);\n const base64 = typeof btoa === 'function' ? btoa(binary) : Buffer.from(bytes).toString('base64');\n return base64.replaceAll('+', '-').replaceAll('/', '_').replaceAll('=', '');\n}\n\n/**\n * Sources allowed in the `frame-ancestors` directive.\n *\n * Conceptually a union of `'self'`, `'none'`, or an explicit origin\n * string. TypeScript collapses literal-vs-string unions, so we expose\n * a `string` alias and document the special values.\n */\nexport type FrameAncestorSource = string;\n\nexport interface FrameAncestorsOptions {\n readonly self?: boolean;\n readonly origins?: readonly string[];\n readonly allowNone?: boolean;\n}\n\n/**\n * Build the value for `frame-ancestors` in a `Content-Security-Policy`\n * header.\n *\n * Returns `'none'` if `allowNone: true` and no other sources are\n * provided. Otherwise concatenates `'self'` (if requested) with the\n * given origins, deduplicating and trimming entries.\n *\n * @example\n * `frame-ancestors ${buildFrameAncestors({ self: true, origins: [adminUrl] })}`\n */\nexport function buildFrameAncestors(options: FrameAncestorsOptions = {}): string {\n const { self = true, origins = [], allowNone = false } = options;\n const seen = new Set<string>();\n const out: FrameAncestorSource[] = [];\n if (allowNone && !self && origins.length === 0) return \"'none'\";\n if (self) {\n out.push(\"'self'\");\n seen.add(\"'self'\");\n }\n for (const origin of origins) {\n const trimmed = origin.trim();\n if (trimmed.length === 0 || seen.has(trimmed)) continue;\n seen.add(trimmed);\n out.push(trimmed);\n }\n return out.length > 0 ? out.join(' ') : \"'none'\";\n}\n\n/**\n * Build a `script-src` value that permits a single nonce plus optional\n * extra sources.\n *\n * `'strict-dynamic'` is **opt-in**: under CSP 3 it makes browsers\n * ignore `'self'` and every host source in the directive, so any\n * parser-inserted script without a nonce (framework hydration scripts,\n * consumer `<script>` tags) would be blocked. Only enable it when every\n * script on the page carries the nonce.\n */\nexport function buildScriptSrcWithNonce(\n nonce: string,\n options: {\n readonly self?: boolean;\n readonly extra?: readonly string[];\n readonly strictDynamic?: boolean;\n } = {},\n): string {\n if (nonce.length === 0) throw new RangeError('buildScriptSrcWithNonce: nonce is empty');\n const { self = true, extra = [], strictDynamic = false } = options;\n const parts: string[] = [];\n if (self) parts.push(\"'self'\");\n parts.push(`'nonce-${nonce}'`);\n if (strictDynamic) parts.push(\"'strict-dynamic'\");\n for (const e of extra) {\n const trimmed = e.trim();\n if (trimmed.length > 0) parts.push(trimmed);\n }\n return parts.join(' ');\n}\n\n/**\n * How a directive is merged into an existing CSP header value.\n *\n * - `union` (default) — the new sources are added to the existing\n * directive's sources (deduplicated). An existing `'none'` is\n * dropped when real sources are added, since `'none'` may not be\n * combined with other sources.\n * - `replace` — the new value overwrites the existing directive.\n */\nexport interface CspDirectiveMerge {\n readonly value: string;\n readonly mode?: 'union' | 'replace';\n}\n\n/**\n * Merge directives into an existing `Content-Security-Policy` header\n * value without clobbering what a consumer (or another middleware)\n * already configured. Directives not mentioned in `additions` pass\n * through untouched; new directives are appended.\n *\n * This is the single CSP-merge implementation shared by every adapter.\n */\nexport function mergeCspHeader(\n existing: string,\n additions: Readonly<Record<string, string | CspDirectiveMerge>>,\n): string {\n const directives = new Map<string, string>();\n for (const part of existing.split(';')) {\n const trimmed = part.trim();\n if (trimmed.length === 0) continue;\n const spaceIndex = trimmed.indexOf(' ');\n if (spaceIndex < 0) {\n directives.set(trimmed.toLowerCase(), '');\n continue;\n }\n directives.set(\n trimmed.slice(0, spaceIndex).toLowerCase(),\n trimmed.slice(spaceIndex + 1).trim(),\n );\n }\n\n for (const [rawName, rawAddition] of Object.entries(additions)) {\n const name = rawName.toLowerCase();\n const addition: CspDirectiveMerge =\n typeof rawAddition === 'string' ? { value: rawAddition } : rawAddition;\n const mode = addition.mode ?? 'union';\n const current = directives.get(name);\n if (mode === 'replace' || current === undefined || current.length === 0) {\n directives.set(name, addition.value);\n continue;\n }\n const seen = new Set<string>();\n const merged: string[] = [];\n for (const token of [...current.split(/\\s+/), ...addition.value.split(/\\s+/)]) {\n if (token.length === 0 || seen.has(token)) continue;\n seen.add(token);\n merged.push(token);\n }\n // `'none'` cannot coexist with other sources.\n const withoutNone = merged.filter((token) => token !== \"'none'\");\n directives.set(name, (withoutNone.length > 0 ? withoutNone : merged).join(' '));\n }\n\n const out: string[] = [];\n for (const [name, value] of directives) {\n out.push(value.length === 0 ? name : `${name} ${value}`);\n }\n return out.join('; ');\n}\n","/**\n * Server-side preview-request detection.\n *\n * The live-preview runtime only ever activates inside the Payload\n * admin's iframe, but the *server* still has to decide whether to\n * inject the (sizeable) inline script into a given HTML response.\n * Injecting it into every page for every visitor buffers every\n * response and ships dead bytes to production traffic — so adapters\n * gate injection on this predicate by default, and consumers with\n * hand-rolled middleware can import it directly.\n *\n * A request counts as a preview when any of these hold:\n *\n * 1. A preview query parameter is present (`?preview=true`,\n * `?draft=true`, `?livePreview=true` — configurable).\n * 2. `Sec-Fetch-Dest: iframe` — the document is being loaded as an\n * iframe, which is exactly how the Payload admin embeds it.\n * (Sent by all evergreen browsers; absence never *excludes* a\n * request, presence includes it.)\n * 3. The `Referer` points at one of the given admin origins.\n *\n * @module @adapters/shared/preview-request\n */\n\n/** The individual signals the predicate can consider. */\nexport type PreviewSignal = 'query' | 'fetch-dest' | 'referer';\n\nexport interface PreviewRequestOptions {\n /**\n * Which signals count as \"this is a preview request\". Default: all\n * three. High-security setups that must never relax framing headers\n * for unsolicited iframe loads can restrict to `['query']` — then\n * only an explicit `?preview=true` (e.g. from `buildLivePreviewUrl`)\n * activates preview handling.\n */\n readonly signals?: readonly PreviewSignal[];\n /**\n * Query parameters (with values `true` or `1`) that mark a request\n * as a preview. Default: `['preview', 'draft', 'livePreview']`.\n */\n readonly queryParams?: readonly string[];\n /**\n * Treat `Sec-Fetch-Dest: iframe` as a preview signal. Default `true`.\n * Legacy alias for excluding `'fetch-dest'` from `signals`.\n */\n readonly checkFetchDest?: boolean;\n /**\n * Admin origins whose `Referer` marks a request as a preview,\n * e.g. `['https://cms.example.com']`.\n */\n readonly adminOrigins?: readonly string[];\n}\n\nconst DEFAULT_QUERY_PARAMS = ['preview', 'draft', 'livePreview'] as const;\n\n/**\n * The minimal request surface the predicate needs. The standard\n * `Request` satisfies it structurally, and server frameworks without\n * fetch-style requests (e.g. Nitro/H3) can supply a tiny shim.\n */\nexport interface PreviewRequestLike {\n readonly url: string;\n readonly headers: { get(name: string): string | null };\n}\n\n/**\n * Decide whether `request` is a live-preview request. See the module\n * docblock for the exact signals.\n */\nexport function isPreviewRequest(\n request: PreviewRequestLike,\n options: PreviewRequestOptions = {},\n): boolean {\n const signals = new Set<PreviewSignal>(options.signals ?? ['query', 'fetch-dest', 'referer']);\n const queryParams = options.queryParams ?? DEFAULT_QUERY_PARAMS;\n const checkFetchDest = (options.checkFetchDest ?? true) && signals.has('fetch-dest');\n\n if (signals.has('query')) {\n let url: URL | undefined;\n try {\n url = new URL(request.url);\n } catch {\n url = undefined;\n }\n if (url !== undefined) {\n for (const param of queryParams) {\n const value = url.searchParams.get(param);\n if (value === 'true' || value === '1') return true;\n }\n }\n }\n\n if (checkFetchDest && request.headers.get('sec-fetch-dest') === 'iframe') {\n return true;\n }\n\n const adminOrigins = signals.has('referer') ? (options.adminOrigins ?? []) : [];\n if (adminOrigins.length > 0) {\n const referer = request.headers.get('referer');\n if (referer !== null) {\n try {\n const refererOrigin = new URL(referer).origin;\n for (const adminOrigin of adminOrigins) {\n try {\n if (new URL(adminOrigin).origin === refererOrigin) return true;\n } catch {\n // skip malformed configured origin\n }\n }\n } catch {\n // malformed referer — not a preview signal\n }\n }\n }\n\n return false;\n}\n","/**\n * Draft-aware document fetching for the initial preview render.\n *\n * The live-preview runtime patches the DOM *after* the page loads —\n * the initial server render is the consumer's job. With Payload\n * drafts enabled, a preview must render the **draft** version on\n * first load, otherwise editors see stale published content until\n * their first keystroke.\n *\n * These helpers wrap the two REST queries every preview loader needs,\n * with the right flags (`draft=true`, `depth`) and an explicit nudge\n * to keep `depth` in sync with the runtime's `mergeDepth` — a\n * mismatch makes populated relationships degrade to IDs after the\n * first edit.\n *\n * Isomorphic and dependency-free: works in Astro frontmatter,\n * SvelteKit `load`, Next.js server components, or any Node/edge\n * runtime with `fetch`.\n *\n * ```ts\n * // Astro frontmatter\n * const page = await fetchPreviewDocument<Page>({\n * serverURL: import.meta.env.PAYLOAD_URL,\n * collection: 'pages',\n * where: { slug: { equals: Astro.params.slug } },\n * draft: isPreviewRequest(Astro.request),\n * headers: { Authorization: `users API-Key ${import.meta.env.PAYLOAD_PREVIEW_KEY}` },\n * });\n * ```\n *\n * @module @preview-fetch\n */\n\nexport interface PreviewFetchBaseOptions {\n /** Payload server origin, e.g. `https://cms.example.com`. */\n readonly serverURL: string;\n /** REST API route prefix. Defaults to `/api`. */\n readonly apiRoute?: string;\n /**\n * Population depth. Defaults to `1`. ⚠️ Keep this equal to the\n * runtime's `mergeDepth` — the live-merge re-fetches with that\n * depth, and a mismatch makes nested relationships flip between\n * objects and IDs mid-session.\n */\n readonly depth?: number;\n /**\n * Fetch the draft version. Defaults to `true` (this is a *preview*\n * fetch). Pass the result of `isPreviewRequest(request)` to make\n * the same loader serve published content to normal traffic.\n */\n readonly draft?: boolean;\n /** Locale to fetch. */\n readonly locale?: string;\n /**\n * Extra request headers — typically auth, since draft reads require\n * an authenticated user (e.g. `Authorization: users API-Key …`).\n */\n readonly headers?: Readonly<Record<string, string>>;\n /** Injectable fetch implementation (tests, custom agents). */\n readonly fetchFn?: typeof fetch;\n}\n\n/** Payload `where` clause — kept loose on purpose (server validates). */\nexport type PreviewWhere = Readonly<Record<string, unknown>>;\n\nexport interface FetchPreviewDocumentOptions extends PreviewFetchBaseOptions {\n /** Collection slug. */\n readonly collection: string;\n /** Fetch a single document by id. Mutually exclusive with `where`. */\n readonly id?: string | number;\n /**\n * Fetch the first document matching this Payload `where` clause,\n * e.g. `{ slug: { equals: 'about' } }`.\n */\n readonly where?: PreviewWhere;\n}\n\nexport interface FetchPreviewGlobalOptions extends PreviewFetchBaseOptions {\n /** Global slug. */\n readonly global: string;\n}\n\n/**\n * Fetch a single collection document (draft-first by default).\n * Returns `null` when nothing matches or the request fails —\n * loaders should fall back to their regular data path or a 404.\n */\nexport async function fetchPreviewDocument<T = Record<string, unknown>>(\n options: FetchPreviewDocumentOptions,\n): Promise<T | null> {\n const params = baseParams(options);\n if (options.id !== undefined) {\n const url = `${apiBase(options)}/${encodeURIComponent(options.collection)}/${encodeURIComponent(\n String(options.id),\n )}?${params.toString()}`;\n return requestJson<T>(url, options);\n }\n\n if (options.where !== undefined) {\n appendWhere(params, options.where, ['where']);\n }\n params.set('limit', '1');\n const url = `${apiBase(options)}/${encodeURIComponent(options.collection)}?${params.toString()}`;\n const page = await requestJson<{ docs?: T[] }>(url, options);\n const first = page?.docs?.[0];\n return first ?? null;\n}\n\n/**\n * Fetch a global (draft-first by default). Returns `null` on failure.\n */\nexport async function fetchPreviewGlobal<T = Record<string, unknown>>(\n options: FetchPreviewGlobalOptions,\n): Promise<T | null> {\n const params = baseParams(options);\n const url = `${apiBase(options)}/globals/${encodeURIComponent(options.global)}?${params.toString()}`;\n return requestJson<T>(url, options);\n}\n\nfunction apiBase(options: PreviewFetchBaseOptions): string {\n const origin = options.serverURL.replace(/\\/+$/, '');\n const route = options.apiRoute ?? '/api';\n return `${origin}${route.startsWith('/') ? route : `/${route}`}`;\n}\n\nfunction baseParams(options: PreviewFetchBaseOptions): URLSearchParams {\n const params = new URLSearchParams();\n params.set('depth', String(options.depth ?? 1));\n if (options.draft ?? true) params.set('draft', 'true');\n if (options.locale !== undefined) params.set('locale', options.locale);\n return params;\n}\n\n/**\n * Serialise a nested `where` object into Payload's qs-style query\n * params: `{ slug: { equals: 'x' } }` → `where[slug][equals]=x`.\n */\nfunction appendWhere(params: URLSearchParams, node: PreviewWhere, path: string[]): void {\n for (const [key, value] of Object.entries(node)) {\n const nextPath = [...path, key];\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n appendWhere(params, value as PreviewWhere, nextPath);\n continue;\n }\n const name = nextPath.map((seg, i) => (i === 0 ? seg : `[${seg}]`)).join('');\n if (Array.isArray(value)) {\n params.set(name, value.map(String).join(','));\n } else {\n params.set(name, String(value));\n }\n }\n}\n\nasync function requestJson<T>(url: string, options: PreviewFetchBaseOptions): Promise<T | null> {\n const fetchFn = options.fetchFn ?? (typeof fetch === 'function' ? fetch : undefined);\n if (fetchFn === undefined) return null;\n try {\n const response = await fetchFn(url, {\n credentials: 'include',\n headers: {\n Accept: 'application/json',\n ...(options.headers ?? {}),\n },\n });\n if (!response.ok) return null;\n const body: unknown = await response.json();\n if (body === null || typeof body !== 'object') return null;\n return body as T;\n } catch {\n return null;\n }\n}\n","/**\n * `highlight` plugin — flashes an outline on updated elements so the\n * editor can see what changed.\n *\n * Respects `prefers-reduced-motion`. Adds at most one style tag per\n * document.\n *\n * @module @plugins/built-in/highlight\n */\n\nimport type { LivePreviewPlugin } from '../types';\n\nconst STYLE_ID = 'payload-live-preview-highlight';\nconst REDUCED_MOTION_CSS =\n '.lp-highlight{outline:2px solid rgba(0,102,204,0.85);outline-offset:2px;}';\nconst ANIMATED_CSS =\n '@keyframes lp-highlight{0%{outline:2px solid rgba(0,102,204,0.85);outline-offset:2px}100%{outline:2px solid transparent;outline-offset:2px}}.lp-highlight{animation:lp-highlight 0.6s ease-out;}';\n\nexport const highlightPlugin: LivePreviewPlugin = {\n name: 'highlight',\n version: '1.0.0',\n init: (ctx) => {\n if (typeof document === 'undefined') return;\n const prefersReducedMotion =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n if (!document.getElementById(STYLE_ID)) {\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = prefersReducedMotion ? REDUCED_MOTION_CSS : ANIMATED_CSS;\n document.head.appendChild(style);\n }\n const duration = prefersReducedMotion ? 1000 : 600;\n ctx.events.on('elementUpdate', (e) => {\n const element = e.element;\n element.classList.add('lp-highlight');\n window.setTimeout(() => {\n element.classList.remove('lp-highlight');\n }, duration);\n });\n },\n destroy: () => {\n if (typeof document === 'undefined') return;\n document.getElementById(STYLE_ID)?.remove();\n },\n};\n","/**\n * `debug` plugin — logs every lifecycle event via the plugin context.\n *\n * @module @plugins/built-in/debug\n */\n\nimport type { LivePreviewPlugin } from '../types';\n\nexport const debugPlugin: LivePreviewPlugin = {\n name: 'debug',\n version: '1.0.0',\n init: (ctx) => {\n ctx.events.on('init', () => {\n ctx.log('init');\n });\n ctx.events.on('connect', (e) => {\n ctx.log('connect ←', e.origin);\n });\n ctx.events.on('disconnect', (e) => {\n ctx.log('disconnect (', e.reason, ')');\n });\n ctx.events.on('cacheRefresh', (e) => {\n ctx.log('cacheRefresh', e.elementCount, 'elements,', e.fieldCount, 'fields');\n });\n ctx.events.on('beforeUpdate', (e) => {\n ctx.log('beforeUpdate', Object.keys(e.data.fields).length, 'fields');\n });\n ctx.events.on('afterUpdate', (e) => {\n ctx.log('afterUpdate', e.updatedCount, 'in', e.durationMs.toFixed(2), 'ms');\n });\n ctx.events.on('error', (e) => {\n ctx.log('error in', e.context, ':', e.error.message);\n });\n },\n};\n","/**\n * `analytics` plugin — accumulates summary statistics about the\n * update stream. Useful for performance dashboards.\n *\n * The plugin owns its own state (no module singleton) and exposes it\n * via the `getStats` factory passed through the plugin's `init` hook\n * by closing over a local object.\n *\n * @module @plugins/built-in/analytics\n */\n\nimport type { LivePreviewPlugin } from '../types';\n\nexport interface AnalyticsSnapshot {\n readonly updateCount: number;\n readonly totalElements: number;\n readonly totalDurationMs: number;\n readonly averageDurationMs: number;\n}\n\nexport function createAnalyticsPlugin(): LivePreviewPlugin & {\n readonly getStats: () => AnalyticsSnapshot;\n} {\n let updateCount = 0;\n let totalElements = 0;\n let totalDurationMs = 0;\n\n return {\n name: 'analytics',\n version: '1.0.0',\n init: (ctx) => {\n ctx.events.on('afterUpdate', (e) => {\n updateCount += 1;\n totalElements += e.updatedCount;\n totalDurationMs += e.durationMs;\n });\n },\n getStats: (): AnalyticsSnapshot => ({\n updateCount,\n totalElements,\n totalDurationMs,\n averageDurationMs: updateCount === 0 ? 0 : totalDurationMs / updateCount,\n }),\n };\n}\n","/**\n * `documentSave` plugin — react to Payload document-save events with\n * out-of-the-box strategies. Most consumers just want one of these:\n *\n * - `'silent'` (default) → only emit the event, do nothing else.\n * - `'reload'` → reload the page, **preserving the scroll\n * position** across the reload (the\n * framework-agnostic analog of Payload's\n * `RefreshRouteOnSave`).\n * - `'revalidate'` → POST to a revalidation endpoint (Astro,\n * Next.js convention) so SSR caches refresh\n * without losing client state.\n * - `'fetch'` → custom async handler supplied by the user.\n *\n * Each strategy is intentionally narrow so consumers can compose them\n * — e.g. revalidate, then if revalidation fails, fall back to reload.\n *\n * @module @plugins/built-in/document-save\n */\n\nimport type { LivePreviewPlugin } from '../types';\n\n/** sessionStorage key for the scroll position saved across a reload. */\nconst SCROLL_KEY = 'payload-live-preview:scroll';\n\nfunction saveScrollPosition(): void {\n if (typeof window === 'undefined') return;\n try {\n sessionStorage.setItem(\n SCROLL_KEY,\n JSON.stringify({ href: window.location.href, x: window.scrollX, y: window.scrollY }),\n );\n } catch {\n // sessionStorage unavailable (sandboxed iframe without allow-same-origin)\n }\n}\n\nfunction restoreScrollPosition(): void {\n if (typeof window === 'undefined') return;\n try {\n const raw = sessionStorage.getItem(SCROLL_KEY);\n if (raw === null) return;\n sessionStorage.removeItem(SCROLL_KEY);\n const saved = JSON.parse(raw) as { href?: string; x?: number; y?: number };\n if (saved.href !== window.location.href) return;\n window.scrollTo(saved.x ?? 0, saved.y ?? 0);\n } catch {\n // corrupted entry or storage unavailable — nothing to restore\n }\n}\n\nfunction reloadPreservingScroll(): void {\n if (typeof window === 'undefined') return;\n saveScrollPosition();\n window.location.reload();\n}\n\nexport type DocumentSaveStrategy = 'silent' | 'reload' | 'revalidate' | 'fetch';\n\nexport interface DocumentSavePluginOptions {\n /** Strategy to invoke on each `documentSave` event. Default `'silent'`. */\n readonly strategy?: DocumentSaveStrategy;\n /**\n * For `'revalidate'`: endpoint to POST to. Defaults to `/api/revalidate`.\n * The request body is `{ source: 'payload-live-preview' }` JSON.\n */\n readonly revalidateUrl?: string;\n /**\n * For `'revalidate'`: extra headers (e.g., `Authorization: Bearer …`).\n * The `Content-Type: application/json` header is set automatically.\n */\n readonly revalidateHeaders?: Readonly<Record<string, string>>;\n /**\n * For `'fetch'`: async handler called on each event. The plugin\n * awaits it; rejections are logged but don't crash the runtime.\n */\n readonly handler?: () => void | Promise<void>;\n /**\n * Optional fallback strategy when `'revalidate'` POST fails (network\n * error or non-2xx). Set to `'reload'` to hard-refresh the page when\n * SSR-cache invalidation can't be confirmed.\n */\n readonly onRevalidateFailure?: 'silent' | 'reload';\n}\n\nconst DEFAULT_REVALIDATE_URL = '/api/revalidate';\n\n/**\n * Build the plugin. Pass it to `client.use(documentSavePlugin({ … }))`.\n */\nexport function documentSavePlugin(options: DocumentSavePluginOptions = {}): LivePreviewPlugin {\n const strategy = options.strategy ?? 'silent';\n return {\n name: 'document-save',\n version: '1.1.0',\n init: (ctx) => {\n // If the previous page load ended in a save-triggered reload,\n // put the editor back where they were.\n restoreScrollPosition();\n ctx.events.on('documentSave', () => {\n run(strategy, options, ctx.log);\n });\n },\n };\n}\n\nfunction run(\n strategy: DocumentSaveStrategy,\n options: DocumentSavePluginOptions,\n log: (...args: unknown[]) => void,\n): void {\n if (strategy === 'silent') return;\n if (strategy === 'reload') {\n reloadPreservingScroll();\n return;\n }\n if (strategy === 'fetch') {\n void runFetch(options, log);\n return;\n }\n void runRevalidate(options, log);\n}\n\nasync function runFetch(\n options: DocumentSavePluginOptions,\n log: (...args: unknown[]) => void,\n): Promise<void> {\n if (!options.handler) {\n log('document-save: fetch strategy selected but no handler supplied');\n return;\n }\n try {\n await options.handler();\n } catch (err) {\n log('document-save handler threw:', err);\n }\n}\n\nasync function runRevalidate(\n options: DocumentSavePluginOptions,\n log: (...args: unknown[]) => void,\n): Promise<void> {\n if (typeof fetch === 'undefined') {\n log('document-save: revalidate strategy needs fetch — not available');\n return;\n }\n const url = options.revalidateUrl ?? DEFAULT_REVALIDATE_URL;\n let ok = false;\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(options.revalidateHeaders ?? {}),\n },\n body: JSON.stringify({ source: 'payload-live-preview' }),\n });\n ok = response.ok;\n if (!ok) log('document-save revalidate non-2xx:', response.status);\n } catch (err) {\n log('document-save revalidate failed:', err);\n }\n if (!ok && options.onRevalidateFailure === 'reload') {\n reloadPreservingScroll();\n }\n}\n","/**\n * Typed binding helpers — emit the `data-payload-field` attribute pair\n * that the live-preview runtime reads, with compile-time validation\n * of the field name.\n *\n * Two forms are exposed:\n *\n * - **`bind<Schema>('heroTitle')`** — string-literal form. Lightest\n * possible runtime (no Proxy), but a rename in the IDE does NOT\n * follow into the string.\n * - **`bindByPath<Schema>(s => s.heroTitle)`** — proxy form. The\n * callback walks a Proxy that records the access path, returning\n * the same shape as `bind` so the two are interchangeable. Slightly\n * heavier runtime, but rename-safe and discourages typos.\n *\n * Both helpers also accept a richer return — `bind('image', 'src')` —\n * to bind an attribute other than the default `data-payload-field`,\n * matching the cache resolver's `data-payload-attribute` flow.\n *\n * @module @dsl/bind\n */\n\nimport type { FieldName } from './paths';\n\n/**\n * Shape returned by every binding helper — a spreadable HTML attribute\n * record. Astro / JSX / Svelte all accept this style directly:\n *\n * ```astro\n * <h1 {...bind<Homepage>('heroTitle')}>{data.heroTitle}</h1>\n * ```\n */\nexport interface FieldBindingAttributes {\n readonly 'data-payload-field': string;\n readonly 'data-payload-attribute'?: string;\n readonly 'data-payload-type'?: string;\n}\n\nexport interface BindOptions {\n /** Override the bound attribute (e.g., `'src'` for `<img>`). Default: textContent. */\n readonly attribute?: string;\n /** Explicit field-type override — bypasses schema detection. */\n readonly type?: string;\n}\n\n/**\n * String-literal binding helper.\n *\n * ```ts\n * import { bind } from 'payload-live-preview';\n * import type { Homepage } from './payload-types';\n *\n * <h1 {...bind<Homepage>('heroTitle')}>{data.heroTitle}</h1>\n * <img {...bind<Homepage>('heroImage', { attribute: 'src' })} />\n * ```\n *\n * The generic `T` is the schema interface emitted by `pll-codegen`.\n * `field` is constrained to `keyof T` so misspellings fail at compile\n * time. When `T` is omitted, the helper accepts any string — useful\n * for incremental adoption.\n */\nexport function bind<T = Record<string, unknown>>(\n field: FieldName<T>,\n options?: BindOptions,\n): FieldBindingAttributes {\n return buildAttributes(field, options);\n}\n\n/**\n * Proxy-path binding helper.\n *\n * ```ts\n * <h1 {...bindByPath<Homepage>(d => d.heroTitle)}>{data.heroTitle}</h1>\n * ```\n *\n * The picker is invoked once with a recording Proxy; the recorded path\n * is joined with `.` and emitted as the binding name. Property access\n * on nested objects and arrays both work — `d => d.slides[0].title`\n * becomes `slides.title` (array indices are normalised away because the\n * runtime resolves bindings against schema, not against positional\n * indices).\n */\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\nexport function bindByPath<T = Record<string, unknown>>(\n picker: (data: T) => unknown,\n options?: BindOptions,\n): FieldBindingAttributes {\n const path = recordPath(picker);\n if (path.length === 0) {\n throw new Error(\n 'bindByPath: the picker did not read any field — return data.<field> instead of a constant',\n );\n }\n return buildAttributes(path.join('.'), options);\n}\n\nfunction buildAttributes(field: string, options: BindOptions | undefined): FieldBindingAttributes {\n if (field.length === 0) {\n throw new Error('bind: field name must be a non-empty string');\n }\n const attrs: {\n 'data-payload-field': string;\n 'data-payload-attribute'?: string;\n 'data-payload-type'?: string;\n } = { 'data-payload-field': field };\n if (options?.attribute !== undefined) attrs['data-payload-attribute'] = options.attribute;\n if (options?.type !== undefined) attrs['data-payload-type'] = options.type;\n return attrs;\n}\n\nfunction recordPath(picker: (data: never) => unknown): string[] {\n const path: string[] = [];\n const proxy: unknown = new Proxy(\n {},\n {\n get(_target, prop: string | symbol): unknown {\n if (typeof prop === 'symbol') return undefined;\n // Arrays surface numeric indices when iterated — skip those.\n if (/^\\d+$/.test(prop)) return proxy;\n path.push(prop);\n return proxy;\n },\n },\n );\n try {\n picker(proxy as never);\n } catch {\n // Pickers can throw when they attempt math/JSX on the proxy. We\n // still keep whatever path was recorded up to that point — that's\n // typically the binding the user intended.\n }\n return path;\n}\n"]}